diff options
author | Samuele Pedroni <pedronis@openend.se> | 2003-05-17 02:39:52 (GMT) |
---|---|---|
committer | Samuele Pedroni <pedronis@openend.se> | 2003-05-17 02:39:52 (GMT) |
commit | de9a0d3158df0278d83754740f33276f780cef90 (patch) | |
tree | 59e0f1ae1024f01090bb8bf29b4f6c7934e8dbec /Lib/test/test_codeop.py | |
parent | eb1a496039d39135188bbee20e348e796c4807ea (diff) | |
download | cpython-de9a0d3158df0278d83754740f33276f780cef90.zip cpython-de9a0d3158df0278d83754740f33276f780cef90.tar.gz cpython-de9a0d3158df0278d83754740f33276f780cef90.tar.bz2 |
beefed up version: jython support, covers now fixed differences between CPython/Jython.
Diffstat (limited to 'Lib/test/test_codeop.py')
-rw-r--r-- | Lib/test/test_codeop.py | 116 |
1 files changed, 105 insertions, 11 deletions
diff --git a/Lib/test/test_codeop.py b/Lib/test/test_codeop.py index 7af83eb..c2f8539 100644 --- a/Lib/test/test_codeop.py +++ b/Lib/test/test_codeop.py @@ -3,17 +3,43 @@ Nick Mathewson """ import unittest -from test.test_support import run_unittest +from test.test_support import run_unittest, is_jython from codeop import compile_command, PyCF_DONT_IMPLY_DEDENT +if is_jython: + import sys + import cStringIO + + def unify_callables(d): + for n,v in d.items(): + if callable(v): + d[n] = callable + return d + class CodeopTests(unittest.TestCase): def assertValid(self, str, symbol='single'): '''succeed iff str is a valid piece of code''' - expected = compile(str, "<input>", symbol, PyCF_DONT_IMPLY_DEDENT) - self.assertEquals( compile_command(str, "<input>", symbol), expected) - + if is_jython: + code = compile_command(str, "<input>", symbol) + self.assert_(code) + if symbol == "single": + d,r = {},{} + sys.stdout = cStringIO.StringIO() + try: + exec code in d + exec compile(str,"<input>","single") in r + finally: + sys.stdout = sys.__stdout__ + elif symbol == 'eval': + ctx = {'a': 2} + d = { 'value': eval(code,ctx) } + r = { 'value': eval(str,ctx) } + self.assertEquals(unify_callables(r),unify_callables(d)) + else: + expected = compile(str, "<input>", symbol, PyCF_DONT_IMPLY_DEDENT) + self.assertEquals( compile_command(str, "<input>", symbol), expected) def assertIncomplete(self, str, symbol='single'): '''succeed iff str is the start of a valid piece of code''' @@ -31,36 +57,91 @@ class CodeopTests(unittest.TestCase): def test_valid(self): av = self.assertValid + + # special case + if not is_jython: + self.assertEquals(compile_command(""), + compile("pass", "<input>", 'single', + PyCF_DONT_IMPLY_DEDENT)) + self.assertEquals(compile_command("\n"), + compile("pass", "<input>", 'single', + PyCF_DONT_IMPLY_DEDENT)) + else: + av("") + av("\n") + + av("a = 1") + av("\na = 1") av("a = 1\n") + av("a = 1\n\n") + av("\n\na = 1\n\n") + av("def x():\n pass\n") + av("if 1:\n pass\n") + + av("\n\nif 1: pass\n") + av("\n\nif 1: pass\n\n") + + av("def x():\n\n pass\n") + av("def x():\n pass\n \n") + av("def x():\n pass\n \n") + av("pass\n") av("3**3\n") + av("if 9==3:\n pass\nelse:\n pass\n") + av("if 1:\n pass\n if 1:\n pass\n else:\n pass\n") + av("#a\n#b\na = 3\n") av("#a\n\n \na=3\n") av("a=3\n\n") - - # special case - self.assertEquals(compile_command(""), - compile("pass", "<input>", 'single', - PyCF_DONT_IMPLY_DEDENT)) + av("a = 9+ \\\n3") av("3**3","eval") av("(lambda z: \n z**3)","eval") + + av("9+ \\\n3","eval") + av("9+ \\\n3\n","eval") + + av("\n\na**3","eval") + av("\n \na**3","eval") av("#a\n#b\na**3","eval") def test_incomplete(self): ai = self.assertIncomplete + ai("(a **") - ai("def x():\n") ai("(a,b,") ai("(a,b,(") ai("(a,b,(") + ai("a = (") + ai("a = {") + ai("b + {") + + ai("if 9==3:\n pass\nelse:") ai("if 9==3:\n pass\nelse:\n") ai("if 9==3:\n pass\nelse:\n pass") - ai("a = (") + ai("if 1:") + ai("if 1:\n") + ai("if 1:\n pass\n if 1:\n pass\n else:") + ai("if 1:\n pass\n if 1:\n pass\n else:\n") + ai("if 1:\n pass\n if 1:\n pass\n else:\n pass") + + ai("def x():") + ai("def x():\n") + ai("def x():\n\n") + + ai("def x():\n pass") + ai("def x():\n pass\n ") + ai("def x():\n pass\n ") + ai("\n\ndef x():\n pass") + ai("a = 9+ \\") + ai("a = 'a\\") + ai("a = '''xy") + ai("","eval") + ai("\n","eval") ai("(","eval") ai("(\n\n\n","eval") ai("(9+","eval") @@ -70,9 +151,22 @@ class CodeopTests(unittest.TestCase): def test_invalid(self): ai = self.assertInvalid ai("a b") + + ai("a @") + ai("a b @") + ai("a ** @") + ai("a = ") ai("a = 9 +") + ai("def x():\n\npass\n") + + ai("\n\n if 1: pass\n\npass") + + ai("a = 9+ \\\n") + ai("a = 'a\\ ") + ai("a = 'a\\\n") + ai("a = 1","eval") ai("a = (","eval") ai("]","eval") |