+++ /dev/null
-"""\r
- Test cases for codeop.py\r
- Nick Mathewson\r
-"""\r
-import unittest\r
-from test.test_support import run_unittest, is_jython\r
-\r
-from codeop import compile_command, PyCF_DONT_IMPLY_DEDENT\r
-\r
-if is_jython:\r
- import sys\r
- import cStringIO\r
-\r
- def unify_callables(d):\r
- for n,v in d.items():\r
- if callable(v):\r
- d[n] = callable\r
- return d\r
-\r
-class CodeopTests(unittest.TestCase):\r
-\r
- def assertValid(self, str, symbol='single'):\r
- '''succeed iff str is a valid piece of code'''\r
- if is_jython:\r
- code = compile_command(str, "<input>", symbol)\r
- self.assertTrue(code)\r
- if symbol == "single":\r
- d,r = {},{}\r
- saved_stdout = sys.stdout\r
- sys.stdout = cStringIO.StringIO()\r
- try:\r
- exec code in d\r
- exec compile(str,"<input>","single") in r\r
- finally:\r
- sys.stdout = saved_stdout\r
- elif symbol == 'eval':\r
- ctx = {'a': 2}\r
- d = { 'value': eval(code,ctx) }\r
- r = { 'value': eval(str,ctx) }\r
- self.assertEqual(unify_callables(r),unify_callables(d))\r
- else:\r
- expected = compile(str, "<input>", symbol, PyCF_DONT_IMPLY_DEDENT)\r
- self.assertEqual(compile_command(str, "<input>", symbol), expected)\r
-\r
- def assertIncomplete(self, str, symbol='single'):\r
- '''succeed iff str is the start of a valid piece of code'''\r
- self.assertEqual(compile_command(str, symbol=symbol), None)\r
-\r
- def assertInvalid(self, str, symbol='single', is_syntax=1):\r
- '''succeed iff str is the start of an invalid piece of code'''\r
- try:\r
- compile_command(str,symbol=symbol)\r
- self.fail("No exception thrown for invalid code")\r
- except SyntaxError:\r
- self.assertTrue(is_syntax)\r
- except OverflowError:\r
- self.assertTrue(not is_syntax)\r
-\r
- def test_valid(self):\r
- av = self.assertValid\r
-\r
- # special case\r
- if not is_jython:\r
- self.assertEqual(compile_command(""),\r
- compile("pass", "<input>", 'single',\r
- PyCF_DONT_IMPLY_DEDENT))\r
- self.assertEqual(compile_command("\n"),\r
- compile("pass", "<input>", 'single',\r
- PyCF_DONT_IMPLY_DEDENT))\r
- else:\r
- av("")\r
- av("\n")\r
-\r
- av("a = 1")\r
- av("\na = 1")\r
- av("a = 1\n")\r
- av("a = 1\n\n")\r
- av("\n\na = 1\n\n")\r
-\r
- av("def x():\n pass\n")\r
- av("if 1:\n pass\n")\r
-\r
- av("\n\nif 1: pass\n")\r
- av("\n\nif 1: pass\n\n")\r
-\r
- av("def x():\n\n pass\n")\r
- av("def x():\n pass\n \n")\r
- av("def x():\n pass\n \n")\r
-\r
- av("pass\n")\r
- av("3**3\n")\r
-\r
- av("if 9==3:\n pass\nelse:\n pass\n")\r
- av("if 1:\n pass\n if 1:\n pass\n else:\n pass\n")\r
-\r
- av("#a\n#b\na = 3\n")\r
- av("#a\n\n \na=3\n")\r
- av("a=3\n\n")\r
- av("a = 9+ \\\n3")\r
-\r
- av("3**3","eval")\r
- av("(lambda z: \n z**3)","eval")\r
-\r
- av("9+ \\\n3","eval")\r
- av("9+ \\\n3\n","eval")\r
-\r
- av("\n\na**3","eval")\r
- av("\n \na**3","eval")\r
- av("#a\n#b\na**3","eval")\r
-\r
- av("\n\na = 1\n\n")\r
- av("\n\nif 1: a=1\n\n")\r
-\r
- av("if 1:\n pass\n if 1:\n pass\n else:\n pass\n")\r
- av("#a\n\n \na=3\n\n")\r
-\r
- av("\n\na**3","eval")\r
- av("\n \na**3","eval")\r
- av("#a\n#b\na**3","eval")\r
-\r
- av("def f():\n try: pass\n finally: [x for x in (1,2)]\n")\r
- av("def f():\n pass\n#foo\n")\r
- av("@a.b.c\ndef f():\n pass\n")\r
-\r
- def test_incomplete(self):\r
- ai = self.assertIncomplete\r
-\r
- ai("(a **")\r
- ai("(a,b,")\r
- ai("(a,b,(")\r
- ai("(a,b,(")\r
- ai("a = (")\r
- ai("a = {")\r
- ai("b + {")\r
-\r
- ai("if 9==3:\n pass\nelse:")\r
- ai("if 9==3:\n pass\nelse:\n")\r
- ai("if 9==3:\n pass\nelse:\n pass")\r
- ai("if 1:")\r
- ai("if 1:\n")\r
- ai("if 1:\n pass\n if 1:\n pass\n else:")\r
- ai("if 1:\n pass\n if 1:\n pass\n else:\n")\r
- ai("if 1:\n pass\n if 1:\n pass\n else:\n pass")\r
-\r
- ai("def x():")\r
- ai("def x():\n")\r
- ai("def x():\n\n")\r
-\r
- ai("def x():\n pass")\r
- ai("def x():\n pass\n ")\r
- ai("def x():\n pass\n ")\r
- ai("\n\ndef x():\n pass")\r
-\r
- ai("a = 9+ \\")\r
- ai("a = 'a\\")\r
- ai("a = '''xy")\r
-\r
- ai("","eval")\r
- ai("\n","eval")\r
- ai("(","eval")\r
- ai("(\n\n\n","eval")\r
- ai("(9+","eval")\r
- ai("9+ \\","eval")\r
- ai("lambda z: \\","eval")\r
-\r
- ai("if True:\n if True:\n if True: \n")\r
-\r
- ai("@a(")\r
- ai("@a(b")\r
- ai("@a(b,")\r
- ai("@a(b,c")\r
- ai("@a(b,c,")\r
-\r
- ai("from a import (")\r
- ai("from a import (b")\r
- ai("from a import (b,")\r
- ai("from a import (b,c")\r
- ai("from a import (b,c,")\r
-\r
- ai("[");\r
- ai("[a");\r
- ai("[a,");\r
- ai("[a,b");\r
- ai("[a,b,");\r
-\r
- ai("{");\r
- ai("{a");\r
- ai("{a:");\r
- ai("{a:b");\r
- ai("{a:b,");\r
- ai("{a:b,c");\r
- ai("{a:b,c:");\r
- ai("{a:b,c:d");\r
- ai("{a:b,c:d,");\r
-\r
- ai("a(")\r
- ai("a(b")\r
- ai("a(b,")\r
- ai("a(b,c")\r
- ai("a(b,c,")\r
-\r
- ai("a[")\r
- ai("a[b")\r
- ai("a[b,")\r
- ai("a[b:")\r
- ai("a[b:c")\r
- ai("a[b:c:")\r
- ai("a[b:c:d")\r
-\r
- ai("def a(")\r
- ai("def a(b")\r
- ai("def a(b,")\r
- ai("def a(b,c")\r
- ai("def a(b,c,")\r
-\r
- ai("(")\r
- ai("(a")\r
- ai("(a,")\r
- ai("(a,b")\r
- ai("(a,b,")\r
-\r
- ai("if a:\n pass\nelif b:")\r
- ai("if a:\n pass\nelif b:\n pass\nelse:")\r
-\r
- ai("while a:")\r
- ai("while a:\n pass\nelse:")\r
-\r
- ai("for a in b:")\r
- ai("for a in b:\n pass\nelse:")\r
-\r
- ai("try:")\r
- ai("try:\n pass\nexcept:")\r
- ai("try:\n pass\nfinally:")\r
- ai("try:\n pass\nexcept:\n pass\nfinally:")\r
-\r
- ai("with a:")\r
- ai("with a as b:")\r
-\r
- ai("class a:")\r
- ai("class a(")\r
- ai("class a(b")\r
- ai("class a(b,")\r
- ai("class a():")\r
-\r
- ai("[x for")\r
- ai("[x for x in")\r
- ai("[x for x in (")\r
-\r
- ai("(x for")\r
- ai("(x for x in")\r
- ai("(x for x in (")\r
-\r
- def test_invalid(self):\r
- ai = self.assertInvalid\r
- ai("a b")\r
-\r
- ai("a @")\r
- ai("a b @")\r
- ai("a ** @")\r
-\r
- ai("a = ")\r
- ai("a = 9 +")\r
-\r
- ai("def x():\n\npass\n")\r
-\r
- ai("\n\n if 1: pass\n\npass")\r
-\r
- ai("a = 9+ \\\n")\r
- ai("a = 'a\\ ")\r
- ai("a = 'a\\\n")\r
-\r
- ai("a = 1","eval")\r
- ai("a = (","eval")\r
- ai("]","eval")\r
- ai("())","eval")\r
- ai("[}","eval")\r
- ai("9+","eval")\r
- ai("lambda z:","eval")\r
- ai("a b","eval")\r
-\r
- ai("return 2.3")\r
- ai("if (a == 1 and b = 2): pass")\r
-\r
- ai("del 1")\r
- ai("del ()")\r
- ai("del (1,)")\r
- ai("del [1]")\r
- ai("del '1'")\r
-\r
- ai("[i for i in range(10)] = (1, 2, 3)")\r
-\r
- def test_filename(self):\r
- self.assertEqual(compile_command("a = 1\n", "abc").co_filename,\r
- compile("a = 1\n", "abc", 'single').co_filename)\r
- self.assertNotEqual(compile_command("a = 1\n", "abc").co_filename,\r
- compile("a = 1\n", "def", 'single').co_filename)\r
-\r
-\r
-def test_main():\r
- run_unittest(CodeopTests)\r
-\r
-\r
-if __name__ == "__main__":\r
- test_main()\r