diff options
| author | Steven Knight <knight@baldmt.com> | 2002-03-20 16:45:30 (GMT) |
|---|---|---|
| committer | Steven Knight <knight@baldmt.com> | 2002-03-20 16:45:30 (GMT) |
| commit | a9272652019c6d0cad2f20737e210f820ec9394d (patch) | |
| tree | 6c66bb13fa20cbd1e46b837e2ab734039cb68b6e /src/engine/SCons/TaskmasterTests.py | |
| parent | 70d4bf67b7fefce28d76d451c959ba633720214e (diff) | |
| download | SCons-a9272652019c6d0cad2f20737e210f820ec9394d.zip SCons-a9272652019c6d0cad2f20737e210f820ec9394d.tar.gz SCons-a9272652019c6d0cad2f20737e210f820ec9394d.tar.bz2 | |
Fix subtle problems in end cases with using multiple scanners on a Node.
Diffstat (limited to 'src/engine/SCons/TaskmasterTests.py')
| -rw-r--r-- | src/engine/SCons/TaskmasterTests.py | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/src/engine/SCons/TaskmasterTests.py b/src/engine/SCons/TaskmasterTests.py index 32a1110..b6fa685 100644 --- a/src/engine/SCons/TaskmasterTests.py +++ b/src/engine/SCons/TaskmasterTests.py @@ -39,6 +39,8 @@ class Node: self.name = name self.kids = kids self.scans = scans + self.scanned = {} + self.src_scanners = {} self.builder = Node.build self.bsig = None self.csig = None @@ -55,16 +57,28 @@ class Node: def prepare(self): pass - def children(self): - return self.kids + def children(self, scanner): + if not self.scanned.get(scanner, None): + self.scan(scanner) + self.scanned[scanner] = 1 + return self.kids - def scan(self): + def scan(self, scanner): global scan_called scan_called = scan_called + 1 self.kids = self.kids + self.scans for scan in self.scans: scan.parents.append(self) self.scans = [] + + def src_scanner_set(self, key, scanner): + self.src_scanners[key] = scanner + + def src_scanner_get(self, key): + return self.src_scanners.get(key, None) + + def scanner_key(self): + return self.name def get_parents(self): return self.parents @@ -84,11 +98,11 @@ class Node: def store_sigs(self): pass - def children_are_executed(self): + def children_are_executed(self, scanner): return reduce(lambda x,y: ((y.get_state() == SCons.Node.executed or y.get_state() == SCons.Node.up_to_date) and x), - self.children(), + self.children(scanner), 1) def __str__(self): return self.name @@ -234,13 +248,16 @@ class TaskmasterTestCase(unittest.TestCase): n3 = Node("n3", [n1], [n2]) tm = SCons.Taskmaster.Taskmaster([n3]) t = tm.next_task() - assert t.get_target() == n1 + target = t.get_target() + assert target == n1, target t.executed() t = tm.next_task() - assert t.get_target() == n2 + target = t.get_target() + assert target == n2, target t.executed() t = tm.next_task() - assert t.get_target() == n3 + target = t.get_target() + assert target == n3, target t.executed() assert tm.next_task() == None @@ -345,13 +362,13 @@ class TaskmasterTestCase(unittest.TestCase): def test_add_ready(self): """Test adding a task to the ready queue""" class MyTask: - def __init__(self, tm, tlist, top): + def __init__(self, tm, tlist, top, scanner): pass def make_ready(self): pass n1 = Node("n1") tm = SCons.Taskmaster.Taskmaster([n1], tasker = MyTask) - task = MyTask(tm, [], 0) + task = MyTask(tm, [], 0, None) tm.add_ready(task) assert tm.ready == [ task ], tm.ready |
