Martin v. Löwis | 3bd071e | 2001-07-30 12:30:08 +0000 | [diff] [blame] | 1 | """ |
| 2 | Test cases for codeop.py |
| 3 | Nick Mathewson |
| 4 | """ |
| 5 | import unittest |
Barry Warsaw | 04f357c | 2002-07-23 19:04:11 +0000 | [diff] [blame] | 6 | from test.test_support import run_unittest |
Martin v. Löwis | 3bd071e | 2001-07-30 12:30:08 +0000 | [diff] [blame] | 7 | |
| 8 | from codeop import compile_command |
| 9 | |
| 10 | class CodeopTests(unittest.TestCase): |
| 11 | |
| 12 | def assertValid(self, str, symbol='single'): |
| 13 | '''succeed iff str is a valid piece of code''' |
| 14 | expected = compile(str, "<input>", symbol) |
| 15 | self.assertEquals( compile_command(str, "<input>", symbol), expected) |
Tim Peters | ab9ba27 | 2001-08-09 21:40:30 +0000 | [diff] [blame] | 16 | |
Martin v. Löwis | 3bd071e | 2001-07-30 12:30:08 +0000 | [diff] [blame] | 17 | |
| 18 | def assertIncomplete(self, str, symbol='single'): |
| 19 | '''succeed iff str is the start of a valid piece of code''' |
| 20 | self.assertEquals( compile_command(str, symbol=symbol), None) |
| 21 | |
| 22 | def assertInvalid(self, str, symbol='single', is_syntax=1): |
| 23 | '''succeed iff str is the start of an invalid piece of code''' |
| 24 | try: |
| 25 | compile_command(str,symbol=symbol) |
| 26 | self.fail("No exception thrown for invalid code") |
| 27 | except SyntaxError: |
| 28 | self.assert_(is_syntax) |
| 29 | except OverflowError: |
| 30 | self.assert_(not is_syntax) |
| 31 | |
| 32 | def test_valid(self): |
| 33 | av = self.assertValid |
| 34 | av("a = 1\n") |
| 35 | av("def x():\n pass\n") |
| 36 | av("pass\n") |
| 37 | av("3**3\n") |
| 38 | av("if 9==3:\n pass\nelse:\n pass\n") |
| 39 | av("#a\n#b\na = 3\n") |
| 40 | av("#a\n\n \na=3\n") |
| 41 | av("a=3\n\n") |
| 42 | |
| 43 | # special case |
Tim Peters | ab9ba27 | 2001-08-09 21:40:30 +0000 | [diff] [blame] | 44 | self.assertEquals(compile_command(""), |
Martin v. Löwis | 3bd071e | 2001-07-30 12:30:08 +0000 | [diff] [blame] | 45 | compile("pass", "<input>", 'single')) |
| 46 | |
| 47 | av("3**3","eval") |
| 48 | av("(lambda z: \n z**3)","eval") |
| 49 | av("#a\n#b\na**3","eval") |
Tim Peters | ab9ba27 | 2001-08-09 21:40:30 +0000 | [diff] [blame] | 50 | |
Martin v. Löwis | 3bd071e | 2001-07-30 12:30:08 +0000 | [diff] [blame] | 51 | def test_incomplete(self): |
| 52 | ai = self.assertIncomplete |
| 53 | ai("(a **") |
| 54 | ai("def x():\n") |
| 55 | ai("(a,b,") |
| 56 | ai("(a,b,(") |
| 57 | ai("(a,b,(") |
| 58 | ai("if 9==3:\n pass\nelse:\n") |
| 59 | ai("if 9==3:\n pass\nelse:\n pass") |
| 60 | ai("a = (") |
| 61 | ai("a = 9+ \\") |
Tim Peters | ab9ba27 | 2001-08-09 21:40:30 +0000 | [diff] [blame] | 62 | |
Martin v. Löwis | 3bd071e | 2001-07-30 12:30:08 +0000 | [diff] [blame] | 63 | ai("(","eval") |
| 64 | ai("(\n\n\n","eval") |
| 65 | ai("(9+","eval") |
| 66 | ai("9+ \\","eval") |
| 67 | ai("lambda z: \\","eval") |
| 68 | |
| 69 | def test_invalid(self): |
| 70 | ai = self.assertInvalid |
| 71 | ai("a b") |
| 72 | ai("a = ") |
| 73 | ai("a = 9 +") |
| 74 | |
| 75 | ai("a = 1","eval") |
| 76 | ai("a = (","eval") |
| 77 | ai("]","eval") |
| 78 | ai("())","eval") |
| 79 | ai("[}","eval") |
| 80 | ai("9+","eval") |
| 81 | ai("lambda z:","eval") |
| 82 | ai("a b","eval") |
| 83 | |
| 84 | def test_filename(self): |
| 85 | self.assertEquals(compile_command("a = 1\n", "abc").co_filename, |
| 86 | compile("a = 1\n", "abc", 'single').co_filename) |
| 87 | self.assertNotEquals(compile_command("a = 1\n", "abc").co_filename, |
| 88 | compile("a = 1\n", "def", 'single').co_filename) |
| 89 | |
Fred Drake | 2e2be37 | 2001-09-20 21:33:42 +0000 | [diff] [blame] | 90 | |
| 91 | def test_main(): |
| 92 | run_unittest(CodeopTests) |
| 93 | |
| 94 | |
| 95 | if __name__ == "__main__": |
| 96 | test_main() |