From 752502105f63c91ee1f87cc35b83634c6bc42c3b Mon Sep 17 00:00:00 2001 From: Steven Knight Date: Mon, 30 Sep 2002 16:53:47 +0000 Subject: Add output to tell people when we're reading SConscript files versus when we're building targets. --- etc/TestSCons.py | 45 ++++++++++++++++++++++------------- src/CHANGES.txt | 4 ++++ src/engine/SCons/Script/SConscript.py | 11 ++++----- src/engine/SCons/Script/__init__.py | 32 ++++++++++++++++++------- test/Alias.py | 10 ++++---- test/FindFile.py | 5 ++-- test/Help.py | 8 ++++++- test/Options.py | 12 ++++++---- test/Platform.py | 5 ++-- test/SCONSFLAGS.py | 7 +++++- test/SConscript.py | 3 ++- test/SConstruct.py | 12 +++++++--- test/Scanner.py | 3 ++- test/SetBuildSignatureType.py | 15 ++++++++---- test/SideEffect.py | 16 ++++++------- test/Split.py | 5 ++-- test/WhereIs.py | 10 ++++---- test/build-errors.py | 6 ++--- test/chained-build.py | 24 ++++++++++++------- test/errors.py | 6 ++--- test/exitfns.py | 4 ++-- test/option--.py | 2 +- test/option--C.py | 15 ++++++++---- test/option--I.py | 6 +++-- test/option--max-drift.py | 20 +++++++++------- test/option-c.py | 20 +++++++++------- test/option-f.py | 32 +++++++++++++++---------- test/option-n.py | 4 ++-- test/option-s.py | 6 ++--- test/preserve-source.py | 2 +- test/scan-once.py | 20 +++++++++------- test/sconsign.py | 3 +-- test/timestamp-fallback.py | 12 ++++------ test/up-to-date.py | 4 ++-- 34 files changed, 237 insertions(+), 152 deletions(-) diff --git a/etc/TestSCons.py b/etc/TestSCons.py index 1caef4f..5d4d4a0 100644 --- a/etc/TestSCons.py +++ b/etc/TestSCons.py @@ -133,15 +133,15 @@ class TestSCons(TestCmd.TestCmd): print self.stderr() raise TestFailed if not stdout is None and not self.match(self.stdout(), stdout): - print "Expected STDOUT ==========" - print stdout - print "Actual STDOUT ============" - print self.stdout() - stderr = self.stderr() - if stderr: - print "STDERR ===================" - print stderr - raise TestFailed + print "Expected STDOUT ==========" + print stdout + print "Actual STDOUT ============" + print self.stdout() + stderr = self.stderr() + if stderr: + print "STDERR ===================" + print stderr + raise TestFailed if not stderr is None and not self.match(self.stderr(), stderr): print "STDOUT ===================" print self.stdout() @@ -151,12 +151,23 @@ class TestSCons(TestCmd.TestCmd): print self.stderr() raise TestFailed + def wrap_stdout(self, build_str = "", read_str = ""): + """Wraps standard output string(s) in the normal + "Reading ... done" and "Building ... done" strings + """ + return "scons: Reading SConscript files ...\n" + \ + read_str + \ + "scons: done reading SConscript files.\n" + \ + "scons: Building targets ...\n" + \ + build_str + \ + "scons: done building targets.\n" + def up_to_date(self, options = None, arguments = None, **kw): - s = "" - for arg in string.split(arguments): - s = s + 'scons: "%s" is up to date.\n' % arg - if options: - arguments = options + " " + arguments - kw['arguments'] = arguments - kw['stdout'] = s - apply(self.run, [], kw) + s = "" + for arg in string.split(arguments): + s = s + 'scons: "%s" is up to date.\n' % arg + if options: + arguments = options + " " + arguments + kw['arguments'] = arguments + kw['stdout'] = self.wrap_stdout(build_str = s) + apply(self.run, [], kw) diff --git a/src/CHANGES.txt b/src/CHANGES.txt index 86737fc..3ad1fc7 100644 --- a/src/CHANGES.txt +++ b/src/CHANGES.txt @@ -41,6 +41,10 @@ RELEASE 0.09 - existence of a file before scanning it. (This adds a generic hook to check an arbitrary condition before scanning.) + - Add explicit messages to tell when we're "Reading SConscript files + ...," "done reading SConscript files," "Building targets," and + "done building targets." + From Jeff Petkau: - Fix interpretation of '#/../foo' on Win32 systems. diff --git a/src/engine/SCons/Script/SConscript.py b/src/engine/SCons/Script/SConscript.py index a8ce5d7..9ecd3d7 100644 --- a/src/engine/SCons/Script/SConscript.py +++ b/src/engine/SCons/Script/SConscript.py @@ -1,4 +1,4 @@ -"""engine.SCons.SConscript +"""SCons.Script.SConscript This module defines the Python API provided to SConscript and SConstruct files. @@ -47,8 +47,10 @@ import os.path import string import sys +def do_nothing(text): pass +HelpFunction = do_nothing + default_targets = [] -print_help = 0 arguments = {} launch_dir = os.path.abspath(os.curdir) @@ -216,10 +218,7 @@ def Local(*targets): t.set_local() def Help(text): - if print_help: - print text - print "Use scons -H for help about command-line options." - sys.exit(0) + HelpFunction(text) def BuildDir(build_dir, src_dir, duplicate=1): SCons.Node.FS.default_fs.BuildDir(build_dir, src_dir, duplicate) diff --git a/src/engine/SCons/Script/__init__.py b/src/engine/SCons/Script/__init__.py index f0ac039..9fd1327 100644 --- a/src/engine/SCons/Script/__init__.py +++ b/src/engine/SCons/Script/__init__.py @@ -1,4 +1,4 @@ -"""engine.SCons.script +"""SCons.Script This file implements the main() function used by the scons script. @@ -179,6 +179,9 @@ profiling = 0 max_drift = None repositories = [] +# Exceptions for this module +class PrintHelp(Exception): + pass # utility functions @@ -503,9 +506,11 @@ def options_init(): help = "Read FILE as the top-level SConstruct file.") def opt_help(opt, arg): - global help_option + global help_option help_option = 'h' - SCons.Script.SConscript.print_help = 1 + def raisePrintHelp(text): + raise PrintHelp, text + SCons.Script.SConscript.HelpFunction = raisePrintHelp Option(func = opt_help, short = 'h', long = ['help'], @@ -939,11 +944,20 @@ def _main(): for rep in repositories: SCons.Node.FS.default_fs.Repository(rep) - start_time = time.time() - for script in scripts: - SCons.Script.SConscript.SConscript(script) - global sconscript_time - sconscript_time = time.time() - start_time + print "scons: Reading SConscript files ..." + try: + start_time = time.time() + for script in scripts: + SCons.Script.SConscript.SConscript(script) + global sconscript_time + sconscript_time = time.time() - start_time + except PrintHelp, text: + print "scons: done reading SConscript files." + print text + print "Use scons -H for help about command-line options." + sys.exit(0) + + print "scons: done reading SConscript files." SCons.Node.FS.default_fs.chdir(SCons.Node.FS.default_fs.Top) @@ -1011,6 +1025,7 @@ def _main(): calc = SCons.Sig.default_calc + print "scons: Building targets ..." taskmaster = SCons.Taskmaster.Taskmaster(nodes, task_class, calc) jobs = SCons.Job.Jobs(num_jobs, taskmaster) @@ -1018,6 +1033,7 @@ def _main(): try: jobs.run() finally: + print "scons: done building targets." SCons.Sig.write() def main(): diff --git a/test/Alias.py b/test/Alias.py index ca9075f..9758693 100644 --- a/test/Alias.py +++ b/test/Alias.py @@ -120,9 +120,8 @@ test.fail_test(not os.path.exists(test.workpath('f3.out'))) test.write('f3.in', "f3.in 2 \n") -test.run(arguments = 'f1.out', stdout=""".* build.py f3.out f3.in -.* build.py f1.out f1.in -""") +test.run(arguments = 'f1.out', + stdout = test.wrap_stdout(".* build.py f3.out f3.in\n.* build.py f1.out f1.in\n")) test.up_to_date(arguments = 'f1.out') @@ -151,9 +150,8 @@ test.fail_test(not os.path.exists(test.workpath('f1.out'))) test.write('f3.in', "f3.in 3 \n") -test.run(arguments = 'f1.out', stdout=""".* build.py f3.out f3.in -.* build.py f1.out f1.in -""") +test.run(arguments = 'f1.out', + stdout = test.wrap_stdout('.* build.py f3.out f3.in\n.* build.py f1.out f1.in\n')) test.up_to_date(arguments = 'f1.out') diff --git a/test/FindFile.py b/test/FindFile.py index 6123c5a..2d680f8 100644 --- a/test/FindFile.py +++ b/test/FindFile.py @@ -48,7 +48,7 @@ file4 = FindFile('testfile2', [ 'bar/baz', 'foo', '.', 'bar' ]) print open(str(file4), 'r').read() """) -expect = """test 1 +expect = test.wrap_stdout(read_str = """test 1 test 3 @@ -56,8 +56,7 @@ test 2 test 4 -scons: "." is up to date. -""" +""", build_str = 'scons: "." is up to date.\n') test.run(arguments = ".", stdout = expect) diff --git a/test/Help.py b/test/Help.py index 03ca2a9..93ec491 100644 --- a/test/Help.py +++ b/test/Help.py @@ -34,7 +34,13 @@ test.write('SConstruct', r""" Help("Help text\ngoes here.\n") """) -expect = "Help text\ngoes here.\n\nUse scons -H for help about command-line options.\n" +expect = """scons: Reading SConscript files ... +scons: done reading SConscript files. +Help text +goes here. + +Use scons -H for help about command-line options. +""" test.run(arguments = '-h', stdout = expect) diff --git a/test/Options.py b/test/Options.py index 2b2d5a2..b431d88 100644 --- a/test/Options.py +++ b/test/Options.py @@ -36,7 +36,7 @@ print env['CCFLAGS'] Default(env.Alias('dummy')) """) test.run() -cc, ccflags = string.split(test.stdout(), '\n')[:2] +cc, ccflags = string.split(test.stdout(), '\n')[1:3] test.write('SConstruct', """ opts = Options('custom.py') @@ -77,7 +77,7 @@ Default(env.Alias('dummy')) def check(expect): result = string.split(test.stdout(), '\n') - assert result[0:len(expect)] == expect, (result[0:len(expect)], expect) + assert result[1:len(expect)+1] == expect, (result[1:len(expect)+1], expect) test.run() check(['0', '1', cc, ccflags + ' -g']) @@ -102,8 +102,10 @@ check(['1', '0', cc, ccflags + ' -O']) test.run(arguments='"DEBUG_BUILD=1"') check(['1', '1', cc, ccflags + ' -O -g']) -test.run(arguments='-h') -assert test.stdout() == """Variables settable in custom.py or on the command line: +test.run(arguments='-h', + stdout = """scons: Reading SConscript files ... +scons: done reading SConscript files. +Variables settable in custom.py or on the command line: RELEASE_BUILD: Set to 1 to build a release build default: 0 @@ -118,6 +120,6 @@ CC: The C compiler actual: %s Use scons -H for help about command-line options. -"""%cc +"""%cc) test.pass_test() diff --git a/test/Platform.py b/test/Platform.py index c2a113a..34f1b52 100644 --- a/test/Platform.py +++ b/test/Platform.py @@ -53,7 +53,7 @@ Platform('win32')(env) print "'%s'" % env['LIBSUFFIX'] """) -expect = """'.exe' +expect = test.wrap_stdout(read_str = """'.exe' '.exe' '' '.exe' @@ -61,8 +61,7 @@ expect = """'.exe' '.lib' '.a' '.lib' -scons: "." is up to date. -""" +""", build_str = 'scons: "." is up to date.\n') test.run(arguments = ".", stdout = expect) diff --git a/test/SCONSFLAGS.py b/test/SCONSFLAGS.py index 86f4246..f8d757a 100644 --- a/test/SCONSFLAGS.py +++ b/test/SCONSFLAGS.py @@ -37,7 +37,12 @@ test.write('SConstruct', r""" Help("Help text.\n") """) -expect = "Help text.\n\nUse scons -H for help about command-line options.\n" +expect = """scons: Reading SConscript files ... +scons: done reading SConscript files. +Help text. + +Use scons -H for help about command-line options. +""" os.environ['SCONSFLAGS'] = '' diff --git a/test/SConscript.py b/test/SConscript.py index 6f87a9a..083dbe5 100644 --- a/test/SConscript.py +++ b/test/SConscript.py @@ -209,7 +209,8 @@ Return("result") wpath = test.workpath() test.run(arguments = ".", - stdout = 'SConstruct %s\nSConscript %s\nscons: "." is up to date.\n' % (wpath, wpath)) + stdout = test.wrap_stdout(read_str = 'SConstruct %s\nSConscript %s\n' % (wpath, wpath), + build_str = 'scons: "." is up to date.\n')) test.pass_test() diff --git a/test/SConstruct.py b/test/SConstruct.py index bf35edc..48f2642 100644 --- a/test/SConstruct.py +++ b/test/SConstruct.py @@ -46,7 +46,9 @@ import os print "sconstruct", os.getcwd() """) -test.run(arguments = ".", stdout = 'sconstruct %s\nscons: "." is up to date.\n' % wpath) +test.run(arguments = ".", + stdout = test.wrap_stdout(read_str = 'sconstruct %s\n' % wpath, + build_str = 'scons: "." is up to date.\n')) test.write('Sconstruct', """ @@ -54,13 +56,17 @@ import os print "Sconstruct", os.getcwd() """) -test.run(arguments = ".", stdout = 'Sconstruct %s\nscons: "." is up to date.\n' % wpath) +test.run(arguments = ".", + stdout = test.wrap_stdout(read_str = 'Sconstruct %s\n' % wpath, + build_str = 'scons: "." is up to date.\n')) test.write('SConstruct', """ import os print "SConstruct", os.getcwd() """) -test.run(arguments = ".", stdout = 'SConstruct %s\nscons: "." is up to date.\n' % wpath) +test.run(arguments = ".", + stdout = test.wrap_stdout(read_str = 'SConstruct %s\n' % wpath, + build_str = 'scons: "." is up to date.\n')) test.pass_test() diff --git a/test/Scanner.py b/test/Scanner.py index dbaa8b5..9608899 100644 --- a/test/Scanner.py +++ b/test/Scanner.py @@ -132,6 +132,7 @@ test.fail_test(test.read('foo') != "foo.k 1 line 1\nxxx 2\nyyy 2\nfoo.k 1 line 4 test.fail_test(test.read('bar') != "yyy 2\nbar.in 1 line 2\nbar.in 1 line 3\nzzz 2\n") -test.run(arguments = 'foo', stdout='scons: "foo" is up to date.\n') +test.run(arguments = 'foo', + stdout=test.wrap_stdout('scons: "foo" is up to date.\n')) test.pass_test() diff --git a/test/SetBuildSignatureType.py b/test/SetBuildSignatureType.py index 39534dd..b9dd080 100644 --- a/test/SetBuildSignatureType.py +++ b/test/SetBuildSignatureType.py @@ -49,9 +49,11 @@ SetBuildSignatureType('content') test.write('foo.in', 'foo.in') -test.run(arguments='foo.out.out', stdout='copy foo.in -> foo.out\ncopy foo.out -> foo.out.out\n') +test.run(arguments='foo.out.out', + stdout=test.wrap_stdout('copy foo.in -> foo.out\ncopy foo.out -> foo.out.out\n')) -test.run(arguments='foo.out.out', stdout='scons: "foo.out.out" is up to date.\n') +test.run(arguments='foo.out.out', + stdout=test.wrap_stdout('scons: "foo.out.out" is up to date.\n')) test.write('SConstruct', """ env = Environment() @@ -73,7 +75,8 @@ env.Copy1('foo.out.out', 'foo.out') SetBuildSignatureType('content') """) -test.run(arguments='foo.out.out', stdout='copy foo.in -> foo.out\nscons: "foo.out.out" is up to date.\n') +test.run(arguments='foo.out.out', + stdout=test.wrap_stdout('copy foo.in -> foo.out\nscons: "foo.out.out" is up to date.\n')) test.write('SConstruct', """ env = Environment() @@ -95,7 +98,8 @@ env.Copy1('foo.out.out', 'foo.out') SetBuildSignatureType('build') """) -test.run(arguments='foo.out.out', stdout='copy foo.out -> foo.out.out\n') +test.run(arguments='foo.out.out', + stdout=test.wrap_stdout('copy foo.out -> foo.out.out\n')) test.write('SConstruct', """ env = Environment() @@ -116,7 +120,8 @@ env.Copy1('foo.out.out', 'foo.out') SetBuildSignatureType('build') """) -test.run(arguments='foo.out.out', stdout='copy foo.in -> foo.out\ncopy foo.out -> foo.out.out\n') +test.run(arguments='foo.out.out', + stdout=test.wrap_stdout('copy foo.in -> foo.out\ncopy foo.out -> foo.out.out\n')) test.pass_test() diff --git a/test/SideEffect.py b/test/SideEffect.py index 7d37947..6e37420 100644 --- a/test/SideEffect.py +++ b/test/SideEffect.py @@ -54,10 +54,10 @@ test.write('foo.in', 'foo.in\n') test.write('bar.in', 'bar.in\n') test.write('blat.in', 'blat.in\n') -test.run(arguments = 'foo.out bar.out', stdout="""\ +test.run(arguments = 'foo.out bar.out', stdout=test.wrap_stdout("""\ copy() < foo.in > foo.out copy() < bar.in > bar.out -""") +""")) expect = """\ foo.in -> foo.out @@ -67,10 +67,10 @@ assert test.read('log.txt') == expect test.write('bar.in', 'bar.in 2 \n') -test.run(arguments = 'log.txt', stdout="""\ +test.run(arguments = 'log.txt', stdout=test.wrap_stdout("""\ copy() < bar.in > bar.out copy() < blat.in > blat.out -""") +""")) expect = """\ foo.in -> foo.out @@ -82,10 +82,10 @@ assert test.read('log.txt') == expect test.write('foo.in', 'foo.in 2 \n') -test.run(arguments = ".", stdout="""\ +test.run(arguments = ".", stdout=test.wrap_stdout("""\ copy() < foo.in > foo.out copy() < log.txt > log.out -""") +""")) expect = """\ foo.in -> foo.out @@ -103,12 +103,12 @@ test.fail_test(os.path.exists(test.workpath('bar.out'))) test.fail_test(os.path.exists(test.workpath('blat.out'))) test.fail_test(os.path.exists(test.workpath('log.txt'))) -test.run(arguments = "-j 4 .", stdout="""\ +test.run(arguments = "-j 4 .", stdout=test.wrap_stdout("""\ copy() < bar.in > bar.out copy() < blat.in > blat.out copy() < foo.in > foo.out copy() < log.txt > log.out -""") +""")) expect = """\ bar.in -> bar.out diff --git a/test/Split.py b/test/Split.py index 5207d8d..8fce0df 100644 --- a/test/Split.py +++ b/test/Split.py @@ -47,9 +47,10 @@ expect = """['aaa'] ['fff'] ['ggg', 'hhh'] ['iii', 'jjj'] -scons: "." is up to date. """ -test.run(arguments = ".", stdout = expect) +test.run(arguments = ".", + stdout = test.wrap_stdout(read_str = expect, + build_str = 'scons: "." is up to date.\n')) test.pass_test() diff --git a/test/WhereIs.py b/test/WhereIs.py index f8c7b94..f052909 100644 --- a/test/WhereIs.py +++ b/test/WhereIs.py @@ -103,10 +103,11 @@ expect = [ test.workpath(sub3_xxx_exe), test.workpath(sub4_xxx_exe), test.workpath(sub3_xxx_exe), test.workpath(sub4_xxx_exe), - 'scons: "." is up to date.', ] -test.run(arguments = ".", stdout = string.join(expect, "\n") + "\n") +test.run(arguments = ".", + stdout = test.wrap_stdout(read_str = string.join(expect, "\n") + "\n", + build_str = 'scons: "." is up to date.\n')) os.environ['PATH'] = string.join(pathdirs_1243, os.pathsep) @@ -120,9 +121,10 @@ expect = [ test.workpath(sub4_xxx_exe), test.workpath(sub4_xxx_exe), test.workpath(sub3_xxx_exe), test.workpath(sub4_xxx_exe), - 'scons: "." is up to date.', ] -test.run(arguments = ".", stdout = string.join(expect, "\n") + "\n") +test.run(arguments = ".", + stdout = test.wrap_stdout(read_str = string.join(expect, "\n") + "\n", + build_str = 'scons: "." is up to date.\n')) test.pass_test() diff --git a/test/build-errors.py b/test/build-errors.py index 956842e..94f8820 100644 --- a/test/build-errors.py +++ b/test/build-errors.py @@ -47,7 +47,7 @@ env.bld(target = 'f1', source = 'f1.in') """ % string.replace(no_such_file, '\\', '\\\\')) test.run(arguments='-f SConstruct1 .', - stdout = "%s f1.in f1\n" % no_such_file, + stdout = test.wrap_stdout("%s f1.in f1\n" % no_such_file), stderr = None, status = 2) @@ -84,7 +84,7 @@ env.bld(target = 'f2', source = 'f2.in') """ % string.replace(not_executable, '\\', '\\\\')) test.run(arguments='-f SConstruct2 .', - stdout = "%s f2.in f2\n" % not_executable, + stdout = test.wrap_stdout("%s f2.in f2\n" % not_executable), stderr = None, status = 2) @@ -108,7 +108,7 @@ env.bld(target = 'f3', source = 'f3.in') """ % string.replace(test.workdir, '\\', '\\\\')) test.run(arguments='-f SConstruct3 .', - stdout = "%s f3.in f3\n" % test.workdir, + stdout = test.wrap_stdout("%s f3.in f3\n" % test.workdir), stderr = None, status = 2) diff --git a/test/chained-build.py b/test/chained-build.py index 1a7daf9..94277fd 100644 --- a/test/chained-build.py +++ b/test/chained-build.py @@ -48,18 +48,26 @@ env.B('foo.out', 'foo.mid') test.write('foo.in', "foo.in") -test.run(arguments="--max-drift=0 -f SConstruct1 foo.mid", stdout='built foo.mid\n') -test.run(arguments="--max-drift=0 -f SConstruct2 foo.out", stdout='built foo.out\n') +test.run(arguments="--max-drift=0 -f SConstruct1 foo.mid", + stdout = test.wrap_stdout('built foo.mid\n')) +test.run(arguments="--max-drift=0 -f SConstruct2 foo.out", + stdout = test.wrap_stdout('built foo.out\n')) -test.run(arguments="--max-drift=0 -f SConstruct1 foo.mid", stdout='scons: "foo.mid" is up to date.\n') -test.run(arguments="--max-drift=0 -f SConstruct2 foo.out", stdout='scons: "foo.out" is up to date.\n') +test.run(arguments="--max-drift=0 -f SConstruct1 foo.mid", + stdout = test.wrap_stdout('scons: "foo.mid" is up to date.\n')) +test.run(arguments="--max-drift=0 -f SConstruct2 foo.out", + stdout = test.wrap_stdout('scons: "foo.out" is up to date.\n')) test.write('foo.in', "foo.in 2") -test.run(arguments="--max-drift=0 -f SConstruct1 foo.mid", stdout='built foo.mid\n') -test.run(arguments="--max-drift=0 -f SConstruct2 foo.out", stdout='built foo.out\n') +test.run(arguments="--max-drift=0 -f SConstruct1 foo.mid", + stdout = test.wrap_stdout('built foo.mid\n')) +test.run(arguments="--max-drift=0 -f SConstruct2 foo.out", + stdout = test.wrap_stdout('built foo.out\n')) -test.run(arguments="--max-drift=0 -f SConstruct1 foo.mid", stdout='scons: "foo.mid" is up to date.\n') -test.run(arguments="--max-drift=0 -f SConstruct2 foo.out", stdout='scons: "foo.out" is up to date.\n') +test.run(arguments="--max-drift=0 -f SConstruct1 foo.mid", + stdout = test.wrap_stdout('scons: "foo.mid" is up to date.\n')) +test.run(arguments="--max-drift=0 -f SConstruct2 foo.out", + stdout = test.wrap_stdout('scons: "foo.out" is up to date.\n')) test.pass_test() diff --git a/test/errors.py b/test/errors.py index 0f83e64..979c6e1 100644 --- a/test/errors.py +++ b/test/errors.py @@ -71,7 +71,7 @@ a ! x """) test.run(arguments='-f SConstruct1', - stdout = "", + stdout = "scons: Reading SConscript files ...\n", stderr = """ File "SConstruct1", line 2 a ! x @@ -90,7 +90,7 @@ raise SCons.Errors.UserError, 'Depends() require both sources and targets.' """) test.run(arguments='-f SConstruct2', - stdout = "", + stdout = "scons: Reading SConscript files ...\n", stderr = """ SCons error: Depends\(\) require both sources and targets. File "SConstruct2", line 4, in \? @@ -103,7 +103,7 @@ raise InternalError, 'error inside' """) test.run(arguments='-f SConstruct3', - stdout = "other errors\n", + stdout = "scons: Reading SConscript files ...\nother errors\n", stderr = r"""Traceback \((most recent call|innermost) last\): File ".+", line \d+, in .+ File ".+", line \d+, in .+ diff --git a/test/exitfns.py b/test/exitfns.py index 8a9e01e..c8663bc 100644 --- a/test/exitfns.py +++ b/test/exitfns.py @@ -46,8 +46,8 @@ register(x3, "no kwd args") """ -expected_output = """scons: "." is up to date. -running x3('no kwd args', kwd=None) +expected_output = test.wrap_stdout('scons: "." is up to date.\n') + \ +"""running x3('no kwd args', kwd=None) running x3(5, kwd='bar') running x2(12) running x1 diff --git a/test/option--.py b/test/option--.py index 6a18cf5..039ce3a 100644 --- a/test/option--.py +++ b/test/option--.py @@ -50,7 +50,7 @@ env.MyBuild(target = '-f2.out', source = 'f2.in') test.write('f1.in', "f1.in\n") test.write('f2.in', "f2.in\n") -expect = "%s build.py -f1.out\n%s build.py -f2.out\n" % (python, python) +expect = test.wrap_stdout("%s build.py -f1.out\n%s build.py -f2.out\n" % (python, python)) test.run(arguments = '-- -f1.out -f2.out', stdout = expect) diff --git a/test/option--C.py b/test/option--C.py index 5bbbd31..dc39a9b 100644 --- a/test/option--C.py +++ b/test/option--C.py @@ -66,19 +66,24 @@ print GetBuildPath('..') """) test.run(arguments = '-C sub .', - stdout = '%s\nscons: "." is up to date.\n' % wpath) + stdout = test.wrap_stdout(read_str = '%s\n' % wpath, + build_str = 'scons: "." is up to date.\n')) test.run(arguments = '-C sub -C dir .', - stdout = '%s\nscons: "." is up to date.\n' % wpath_sub) + stdout = test.wrap_stdout(read_str = '%s\n' % wpath_sub, + build_str = 'scons: "." is up to date.\n')) test.run(arguments = ".", - stdout = 'SConstruct %s\nscons: "." is up to date.\n' % wpath) + stdout = test.wrap_stdout(read_str = 'SConstruct %s\n' % wpath, + build_str = 'scons: "." is up to date.\n')) test.run(arguments = '--directory=sub/dir .', - stdout = '%s\nscons: "." is up to date.\n' % wpath_sub) + stdout = test.wrap_stdout(read_str = '%s\n' % wpath_sub, + build_str = 'scons: "." is up to date.\n')) test.run(arguments = '-C %s -C %s .' % (wpath_sub_dir, wpath_sub), - stdout = '%s\nscons: "." is up to date.\n' % wpath) + stdout = test.wrap_stdout(read_str = '%s\n' % wpath, + build_str = 'scons: "." is up to date.\n')) test.pass_test() diff --git a/test/option--I.py b/test/option--I.py index b315a60..5cc2be3 100644 --- a/test/option--I.py +++ b/test/option--I.py @@ -52,10 +52,12 @@ print bar.variable """) test.run(arguments = '-I sub1 -I sub2 .', - stdout = 'sub1/foo\nsub2/bar\nscons: "." is up to date.\n') + stdout = test.wrap_stdout(read_str = 'sub1/foo\nsub2/bar\n', + build_str = 'scons: "." is up to date.\n')) test.run(arguments = '--include-dir=sub2 --include-dir=sub1 .', - stdout = 'sub2/foo\nsub2/bar\nscons: "." is up to date.\n') + stdout = test.wrap_stdout(read_str = 'sub2/foo\nsub2/bar\n', + build_str = 'scons: "." is up to date.\n')) test.pass_test() diff --git a/test/option--max-drift.py b/test/option--max-drift.py index facaeca..fb289eb 100644 --- a/test/option--max-drift.py +++ b/test/option--max-drift.py @@ -58,31 +58,35 @@ test.write('f2.in', "f2.in\n") test.run(arguments = 'f1.out') -test.run(arguments = 'f1.out f2.out', stdout = +test.run(arguments = 'f1.out f2.out', + stdout = test.wrap_stdout( """scons: "f1.out" is up to date. %s build.py f2.out f2.in -""" % python) +""" % python)) atime = os.path.getatime(test.workpath('f1.in')) mtime = os.path.getmtime(test.workpath('f1.in')) -test.run(arguments = '--max-drift=0 f1.out f2.out', stdout = +test.run(arguments = '--max-drift=0 f1.out f2.out', + stdout = test.wrap_stdout( """scons: "f1.out" is up to date. scons: "f2.out" is up to date. -""") +""")) test.write('f1.in', "f1.in delta\n") os.utime(test.workpath('f1.in'), (atime,mtime)) -test.run(arguments = '--max-drift=0 f1.out f2.out', stdout = +test.run(arguments = '--max-drift=0 f1.out f2.out', + stdout = test.wrap_stdout( """scons: "f1.out" is up to date. scons: "f2.out" is up to date. -""") +""")) -test.run(arguments = '--max-drift=-1 f1.out f2.out', stdout = +test.run(arguments = '--max-drift=-1 f1.out f2.out', + stdout = test.wrap_stdout( """%s build.py f1.out f1.in scons: "f2.out" is up to date. -"""%python) +""" % python)) test.pass_test() diff --git a/test/option-c.py b/test/option-c.py index 6bb25da..060ebfb 100644 --- a/test/option-c.py +++ b/test/option-c.py @@ -62,21 +62,24 @@ test.fail_test(test.read(test.workpath('foo2.xxx')) != "foo2.in\n") test.fail_test(test.read(test.workpath('foo2.out')) != "foo2.in\n") test.fail_test(test.read(test.workpath('foo3.out')) != "foo3.in\n") -test.run(arguments = '-c foo1.out', stdout = "Removed foo1.out\n") +test.run(arguments = '-c foo1.out', + stdout = test.wrap_stdout("Removed foo1.out\n")) test.fail_test(os.path.exists(test.workpath('foo1.out'))) test.fail_test(not os.path.exists(test.workpath('foo2.xxx'))) test.fail_test(not os.path.exists(test.workpath('foo2.out'))) test.fail_test(not os.path.exists(test.workpath('foo3.out'))) -test.run(arguments = '--clean foo2.out foo2.xxx', stdout = "Removed foo2.xxx\nRemoved foo2.out\n") +test.run(arguments = '--clean foo2.out foo2.xxx', + stdout = test.wrap_stdout("Removed foo2.xxx\nRemoved foo2.out\n")) test.fail_test(os.path.exists(test.workpath('foo1.out'))) test.fail_test(os.path.exists(test.workpath('foo2.xxx'))) test.fail_test(os.path.exists(test.workpath('foo2.out'))) test.fail_test(not os.path.exists(test.workpath('foo3.out'))) -test.run(arguments = '--remove foo3.out', stdout = "Removed foo3.out\n") +test.run(arguments = '--remove foo3.out', + stdout = test.wrap_stdout("Removed foo3.out\n")) test.fail_test(os.path.exists(test.workpath('foo1.out'))) test.fail_test(os.path.exists(test.workpath('foo2.xxx'))) @@ -90,7 +93,8 @@ test.fail_test(test.read(test.workpath('foo2.xxx')) != "foo2.in\n") test.fail_test(test.read(test.workpath('foo2.out')) != "foo2.in\n") test.fail_test(test.read(test.workpath('foo3.out')) != "foo3.in\n") -test.run(arguments = '-c foo2.xxx', stdout = "Removed foo2.xxx\n") +test.run(arguments = '-c foo2.xxx', + stdout = test.wrap_stdout("Removed foo2.xxx\n")) test.fail_test(test.read(test.workpath('foo1.out')) != "foo1.in\n") test.fail_test(os.path.exists(test.workpath('foo2.xxx'))) @@ -98,7 +102,7 @@ test.fail_test(test.read(test.workpath('foo2.out')) != "foo2.in\n") test.fail_test(test.read(test.workpath('foo3.out')) != "foo3.in\n") test.run(arguments = '-c .', - stdout = "Removed foo1.out\nRemoved foo2.out\nRemoved foo3.out\n") + stdout = test.wrap_stdout("Removed foo1.out\nRemoved foo2.out\nRemoved foo3.out\n")) test.fail_test(os.path.exists(test.workpath('foo1.out'))) test.fail_test(os.path.exists(test.workpath('foo2.out'))) @@ -106,11 +110,11 @@ test.fail_test(os.path.exists(test.workpath('foo3.out'))) test.run(arguments = 'foo1.out foo2.out foo3.out') -expect = """Removed foo1.out +expect = test.wrap_stdout("""Removed foo1.out Removed foo2.xxx Removed foo2.out Removed foo3.out -""" +""") test.run(arguments = '-c -n foo1.out foo2.out foo3.out', stdout = expect) @@ -125,7 +129,7 @@ test.writable('.', 0) f = open(test.workpath('foo1.out')) test.run(arguments = '-c foo1.out', - stdout = "scons: Could not remove 'foo1.out': Permission denied\n") + stdout = test.wrap_stdout("scons: Could not remove 'foo1.out': Permission denied\n")) test.fail_test(not os.path.exists(test.workpath('foo1.out'))) diff --git a/test/option-f.py b/test/option-f.py index 30c49bb..cda5ab8 100644 --- a/test/option-f.py +++ b/test/option-f.py @@ -46,38 +46,46 @@ print "subdir/BuildThis", os.getcwd() wpath = test.workpath() test.run(arguments = '-f SConscript .', - stdout = 'SConscript %s\nscons: "." is up to date.\n' % wpath) - + stdout = test.wrap_stdout(read_str = 'SConscript %s\n' % wpath, + build_str = 'scons: "." is up to date.\n')) test.run(arguments = '-f %s .' % subdir_BuildThis, - stdout = 'subdir/BuildThis %s\nscons: "." is up to date.\n' % wpath) + stdout = test.wrap_stdout(read_str = 'subdir/BuildThis %s\n' % wpath, + build_str = 'scons: "." is up to date.\n')) test.run(arguments = '--file=SConscript .', - stdout = 'SConscript %s\nscons: "." is up to date.\n' % wpath) + stdout = test.wrap_stdout(read_str = 'SConscript %s\n' % wpath, + build_str = 'scons: "." is up to date.\n')) test.run(arguments = '--file=%s .' % subdir_BuildThis, - stdout = 'subdir/BuildThis %s\nscons: "." is up to date.\n' % wpath) + stdout = test.wrap_stdout(read_str = 'subdir/BuildThis %s\n' % wpath, + build_str = 'scons: "." is up to date.\n')) test.run(arguments = '--makefile=SConscript .', - stdout = 'SConscript %s\nscons: "." is up to date.\n' % wpath) + stdout = test.wrap_stdout(read_str = 'SConscript %s\n' % wpath, + build_str = 'scons: "." is up to date.\n')) test.run(arguments = '--makefile=%s .' % subdir_BuildThis, - stdout = 'subdir/BuildThis %s\nscons: "." is up to date.\n' % wpath) + stdout = test.wrap_stdout(read_str = 'subdir/BuildThis %s\n' % wpath, + build_str = 'scons: "." is up to date.\n')) test.run(arguments = '--sconstruct=SConscript .', - stdout = 'SConscript %s\nscons: "." is up to date.\n' % wpath) + stdout = test.wrap_stdout(read_str = 'SConscript %s\n' % wpath, + build_str = 'scons: "." is up to date.\n')) test.run(arguments = '--sconstruct=%s .' % subdir_BuildThis, - stdout = 'subdir/BuildThis %s\nscons: "." is up to date.\n' % wpath) + stdout = test.wrap_stdout(read_str = 'subdir/BuildThis %s\n' % wpath, + build_str = 'scons: "." is up to date.\n')) test.run(arguments = '-f - .', stdin = """ import os print "STDIN " + os.getcwd() """, - stdout = 'STDIN %s\nscons: "." is up to date.\n' % wpath) + stdout = test.wrap_stdout(read_str = 'STDIN %s\n' % wpath, + build_str = 'scons: "." is up to date.\n')) test.run(arguments = '-f no_such_file .', - stdout = 'scons: "." is up to date.\n', - stderr = "Ignoring missing SConscript 'no_such_file'\n") + stdout = test.wrap_stdout('scons: "." is up to date.\n'), + stderr = "Ignoring missing SConscript 'no_such_file'\n") test.pass_test() diff --git a/test/option-n.py b/test/option-n.py index 7c796df..0fed3d0 100644 --- a/test/option-n.py +++ b/test/option-n.py @@ -51,7 +51,7 @@ test.write('f1.in', "f1.in\n") test.write('f2.in', "f2.in\n") args = 'f1.out f2.out' -expect = "%s build.py f1.out\n%s build.py f2.out\n" % (python, python) +expect = test.wrap_stdout("%s build.py f1.out\n%s build.py f2.out\n" % (python, python)) test.run(arguments = args, stdout = expect) test.fail_test(not os.path.exists(test.workpath('f1.out'))) @@ -84,7 +84,7 @@ test.run(arguments = args) test.fail_test(not os.path.exists(test.workpath('f1.out'))) test.fail_test(not os.path.exists(test.workpath('f2.out'))) -expect = "Removed f1.out\nRemoved f2.out\n" +expect = test.wrap_stdout("Removed f1.out\nRemoved f2.out\n") test.run(arguments = '-n -c ' + args, stdout = expect) diff --git a/test/option-s.py b/test/option-s.py index 450e994..67155d4 100644 --- a/test/option-s.py +++ b/test/option-s.py @@ -50,21 +50,21 @@ env.MyBuild(target = 'f2.out', source = 'f2.in') test.write('f1.in', "f1.in\n") test.write('f2.in', "f2.in\n") -test.run(arguments = '-s f1.out f2.out', stdout = "") +test.run(arguments = '-s f1.out f2.out', stdout = test.wrap_stdout("")) test.fail_test(not os.path.exists(test.workpath('f1.out'))) test.fail_test(not os.path.exists(test.workpath('f2.out'))) test.unlink('f1.out') test.unlink('f2.out') -test.run(arguments = '--silent f1.out f2.out', stdout = "") +test.run(arguments = '--silent f1.out f2.out', stdout = test.wrap_stdout("")) test.fail_test(not os.path.exists(test.workpath('f1.out'))) test.fail_test(not os.path.exists(test.workpath('f2.out'))) test.unlink('f1.out') test.unlink('f2.out') -test.run(arguments = '--quiet f1.out f2.out', stdout = "") +test.run(arguments = '--quiet f1.out f2.out', stdout = test.wrap_stdout("")) test.fail_test(not os.path.exists(test.workpath('f1.out'))) test.fail_test(not os.path.exists(test.workpath('f2.out'))) diff --git a/test/preserve-source.py b/test/preserve-source.py index 4ca9cd6..b0acdaa 100644 --- a/test/preserve-source.py +++ b/test/preserve-source.py @@ -53,7 +53,7 @@ test.run(arguments = '.') test.fail_test(test.read('aaa.out') != "aaa.in\n") # -test.run(arguments = "aaa.in", stdout = "") +test.run(arguments = "aaa.in", stdout = test.wrap_stdout("")) test.fail_test(not os.path.exists('aaa.in')) diff --git a/test/scan-once.py b/test/scan-once.py index 76c3451..7ddf9c9 100644 --- a/test/scan-once.py +++ b/test/scan-once.py @@ -60,35 +60,39 @@ f3 = env.Echo(source=['file3'], target=['file4']) Default(f3) """) -test.run(arguments = '.', stdout = """create file2.s from file1.s +test.run(arguments = '.', + stdout = test.wrap_stdout("""create file2.s from file1.s create file3.s from file2.s create file4.s from file3.s -""") +""")) test.write('file1.s', 'file1.s\n') -test.run(arguments = '.', stdout = """scanning file1.s for file2.s +test.run(arguments = '.', + stdout = test.wrap_stdout("""scanning file1.s for file2.s create file2.s from file1.s scanning file1.s for file2.s create file3.s from file2.s create file4.s from file3.s -""") +""")) test.write('file2.s', 'file2.s\n') -test.run(arguments = '.', stdout = """scanning file1.s for file2.s +test.run(arguments = '.', + stdout = test.wrap_stdout("""scanning file1.s for file2.s scanning file2.s for file3.s create file3.s from file2.s scanning file2.s for file3.s create file4.s from file3.s -""") +""")) test.write('file3.s', 'file3.s\n') -test.run(arguments = '.', stdout = """scanning file1.s for file2.s +test.run(arguments = '.', + stdout = test.wrap_stdout("""scanning file1.s for file2.s scanning file2.s for file3.s scanning file3.s for file4.s create file4.s from file3.s -""") +""")) test.pass_test() diff --git a/test/sconsign.py b/test/sconsign.py index 57906af..6da6717 100644 --- a/test/sconsign.py +++ b/test/sconsign.py @@ -87,8 +87,7 @@ SCons warning: Ignoring corrupt .sconsign file: sub1..sconsign .* ''' -stdout = '''foo.in->sub1.foo.out -''' +stdout = test.wrap_stdout('foo.in->sub1.foo.out\n') test.write(sub1__sconsign, 'garbage') test.run(arguments = '.', stderr=stderr, stdout=stdout) diff --git a/test/timestamp-fallback.py b/test/timestamp-fallback.py index f284afe..749ee5b 100644 --- a/test/timestamp-fallback.py +++ b/test/timestamp-fallback.py @@ -66,10 +66,8 @@ test.write('f4.in', "f4.in\n") test.run(arguments = 'f1.out f3.out') -test.run(arguments = 'f1.out f2.out f3.out f4.out', stdout = -"""scons: "f1.out" is up to date. -scons: "f3.out" is up to date. -""") +test.run(arguments = 'f1.out f2.out f3.out f4.out', + stdout = test.wrap_stdout('scons: "f1.out" is up to date.\nscons: "f3.out" is up to date.\n')) os.utime(test.workpath('f1.in'), (os.path.getatime(test.workpath('f1.in')), @@ -78,10 +76,8 @@ os.utime(test.workpath('f3.in'), (os.path.getatime(test.workpath('f3.in')), os.path.getmtime(test.workpath('f3.in'))+10)) -test.run(arguments = 'f1.out f2.out f3.out f4.out', stdout = -"""scons: "f2.out" is up to date. -scons: "f4.out" is up to date. -""") +test.run(arguments = 'f1.out f2.out f3.out f4.out', + stdout = test.wrap_stdout('scons: "f2.out" is up to date.\nscons: "f4.out" is up to date.\n')) test.pass_test() diff --git a/test/up-to-date.py b/test/up-to-date.py index 3db1047..ab5e607 100644 --- a/test/up-to-date.py +++ b/test/up-to-date.py @@ -58,11 +58,11 @@ test.write('f4.in', "f4.in\n") test.run(arguments = 'f1.out f3.out') test.run(arguments = 'f1.out f2.out f3.out f4.out', stdout = -"""scons: "f1.out" is up to date. +test.wrap_stdout("""scons: "f1.out" is up to date. %s build.py f2.out f2.in scons: "f3.out" is up to date. %s build.py f4.out f4.in -""" % (python, python)) +""" % (python, python))) test.pass_test() -- cgit v0.12