| """ |
| Test cases for codeop.py |
| Nick Mathewson |
| """ |
| import unittest |
| from test.test_support import run_unittest |
| |
| 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''' |
| 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''' |
| try: |
| compile_command(str,symbol=symbol) |
| self.fail("No exception thrown for invalid code") |
| except SyntaxError: |
| self.assert_(is_syntax) |
| except OverflowError: |
| self.assert_(not is_syntax) |
| |
| def test_valid(self): |
| av = self.assertValid |
| av("a = 1\n") |
| av("def x():\n pass\n") |
| av("pass\n") |
| av("3**3\n") |
| av("if 9==3:\n pass\nelse:\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("3**3","eval") |
| av("(lambda z: \n z**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("if 9==3:\n pass\nelse:\n") |
| ai("if 9==3:\n pass\nelse:\n pass") |
| ai("a = (") |
| ai("a = 9+ \\") |
| |
| ai("(","eval") |
| ai("(\n\n\n","eval") |
| ai("(9+","eval") |
| ai("9+ \\","eval") |
| ai("lambda z: \\","eval") |
| |
| def test_invalid(self): |
| ai = self.assertInvalid |
| ai("a b") |
| ai("a = ") |
| ai("a = 9 +") |
| |
| ai("a = 1","eval") |
| ai("a = (","eval") |
| ai("]","eval") |
| ai("())","eval") |
| ai("[}","eval") |
| ai("9+","eval") |
| ai("lambda z:","eval") |
| ai("a b","eval") |
| |
| def test_filename(self): |
| 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) |
| |
| |
| def test_main(): |
| run_unittest(CodeopTests) |
| |
| |
| if __name__ == "__main__": |
| test_main() |