summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_codeop.py
diff options
context:
space:
mode:
authorSamuele Pedroni <pedronis@openend.se>2003-05-17 02:39:52 (GMT)
committerSamuele Pedroni <pedronis@openend.se>2003-05-17 02:39:52 (GMT)
commitde9a0d3158df0278d83754740f33276f780cef90 (patch)
tree59e0f1ae1024f01090bb8bf29b4f6c7934e8dbec /Lib/test/test_codeop.py
parenteb1a496039d39135188bbee20e348e796c4807ea (diff)
downloadcpython-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.py116
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")