diff options
author | Steven Knight <knight@baldmt.com> | 2002-01-15 13:55:17 (GMT) |
---|---|---|
committer | Steven Knight <knight@baldmt.com> | 2002-01-15 13:55:17 (GMT) |
commit | 4f1715fd6ff09cd910099cf250cbb5e23ee5ca85 (patch) | |
tree | 579aedbb29f18aac291e26d2f521aafd55d043ea /src/engine/SCons/Node | |
parent | f1743c83435f365ca75f7887267cd5773475e6cc (diff) | |
download | SCons-4f1715fd6ff09cd910099cf250cbb5e23ee5ca85.zip SCons-4f1715fd6ff09cd910099cf250cbb5e23ee5ca85.tar.gz SCons-4f1715fd6ff09cd910099cf250cbb5e23ee5ca85.tar.bz2 |
Document function Actions and fix their return values (None == success, don't ignore failures).
Diffstat (limited to 'src/engine/SCons/Node')
-rw-r--r-- | src/engine/SCons/Node/NodeTests.py | 33 | ||||
-rw-r--r-- | src/engine/SCons/Node/__init__.py | 11 |
2 files changed, 40 insertions, 4 deletions
diff --git a/src/engine/SCons/Node/NodeTests.py b/src/engine/SCons/Node/NodeTests.py index f55659e..37b9f37 100644 --- a/src/engine/SCons/Node/NodeTests.py +++ b/src/engine/SCons/Node/NodeTests.py @@ -47,10 +47,19 @@ class Builder: def get_contents(self, env, dir): return 7 +class NoneBuilder(Builder): + def execute(self, **kw): + apply(Builder.execute, (self,), kw) + return None + class FailBuilder: def execute(self, **kw): return 1 +class ExceptBuilder: + def execute(self, **kw): + raise SCons.Errors.BuildError + class Environment: def Dictionary(self, *args): pass @@ -72,9 +81,21 @@ class NodeTestCase(unittest.TestCase): else: raise TestFailed, "did not catch expected BuildError" + node = SCons.Node.Node() + node.builder_set(ExceptBuilder()) + node.env_set(Environment()) + try: + node.build() + except SCons.Errors.BuildError: + pass + else: + raise TestFailed, "did not catch expected BuildError" + def test_build(self): """Test building a node """ + global built_it + class MyNode(SCons.Node.Node): def __str__(self): return self.path @@ -94,6 +115,18 @@ class NodeTestCase(unittest.TestCase): assert str(built_target) == "xxx", str(built_target) assert built_source == ["yyy", "zzz"], built_source + built_it = None + node = MyNode() + node.builder_set(NoneBuilder()) + node.env_set(Environment()) + node.path = "qqq" + node.sources = ["rrr", "sss"] + node.build() + assert built_it + assert type(built_target) == type(MyNode()), type(built_target) + assert str(built_target) == "qqq", str(built_target) + assert built_source == ["rrr", "sss"], built_source + def test_builder_set(self): """Test setting a Node's Builder """ diff --git a/src/engine/SCons/Node/__init__.py b/src/engine/SCons/Node/__init__.py index b81f911..102b532 100644 --- a/src/engine/SCons/Node/__init__.py +++ b/src/engine/SCons/Node/__init__.py @@ -72,10 +72,13 @@ class Node: """Actually build the node. Return the status from the build.""" if not self.builder: return None - stat = self.builder.execute(env = self.env.Dictionary(), - target = self, source = self.sources) - if stat != 0: - raise BuildError(node = self, stat = stat) + try: + stat = self.builder.execute(env = self.env.Dictionary(), + target = self, source = self.sources) + except: + raise BuildError(node = self, errstr = "Exception") + if stat: + raise BuildError(node = self, errstr = "Error %d" % stat) # If we succesfully build a node, then we need to rescan for # implicit dependencies, since it might have changed on us. |