MCPcopy Index your code
hub / github.com/python/cpython / test_compile_ast

Method test_compile_ast

Lib/test/test_compile.py:579–612  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

577 compile(ast.fix_missing_locations(tree), "<file>", "exec")
578
579 def test_compile_ast(self):
580 fname = __file__
581 if fname.lower().endswith('pyc'):
582 fname = fname[:-1]
583 with open(fname, encoding='utf-8') as f:
584 fcontents = f.read()
585 sample_code = [
586 ['<assign>', 'x = 5'],
587 ['<ifblock>', """if True:\n pass\n"""],
588 ['<forblock>', """for n in [1, 2, 3]:\n print(n)\n"""],
589 ['<deffunc>', """def foo():\n pass\nfoo()\n"""],
590 [fname, fcontents],
591 ]
592
593 for fname, code in sample_code:
594 co1 = compile(code, '%s1' % fname, 'exec')
595 ast = compile(code, '%s2' % fname, 'exec', _ast.PyCF_ONLY_AST)
596 self.assertTrue(type(ast) == _ast.Module)
597 co2 = compile(ast, '%s3' % fname, 'exec')
598 self.assertEqual(co1, co2)
599 # the code object's filename comes from the second compilation step
600 self.assertEqual(co2.co_filename, '%s3' % fname)
601
602 # raise exception when node type doesn't match with compile mode
603 co1 = compile('print(1)', '<string>', 'exec', _ast.PyCF_ONLY_AST)
604 self.assertRaises(TypeError, compile, co1, '<ast>', 'eval')
605
606 # raise exception when node type is no start node
607 self.assertRaises(TypeError, compile, _ast.If(test=_ast.Name(id='x', ctx=_ast.Load())), '<ast>', 'exec')
608
609 # raise exception when node has invalid children
610 ast = _ast.Module()
611 ast.body = [_ast.BoolOp(op=_ast.Or())]
612 self.assertRaises(TypeError, compile, ast, '<ast>', 'exec')
613
614 def test_compile_invalid_typealias(self):
615 # gh-109341

Callers

nothing calls this directly

Calls 9

assertTrueMethod · 0.80
LoadMethod · 0.80
openFunction · 0.50
compileFunction · 0.50
endswithMethod · 0.45
lowerMethod · 0.45
readMethod · 0.45
assertEqualMethod · 0.45
assertRaisesMethod · 0.45

Tested by

no test coverage detected