mirror of
https://github.com/python/cpython.git
synced 2026-01-06 07:22:09 +00:00
Patch #1475845: Raise IndentationError for unexpected indent.
This commit is contained in:
parent
61d168a55e
commit
777367103c
3 changed files with 23 additions and 3 deletions
|
|
@ -243,15 +243,18 @@
|
|||
class SyntaxTestCase(unittest.TestCase):
|
||||
|
||||
def _check_error(self, code, errtext,
|
||||
filename="<testcase>", mode="exec"):
|
||||
filename="<testcase>", mode="exec", subclass=None):
|
||||
"""Check that compiling code raises SyntaxError with errtext.
|
||||
|
||||
errtest is a regular expression that must be present in the
|
||||
test of the exception raised.
|
||||
test of the exception raised. If subclass is specified it
|
||||
is the expected subclass of SyntaxError (e.g. IndentationError).
|
||||
"""
|
||||
try:
|
||||
compile(code, filename, mode)
|
||||
except SyntaxError, err:
|
||||
if subclass and not isinstance(err, subclass):
|
||||
self.fail("SyntaxError is not a %s" % subclass.__name__)
|
||||
mo = re.search(errtext, str(err))
|
||||
if mo is None:
|
||||
self.fail("SyntaxError did not contain '%r'" % (errtext,))
|
||||
|
|
@ -290,6 +293,19 @@ def test_delete_deref(self):
|
|||
:""")
|
||||
self._check_error(source, "nested scope")
|
||||
|
||||
def test_unexpected_indent(self):
|
||||
self._check_error("foo()\n bar()\n", "unexpected indent",
|
||||
subclass=IndentationError)
|
||||
|
||||
def test_no_indent(self):
|
||||
self._check_error("if 1:\nfoo()", "expected an indented block",
|
||||
subclass=IndentationError)
|
||||
|
||||
def test_bad_outdent(self):
|
||||
self._check_error("if 1:\n foo()\n bar()",
|
||||
"unindent does not match .* level",
|
||||
subclass=IndentationError)
|
||||
|
||||
def test_main():
|
||||
test_support.run_unittest(SyntaxTestCase)
|
||||
from test import test_syntax
|
||||
|
|
|
|||
|
|
@ -12,6 +12,8 @@ What's New in Python 2.5 alpha 2?
|
|||
Core and builtins
|
||||
-----------------
|
||||
|
||||
- Patch #1475845: Raise IndentationError for unexpected indent.
|
||||
|
||||
- Patch #1479181: split open() and file() from being aliases for each other.
|
||||
|
||||
- Bug #1465834: 'bdist_wininst preinstall script support' was fixed
|
||||
|
|
|
|||
|
|
@ -194,8 +194,10 @@ parsetok(struct tok_state *tok, grammar *g, int start, perrdetail *err_ret,
|
|||
if ((err_ret->error =
|
||||
PyParser_AddToken(ps, (int)type, str, tok->lineno, col_offset,
|
||||
&(err_ret->expected))) != E_OK) {
|
||||
if (err_ret->error != E_DONE)
|
||||
if (err_ret->error != E_DONE) {
|
||||
PyObject_FREE(str);
|
||||
err_ret->token = type;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue