mirror of
https://github.com/python/cpython.git
synced 2025-07-23 11:15:24 +00:00

The changes cause compilation failures in any file in the Python installation lib directory to cause the install to fail. It looks like compileall.py intended to behave this way, but a change to py_compile.py and a separate bug defeated it. Fixes SF bug #412436 This change affects the test suite, which contains several files that contain intentional errors. The solution is to extend compileall.py with the ability to skip compilation of selected files. In the test suite, rename nocaret.py and test_future[3..7].py to start with badsyntax_nocaret.py and badsyntax_future[3..7].py. Update the makefile to skip compilation of these files. Update the tests to use the name names for imports. NB compileall.py is changed so that compile_dir() returns success only if all recursive calls to compile_dir() also check success.
40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
"""Test cases for traceback module"""
|
|
|
|
import unittest
|
|
from test_support import run_unittest
|
|
|
|
import traceback
|
|
|
|
class TracebackCases(unittest.TestCase):
|
|
# For now, a very minimal set of tests. I want to be sure that
|
|
# formatting of SyntaxErrors works based on changes for 2.1.
|
|
|
|
def get_exception_format(self, func, exc):
|
|
try:
|
|
func()
|
|
except exc, value:
|
|
return traceback.format_exception_only(exc, value)
|
|
else:
|
|
raise ValueError, "call did not raise exception"
|
|
|
|
def syntax_error_with_caret(self):
|
|
compile("def fact(x):\n\treturn x!\n", "?", "exec")
|
|
|
|
def syntax_error_without_caret(self):
|
|
# XXX why doesn't compile raise the same traceback?
|
|
import badsyntax_nocaret
|
|
|
|
def test_caret(self):
|
|
err = self.get_exception_format(self.syntax_error_with_caret,
|
|
SyntaxError)
|
|
self.assert_(len(err) == 4)
|
|
self.assert_("^" in err[2]) # third line has caret
|
|
self.assert_(err[1].strip() == "return x!")
|
|
|
|
def test_nocaret(self):
|
|
err = self.get_exception_format(self.syntax_error_without_caret,
|
|
SyntaxError)
|
|
self.assert_(len(err) == 3)
|
|
self.assert_(err[1].strip() == "[x for x in x] = x")
|
|
|
|
run_unittest(TracebackCases)
|