test_codeop.py 2.66 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
"""
   Test cases for codeop.py
   Nick Mathewson
"""
import unittest
from test_support import run_unittest

from codeop import compile_command

class CodeopTests(unittest.TestCase):

    def assertValid(self, str, symbol='single'):
        '''succeed iff str is a valid piece of code'''
        expected = compile(str, "<input>", symbol)
        self.assertEquals( compile_command(str, "<input>", symbol), expected)
Tim Peters's avatar
Tim Peters committed
16

17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

    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
Tim Peters's avatar
Tim Peters committed
44
        self.assertEquals(compile_command(""),
45 46 47 48 49
                          compile("pass", "<input>", 'single'))

        av("3**3","eval")
        av("(lambda z: \n z**3)","eval")
        av("#a\n#b\na**3","eval")
Tim Peters's avatar
Tim Peters committed
50

51 52 53 54 55 56 57 58 59 60 61
    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+ \\")
Tim Peters's avatar
Tim Peters committed
62

63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
        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)

90 91 92 93 94 95 96

def test_main():
    run_unittest(CodeopTests)


if __name__ == "__main__":
    test_main()