diff options
| author | Steven Knight <knight@baldmt.com> | 2004-01-29 03:35:57 (GMT) |
|---|---|---|
| committer | Steven Knight <knight@baldmt.com> | 2004-01-29 03:35:57 (GMT) |
| commit | 1ed5ce4f1c15b7608fe2fa62be76f7a781f98faa (patch) | |
| tree | 2e6c2769a032d26227b22c39df84706d35ed7408 /src/engine/SCons | |
| parent | d0b4699180b7177561f452b646b85ec39f09d0e2 (diff) | |
| download | SCons-1ed5ce4f1c15b7608fe2fa62be76f7a781f98faa.zip SCons-1ed5ce4f1c15b7608fe2fa62be76f7a781f98faa.tar.gz SCons-1ed5ce4f1c15b7608fe2fa62be76f7a781f98faa.tar.bz2 | |
Provide a better error message when a construction variable expansion is a Python syntax error.
Diffstat (limited to 'src/engine/SCons')
| -rw-r--r-- | src/engine/SCons/Util.py | 7 | ||||
| -rw-r--r-- | src/engine/SCons/UtilTests.py | 18 |
2 files changed, 24 insertions, 1 deletions
diff --git a/src/engine/SCons/Util.py b/src/engine/SCons/Util.py index 0af98fd..6d95a4e 100644 --- a/src/engine/SCons/Util.py +++ b/src/engine/SCons/Util.py @@ -40,7 +40,8 @@ import sys import types import UserDict import UserList -import SCons.Node + +import SCons.Errors try: from UserString import UserString @@ -556,6 +557,8 @@ def scons_subst(strSubst, env, mode=SUBST_RAW, target=None, source=None, dict=No s = eval(key, self.gvars, lvars) except (IndexError, NameError, TypeError): return '' + except (SyntaxError): + raise SCons.Errors.UserError, "Syntax error trying to evaluate `%s'" % s else: # Before re-expanding the result, handle # recursive expansion by copying the local @@ -690,6 +693,8 @@ def scons_subst_list(strSubst, env, mode=SUBST_RAW, target=None, source=None, di s = eval(key, self.gvars, lvars) except (IndexError, NameError, TypeError): return + except (SyntaxError): + raise SCons.Errors.UserError, "Syntax error trying to evaluate `%s'" % s else: # Before re-expanding the result, handle # recursive expansion by copying the local diff --git a/src/engine/SCons/UtilTests.py b/src/engine/SCons/UtilTests.py index ca5f649..fb4ec09 100644 --- a/src/engine/SCons/UtilTests.py +++ b/src/engine/SCons/UtilTests.py @@ -32,6 +32,8 @@ import unittest from SCons.Util import * import TestCmd +import SCons.Errors + class OutBuffer: def __init__(self): self.buffer = "" @@ -410,6 +412,14 @@ class UtilTestCase(unittest.TestCase): env, target=MyNode('t'), source=MyNode('s')) assert newcom == "test foo baz s t", newcom + # Test that we handle syntax errors during expansion as expected. + try: + scons_subst('$foo.bar.3.0', env) + except SCons.Errors.UserError, e: + assert str(e) == "Syntax error trying to evaluate `$foo.bar.3.0'", e + else: + raise AssertionError, "did not catch expected UserError" + # Test returning a function. #env = DummyEnv({'FUNCTION' : foo}) #func = scons_subst("$FUNCTION", env, mode=SUBST_RAW, call=None) @@ -732,6 +742,14 @@ class UtilTestCase(unittest.TestCase): del subst_list_cases[:4] assert failed == 0, "%d subst() mode cases failed" % failed + # Test that we handle syntax errors during expansion as expected. + try: + scons_subst_list('$foo.bar.3.0', env) + except SCons.Errors.UserError, e: + assert str(e) == "Syntax error trying to evaluate `$foo.bar.3.0'", e + else: + raise AssertionError, "did not catch expected SyntaxError" + def test_splitext(self): assert splitext('foo') == ('foo','') assert splitext('foo.bar') == ('foo','.bar') |
