diff options
Diffstat (limited to 'src/engine/SCons/BuilderTests.py')
-rw-r--r-- | src/engine/SCons/BuilderTests.py | 146 |
1 files changed, 103 insertions, 43 deletions
diff --git a/src/engine/SCons/BuilderTests.py b/src/engine/SCons/BuilderTests.py index 0527fe0..e30079c 100644 --- a/src/engine/SCons/BuilderTests.py +++ b/src/engine/SCons/BuilderTests.py @@ -82,6 +82,11 @@ class Environment: return self.d.get(s, s) def get_scanner(self, ext): return env_scanner + def Dictionary(self): + return {} + def autogenerate(self, dir=''): + return {} + env = Environment() class BuilderTestCase(unittest.TestCase): @@ -129,20 +134,23 @@ class BuilderTestCase(unittest.TestCase): assert target.sources[0].name == 'n10' assert target.sources[1].name == 'n11' - if hasattr(types, 'UnicodeType'): - code = """if 1: - targets = builder(env, target = u'n12 n13', source = [u'n14 n15']) - assert targets[0].name == u'n12' - assert targets[0].sources[0].name == u'n14 n15' - assert targets[1].name == u'n13' - assert targets[1].sources[0].name == u'n14 n15' - - target = builder(env, target = [u'n16 n17'], source = u'n18 n19') - assert target.name == u'n16 n17' - assert target.sources[0].name == u'n18' - assert target.sources[1].name == u'n19' - \n""" - exec code + if not hasattr(types, 'UnicodeType'): + uni = str + else: + uni = unicode + + targets = builder(env, target = uni('n12 n13'), + source = [uni('n14 n15')]) + assert targets[0].name == uni('n12') + assert targets[0].sources[0].name == uni('n14 n15') + assert targets[1].name == uni('n13') + assert targets[1].sources[0].name == uni('n14 n15') + + target = builder(env, target = [uni('n16 n17')], + source = uni('n18 n19')) + assert target.name == uni('n16 n17') + assert target.sources[0].name == uni('n18') + assert target.sources[1].name == uni('n19') def test_noname(self): """Test error reporting for missing name @@ -163,7 +171,7 @@ class BuilderTestCase(unittest.TestCase): Verify that we can retrieve the supplied action attribute. """ builder = SCons.Builder.Builder(name="builder", action="foo") - assert builder.action.command == "foo" + assert builder.action.cmd_list == ["foo"] def test_generator(self): """Test Builder creation given a generator function.""" @@ -276,7 +284,8 @@ class BuilderTestCase(unittest.TestCase): def my_show(string): global show_string show_string = show_string + string + "\n" - builder.action.show = my_show + for action in builder.action.list: + action.show = my_show r = builder.execute() assert r == 0 @@ -341,7 +350,7 @@ class BuilderTestCase(unittest.TestCase): def __init__(self, **kw): open(kw['out'], 'a').write("class2b\n") - builder = MyBuilder(action = [cmd2, function2, class2a(), class2b], name = "clist") + builder = MyBuilder(action = SCons.Action.ListAction([cmd2, function2, class2a(), class2b]), name = "clist") r = builder.execute(out = outfile) assert r.__class__ == class2b c = test.read(outfile, 'r') @@ -384,7 +393,7 @@ class BuilderTestCase(unittest.TestCase): contents = b2.get_contents() assert contents == "\177\036\000\177\037\000d\000\000S", repr(contents) - b3 = SCons.Builder.Builder(name = "b3", action = ["foo", Func, "bar"]) + b3 = SCons.Builder.Builder(name = "b3", action = SCons.Action.ListAction(["foo", Func, "bar"])) contents = b3.get_contents() assert contents == "foo\177\036\000\177\037\000d\000\000Sbar", repr(contents) @@ -430,9 +439,9 @@ class BuilderTestCase(unittest.TestCase): Make sure that there is no '.' separator appended. """ builder = SCons.Builder.Builder(name = "builder", prefix = 'lib.') - assert builder.prefix == 'lib.' + assert builder.get_prefix(env,{}) == 'lib.' builder = SCons.Builder.Builder(name = "builder", prefix = 'lib') - assert builder.prefix == 'lib' + assert builder.get_prefix(env,{}) == 'lib' tgt = builder(env, target = 'tgt1', source = 'src1') assert tgt.path == 'libtgt1', \ "Target has unexpected name: %s" % tgt.path @@ -451,7 +460,7 @@ class BuilderTestCase(unittest.TestCase): env = Environment(XSUFFIX = '.x', YSUFFIX = '.y') b1 = SCons.Builder.Builder(name = "builder", src_suffix = '.c') - assert b1.src_suffixes(env) == ['.c'], b1.src_suffixes(env) + assert b1.src_suffixes(env,{}) == ['.c'], b1.src_suffixes(env,{}) tgt = b1(env, target = 'tgt2', source = 'src2') assert tgt.sources[0].path == 'src2.c', \ @@ -466,19 +475,19 @@ class BuilderTestCase(unittest.TestCase): b2 = SCons.Builder.Builder(name = "b2", src_suffix = '.2', src_builder = b1) - assert b2.src_suffixes(env) == ['.2', '.c'], b2.src_suffixes(env) + assert b2.src_suffixes(env,{}) == ['.2', '.c'], b2.src_suffixes(env,{}) b3 = SCons.Builder.Builder(name = "b3", action = {'.3a' : '', '.3b' : ''}) - s = b3.src_suffixes(env) + s = b3.src_suffixes(env,{}) s.sort() assert s == ['.3a', '.3b'], s b4 = SCons.Builder.Builder(name = "b4", src_suffix = '$XSUFFIX') - assert b4.src_suffixes(env) == ['.x'], b4.src_suffixes(env) + assert b4.src_suffixes(env,{}) == ['.x'], b4.src_suffixes(env,{}) b5 = SCons.Builder.Builder(name = "b5", action = {'$YSUFFIX' : ''}) - assert b5.src_suffixes(env) == ['.y'], b5.src_suffixes(env) + assert b5.src_suffixes(env,{}) == ['.y'], b5.src_suffixes(env,{}) def test_suffix(self): """Test Builder creation with a specified target suffix @@ -487,9 +496,9 @@ class BuilderTestCase(unittest.TestCase): beginning if it isn't already present. """ builder = SCons.Builder.Builder(name = "builder", suffix = '.o') - assert builder.suffix == '.o' + assert builder.get_suffix(env,{}) == '.o', builder.get_suffix(env,{}) builder = SCons.Builder.Builder(name = "builder", suffix = 'o') - assert builder.suffix == '.o' + assert builder.get_suffix(env,{}) == '.o', builder.get_suffix(env,{}) tgt = builder(env, target = 'tgt3', source = 'src3') assert tgt.path == 'tgt3.o', \ "Target has unexpected name: %s" % tgt[0].path @@ -575,20 +584,24 @@ class BuilderTestCase(unittest.TestCase): def test_CompositeBuilder(self): """Testing CompositeBuilder class.""" + def func_action(target, source, env): + return 0 + builder = SCons.Builder.Builder(name = "builder", - action={ '.foo' : 'foo', - '.bar' : 'bar' }) + action={ '.foo' : func_action, + '.bar' : func_action }) - assert isinstance(builder, SCons.Builder.CompositeBuilder) + assert isinstance(builder, SCons.Builder.BuilderBase) + assert isinstance(builder.action, SCons.Action.CommandGeneratorAction) tgt = builder(env, target='test1', source='test1.foo') assert isinstance(tgt.builder, SCons.Builder.BuilderBase) - assert tgt.builder.action.command == 'foo' - tgt = builder(env, target='test2', source='test2.bar') - assert tgt.builder.action.command == 'bar' + assert isinstance(tgt.builder.action.generator, SCons.Builder.DictCmdGenerator) flag = 0 + tgt = builder(env, target='test2', source='test2.bar test1.foo') try: - tgt = builder(env, target='test2', source='test2.bar test1.foo') - except SCons.Errors.UserError: + tgt.build() + except SCons.Errors.BuildError, e: + assert e.args[0] == SCons.Errors.UserError flag = 1 assert flag, "UserError should be thrown when we build targets with files of different suffixes." @@ -601,7 +614,8 @@ class BuilderTestCase(unittest.TestCase): action = { '.foo' : 'foo', '.bar' : 'bar' }, src_builder = foo_bld) - assert isinstance(builder, SCons.Builder.CompositeBuilder) + assert isinstance(builder, SCons.Builder.MultiStepBuilder) + assert isinstance(builder.action, SCons.Action.CommandGeneratorAction) tgt = builder(env, target='t1', source='t1a.ina t1b.ina') assert isinstance(tgt.builder, SCons.Builder.BuilderBase) @@ -618,7 +632,8 @@ class BuilderTestCase(unittest.TestCase): action = { '.foo' : 'foo', '.bar' : 'bar' }, src_builder = [foo_bld, bar_bld]) - assert isinstance(builder, SCons.Builder.CompositeBuilder) + assert isinstance(builder, SCons.Builder.MultiStepBuilder) + assert isinstance(builder.action, SCons.Action.CommandGeneratorAction) tgt = builder(env, target='t3-foo', source='t3a.foo t3b.ina') assert isinstance(tgt.builder, SCons.Builder.MultiStepBuilder) @@ -627,26 +642,33 @@ class BuilderTestCase(unittest.TestCase): assert isinstance(tgt.builder, SCons.Builder.MultiStepBuilder) flag = 0 + tgt = builder(env, target='t5', source='test5a.foo test5b.inb') try: - tgt = builder(env, target='t5', source='test5a.foo test5b.inb') - except SCons.Errors.UserError: + tgt.build() + except SCons.Errors.BuildError, e: + assert e.args[0] == SCons.Errors.UserError flag = 1 assert flag, "UserError should be thrown when we build targets with files of different suffixes." flag = 0 + tgt = builder(env, target='t6', source='test6a.bar test6b.ina') try: - tgt = builder(env, target='t6', source='test6a.bar test6b.ina') - except SCons.Errors.UserError: + tgt.build() + except SCons.Errors.BuildError, e: + assert e.args[0] == SCons.Errors.UserError flag = 1 assert flag, "UserError should be thrown when we build targets with files of different suffixes." flag = 0 + tgt = builder(env, target='t4', source='test4a.ina test4b.inb') try: - tgt = builder(env, target='t4', source='test4a.ina test4b.inb') - except SCons.Errors.UserError: + tgt.build() + except SCons.Errors.BuildError, e: + assert e.args[0] == SCons.Errors.UserError flag = 1 assert flag, "UserError should be thrown when we build targets with files of different suffixes." + def test_build_scanner(self): """Testing ability to set a target scanner through a builder.""" global instanced @@ -683,6 +705,44 @@ class BuilderTestCase(unittest.TestCase): assert tgt.target_scanner != env_scanner, tgt.target_scanner assert src.source_scanner == env_scanner + def test_Builder_Args(self): + """Testing passing extra agrs to a builder.""" + def buildFunc(target, source, env, foo, bar, s=self): + s.foo=foo + s.bar=bar + + builder = SCons.Builder.Builder(name="builder", action=buildFunc) + tgt = builder(env, target='foo', source='bar', foo=1, bar=2) + tgt.build() + assert self.foo == 1, self.foo + assert self.bar == 2, self.bar + + def test_emitter(self): + """Test emitter functions.""" + def emit(target, source, env, foo=0, bar=0): + if foo: + target.append("bar") + if bar: + source.append("foo") + return ( target, source ) + + builder = SCons.Builder.Builder(name="builder", action='foo', + emitter=emit) + tgt = builder(env, target='foo', source='bar') + assert str(tgt) == 'foo', str(tgt) + assert str(tgt.sources[0]) == 'bar', str(tgt.sources[0]) + + tgt = builder(env, target='foo', source='bar', foo=1) + assert len(tgt) == 2, len(tgt) + assert 'foo' in map(str, tgt), map(str, tgt) + assert 'bar' in map(str, tgt), map(str, tgt) + + tgt = builder(env, target='foo', source='bar', bar=1) + assert str(tgt) == 'foo', str(tgt) + assert len(tgt.sources) == 2, len(tgt.sources) + assert 'foo' in map(str, tgt.sources), map(str, tgt.sources) + assert 'bar' in map(str, tgt.sources), map(str, tgt.sources) + if __name__ == "__main__": suite = unittest.makeSuite(BuilderTestCase, 'test_') if not unittest.TextTestRunner().run(suite).wasSuccessful(): |