from test
.test_support
import run_unittest
, is_jython
from codeop
import compile_command
, PyCF_DONT_IMPLY_DEDENT
class CodeopTests(unittest
.TestCase
):
def assertValid(self
, str, symbol
='single'):
'''succeed iff str is a valid piece of code'''
code
= compile_command(str, "<input>", symbol
)
saved_stdout
= sys
.stdout
sys
.stdout
= cStringIO
.StringIO()
exec compile(str,"<input>","single") in r
sys
.stdout
= saved_stdout
d
= { 'value': eval(code
,ctx
) }
r
= { 'value': eval(str,ctx
) }
self
.assertEquals(unify_callables(r
),unify_callables(d
))
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'''
self
.assertEquals( compile_command(str, symbol
=symbol
), None)
def assertInvalid(self
, str, symbol
='single', is_syntax
=1):
'''succeed iff str is the start of an invalid piece of code'''
compile_command(str,symbol
=symbol
)
self
.fail("No exception thrown for invalid code")
self
.assert_(not is_syntax
)
self
.assertEquals(compile_command(""),
compile("pass", "<input>", 'single',
self
.assertEquals(compile_command("\n"),
compile("pass", "<input>", 'single',
av("def x():\n\n pass\n")
av("def x():\n pass\n \n")
av("def x():\n pass\n \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("(lambda z: \n z**3)","eval")
av("#a\n#b\na**3","eval")
def test_incomplete(self
):
ai
= self
.assertIncomplete
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("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("\n\ndef x():\n pass")
ai("lambda z: \\","eval")
ai("\n\n if 1: pass\n\npass")
self
.assertEquals(compile_command("a = 1\n", "abc").co_filename
,
compile("a = 1\n", "abc", 'single').co_filename
)
self
.assertNotEquals(compile_command("a = 1\n", "abc").co_filename
,
compile("a = 1\n", "def", 'single').co_filename
)
run_unittest(CodeopTests
)
if __name__
== "__main__":