test_parser.py revision bd6a05fe81fe1573f0517ce8982d62341f3b0f85
1fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisseimport parser 2fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisseimport unittest 3fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisseimport sys 4fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glissefrom test import test_support 5fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse 6fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse# 7fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse# First, we test that we can generate trees from valid source fragments, 8fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse# and that these valid trees are indeed allowed by the tree-loading side 9fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse# of the parser module. 10fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse# 11fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse 12fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisseclass RoundtripLegalSyntaxTestCase(unittest.TestCase): 13fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse 14fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse def roundtrip(self, f, s): 15fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse st1 = f(s) 16fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse t = st1.totuple() 17fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse try: 18fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse st2 = parser.sequence2st(t) 19fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse except parser.ParserError, why: 20fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse self.fail("could not roundtrip %r: %s" % (s, why)) 21fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse 22fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse self.assertEquals(t, st2.totuple(), 23330b6c85c961b32f704ce8ec7dbf8cb7fc0b80a8Marek Olšák "could not re-generate syntax tree") 24330b6c85c961b32f704ce8ec7dbf8cb7fc0b80a8Marek Olšák 25fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse def check_expr(self, s): 26330b6c85c961b32f704ce8ec7dbf8cb7fc0b80a8Marek Olšák self.roundtrip(parser.expr, s) 278fb7f1a8a4cbab5365491b4b41e50ff3f03306c8Kai Wasserbäch 288fb7f1a8a4cbab5365491b4b41e50ff3f03306c8Kai Wasserbäch def check_suite(self, s): 298fb7f1a8a4cbab5365491b4b41e50ff3f03306c8Kai Wasserbäch self.roundtrip(parser.suite, s) 30d1cc87c0b64c2221b079015a6c3b593af83f0758Dave Airlie 313fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet def test_yield_statement(self): 323fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f(): yield 1") 333fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f(): yield") 343fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f(): x += yield") 353fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f(): x = yield 1") 363fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f(): x = y = yield 1") 373fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f(): x = yield") 383fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f(): x = y = yield") 393fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f(): 1 + (yield)*2") 403fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f(): (yield 1)*2") 413fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f(): return; yield 1") 423fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f(): yield 1; return") 433fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f():\n" 443fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet " for x in range(30):\n" 453fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet " yield x\n") 463fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f():\n" 473fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet " if (yield):\n" 483fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet " yield x\n") 493fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 503fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet def test_expressions(self): 513fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("foo(1)") 523fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("[1, 2, 3]") 533fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("[x**3 for x in range(20)]") 543fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("[x**3 for x in range(20) if x % 3]") 553fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("[x**3 for x in range(20) if x % 2 if x % 3]") 563fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("list(x**3 for x in range(20))") 573fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("list(x**3 for x in range(20) if x % 3)") 583fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("list(x**3 for x in range(20) if x % 2 if x % 3)") 593fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("foo(*args)") 603fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("foo(*args, **kw)") 613fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("foo(**kw)") 623fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("foo(key=value)") 633fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("foo(key=value, *args)") 643fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("foo(key=value, *args, **kw)") 653fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("foo(key=value, **kw)") 663fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("foo(a, b, c, *args)") 673fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("foo(a, b, c, *args, **kw)") 683fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("foo(a, b, c, **kw)") 693fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("foo(a, *args, keyword=23)") 703fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("foo + bar") 713fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("foo - bar") 723fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("foo * bar") 733fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("foo / bar") 743fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("foo // bar") 753fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("lambda: 0") 763fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("lambda x: 0") 773fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("lambda *y: 0") 783fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("lambda *y, **z: 0") 793fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("lambda **z: 0") 803fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("lambda x, y: 0") 813fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("lambda foo=bar: 0") 823fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("lambda foo=bar, spaz=nifty+spit: 0") 833fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("lambda foo=bar, **z: 0") 843fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("lambda foo=bar, blaz=blat+2, **z: 0") 853fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("lambda foo=bar, blaz=blat+2, *y, **z: 0") 863fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("lambda x, *y, **z: 0") 873fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("(x for x in range(10))") 883fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_expr("foo(x for x in range(10))") 893fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 903fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet def test_print(self): 913fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("print") 923fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("print 1") 933fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("print 1,") 943fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("print >>fp") 953fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("print >>fp, 1") 963fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("print >>fp, 1,") 973fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 983fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet def test_simple_expression(self): 993fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet # expr_stmt 1003fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("a") 1013fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 1028698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák def test_simple_assignments(self): 1033fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("a = b") 1043fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("a = b = c = d = e") 1053fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 1063fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet def test_simple_augmented_assignments(self): 1073fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("a += b") 1083fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("a -= b") 1093fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("a *= b") 1103fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("a /= b") 1113fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("a //= b") 1128698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák self.check_suite("a %= b") 1138698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák self.check_suite("a &= b") 1143fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("a |= b") 1158698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák self.check_suite("a ^= b") 1168698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák self.check_suite("a <<= b") 1173fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("a >>= b") 1183fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("a **= b") 1193fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 1203fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet def test_function_defs(self): 1213fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f(): pass") 1223fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f(*args): pass") 1233fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f(*args, **kw): pass") 1243fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f(**kw): pass") 1253fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f(foo=bar): pass") 1263fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f(foo=bar, *args): pass") 1273fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f(foo=bar, *args, **kw): pass") 1283fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f(foo=bar, **kw): pass") 1293fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 1303fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f(a, b): pass") 131866f9b18c68ede63c00917ec9c3dae3524ca8826Dave Airlie self.check_suite("def f(a, b, *args): pass") 1323fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f(a, b, *args, **kw): pass") 13389954723bfeef59d055d2332ff112f0204b48130Marek Olšák self.check_suite("def f(a, b, **kw): pass") 13489954723bfeef59d055d2332ff112f0204b48130Marek Olšák self.check_suite("def f(a, b, foo=bar): pass") 135866f9b18c68ede63c00917ec9c3dae3524ca8826Dave Airlie self.check_suite("def f(a, b, foo=bar, *args): pass") 13689954723bfeef59d055d2332ff112f0204b48130Marek Olšák self.check_suite("def f(a, b, foo=bar, *args, **kw): pass") 1373fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("def f(a, b, foo=bar, **kw): pass") 1383fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 1393fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("@staticmethod\n" 1403fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet "def f(): pass") 1413fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("@staticmethod\n" 1423fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet "@funcattrs(x, y)\n" 1433fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet "def f(): pass") 1443fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("@funcattrs()\n" 1453fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet "def f(): pass") 1463fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 147914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák def test_class_defs(self): 1488d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie self.check_suite("class foo():pass") 1498d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie 150914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák def test_import_from_statement(self): 151914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák self.check_suite("from sys.path import *") 152914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák self.check_suite("from sys.path import dirname") 153914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák self.check_suite("from sys.path import (dirname)") 154914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák self.check_suite("from sys.path import (dirname,)") 155914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák self.check_suite("from sys.path import dirname as my_dirname") 156914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák self.check_suite("from sys.path import (dirname as my_dirname)") 157914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák self.check_suite("from sys.path import (dirname as my_dirname,)") 1580d0285ba916d9e25871354441c09b0a8c7c9b844Christian König self.check_suite("from sys.path import dirname, basename") 1593fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("from sys.path import (dirname, basename)") 1603fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("from sys.path import (dirname, basename,)") 161914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák self.check_suite( 1628d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie "from sys.path import dirname as my_dirname, basename") 1638d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie self.check_suite( 164914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák "from sys.path import (dirname as my_dirname, basename)") 165914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák self.check_suite( 1668d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie "from sys.path import (dirname as my_dirname, basename,)") 1678d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie self.check_suite( 1683fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet "from sys.path import dirname, basename as my_basename") 169914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák self.check_suite( 170914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák "from sys.path import (dirname, basename as my_basename)") 171914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák self.check_suite( 172914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák "from sys.path import (dirname, basename as my_basename,)") 173914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák 174914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák def test_basic_import_statement(self): 175914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák self.check_suite("import sys") 176914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák self.check_suite("import sys as system") 177914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák self.check_suite("import sys, math") 178914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák self.check_suite("import sys as system, math") 179914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák self.check_suite("import sys, math as my_math") 180914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák 181914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák def test_pep263(self): 182914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák self.check_suite("# -*- coding: iso-8859-1 -*-\n" 183914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák "pass\n") 184914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák 1853fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet def test_assert(self): 1863fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_suite("assert alo < ahi and blo < bhi\n") 18777058335ebc9a1c2a81ec2cf98a8a157065e69d0Dave Airlie 18877058335ebc9a1c2a81ec2cf98a8a157065e69d0Dave Airlie def test_position(self): 1893fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet # An absolutely minimal test of position information. Better 1903fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet # tests would be a big project. 1913fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet code = "def f(x):\n return x + 1\n" 1920d0285ba916d9e25871354441c09b0a8c7c9b844Christian König st1 = parser.suite(code) 1933fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet st2 = st1.totuple(line_info=1, col_info=1) 1943fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 1953fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet def walk(tree): 1963fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet node_type = tree[0] 1973fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet next = tree[1] 1983fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet if isinstance(next, tuple): 1993fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet for elt in tree[1:]: 2003fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet for x in walk(elt): 2013fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet yield x 2023fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet else: 2033fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet yield tree 2043fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 2053fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet terminals = list(walk(st2)) 2063fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.assertEqual([ 2073fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (1, 'def', 1, 0), 2083fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (1, 'f', 1, 4), 2093fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (7, '(', 1, 5), 2103fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (1, 'x', 1, 6), 211914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (8, ')', 1, 7), 2128d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (11, ':', 1, 8), 2138d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (4, '', 1, 9), 2143fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (5, '', 2, -1), 215914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (1, 'return', 2, 4), 216914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (1, 'x', 2, 11), 217914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (14, '+', 2, 13), 218914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (2, '1', 2, 15), 219914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (4, '', 2, 16), 220914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (6, '', 2, -1), 221914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (4, '', 2, -1), 222914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (0, '', 2, -1)], 2233fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet terminals) 2243fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 225914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák 2268d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie# 2278d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie# Second, we take *invalid* trees and make sure we get ParserError 2283fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet# rejections for them. 2293fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet# 2303fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 231914b4bb80c28c81101941d5533361ae0108eb771Marek Olšákclass IllegalSyntaxTestCase(unittest.TestCase): 2328d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie 2338d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie def check_bad_tree(self, tree, label): 2343fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet try: 2353fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet parser.sequence2st(tree) 2363fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet except parser.ParserError: 2373fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet pass 2383fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet else: 2393fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.fail("did not detect invalid tree for %r" % label) 2403fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 2413fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet def test_junk(self): 2423fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet # not even remotely valid: 2433fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_bad_tree((1, 2, 3), "<junk>") 2443fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 2453fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet def test_illegal_yield_1(self): 2463fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet # Illegal yield statement: def f(): return 1; yield 1 2473fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet tree = \ 2483fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (257, 2493fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (264, 2503fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (285, 2513fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (259, 2523fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (1, 'def'), 2533fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (1, 'f'), 2548d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (260, (7, '('), (8, ')')), 2558d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (11, ':'), 2563fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (291, 2573fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (4, ''), 2583fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (5, ''), 2593fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (264, 2603fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (265, 2613fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (266, 2623fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (272, 2633fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (275, 264866f9b18c68ede63c00917ec9c3dae3524ca8826Dave Airlie (1, 'return'), 2653fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (313, 2663fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (292, 2673fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (293, 268866f9b18c68ede63c00917ec9c3dae3524ca8826Dave Airlie (294, 2693fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (295, 2703fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (297, 2713fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (298, 2723fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (299, 2733fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (300, 2743fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (301, 2753fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (302, (303, (304, (305, (2, '1')))))))))))))))))), 2763fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (264, 2779608ef5dec4d70024e68a49c64faed9ec7e4d2e0Dave Airlie (265, 2783fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (266, 2793fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (272, 2803fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (276, 2813fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (1, 'yield'), 282914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (313, 2833fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (292, 2848d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (293, 2858d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (294, 2868d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (295, 2878d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (297, 2883fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (298, 28989954723bfeef59d055d2332ff112f0204b48130Marek Olšák (299, 2903fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (300, 2913fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (301, 2923fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (302, 2933fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (303, (304, (305, (2, '1')))))))))))))))))), 2948d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (4, ''))), 2958d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (6, ''))))), 2963fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (4, ''), 2973fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (0, '')))) 2988d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie self.check_bad_tree(tree, "def f():\n return 1\n yield 1") 2998d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie 3003fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet def test_illegal_yield_2(self): 301866f9b18c68ede63c00917ec9c3dae3524ca8826Dave Airlie # Illegal return in generator: def f(): return 1; yield 1 3023fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet tree = \ 3033fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (257, 3043fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (264, 3053fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (265, 3063fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (266, 3078d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (278, 3088d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (1, 'from'), 3093fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (281, (1, '__future__')), 3103fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (1, 'import'), 3113fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (279, (1, 'generators')))), 3123fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (4, ''))), 3133fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (264, 3143fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (285, 3153fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (259, 3163fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (1, 'def'), 3173fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (1, 'f'), 3183fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (260, (7, '('), (8, ')')), 3193fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (11, ':'), 3203fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (291, 3210d0285ba916d9e25871354441c09b0a8c7c9b844Christian König (4, ''), 3220d0285ba916d9e25871354441c09b0a8c7c9b844Christian König (5, ''), 3233fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (264, 3243fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (265, 3253fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (266, 3263fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (272, 327914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (275, 3288d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (1, 'return'), 3298d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (313, 3303fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (292, 331914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (293, 3328d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (294, 3338d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (295, 3343fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (297, 335914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (298, 3368d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (299, 3378d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (300, 3383fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (301, 3393fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (302, (303, (304, (305, (2, '1')))))))))))))))))), 3403fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (264, 3418d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (265, 3428d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (266, 3433fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (272, 3443fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (276, 3453fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (1, 'yield'), 3463fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (313, 3473fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (292, 3483fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (293, 3493fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (294, 3503fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (295, 3513fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (297, 3523fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (298, 3533fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (299, 3543fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (300, 3553fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (301, 3563fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (302, 3573fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (303, (304, (305, (2, '1')))))))))))))))))), 3583fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (4, ''))), 3593fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (6, ''))))), 3603fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (4, ''), 361914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (0, '')))) 3628d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie self.check_bad_tree(tree, "def f():\n return 1\n yield 1") 3638d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie 3643fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet def test_print_chevron_comma(self): 3653fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet # Illegal input: print >>fp, 366914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák tree = \ 3678d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (257, 3688d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (264, 3693fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (265, 3703fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (266, 3713fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (268, 372914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (1, 'print'), 3738d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (35, '>>'), 3748d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (290, 375914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (291, 376914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (292, 377914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (293, 378914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (295, 379914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (296, 380914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (297, 381914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (298, (299, (300, (301, (302, (303, (1, 'fp')))))))))))))), 382914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (12, ','))), 383914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (4, ''))), 384914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (0, '')) 385914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák self.check_bad_tree(tree, "print >>fp,") 386914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák 3873fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet def test_a_comma_comma_c(self): 3883fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet # Illegal input: a,,c 3893fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet tree = \ 390914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (258, 391914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (311, 392914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (290, 3933fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (291, 3943fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (292, 3953fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (293, 3963fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (295, 3973fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (296, 3983fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (297, 3993fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (298, (299, (300, (301, (302, (303, (1, 'a')))))))))))))), 4003fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (12, ','), 4013fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (12, ','), 4023fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (290, 4033fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (291, 4043fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (292, 4053fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (293, 4063fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (295, 4073fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (296, 4088d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (297, 4098d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (298, (299, (300, (301, (302, (303, (1, 'c'))))))))))))))), 4103fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (4, ''), 4113fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (0, '')) 4123fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_bad_tree(tree, "a,,c") 4133fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 4143fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet def test_illegal_operator(self): 4159608ef5dec4d70024e68a49c64faed9ec7e4d2e0Dave Airlie # Illegal input: a $= b 4163fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet tree = \ 4173fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (257, 4183fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (264, 4193fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (265, 420866f9b18c68ede63c00917ec9c3dae3524ca8826Dave Airlie (266, 4213fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (267, 4223fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (312, 4233fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (291, 424866f9b18c68ede63c00917ec9c3dae3524ca8826Dave Airlie (292, 4253fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (293, 4263fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (294, 427866f9b18c68ede63c00917ec9c3dae3524ca8826Dave Airlie (296, 42889954723bfeef59d055d2332ff112f0204b48130Marek Olšák (297, 42989954723bfeef59d055d2332ff112f0204b48130Marek Olšák (298, 4305250bd00c00ac8470320f4fae1d74425132f2083Dave Airlie (299, 4315250bd00c00ac8470320f4fae1d74425132f2083Dave Airlie (300, (301, (302, (303, (304, (1, 'a'))))))))))))))), 432914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (268, (37, '$=')), 433914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (312, 434914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (291, 435914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (292, 436914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (293, 437914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (294, 4385250bd00c00ac8470320f4fae1d74425132f2083Dave Airlie (296, 4395250bd00c00ac8470320f4fae1d74425132f2083Dave Airlie (297, 4403fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (298, 441914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (299, 442914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (300, (301, (302, (303, (304, (1, 'b'))))))))))))))))), 443914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (4, ''))), 44489954723bfeef59d055d2332ff112f0204b48130Marek Olšák (0, '')) 4453fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.check_bad_tree(tree, "a $= b") 4463fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 4473fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet def test_malformed_global(self): 448914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák #doesn't have global keyword in ast 4493fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet tree = (257, 4503fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (264, 4513fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet (265, 452914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (266, 4538d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (282, (1, 'foo'))), (4, ''))), 4548d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie (4, ''), 455914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák (0, '')) 456914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák self.check_bad_tree(tree, "malformed global ast") 457914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák 458914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák 4593fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeetclass CompileTestCase(unittest.TestCase): 4603fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 4613fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet # These tests are very minimal. :-( 4623fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 4633fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet def test_compile_expr(self): 4643fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet st = parser.expr('2 + 3') 4658d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie code = parser.compilest(st) 4668d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie self.assertEquals(eval(code), 5) 4673fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 4683fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet def test_compile_suite(self): 4693fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet st = parser.suite('x = 2; y = x + 3') 4703fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet code = parser.compilest(st) 4713fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet globs = {} 4723fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet exec code in globs 4733fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.assertEquals(globs['y'], 5) 4743fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 475914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák def test_compile_error(self): 4763fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet st = parser.suite('1 = 3 + 4') 4773fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.assertRaises(SyntaxError, parser.compilest, st) 4788d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie 4798d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie def test_compile_badunicode(self): 480914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák st = parser.suite('a = u"\U12345678"') 481914b4bb80c28c81101941d5533361ae0108eb771Marek Olšák self.assertRaises(SyntaxError, parser.compilest, st) 4823fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet st = parser.suite('a = u"\u1"') 4833fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.assertRaises(SyntaxError, parser.compilest, st) 4843fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 4853fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeetclass ParserStackLimitTestCase(unittest.TestCase): 4863fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet """try to push the parser to/over it's limits. 4873fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet see http://bugs.python.org/issue1881 for a discussion 4883fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet """ 4898d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie def _nested_expression(self, level): 4908d3e505ed66cbaa93782acdd5b296704392fcb06Dave Airlie return "["*level+"]"*level 4913fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 4923fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet def test_deeply_nested_list(self): 4933fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet e = self._nested_expression(99) 4943fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet st = parser.expr(e) 4953fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet st.compile() 4963fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 4973fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet def test_trigger_memory_error(self): 4983fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet e = self._nested_expression(100) 4993fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet print >>sys.stderr, "Expecting 's_push: parser stack overflow' in next line" 5003fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet self.assertRaises(MemoryError, parser.expr, e) 5013fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 5023fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeetdef test_main(): 5033fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet test_support.run_unittest( 5043fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet RoundtripLegalSyntaxTestCase, 5053fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet IllegalSyntaxTestCase, 5067e591111bf783d94ee6034287cde2f4c9214e810Henri Verbeet CompileTestCase, 5073fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet ParserStackLimitTestCase, 5083fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet ) 5093fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 5107e591111bf783d94ee6034287cde2f4c9214e810Henri Verbeet 5113fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeetif __name__ == "__main__": 5123fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet test_main() 5133fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet