diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/chained-build.py | 46 | ||||
-rw-r--r-- | test/explain.py | 418 |
2 files changed, 8 insertions, 456 deletions
diff --git a/test/chained-build.py b/test/chained-build.py index 23187bc..d2772e2 100644 --- a/test/chained-build.py +++ b/test/chained-build.py @@ -28,7 +28,13 @@ import TestSCons test = TestSCons.TestSCons() -test.subdir('w1', 'w2') +# During the development of 0.96, there was a --save-explain-info +# option for a brief moment that would surpress storing extra +# info in the .sconsign file(s). At that time, this test used two +# working subdirectories to test both with and without the saved info. +# We eliminated the --save-explain-info option and the second working +# subdirectory here, but didn't go back and change all the filenames. +test.subdir('w1') SConstruct1_contents = """\ def build(env, target, source): @@ -46,7 +52,6 @@ env=Environment(BUILDERS={'B' : Builder(action=build)}) env.B('foo.out', 'foo.mid') """ -# Test with the default of saving explanation info. test.write(['w1', 'SConstruct1'], SConstruct1_contents) test.write(['w1', 'SConstruct2'], SConstruct2_contents) test.write(['w1', 'foo.in'], "foo.in 1") @@ -82,41 +87,4 @@ test.up_to_date(chdir='w1', options="--max-drift=0 -f SConstruct2", arguments="foo.out") -# Now test when we're not saving explanation info. -preamble = "SetOption('save_explain_info', 0)\n" -test.write(['w2', 'SConstruct1'], preamble + SConstruct1_contents) -test.write(['w2', 'SConstruct2'], preamble + SConstruct2_contents) -test.write(['w2', 'foo.in'], "foo.in 1") - -test.run(chdir='w2', - arguments="--max-drift=0 -f SConstruct1 foo.mid", - stdout = test.wrap_stdout('build(["foo.mid"], ["foo.in"])\n')) -test.run(chdir='w2', - arguments="--max-drift=0 -f SConstruct2 foo.out", - stdout = test.wrap_stdout('build(["foo.out"], ["foo.mid"])\n')) - -test.up_to_date(chdir='w2', - options="--max-drift=0 -f SConstruct1", - arguments="foo.mid") -test.up_to_date(chdir='w2', - options="--max-drift=0 -f SConstruct2", - arguments="foo.out") - -test.sleep() # make sure foo.in rewrite has new mod-time -test.write(['w2', 'foo.in'], "foo.in 2") - -test.run(chdir='w2', - arguments="--max-drift=0 -f SConstruct1 foo.mid", - stdout = test.wrap_stdout('build(["foo.mid"], ["foo.in"])\n')) -test.run(chdir='w2', - arguments="--max-drift=0 -f SConstruct2 foo.out", - stdout = test.wrap_stdout('build(["foo.out"], ["foo.mid"])\n')) - -test.up_to_date(chdir='w2', - options="--max-drift=0 -f SConstruct1", - arguments="foo.mid") -test.up_to_date(chdir='w2', - options="--max-drift=0 -f SConstruct2", - arguments="foo.out") - test.pass_test() diff --git a/test/explain.py b/test/explain.py index d614065..ae4a33a 100644 --- a/test/explain.py +++ b/test/explain.py @@ -38,10 +38,7 @@ python = TestSCons.python test = TestSCons.TestSCons() test.subdir('work1', ['work1', 'src'], ['work1', 'src', 'subdir'], - 'work2', ['work2', 'src'], ['work2', 'src', 'subdir'], - 'work3', ['work3', 'src'], ['work3', 'src', 'subdir'], - 'work4', ['work4', 'src'], ['work4', 'src', 'subdir'], - 'work5', ['work5', 'src'], ['work5', 'src', 'subdir']) + 'work4', ['work4', 'src'], ['work4', 'src', 'subdir']) subdir_file6 = os.path.join('subdir', 'file6') subdir_file6_in = os.path.join('subdir', 'file6.in') @@ -327,419 +324,6 @@ test.run(chdir='work1/src', arguments=args) test.up_to_date(chdir='work1/src',arguments='.') ############################################################################# -# Now test (in a separate workspace) how things function when -# we tell SCons to not save the --debug=explain info -# using SetOption('save_explain_info'). -test.write(['work2', 'src', 'SConstruct'], - "SetOption('save_explain_info', 0)\n" + SConstruct_contents) - -test.write(['work2', 'src', 'SConscript'], """\ -Import("env") -env.Cat('file1', 'file1.in') -env.Cat('file2', 'file2.k') -env.Cat('file3', ['xxx', 'yyy', 'zzz']) -env.Command('file4', 'file4.in', r"%s %s $TARGET - $SOURCES") -env.Cat('file5', 'file5.k') -env.Cat('subdir/file6', 'subdir/file6.in') -""" % (python, cat_py)) - -test.write(['work2', 'src', 'aaa'], "aaa 1\n") -test.write(['work2', 'src', 'bbb.k'], """\ -bbb.k 1 -include ccc -include ../inc/ddd -include ../inc/eee -""") -test.write(['work2', 'src', 'ccc'], "ccc 1\n") -test.write(['work2', 'src', 'ddd'], "ddd 1\n") -test.write(['work2', 'src', 'eee.in'], "eee.in 1\n") - -test.write(['work2', 'src', 'file1.in'], "file1.in 1\n") - -test.write(['work2', 'src', 'file2.k'], """\ -file2.k 1 line 1 -include xxx -include yyy -file2.k 1 line 4 -""") - -test.write(['work2', 'src', 'file4.in'], "file4.in 1\n") - -test.write(['work2', 'src', 'xxx'], "xxx 1\n") -test.write(['work2', 'src', 'yyy'], "yyy 1\n") -test.write(['work2', 'src', 'zzz'], "zzz 1\n") - -test.write(['work2', 'src', 'file5.k'], """\ -file5.k 1 line 1 -include ../inc/aaa -include ../inc/bbb.k -file5.k 1 line 4 -""") - -test.write(['work2', 'src', 'subdir', 'file6.in'], "subdir/file6.in 1\n") - -# First, even without build info, we can tell the user that things -# are being built because they don't exist. -test.run(chdir='work2/src', arguments=args, stdout=test.wrap_stdout("""\ -scons: building `file1' because it doesn't exist -%s %s file1 file1.in -scons: building `file2' because it doesn't exist -%s %s file2 file2.k -scons: building `file3' because it doesn't exist -%s %s file3 xxx yyy zzz -scons: building `file4' because it doesn't exist -%s %s file4 - file4.in -scons: building `%s' because it doesn't exist -Install file: "aaa" as "%s" -scons: building `%s' because it doesn't exist -Install file: "ddd" as "%s" -scons: building `%s' because it doesn't exist -Install file: "eee.in" as "%s" -scons: building `%s' because it doesn't exist -Install file: "bbb.k" as "%s" -scons: building `file5' because it doesn't exist -%s %s file5 file5.k -scons: building `%s' because it doesn't exist -%s %s %s %s -""" % (python, cat_py, - python, cat_py, - python, cat_py, - python, cat_py, - test.workpath('work2', 'inc', 'aaa'), - test.workpath('work2', 'inc', 'aaa'), - test.workpath('work2', 'inc', 'ddd'), - test.workpath('work2', 'inc', 'ddd'), - test.workpath('work2', 'inc', 'eee'), - test.workpath('work2', 'inc', 'eee'), - test.workpath('work2', 'inc', 'bbb.k'), - test.workpath('work2', 'inc', 'bbb.k'), - python, cat_py, - subdir_file6, - python, cat_py, subdir_file6, subdir_file6_in))) - -test.must_match(['work2', 'src', 'file1'], "file1.in 1\n") -test.must_match(['work2', 'src', 'file2'], """\ -file2.k 1 line 1 -xxx 1 -yyy 1 -file2.k 1 line 4 -""") -test.must_match(['work2', 'src', 'file3'], "xxx 1\nyyy 1\nzzz 1\n") -test.must_match(['work2', 'src', 'file4'], "file4.in 1\n") -test.must_match(['work2', 'src', 'file5'], """\ -file5.k 1 line 1 -aaa 1 -bbb.k 1 -ccc 1 -ddd 1 -eee.in 1 -file5.k 1 line 4 -""") - -# Using --debug=explain above will have actually saved the build info; -# run again to clear it out. -test.write(['work2', 'src', 'file1.in'], "file1.in 2\n") -test.write(['work2', 'src', 'yyy'], "yyy 2\n") -test.write(['work2', 'src', 'zzz'], "zzz 2\n") -test.write(['work2', 'src', 'bbb.k'], "bbb.k 2\ninclude ccc\n") - -test.run(chdir='work2/src', arguments='.') - -# Now, it should tell us that it can't explain why the files are -# being rebuilt. It should also *store* the build info because -# we're using --debug=explain... -test.write(['work2', 'src', 'file1.in'], "file1.in 3\n") -test.write(['work2', 'src', 'yyy'], "yyy 3\n") -test.write(['work2', 'src', 'zzz'], "zzz 3\n") -test.write(['work2', 'src', 'bbb.k'], "bbb.k 3\ninclude ccc\n") - -test.run(chdir='work2/src', arguments=args, stdout=test.wrap_stdout("""\ -scons: Cannot explain why `file1' is being rebuilt: No previous build information found -%s %s file1 file1.in -scons: Cannot explain why `file2' is being rebuilt: No previous build information found -%s %s file2 file2.k -scons: Cannot explain why `file3' is being rebuilt: No previous build information found -%s %s file3 xxx yyy zzz -scons: Cannot explain why `%s' is being rebuilt: No previous build information found -Install file: "bbb.k" as "%s" -scons: Cannot explain why `file5' is being rebuilt: No previous build information found -%s %s file5 file5.k -""" % (python, cat_py, - python, cat_py, - python, cat_py, - test.workpath('work2', 'inc', 'bbb.k'), - test.workpath('work2', 'inc', 'bbb.k'), - python, cat_py))) - -test.must_match(['work2', 'src', 'file1'], "file1.in 3\n") -test.must_match(['work2', 'src', 'file2'], """\ -file2.k 1 line 1 -xxx 1 -yyy 3 -file2.k 1 line 4 -""") -test.must_match(['work2', 'src', 'file3'], "xxx 1\nyyy 3\nzzz 3\n") -test.must_match(['work2', 'src', 'file5'], """\ -file5.k 1 line 1 -aaa 1 -bbb.k 3 -ccc 1 -file5.k 1 line 4 -""") - -# ...so if we now update the files again, it should be able to tell -# us why the files changed. -test.write(['work2', 'src', 'file1.in'], "file1.in 4\n") -test.write(['work2', 'src', 'yyy'], "yyy 4\n") -test.write(['work2', 'src', 'zzz'], "zzz 4\n") -test.write(['work2', 'src', 'bbb.k'], "bbb.k 4\ninclude ccc\n") - -test.run(chdir='work2/src', arguments=args, stdout=test.wrap_stdout("""\ -scons: rebuilding `file1' because `file1.in' changed -%s %s file1 file1.in -scons: rebuilding `file2' because `yyy' changed -%s %s file2 file2.k -scons: rebuilding `file3' because: - `yyy' changed - `zzz' changed -%s %s file3 xxx yyy zzz -scons: rebuilding `%s' because `bbb.k' changed -Install file: "bbb.k" as "%s" -scons: rebuilding `file5' because `%s' changed -%s %s file5 file5.k -""" % (python, cat_py, - python, cat_py, - python, cat_py, - test.workpath('work2', 'inc', 'bbb.k'), - test.workpath('work2', 'inc', 'bbb.k'), - test.workpath('work2', 'inc', 'bbb.k'), - python, cat_py))) - -test.must_match(['work2', 'src', 'file1'], "file1.in 4\n") -test.must_match(['work2', 'src', 'file2'], """\ -file2.k 1 line 1 -xxx 1 -yyy 4 -file2.k 1 line 4 -""") -test.must_match(['work2', 'src', 'file3'], "xxx 1\nyyy 4\nzzz 4\n") -test.must_match(['work2', 'src', 'file5'], """\ -file5.k 1 line 1 -aaa 1 -bbb.k 4 -ccc 1 -file5.k 1 line 4 -""") - -############################################################################# -# Now test (in a separate workspace) how things function when -# we tell SCons to not save the --debug=explain info -# using --save-explain-info=0'. -test.write(['work3', 'src', 'SConstruct'], SConstruct_contents) - -test.write(['work3', 'src', 'SConscript'], """\ -Import("env") -env.Cat('file1', 'file1.in') -env.Cat('file2', 'file2.k') -env.Cat('file3', ['xxx', 'yyy', 'zzz']) -env.Command('file4', 'file4.in', r"%s %s $TARGET - $SOURCES") -env.Cat('file5', 'file5.k') -env.Cat('subdir/file6', 'subdir/file6.in') -""" % (python, cat_py)) - -test.write(['work3', 'src', 'aaa'], "aaa 1\n") -test.write(['work3', 'src', 'bbb.k'], """\ -bbb.k 1 -include ccc -include ../inc/ddd -include ../inc/eee -""") -test.write(['work3', 'src', 'ccc'], "ccc 1\n") -test.write(['work3', 'src', 'ddd'], "ddd 1\n") -test.write(['work3', 'src', 'eee.in'], "eee.in 1\n") - -test.write(['work3', 'src', 'file1.in'], "file1.in 1\n") - -test.write(['work3', 'src', 'file2.k'], """\ -file2.k 1 line 1 -include xxx -include yyy -file2.k 1 line 4 -""") - -test.write(['work3', 'src', 'file4.in'], "file4.in 1\n") - -test.write(['work3', 'src', 'xxx'], "xxx 1\n") -test.write(['work3', 'src', 'yyy'], "yyy 1\n") -test.write(['work3', 'src', 'zzz'], "zzz 1\n") - -test.write(['work3', 'src', 'file5.k'], """\ -file5.k 1 line 1 -include ../inc/aaa -include ../inc/bbb.k -file5.k 1 line 4 -""") - -test.write(['work3', 'src', 'subdir', 'file6.in'], "subdir/file6.in 1\n") - -# First, even without build info and regardless of storage option, -# we can tell the user that things are being built because they don't exist. -test.run(chdir='work3/src', - arguments='--debug=explain --save-explain-info=0 .', - stdout=test.wrap_stdout("""\ -scons: building `file1' because it doesn't exist -%s %s file1 file1.in -scons: building `file2' because it doesn't exist -%s %s file2 file2.k -scons: building `file3' because it doesn't exist -%s %s file3 xxx yyy zzz -scons: building `file4' because it doesn't exist -%s %s file4 - file4.in -scons: building `%s' because it doesn't exist -Install file: "aaa" as "%s" -scons: building `%s' because it doesn't exist -Install file: "ddd" as "%s" -scons: building `%s' because it doesn't exist -Install file: "eee.in" as "%s" -scons: building `%s' because it doesn't exist -Install file: "bbb.k" as "%s" -scons: building `file5' because it doesn't exist -%s %s file5 file5.k -scons: building `%s' because it doesn't exist -%s %s %s %s -""" % (python, cat_py, - python, cat_py, - python, cat_py, - python, cat_py, - test.workpath('work3', 'inc', 'aaa'), - test.workpath('work3', 'inc', 'aaa'), - test.workpath('work3', 'inc', 'ddd'), - test.workpath('work3', 'inc', 'ddd'), - test.workpath('work3', 'inc', 'eee'), - test.workpath('work3', 'inc', 'eee'), - test.workpath('work3', 'inc', 'bbb.k'), - test.workpath('work3', 'inc', 'bbb.k'), - python, cat_py, - subdir_file6, - python, cat_py, subdir_file6, subdir_file6_in))) - -test.must_match(['work3', 'src', 'file1'], "file1.in 1\n") -test.must_match(['work3', 'src', 'file2'], """\ -file2.k 1 line 1 -xxx 1 -yyy 1 -file2.k 1 line 4 -""") -test.must_match(['work3', 'src', 'file3'], "xxx 1\nyyy 1\nzzz 1\n") -test.must_match(['work3', 'src', 'file4'], "file4.in 1\n") -test.must_match(['work3', 'src', 'file5'], """\ -file5.k 1 line 1 -aaa 1 -bbb.k 1 -ccc 1 -ddd 1 -eee.in 1 -file5.k 1 line 4 -""") - -# Using --debug=explain above will have actually saved the build info; -# run again to clear it out. -test.write(['work3', 'src', 'file1.in'], "file1.in 2\n") -test.write(['work3', 'src', 'yyy'], "yyy 2\n") -test.write(['work3', 'src', 'zzz'], "zzz 2\n") -test.write(['work3', 'src', 'bbb.k'], "bbb.k 2\ninclude ccc\n") - -test.run(chdir='work3/src', arguments='--save-explain-info=0 .') - -# Now, it should tell us that it can't explain why the files are -# being rebuilt. It should also *store* the build info because -# we're using --debug=explain... -test.write(['work3', 'src', 'file1.in'], "file1.in 3\n") -test.write(['work3', 'src', 'yyy'], "yyy 3\n") -test.write(['work3', 'src', 'zzz'], "zzz 3\n") -test.write(['work3', 'src', 'bbb.k'], "bbb.k 3\ninclude ccc\n") - -test.run(chdir='work3/src', - arguments='--debug=explain .', - stdout=test.wrap_stdout("""\ -scons: Cannot explain why `file1' is being rebuilt: No previous build information found -%s %s file1 file1.in -scons: Cannot explain why `file2' is being rebuilt: No previous build information found -%s %s file2 file2.k -scons: Cannot explain why `file3' is being rebuilt: No previous build information found -%s %s file3 xxx yyy zzz -scons: Cannot explain why `%s' is being rebuilt: No previous build information found -Install file: "bbb.k" as "%s" -scons: Cannot explain why `file5' is being rebuilt: No previous build information found -%s %s file5 file5.k -""" % (python, cat_py, - python, cat_py, - python, cat_py, - test.workpath('work3', 'inc', 'bbb.k'), - test.workpath('work3', 'inc', 'bbb.k'), - python, cat_py))) - -test.must_match(['work3', 'src', 'file1'], "file1.in 3\n") -test.must_match(['work3', 'src', 'file2'], """\ -file2.k 1 line 1 -xxx 1 -yyy 3 -file2.k 1 line 4 -""") -test.must_match(['work3', 'src', 'file3'], "xxx 1\nyyy 3\nzzz 3\n") -test.must_match(['work3', 'src', 'file5'], """\ -file5.k 1 line 1 -aaa 1 -bbb.k 3 -ccc 1 -file5.k 1 line 4 -""") - -# ...so if we now update the files again, it should be able to tell -# us why the files changed. -test.write(['work3', 'src', 'file1.in'], "file1.in 4\n") -test.write(['work3', 'src', 'yyy'], "yyy 4\n") -test.write(['work3', 'src', 'zzz'], "zzz 4\n") -test.write(['work3', 'src', 'bbb.k'], "bbb.k 4\ninclude ccc\n") - -test.run(chdir='work3/src', arguments=args, stdout=test.wrap_stdout("""\ -scons: rebuilding `file1' because `file1.in' changed -%s %s file1 file1.in -scons: rebuilding `file2' because `yyy' changed -%s %s file2 file2.k -scons: rebuilding `file3' because: - `yyy' changed - `zzz' changed -%s %s file3 xxx yyy zzz -scons: rebuilding `%s' because `bbb.k' changed -Install file: "bbb.k" as "%s" -scons: rebuilding `file5' because `%s' changed -%s %s file5 file5.k -""" % (python, cat_py, - python, cat_py, - python, cat_py, - test.workpath('work3', 'inc', 'bbb.k'), - test.workpath('work3', 'inc', 'bbb.k'), - test.workpath('work3', 'inc', 'bbb.k'), - python, cat_py))) - -test.must_match(['work3', 'src', 'file1'], "file1.in 4\n") -test.must_match(['work3', 'src', 'file2'], """\ -file2.k 1 line 1 -xxx 1 -yyy 4 -file2.k 1 line 4 -""") -test.must_match(['work3', 'src', 'file3'], "xxx 1\nyyy 4\nzzz 4\n") -test.must_match(['work3', 'src', 'file5'], """\ -file5.k 1 line 1 -aaa 1 -bbb.k 4 -ccc 1 -file5.k 1 line 4 -""") - -############################################################################# # Test that the --debug=explain information gets saved by default. test.write(['work4', 'src', 'SConstruct'], SConstruct_contents) |