Index: codeop.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/codeop.py,v retrieving revision 1.6 diff -c -5 -r1.6 codeop.py *** codeop.py 13 Feb 2003 22:07:54 -0000 1.6 --- codeop.py 15 May 2003 01:44:46 -0000 *************** *** 64,80 **** __all__ = ["compile_command", "Compile", "CommandCompiler"] PyCF_DONT_IMPLY_DEDENT = 0x200 # Matches pythonrun.h def _maybe_compile(compiler, source, filename, symbol): ! # Check for source consisting of only blank lines and comments ! for line in source.split("\n"): ! line = line.strip() ! if line and line[0] != '#': ! break # Leave it alone else: ! source = "pass" # Replace it with a 'pass' statement err = err1 = err2 = None code = code1 = code2 = None try: --- 64,85 ---- __all__ = ["compile_command", "Compile", "CommandCompiler"] PyCF_DONT_IMPLY_DEDENT = 0x200 # Matches pythonrun.h def _maybe_compile(compiler, source, filename, symbol): ! if symbol == 'single': ! # Check for source consisting of only blank lines and comments ! for line in source.split("\n"): ! line = line.strip() ! if line and line[0] != '#': ! break # Leave it alone ! else: ! source = "pass" # Replace it with a 'pass' statement ! elif symbol == 'eval': ! pass else: ! raise ValueError,"symbol arg must be either single or eval" err = err1 = err2 = None code = code1 = code2 = None try: Index: test/test_codeop.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_codeop.py,v retrieving revision 1.5 diff -c -5 -r1.5 test_codeop.py *** test/test_codeop.py 13 Feb 2003 22:07:54 -0000 1.5 --- test/test_codeop.py 15 May 2003 01:44:46 -0000 *************** *** 1,21 **** """ 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, "", symbol, PyCF_DONT_IMPLY_DEDENT) ! self.assertEquals( compile_command(str, "", 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) --- 1,23 ---- """ Test cases for codeop.py Nick Mathewson """ import unittest ! 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''' ! if is_jython: ! self.assert_( compile_command(str, "", symbol)) ! else: ! expected = compile(str, "", symbol, PyCF_DONT_IMPLY_DEDENT) ! self.assertEquals( compile_command(str, "", 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) *************** *** 29,79 **** 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", "", '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") --- 31,140 ---- except OverflowError: self.assert_(not is_syntax) def test_valid(self): av = self.assertValid + + # special case + if not is_jython: + self.assertEquals(compile_command(""), + compile("pass", "", 'single', + PyCF_DONT_IMPLY_DEDENT)) + self.assertEquals(compile_command("\n"), + compile("pass", "", 'single', + PyCF_DONT_IMPLY_DEDENT)) + else: + av("") + av("\n") + + av("a = 1") av("a = 1\n") + av("def x():\n pass\n") + av("if 1:\n pass\n") + + av("def x():\n\n pass\n") + av("def x():\n pass\n \n") + av("def x():\n pass\n \n") + av("pass\n") av("3**3\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("#a\n#b\na = 3\n") av("#a\n\n \na=3\n") av("a=3\n\n") ! av("a = 9+ \\\n3") av("3**3","eval") av("(lambda z: \n z**3)","eval") + + av("9+ \\\n3","eval") + av("9+ \\\n3\n","eval") + + av("\n\na**3","eval") + av("\n \na**3","eval") av("#a\n#b\na**3","eval") def test_incomplete(self): ai = self.assertIncomplete + ai("(a **") ai("(a,b,") ai("(a,b,(") ai("(a,b,(") + ai("a = (") + ai("a = {") + ai("b + {") + + 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:") ! ai("if 1:\n") ! 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("def x():") ! ai("def x():\n") ! ai("def x():\n\n") ! ! ai("def x():\n pass") ! ai("def x():\n pass\n ") ! ai("def x():\n pass\n ") ! ai("a = 9+ \\") + ai("a = 'a\\") + ai("a = '''xy") + ai("","eval") + ai("\n","eval") 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 b @") + ai("a ** @") + ai("a = ") ai("a = 9 +") + + ai("def x():\n\npass\n") + + ai("a = 9+ \\\n") + ai("a = 'a\\ ") + ai("a = 'a\\\n") ai("a = 1","eval") ai("a = (","eval") ai("]","eval") ai("())","eval")