2 Test cases for codeop.py
6 from test
.test_support
import run_unittest
, is_jython
8 from codeop
import compile_command
, PyCF_DONT_IMPLY_DEDENT
14 def unify_callables(d
):
20 class CodeopTests(unittest
.TestCase
):
22 def assertValid(self
, str, symbol
='single'):
23 '''succeed iff str is a valid piece of code'''
25 code
= compile_command(str, "<input>", symbol
)
27 if symbol
== "single":
29 saved_stdout
= sys
.stdout
30 sys
.stdout
= cStringIO
.StringIO()
33 exec compile(str,"<input>","single") in r
35 sys
.stdout
= saved_stdout
36 elif symbol
== 'eval':
38 d
= { 'value': eval(code
,ctx
) }
39 r
= { 'value': eval(str,ctx
) }
40 self
.assertEquals(unify_callables(r
),unify_callables(d
))
42 expected
= compile(str, "<input>", symbol
, PyCF_DONT_IMPLY_DEDENT
)
43 self
.assertEquals( compile_command(str, "<input>", symbol
), expected
)
45 def assertIncomplete(self
, str, symbol
='single'):
46 '''succeed iff str is the start of a valid piece of code'''
47 self
.assertEquals( compile_command(str, symbol
=symbol
), None)
49 def assertInvalid(self
, str, symbol
='single', is_syntax
=1):
50 '''succeed iff str is the start of an invalid piece of code'''
52 compile_command(str,symbol
=symbol
)
53 self
.fail("No exception thrown for invalid code")
55 self
.assert_(is_syntax
)
57 self
.assert_(not is_syntax
)
64 self
.assertEquals(compile_command(""),
65 compile("pass", "<input>", 'single',
66 PyCF_DONT_IMPLY_DEDENT
))
67 self
.assertEquals(compile_command("\n"),
68 compile("pass", "<input>", 'single',
69 PyCF_DONT_IMPLY_DEDENT
))
80 av("def x():\n pass\n")
83 av("\n\nif 1: pass\n")
84 av("\n\nif 1: pass\n\n")
86 av("def x():\n\n pass\n")
87 av("def x():\n pass\n \n")
88 av("def x():\n pass\n \n")
93 av("if 9==3:\n pass\nelse:\n pass\n")
94 av("if 1:\n pass\n if 1:\n pass\n else:\n pass\n")
102 av("(lambda z: \n z**3)","eval")
104 av("9+ \\\n3","eval")
105 av("9+ \\\n3\n","eval")
107 av("\n\na**3","eval")
108 av("\n \na**3","eval")
109 av("#a\n#b\na**3","eval")
111 def test_incomplete(self
):
112 ai
= self
.assertIncomplete
122 ai("if 9==3:\n pass\nelse:")
123 ai("if 9==3:\n pass\nelse:\n")
124 ai("if 9==3:\n pass\nelse:\n pass")
127 ai("if 1:\n pass\n if 1:\n pass\n else:")
128 ai("if 1:\n pass\n if 1:\n pass\n else:\n")
129 ai("if 1:\n pass\n if 1:\n pass\n else:\n pass")
135 ai("def x():\n pass")
136 ai("def x():\n pass\n ")
137 ai("def x():\n pass\n ")
138 ai("\n\ndef x():\n pass")
150 ai("lambda z: \\","eval")
152 def test_invalid(self
):
153 ai
= self
.assertInvalid
163 ai("def x():\n\npass\n")
165 ai("\n\n if 1: pass\n\npass")
177 ai("lambda z:","eval")
180 def test_filename(self
):
181 self
.assertEquals(compile_command("a = 1\n", "abc").co_filename
,
182 compile("a = 1\n", "abc", 'single').co_filename
)
183 self
.assertNotEquals(compile_command("a = 1\n", "abc").co_filename
,
184 compile("a = 1\n", "def", 'single').co_filename
)
188 run_unittest(CodeopTests
)
191 if __name__
== "__main__":