summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons/Node/FSTests.py
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2004-06-25 04:10:24 (GMT)
committerSteven Knight <knight@baldmt.com>2004-06-25 04:10:24 (GMT)
commitc2bb425dcb2907f50a485469b69e83884fed6fb4 (patch)
treeeec003c4e6e332651cf70c8896612b17b7acb290 /src/engine/SCons/Node/FSTests.py
parent5f1ca10deda557947d8669098fdce1852b38b81f (diff)
downloadSCons-c2bb425dcb2907f50a485469b69e83884fed6fb4.zip
SCons-c2bb425dcb2907f50a485469b69e83884fed6fb4.tar.gz
SCons-c2bb425dcb2907f50a485469b69e83884fed6fb4.tar.bz2
Officially support target_factory and source_factory when creating a Builder.
Diffstat (limited to 'src/engine/SCons/Node/FSTests.py')
-rw-r--r--src/engine/SCons/Node/FSTests.py82
1 files changed, 43 insertions, 39 deletions
diff --git a/src/engine/SCons/Node/FSTests.py b/src/engine/SCons/Node/FSTests.py
index d4137c1..bbc64ef 100644
--- a/src/engine/SCons/Node/FSTests.py
+++ b/src/engine/SCons/Node/FSTests.py
@@ -281,8 +281,33 @@ class BuildDirTestCase(unittest.TestCase):
f8.rfile().path
# Verify the Mkdir and Link actions are called
+ d9 = fs.Dir('build/var2/new_dir')
f9 = fs.File('build/var2/new_dir/test9.out')
+ class MkdirAction(Action):
+ def __init__(self, dir_made):
+ self.dir_made = dir_made
+ def __call__(self, target, source, env, errfunc):
+ self.dir_made.extend(target)
+
+ save_Link = SCons.Node.FS.Link
+ link_made = []
+ def link_func(target, source, env, link_made=link_made):
+ link_made.append(target)
+ SCons.Node.FS.Link = link_func
+
+ try:
+ dir_made = []
+ d9.builder = Builder(fs.Dir, action=MkdirAction(dir_made))
+ f9.exists()
+ expect = os.path.join('build', 'var2', 'new_dir')
+ assert dir_made[0].path == expect, dir_made[0].path
+ expect = os.path.join('build', 'var2', 'new_dir', 'test9.out')
+ assert link_made[0].path == expect, link_made[0].path
+ assert f9.linked
+ finally:
+ SCons.Node.FS.Link = save_Link
+
# Test for an interesting pathological case...we have a source
# file in a build path, but not in a source path. This can
# happen if you switch from duplicate=1 to duplicate=0, then
@@ -312,29 +337,6 @@ class BuildDirTestCase(unittest.TestCase):
var2_new_dir = os.path.normpath('build/var2/new_dir')
assert bdt == [var1_new_dir, var2_new_dir], bdt
- save_Mkdir = SCons.Node.FS.Mkdir
- dir_made = []
- def mkdir_func(target, source, env, dir_made=dir_made):
- dir_made.append(target)
- SCons.Node.FS.Mkdir = mkdir_func
-
- save_Link = SCons.Node.FS.Link
- link_made = []
- def link_func(target, source, env, link_made=link_made):
- link_made.append(target)
- SCons.Node.FS.Link = link_func
-
- try:
- f9.exists()
- expect = os.path.join('build', 'var2', 'new_dir')
- assert dir_made[0].path == expect, dir_made[0].path
- expect = os.path.join('build', 'var2', 'new_dir', 'test9.out')
- assert link_made[0].path == expect, link_made[0].path
- assert f9.linked
- finally:
- SCons.Node.FS.Mkdir = save_Mkdir
- SCons.Node.FS.Link = save_Link
-
# Test that an IOError trying to Link a src file
# into a BuildDir ends up throwing a StopError.
fIO = fs.File("build/var2/IOError")
@@ -754,7 +756,7 @@ class FSTestCase(unittest.TestCase):
d1.builder_set(Builder(fs.File))
d1.env_set(Environment())
d1.build()
- assert not built_it
+ assert built_it
built_it = None
assert not built_it
@@ -1497,22 +1499,24 @@ class prepareTestCase(unittest.TestCase):
exc_caught = 1
assert exc_caught, "Should have caught a StopError."
- save_Mkdir = SCons.Node.FS.Mkdir
- dir_made = []
- def mkdir_func(target, source, env, dir_made=dir_made):
- dir_made.append(target)
- SCons.Node.FS.Mkdir = mkdir_func
+ class MkdirAction(Action):
+ def __init__(self, dir_made):
+ self.dir_made = dir_made
+ def __call__(self, target, source, env, errfunc):
+ self.dir_made.extend(target)
- file = fs.File(os.path.join("new_dir", "xyz"))
- try:
- file.set_state(SCons.Node.up_to_date)
- file.prepare()
- assert dir_made == [], dir_made
- file.set_state(0)
- file.prepare()
- assert dir_made[0].path == "new_dir", dir_made[0].path
- finally:
- SCons.Node.FS.Mkdir = save_Mkdir
+ dir_made = []
+ new_dir = fs.Dir("new_dir")
+ new_dir.builder = Builder(fs.Dir, action=MkdirAction(dir_made))
+ xyz = fs.File(os.path.join("new_dir", "xyz"))
+
+ xyz.set_state(SCons.Node.up_to_date)
+ xyz.prepare()
+ assert dir_made == [], dir_made
+ xyz.set_state(0)
+ xyz.prepare()
+ print "dir_made[0] =", dir_made[0]
+ assert dir_made[0].path == "new_dir", dir_made[0]
dir = fs.Dir("dir")
dir.prepare()