summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons/Node/NodeTests.py
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2002-01-28 12:45:30 (GMT)
committerSteven Knight <knight@baldmt.com>2002-01-28 12:45:30 (GMT)
commitdc36fb89f35ecbaf2efa843946d20cf1d030f5b8 (patch)
tree490425ca39666e1449059812be3d2d0dd9c8a20a /src/engine/SCons/Node/NodeTests.py
parent2e90c9d1a397504e99d95d07df2a01224a77b3c7 (diff)
downloadSCons-dc36fb89f35ecbaf2efa843946d20cf1d030f5b8.zip
SCons-dc36fb89f35ecbaf2efa843946d20cf1d030f5b8.tar.gz
SCons-dc36fb89f35ecbaf2efa843946d20cf1d030f5b8.tar.bz2
Fix so Nodes don't get removed by ListBuilder after they're built.
Diffstat (limited to 'src/engine/SCons/Node/NodeTests.py')
-rw-r--r--src/engine/SCons/Node/NodeTests.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/engine/SCons/Node/NodeTests.py b/src/engine/SCons/Node/NodeTests.py
index bcaf1a0..9dc2105 100644
--- a/src/engine/SCons/Node/NodeTests.py
+++ b/src/engine/SCons/Node/NodeTests.py
@@ -52,6 +52,17 @@ class NoneBuilder(Builder):
apply(Builder.execute, (self,), kw)
return None
+class ListBuilder(Builder):
+ def __init__(self, *nodes):
+ self.nodes = nodes
+ def execute(self, **kw):
+ if hasattr(self, 'status'):
+ return self.status
+ for n in self.nodes:
+ n.remove()
+ kw['target'] = self.nodes[0]
+ self.status = apply(Builder.execute, (self,), kw)
+
class FailBuilder:
def execute(self, **kw):
return 1
@@ -117,8 +128,13 @@ class NodeTestCase(unittest.TestCase):
global built_it
class MyNode(SCons.Node.Node):
+ def __init__(self, **kw):
+ apply(SCons.Node.Node.__init__, (self,), kw)
+ self.remove_count = 0
def __str__(self):
return self.path
+ def remove(self):
+ self.remove_count= self.remove_count+ 1
# Make sure it doesn't blow up if no builder is set.
node = MyNode()
node.build()
@@ -147,6 +163,41 @@ class NodeTestCase(unittest.TestCase):
assert str(built_target) == "qqq", str(built_target)
assert built_source == ["rrr", "sss"], built_source
+ fff = MyNode()
+ ggg = MyNode()
+ lb = ListBuilder(fff, ggg)
+ e = Environment()
+ fff.builder_set(lb)
+ fff.env_set(e)
+ fff.path = "fff"
+ ggg.builder_set(lb)
+ ggg.env_set(e)
+ ggg.path = "ggg"
+ fff.sources = ["hhh", "iii"]
+ ggg.sources = ["hhh", "iii"]
+
+ built_it = None
+ fff.build()
+ assert built_it
+ ggg.build()
+ assert ggg.remove_count== 1, ggg.remove_count
+ assert type(built_target) == type(MyNode()), type(built_target)
+ assert str(built_target) == "fff", str(built_target)
+ assert built_source == ["hhh", "iii"], built_source
+
+ delattr(lb, 'status')
+ fff.remove_count = 0
+ ggg.remove_count = 0
+
+ built_it = None
+ ggg.build()
+ #assert built_it
+ fff.build()
+ assert fff.remove_count== 1, fff.remove_count
+ assert type(built_target) == type(MyNode()), type(built_target)
+ assert str(built_target) == "fff", str(built_target)
+ assert built_source == ["hhh", "iii"], built_source
+
def test_builder_set(self):
"""Test setting a Node's Builder
"""