Commonize new string-search-in-output methods:
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Fri, 6 Feb 2009 14:55:23 +0000 (14:55 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Fri, 6 Feb 2009 14:55:23 +0000 (14:55 +0000)
test.must_contain_all_lines()
test.must_contain_any_line()
test.must_not_contain_any_line()
Update tests to use them.  Remove "import string" lines where the
change made them unnecessary.

git-svn-id: http://scons.tigris.org/svn/scons/trunk@3967 fdb21ef1-2011-0410-befe-b5e4ea1792b1

56 files changed:
QMTest/TestCommon.py
QMTest/TestSCons_time.py
test/AR/ARCOMSTR.py
test/Actions/addpost-link.py
test/CC/CFLAGS.py
test/Configure/clean.py
test/Configure/help.py
test/Delete.py
test/Deprecated/debug-dtree.py
test/Deprecated/debug-tree.py
test/ENV.py
test/Errors/Exception.py
test/Errors/execute-a-directory.py
test/Errors/non-executable-file.py
test/Errors/nonexistent-executable.py
test/Java/no-JARCHDIR.py
test/PRINT_CMD_LINE_FUNC.py
test/ParseDepends.py
test/Repository/RMIC.py
test/SCCS/diskcheck.py
test/SCCS/explicit.py
test/SCCS/implicit.py
test/SCCS/transparent.py
test/SCONSFLAGS.py
test/SideEffect/parallel.py
test/TEX/bibliography.py
test/TEX/makeindex.py
test/TEX/multi-run.py
test/Value.py
test/builderrors.py
test/diskcheck.py
test/exceptions.py
test/implicit-cache/DualTargets.py
test/no-global-dependencies.py
test/option-j.py
test/option/debug-includes.py
test/option/debug-memoizer.py
test/option/debug-pdb.py
test/option/debug-stacktrace.py
test/option/h.py
test/option/help-options.py
test/option/profile.py
test/option/tree-all.py
test/option/tree-derived.py
test/option/tree-lib.py
test/packaging/rpm/tagging.py
test/scons-time/func/help.py
test/scons-time/help/all-subcommands.py
test/scons-time/help/options.py
test/scons-time/mem/help.py
test/scons-time/obj/help.py
test/scons-time/run/aegis.py
test/scons-time/run/option/help.py
test/scons-time/run/subversion.py
test/scons-time/time/help.py
test/up-to-date.py

index fe1e6806736d8171c6880c15606cc85253e36034..845dfd283f6ea47ddb8b7f3367e4086ae7d4c14b 100644 (file)
@@ -36,7 +36,9 @@ provided by the TestCommon class:
 
     test.must_contain('file', 'required text\n')
 
-    test.must_contain_lines(lines, output)
+    test.must_contain_all_lines(output, lines, ['title', find])
+
+    test.must_contain_any_line(output, lines, ['title', find])
 
     test.must_exist('file1', ['file2', ...])
 
@@ -44,7 +46,7 @@ provided by the TestCommon class:
 
     test.must_not_be_writable('file1', ['file2', ...])
 
-    test.must_not_contain_lines(lines, output)
+    test.must_not_contain_any_line(output, lines, ['title', find])
 
     test.must_not_exist('file1', ['file2', ...])
 
@@ -307,19 +309,46 @@ class TestCommon(TestCmd):
             print file_contents
             self.fail_test(not contains)
 
-    def must_contain_lines(self, lines, output, title=None):
-        if title is None:
-            title = 'output'
-
-        missing = filter(lambda l, o=output: string.find(o, l) == -1, lines)
+    def must_contain_all_lines(self, output, lines, title=None, find=None):
+        if find is None:
+            find = lambda o, l: string.find(o, l) != -1
+        missing = []
+        for line in lines:
+            if not find(output, line):
+                missing.append(line)
 
         if missing:
-            print "Missing lines from %s:" % title
-            print string.join(missing, '\n')
-            print "%s ============================================================" % title
-            print output
+            if title is None:
+                title = 'output'
+            sys.stdout.write("Missing expected lines from %s:\n" % title)
+            for line in missing:
+                sys.stdout.write('    ' + repr(line) + '\n')
+            separator = title + ' ' + '=' * (78 - len(title) - 1)
+            sys.stdout.write(separator + '\n')
+            sys.stdout.write(output)
             self.fail_test()
 
+    def must_contain_any_line(self, output, lines, title=None, find=None):
+        if find is None:
+            find = lambda o, l: string.find(o, l) != -1
+        for line in lines:
+            if find(output, line):
+                return
+
+        if title is None:
+            title = 'output'
+        sys.stdout.write("Missing any expected line from %s:\n" % title)
+        for line in lines:
+            sys.stdout.write('    ' + repr(line) + '\n')
+        separator = title + ' ' + '=' * (78 - len(title) - 1)
+        sys.stdout.write(separator + '\n')
+        sys.stdout.write(output)
+        self.fail_test()
+
+    def must_contain_lines(self, lines, output, title=None):
+        # Deprecated; retain for backwards compatibility.
+        return self.must_contain_all_lines(output, lines, title)
+
     def must_exist(self, *files):
         """Ensures that the specified file(s) must exist.  An individual
         file be specified as a list of directory names, in which case the
@@ -348,19 +377,28 @@ class TestCommon(TestCmd):
             self.diff(expect, file_contents, 'contents ')
             raise
 
-    def must_not_contain_lines(self, lines, output=None, title=None):
-        if title is None:
-            title = 'output'
-
-        unexpected = filter(lambda l, o=output: string.find(o, l) != -1, lines)
+    def must_not_contain_any_line(self, output, lines, title=None, find=None):
+        if find is None:
+            find = lambda o, l: string.find(o, l) != -1
+        unexpected = []
+        for line in lines:
+            if find(output, line):
+                unexpected.append(line)
 
         if unexpected:
-            print "Unexpected lines in %s:" % title
-            print string.join(unexpected, '\n')
-            print "%s ============================================================" % title
-            print output
+            if title is None:
+                title = 'output'
+            sys.stdout.write("Unexpected lines in %s:\n" % title)
+            for line in unexpected:
+                sys.stdout.write('    ' + repr(line) + '\n')
+            separator = title + ' ' + '=' * (78 - len(title) - 1)
+            sys.stdout.write(separator + '\n')
+            sys.stdout.write(output)
             self.fail_test()
 
+    def must_not_contain_lines(self, lines, output, title=None, find=None):
+        return self.must_not_contain_any_line(output, lines, title, find)
+
     def must_not_exist(self, *files):
         """Ensures that the specified file(s) must not exist.
         An individual file be specified as a list of directory names, in
index f3ea49a9c44bfc7f03c1e44e360636cf0296af2e..1fc9dea6e71c3b6cc7bdf987ea93f8bcca86e24d 100644 (file)
@@ -213,24 +213,6 @@ class TestSCons_time(TestCommon):
         else:
             return os.path.splitext(path)
 
-    def must_contain_all_lines(self, name, content, expected, exists=None):
-        missing_lines = []
-
-        if exists is None:
-            exists = lambda e, c: string.find(c, e) != -1
-
-        for e in expected:
-            if not exists(e, content):
-                missing_lines.append(e)
-
-        if missing_lines:
-            sys.stdout.write('%s is missing expected string(s):\n' % name)
-            for m in missing_lines:
-                sys.stdout.write('    ' + repr(m) + '\n')
-            sys.stdout.write('%s content:\n' % name)
-            sys.stdout.write(content)
-            self.fail_test()
-
     def fake_logfile(self, logfile_name, index=0):
         self.write(self.workpath(logfile_name), logfile_contents % locals())
 
index 914031b5a4b303e4324d3c69d8169750122c90b0..f0a6158cdc5ca450dc9b933312d029b5049444a8 100644 (file)
@@ -30,7 +30,6 @@ the displayed archiver string.
 """
 
 import TestSCons
-import string
 
 _python_ = TestSCons._python_
 
@@ -67,8 +66,7 @@ test.write('file.2', "file.2\n/*ar*/\n")
 test.run()
 
 expect = 'Archiving output.lib from file.1 file.2'
-test.fail_test(string.find(test.stdout(), expect) == -1)
-
+test.must_contain_all_lines(test.stdout(), [expect])
 test.must_match('output.lib', "file.1\nfile.2\n")
 
 
index 0a08cda615be5a5a20e91fa3d43192c4dcc45b50..7721fde422c7bcbe59d0e58e13c570f063e19a46 100644 (file)
@@ -85,6 +85,6 @@ test.must_not_exist('test1.obj')
 test.run(arguments="-Q case=2", stderr=None)
 
 expect = 'strip.py: %s' % test.workpath('test1.exe')
-test.fail_test(string.find(test.stdout(), expect) == -1)
+test.must_contain_all_lines(test.stdout(), [expect])
 
 test.pass_test()
index f14fcc547f563bb25b3f0866fad5d611edea5445..6ccf7e289fb7700decf205291f9a808729f06405 100644 (file)
@@ -24,7 +24,7 @@
 
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
-import sys, string
+import sys
 import TestSCons
 
 test = TestSCons.TestSCons()
@@ -38,8 +38,8 @@ print env.subst('$SHCXXCOM')
 print env.subst('$SHCXXCOMSTR')
 """)
 test.run(arguments = '.')
-test.fail_test(string.find(test.stdout(), "-xyz") != -1)
-test.fail_test(string.find(test.stdout(), "-abc") == -1)
+test.must_not_contain_any_line(test.stdout(), ["-xyz"])
+test.must_contain_all_lines(test.stdout(), ["-abc"])
 
 
 # Test passing CFLAGS to C compiler by actually compiling programs
index a6ba7c1002471bf061fd76a24a90ed4eca8b97cc..3fcfcbde243ae2255435e3634bcb1261a21eaee6 100644 (file)
@@ -66,15 +66,15 @@ lines = [
 ]
 
 test.run(arguments = '-c clean=0')
-test.must_not_contain_lines(lines, test.stdout())
+test.must_not_contain_any_line(test.stdout(), lines)
 
 test.run(arguments = '-c clean=1')
-test.must_contain_lines(lines, test.stdout())
+test.must_contain_all_lines(test.stdout(), lines)
 
 test.run(arguments = '--clean clean=0')
-test.must_not_contain_lines(lines, test.stdout())
+test.must_not_contain_any_line(test.stdout(), lines)
 
 test.run(arguments = '--clean clean=1')
-test.must_contain_lines(lines, test.stdout())
+test.must_contain_all_lines(test.stdout(), lines)
 
 test.pass_test()
index 32c68eb53c7ceed1b246a7b6219302a1a5fe9fce..9f585139295e0a387a857362a84f21fdbd344308 100644 (file)
@@ -68,23 +68,23 @@ lines = [
 # The help setting should have no effect on -H, so the -H output
 # should never contain the lines.
 test.run(arguments = '-H help=0')
-test.must_not_contain_lines(lines, test.stdout())
+test.must_not_contain_any_line(test.stdout(), lines)
 
 test.run(arguments = '-H help=1')
-test.must_not_contain_lines(lines, test.stdout())
+test.must_not_contain_any_line(test.stdout(), lines)
 
 # For -h and --help, the lines appear or not depending on how Configure()
 # is initialized.
 test.run(arguments = '-h help=0')
-test.must_not_contain_lines(lines, test.stdout())
+test.must_not_contain_any_line(test.stdout(), lines)
 
 test.run(arguments = '-h help=1')
-test.must_contain_lines(lines, test.stdout())
+test.must_contain_all_lines(test.stdout(), lines)
 
 test.run(arguments = '--help help=0')
-test.must_not_contain_lines(lines, test.stdout())
+test.must_not_contain_any_line(test.stdout(), lines)
 
 test.run(arguments = '--help help=1')
-test.must_contain_lines(lines, test.stdout())
+test.must_contain_all_lines(test.stdout(), lines)
 
 test.pass_test()
index 63e4ab633a1b15a3f040373e5228b034c5bc75f1..47f9d81ef295261c0104bd8153d67c44b5947fde 100644 (file)
@@ -29,7 +29,6 @@ Verify that the Delete() Action works.
 """
 
 import os.path
-import string
 
 import TestSCons
 
@@ -180,8 +179,11 @@ test.write('f14.in', "f14.in\n")
 
 test.run(status=2, stderr=None)
 
-stderr = test.stderr()
-test.fail_test(string.find(stderr, "No such file or directory") == -1 and
-               string.find(stderr, "The system cannot find the path specified") == -1)
+fail_strings = [
+    "No such file or directory",
+    "The system cannot find the path specified",
+]
+
+test.must_contain_any_line(test.stderr(), fail_strings)
 
 test.pass_test()
index 2aec8804fa70a0f3f4eaf87267641037aa39295e..8918052c5e1aaf17ed36da390b4cbbed505a3d95 100644 (file)
@@ -31,7 +31,6 @@ dependencies (sources or Depends()) of a target.
 
 import TestSCons
 import sys
-import string
 import re
 import time
 
@@ -87,7 +86,7 @@ dtree1 = """
 
 test.run(arguments = "--debug=dtree foo.xxx",
          stderr = stderr)
-test.fail_test(string.find(test.stdout(), dtree1) == -1)
+test.must_contain_all_lines(test.stdout(), [dtree1])
 
 dtree2 = """
 +-.
@@ -99,7 +98,7 @@ dtree2 = """
 """
 test.run(arguments = "--debug=dtree .",
          stderr = stderr)
-test.fail_test(string.find(test.stdout(), dtree2) == -1)
+test.must_contain_all_lines(test.stdout(), [dtree2])
 
 # Make sure we print the debug stuff even if there's a build failure.
 test.write('bar.h', """
@@ -113,6 +112,6 @@ THIS SHOULD CAUSE A BUILD FAILURE
 test.run(arguments = "--debug=dtree foo.xxx",
          status = 2,
          stderr = None)
-test.fail_test(string.find(test.stdout(), dtree1) == -1)
+test.must_contain_all_lines(test.stdout(), [dtree1])
 
 test.pass_test()
index 0703a167b59f95bede1a191c7a5ed2a6989cc0f9..73b8ec017444e12c6f47df80aae972e49971a7cf 100644 (file)
@@ -31,7 +31,6 @@ complete dependencies of a target.
 
 import TestSCons
 import sys
-import string
 import re
 import time
 
@@ -104,10 +103,7 @@ tree1 = """
 
 test.run(arguments = "--debug=tree Foo.xxx",
          stderr = stderr)
-if string.find(test.stdout(), tree1) == -1:
-    sys.stdout.write('Did not find expected tree in the following output:\n')
-    sys.stdout.write(test.stdout())
-    test.fail_test()
+test.must_contain_all_lines(test.stdout(), tree1)
 
 tree2 = """
 +-.
@@ -142,10 +138,7 @@ tree2 = """
 
 test.run(arguments = "--debug=tree .",
          stderr = stderr)
-if string.find(test.stdout(), tree2) == -1:
-    sys.stdout.write('Did not find expected tree in the following output:\n')
-    sys.stdout.write(test.stdout())
-    test.fail_test()
+test.must_contain_all_lines(test.stdout(), tree2)
 
 # Make sure we print the debug stuff even if there's a build failure.
 test.write('Bar.h', """
@@ -159,9 +152,6 @@ THIS SHOULD CAUSE A BUILD FAILURE
 test.run(arguments = "--debug=tree Foo.xxx",
          status = 2,
          stderr = None)
-if string.find(test.stdout(), tree1) == -1:
-    sys.stdout.write('Did not find expected tree in the following output:\n')
-    sys.stdout.write(test.stdout())
-    test.fail_test()
+test.must_contain_all_lines(test.stdout(), tree1)
 
 test.pass_test()
index 9a39f3063f30d2d8f62536bbf49e1e4a80e25315..d7c543da92615dab7f40cafbea95c8f9a0e91e59 100644 (file)
@@ -25,8 +25,8 @@
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import os
-import string
 import sys
+
 import TestSCons
 
 _python_ = TestSCons._python_
@@ -79,7 +79,11 @@ print 'FOO:', os.environ['FOO']
 
 test.run()
 
-test.fail_test(string.find(test.stdout(), "LIST: foo%sbar"%os.pathsep) == -1)
-test.fail_test(string.find(test.stdout(), "FOO: foo") == -1)
+expect = [
+    "LIST: foo%sbar" % os.pathsep,
+    "FOO: foo",
+]
+
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.pass_test()
index 8485ce5d23bcb2abc430bd3e1d850415b46040fd..61bd74f6fdfac7583ad71df69008a38be62df03b 100644 (file)
@@ -24,8 +24,6 @@
 
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
-import string
-
 import TestSCons
 
 test = TestSCons.TestSCons(match = TestSCons.match_re_dotall)
@@ -73,11 +71,6 @@ test.run(arguments='foo.out exit.out', stderr=expect, status=2)
 stdout = test.stdout()
 
 expect = "scons: `foo.out' is up to date."
-
-if string.find(stdout, expect) == -1:
-    print "Did not find expected string %s" % repr(expect)
-    print "STDOUT ======================================================="
-    print stdout
-    test.fail_test()
+test.must_contain_all_lines(test.stdout(), [expect])
 
 test.pass_test()
index bcdcb7cb6840b796b17879bab53658ddaffcd6d6..a13b4e06eb46e662512c7234316ad3c6e24ecb3c 100644 (file)
@@ -99,11 +99,6 @@ else:
         Permission_denied % (test.workdir, 'f3'),
         Permission_denied % (test.workdir, 'f3'),
     ]
-    error_message_not_found = 1
-    for err in errs:
-        if string.find(test.stderr(), err) != -1:
-            error_message_not_found = None
-            break
-    test.fail_test(error_message_not_found)
+    test.must_contain_any_line(test.stderr(), errs)
 
 test.pass_test()
index d6e018b94b5261e70a539454754f8c7bef844b28..3d5cd5bce12add0b0e8f09807a30aa5f00223384 100644 (file)
@@ -93,11 +93,6 @@ else:
         Permission_denied % (not_executable, 'f1'),
         permission_denied % (not_executable, 'f1'),
     ]
-    error_message_not_found = 1
-    for err in errs:
-        if string.find(test.stderr(), err) != -1:
-            error_message_not_found = None
-            break
-    test.fail_test(error_message_not_found)
+    test.must_contain_any_line(test.stderr(), errs)
 
 test.pass_test()
index b2a9557d88ebd576fe52474e299d4eff535316cd..c2f7cfdb8bb64bc1a0b81982f8ecda72aab3a8ec 100644 (file)
@@ -97,11 +97,6 @@ else:
         not_found_127 % (no_such_file, 'f1'),
         No_such % (no_such_file, 'f1'),
     ]
-    error_message_not_found = 1
-    for err in errs:
-        if string.find(test.stderr(), err) != -1:
-            error_message_not_found = None
-            break
-    test.fail_test(error_message_not_found)
+    test.must_contain_any_line(test.stderr(), errs)
 
 test.pass_test()
index 795689c4563b173110d32e32d959a3ed813b42fb..d0233f6a6b4805210148dec7ea0f74de988b6b59 100644 (file)
@@ -31,8 +31,6 @@ and when we explicity set it to None (it should not use the Java()
 classdir attribute at all).
 """
 
-import string
-
 import TestSCons
 
 test = TestSCons.TestSCons()
@@ -75,13 +73,7 @@ foo/bar/a.class
 foo/bar/b.class
 """
 
-if string.find(test.stdout(), expect) == -1:
-    print "Did not find expected string in standard output."
-    print "Expected =========================================================="
-    print expect
-    print "Output ============================================================"
-    print test.stdout()
-    test.fail_test()
+test.must_contain_all_lines(test.stdout(), [expect])
 
 
 
@@ -109,13 +101,7 @@ classes/foo/bar/a.class
 classes/foo/bar/b.class
 """
 
-if string.find(test.stdout(), expect) == -1:
-    print "Did not find expected string in standard output."
-    print "Expected =========================================================="
-    print expect
-    print "Output ============================================================"
-    print test.stdout()
-    test.fail_test()
+test.must_contain_all_lines(test.stdout(), [expect])
 
 
 
index a95b181dad702e836d87436df11795243723c9d8..0373a1e5ac46c05c4d4069464aaa9c2976613800 100644 (file)
@@ -28,7 +28,6 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 Test the PRINT_CMD_LINE_FUNC construction variable.
 """
 
-import string
 import sys
 import TestCmd
 import TestSCons
@@ -60,14 +59,7 @@ expected_lines = [
     "BUILDING prog%s from prog%s with" % (_exe, _obj),
 ]
 
-missing_lines = filter(lambda l: string.find(test.stdout(), l) == -1,
-                       expected_lines)
-if missing_lines:
-    print "Expected the following lines in STDOUT:"
-    print "\t" + string.join(expected_lines, "\n\t")
-    print "ACTUAL STDOUT =========="
-    print test.stdout()
-    test.fail_test(1)
+test.must_contain_all_lines(test.stdout(), expected_lines)
 
 test.run(arguments = '-c .')
 
index e979b91d4cec88aa24e928c2d751a16631ecd71a..9d7907d6d254d0f69387c6d34bf4567d11c50f81 100644 (file)
@@ -25,7 +25,6 @@
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import os.path
-import string
 
 import TestSCons
 
@@ -152,6 +151,6 @@ ParseDepends('nonexistent_file', must_exist=1)
 
 test.run(status=2, stderr=None)
 
-test.fail_test(string.find(test.stderr(), "No such file or directory") == -1)
+test.must_contain_all_lines(test.stderr(), ["No such file or directory"])
 
 test.pass_test()
index bf8edffd8f32bc3c31ededc323b38fccb1d9effd..f3c412b3b38833aaf1d5d834854ceade2a3d3a32 100644 (file)
@@ -28,8 +28,6 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 Test building Java applications when using Repositories.
 """
 
-import string
-
 import TestSCons
 
 python = TestSCons.python
@@ -275,8 +273,12 @@ public class Foo2 extends UnicastRemoteObject implements Hello {
 
 test.run(chdir = 'work1', options = opts, arguments = ".")
 
-test.fail_test(string.find(test.stdout(), ' src/Foo1.java src/Foo2.java') == -1)
-test.fail_test(string.find(test.stdout(), ' com.sub.foo.Foo1 com.sub.foo.Foo2') == -1)
+expect = [
+    ' src/Foo1.java src/Foo2.java',
+    ' com.sub.foo.Foo1 com.sub.foo.Foo2',
+]
+
+test.must_contain_all_lines(test.stdout(), expect)
 
 # XXX I'd rather run the resulting class files through the JVM here to
 # see that they were built from the proper work1 sources, but I don't
index ee29143e4490159fd02b091aef9b3003359e178e..1845dc31fab4986b01da039b0a433d620c535e55 100644 (file)
@@ -123,14 +123,7 @@ cat(["sub/fff.out"], ["sub/fff.in"])
 cat(["sub/all"], ["sub/ddd.out", "sub/eee.out", "sub/fff.out"])
 """, '\n')
 
-stdout = test.stdout()
-missing = filter(lambda l, s=stdout: string.find(s, l) == -1, lines)
-if missing:
-    print "Missing the following output lines:"
-    print string.join(missing, '\n')
-    print "Actual STDOUT =========="
-    print stdout
-    test.fail_test(1)
+test.must_contain_all_lines(test.stdout(), lines)
 
 test.must_match('all', """\
 s.aaa.in aaa.in
index 0a52acefd77407bd0172d9afbfaea2ba85c69ea6..dbfcb5139872832e7824a945eb5001d0fd991512 100644 (file)
@@ -109,14 +109,7 @@ cat(["sub/fff.out"], ["sub/fff.in"])
 cat(["sub/all"], ["sub/ddd.out", "sub/eee.out", "sub/fff.out"])
 """, '\n')
 
-stdout = test.stdout()
-missing = filter(lambda l, s=stdout: string.find(s, l) == -1, lines)
-if missing:
-    print "Missing the following output lines:"
-    print string.join(missing, '\n')
-    print "Actual STDOUT =========="
-    print stdout
-    test.fail_test(1)
+test.must_contain_all_lines(test.stdout(), lines)
 
 test.must_match('all', """\
 %F% aaa.in
index eca8e0c4ea44bcfb988627d317b825b55e2538f1..aa5501fc9cb22dd6849ef2f3fd5fd24a82a339f5 100644 (file)
@@ -75,14 +75,7 @@ sccs get foo.c
 sccs get foo.h
 """, '\n')
 
-stdout = test.stdout()
-missing = filter(lambda l, s=stdout: string.find(s, l) == -1, lines)
-if missing:
-    print "Missing the following output lines:"
-    print string.join(missing, '\n')
-    print "Actual STDOUT =========="
-    print stdout
-    test.fail_test(1)
+test.must_contain_all_lines(test.stdout(), lines)
 
 
 
index 384e27cf019d291c5b836b305d3fbeba4158c0ff..82577d21767b0755c9e9e372389e310dd4f3a8ad 100644 (file)
@@ -109,14 +109,7 @@ cat(["sub/fff.out"], ["sub/fff.in"])
 cat(["sub/all"], ["sub/ddd.out", "sub/eee.out", "sub/fff.out"])
 """, '\n')
 
-stdout = test.stdout()
-missing = filter(lambda l, s=stdout: string.find(s, l) == -1, lines)
-if missing:
-    print "Missing the following output lines:"
-    print string.join(missing, '\n')
-    print "Actual STDOUT =========="
-    print stdout
-    test.fail_test(1)
+test.must_contain_all_lines(test.stdout(), lines)
 
 test.must_match('all', """\
 s.aaa.in aaa.in
index fd0049c354b971ea456f887da1c25a0d226bfca1..e64e68733dd935ebb7939560f64d1104d6440a76 100644 (file)
@@ -25,7 +25,6 @@
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import os
-import string
 
 import TestCmd
 import TestSCons
@@ -61,8 +60,8 @@ test.run(stdout = expect,
 # for the deprecation warning.
 test.run(arguments = "-H")
 
-test.fail_test(string.find(test.stdout(), 'Help text.') >= 0)
-test.fail_test(string.find(test.stdout(), '-H, --help-options') == -1)
+test.must_not_contain_any_line(test.stdout(), ['Help text.'])
+test.must_contain_all_lines(test.stdout(), ['-H, --help-options'])
 
 os.environ['SCONSFLAGS'] = '-Z'
 
index 7c9bc27c6b3d2158d874bbbd534f8b77d9a41c69..de4f578bb7678dfcdd73ce1aa4d0541d6a619642 100644 (file)
@@ -29,8 +29,6 @@ Verify that targets with the same SideEffect are not built in parallel
 when the -j option is used.
 """
 
-import string
-
 import TestSCons
 
 _python_ = TestSCons._python_
@@ -80,8 +78,6 @@ test.write('baz.in', 'baz.in\n')
 
 test.run(arguments = "-j 4 .")
 
-stdout = test.stdout()
-
 
 build_lines =  [
     'build.py h1.in h1.out', 
@@ -89,20 +85,7 @@ build_lines =  [
     'build.py f3.in f3.out', 
 ]
 
-missing = []
-for line in build_lines:
-    if string.find(stdout, line) == -1:
-        missing.append(line)
-
-if missing:
-    print "===== standard output is missing the following lines:"
-    print string.join(missing, '\n')
-    print "===== STDOUT ========================================"
-    print stdout
-    test.fail_test()
-
-
-log = test.read('log.txt')
+test.must_contain_all_lines(test.stdout(), build_lines)
 
 log_lines = [
     'f3.in -> f3.out',
@@ -110,17 +93,7 @@ log_lines = [
     'g2.in -> g2.out',
 ]
 
-missing = []
-for line in log_lines:
-    if string.find(log, line) == -1:
-        missing.append(line)
-
-if missing:
-    print "===== log file 'log.txt' is missing the following lines:"
-    print string.join(missing, '\n')
-    print "===== STDOUT ==========================================="
-    print log
-    test.fail_test()
+test.must_contain_all_lines(test.read('log.txt'), log_lines)
 
 
 test.pass_test()
index a1943c0fc2d0e07e6c8f64382f3ac7b936fcbf0c..1e09af2f533289490c80d0bb12e47b711c54f331 100644 (file)
@@ -31,8 +31,6 @@ be aware of the necessary created bibliography files.
 Test configuration contributed by Christopher Drexler.
 """
 
-import string
-
 import TestSCons
 
 test = TestSCons.TestSCons()
@@ -111,7 +109,7 @@ test.must_exist(test.workpath('simple.blg'))
 test.run(arguments = '-c .')
 
 x = "Could not remove 'simple.aux': No such file or directory"
-test.fail_test(string.find(test.stdout(), x) != -1)
+test.must_not_contain_any_line(test.stdout(), [x])
 
 test.must_not_exist(test.workpath('simple.aux'))
 test.must_not_exist(test.workpath('simple.bbl'))
index 765ef4db9a033e662c0a34cd2498eb4c72b2f461..a41c9a7ce9a7ede04b592db9f1a411a9a4e1cd12 100644 (file)
@@ -31,8 +31,6 @@ aware of the necessary created index files.
 Test configuration courtesy Joel B. Mohler.
 """
 
-import string
-
 import TestSCons
 
 test = TestSCons.TestSCons()
@@ -93,9 +91,9 @@ test.must_not_exist(test.workpath('no_index.ind'))
 test.run(arguments = '-c .')
 
 x = "Could not remove 'no_index.aux': No such file or directory"
-test.fail_test(string.find(test.stdout(), x) != -1)
+test.must_not_contain_any_line(test.stdout(), [x])
 x = "Could not remove 'simple.aux': No such file or directory"
-test.fail_test(string.find(test.stdout(), x) != -1)
+test.must_not_contain_any_line(test.stdout(), [x])
 
 test.must_not_exist(test.workpath('simple.aux'))
 test.must_not_exist(test.workpath('simple.idx'))
index 2659e16bb82f56356ed769bf5cb709182bf957dd..acca069a257f0d6ca5a6ceae756be5d4986c5235 100644 (file)
@@ -32,8 +32,6 @@ correctly re-run to resolve undefined references.
 Also verifies that package warnings are caught and re-run as needed.
 """
 
-import string
-
 import TestSCons
 
 test = TestSCons.TestSCons()
@@ -151,10 +149,7 @@ env.PDF( "foo.tex" )
     test.must_exist(['work1', 'foo.bbl'])
 
     foo_log = test.read(['work1', 'foo.log'])
-    if string.find(foo_log, 'undefined references') != -1:
-        print 'foo.log contains "undefined references":'
-        print foo_log
-        test.fail_test(1)
+    test.must_not_contain_any_line(foo_log, ['undefined references'], 'foo.log')
 
     test.write(['work3', 'SConstruct'], """\
 import os
@@ -168,10 +163,7 @@ env.DVI( "foo3.tex" )
     test.run(chdir = 'work3', arguments = '.')
 
     foo_log = test.read(['work3', 'foo3.log'])
-    if string.find(foo_log, 'Rerun LaTeX') != -1:
-        print 'foo.log contains "Rerun LaTeX":'
-        print foo_log
-        test.fail_test(1)
+    test.must_not_contain_any_line(foo_log, ['Rerun LaTeX'], 'foo3.log')
 
 
 
@@ -193,10 +185,7 @@ env.PDF( "foo.ltx" )
     test.must_exist(['work2', 'foo.bbl'])
 
     foo_log = test.read(['work2', 'foo.log'])
-    if string.find(foo_log, 'undefined references') != -1:
-        print 'foo.log contains "undefined references":'
-        print foo_log
-        test.fail_test(1)
+    test.must_not_contain_any_line(foo_log, ['undefined references'], 'foo.log')
 
     test.write(['work3', 'SConstruct'], """\
 import os
@@ -211,10 +200,7 @@ env.PDF( "foo3.tex" )
     test.run(chdir = 'work3', arguments = '.')
 
     foo_log = test.read(['work3', 'foo3.log'])
-    if string.find(foo_log, 'Rerun LaTeX') != -1:
-        print 'foo.log contains "Rerun LaTeX":'
-        print foo_log
-        test.fail_test(1)
+    test.must_not_contain_any_line(foo_log, ['Rerun LaTeX'], 'foo3.log')
 
 
     test.write(['work4', 'SConstruct'], """\
index 01647e39ac4629dd0f3364b2a3355a8966750f20..01cb3706d0c003ed028d281ce2a2c6b3ab3a10a1 100644 (file)
@@ -26,7 +26,6 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import os
 import re
-import string
 import sys
 import TestSCons
 import TestCmd
@@ -99,10 +98,7 @@ for source_signature in ['MD5', 'timestamp-newer']:
     out3 = """create\\(\\["f3.out"\\], \\[<.*.Custom instance at """
     #" <- unconfuses emacs syntax highlighting
 
-    test.fail_test(string.find(test.stdout(), out1) == -1)
-    test.fail_test(string.find(test.stdout(), out2) == -1)
-    test.fail_test(string.find(test.stdout(), out7) == -1)
-    test.fail_test(string.find(test.stdout(), out8) == -1)
+    test.must_contain_all_lines(test.stdout(), [out1, out2, out7, out8])
     test.fail_test(re.search(out3, test.stdout()) == None)
 
     test.must_match('f1.out', "/usr/local")
@@ -118,8 +114,7 @@ for source_signature in ['MD5', 'timestamp-newer']:
     out5 = """create(["f2.out"], [4])"""
     out6 = """create\\(\\["f3.out"\\], \\[<.*.Custom instance at """
     #" <- unconfuses emacs syntax highlighting
-    test.fail_test(string.find(test.stdout(), out4) == -1)
-    test.fail_test(string.find(test.stdout(), out5) == -1)
+    test.must_contain_all_lines(test.stdout(), [out4, out5])
     test.fail_test(re.search(out6, test.stdout()) == None)
 
     test.must_match('f1.out', "/usr")
@@ -134,10 +129,8 @@ for source_signature in ['MD5', 'timestamp-newer']:
     test.run(arguments='prefix=/var')
     out4 = """create(["f1.out"], ['/var'])"""
 
-    test.fail_test(string.find(test.stdout(), out4) == -1)
-    test.fail_test(string.find(test.stdout(), out5) != -1)
-    test.fail_test(string.find(test.stdout(), out7) == -1)
-    test.fail_test(string.find(test.stdout(), out8) == -1)
+    test.must_contain_all_lines(test.stdout(), [out4, out7, out8])
+    test.must_not_contain_any_line(test.stdout(), [out5])
     test.fail_test(re.search(out6, test.stdout()) == None)
 
     test.up_to_date('prefix=/var', '.')
index deb52a07f5a2bcf8404218c3a53a7a8f28d8574b..88260c05a86d1411f3c6884b0897432311b72807 100644 (file)
@@ -25,8 +25,8 @@
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import os
-import string
 import sys
+
 import TestSCons
 
 _python_ = TestSCons._python_
@@ -116,9 +116,7 @@ env.Command(target='foo.out', source=[], action='not_a_program')
 """)
 
 test.run(status=2, stderr=None)
-err = test.stderr()
-test.fail_test(string.find(err, 'Exception') != -1 or \
-               string.find(err, 'Traceback') != -1)
+test.must_not_contain_any_line(test.stderr(), ['Exception', 'Traceback'])
 
 
 # Test ETOOLONG (arg list too long).  This is not in exitvalmap,
@@ -133,14 +131,17 @@ env.Command(target='longcmd.out', source=[], action='echo %s')
 """%long_cmd)
 
 test.run(status=2, stderr=None)
-err = test.stderr()
-test.fail_test(string.find(err, 'Exception') != -1 or \
-               string.find(err, 'Traceback') != -1)
+
+test.must_not_contain_any_line(test.stderr(), ['Exception', 'Traceback'])
+
 # Python 1.5.2 on a FC3 system doesn't even get to the exitvalmap
 # because it fails with "No such file or directory."  Just comment
 # this out for now, there are plenty of other good tests below.
-#test.fail_test(string.find(err, "too long") == -1 and # posix
-#             string.find(err, "nvalid argument") == -1) # win32
+#expected = [
+#    "too long", # posix
+#    "nvalid argument", # win32
+#]
+#test.must_contain_any_line(test.stderr(), expected)
 
 
 # Test bad shell ('./one' is a dir, so it can't be used as a shell).
@@ -156,15 +157,13 @@ env.Command(target='badshell.out', source=[], action='foo')
 """)
 
 test.run(status=2, stderr=None)
-err = test.stderr()
-if string.find(err, 'Exception') != -1 or string.find(err, 'Traceback') != -1:
-    print "Exception or Traceback found in the following error output:"
-    print err
-    test.fail_test()
-if string.find(err, 'ermission') == -1 and string.find(err, 'such file') == -1:
-    print "Missing '[Pp]ermission' or 'such file' string in the following error output:"
-    print err
-    test.fail_test()
+test.must_not_contain_any_line(test.stderr(), ['Exception', 'Traceback'])
+expect = [
+    'No such file',
+    'Permission denied',
+    'permission denied',
+]
+test.must_contain_any_line(test.stderr(), expect)
 
 
 # Test command with exit status -1.
@@ -176,9 +175,7 @@ env.Command('dummy.txt', None, ['python -c "import sys; sys.exit(-1)"'])
 """)
 
 test.run(status=2, stderr=None)
-err = test.stderr()
-test.fail_test(string.find(err, 'Exception') != -1 or \
-               string.find(err, 'Traceback') != -1)
+test.must_not_contain_any_line(test.stderr(), ['Exception', 'Traceback'])
 
 
 # Test SConscript with errors and an atexit function.
@@ -202,9 +199,7 @@ atexit.register(print_build_failures)
 """)
 
 test.run(status=2, stderr=None)
-err = test.stderr()
-test.fail_test(string.find(err, 'Exception') != -1 or \
-               string.find(err, 'Traceback') != -1)
+test.must_not_contain_any_line(test.stderr(), ['Exception', 'Traceback'])
 
 
 # No tests failed; OK.
index b8ef2fe7a7e69a000bbdcbf95f0e46fb39baadca..7e099c187b971e5c7089408677ad8e3ced4f3254 100644 (file)
@@ -30,8 +30,6 @@ control where or not we look for on-disk matches files and directories
 that we look up.
 """
 
-import string
-
 import TestSCons
 
 test = TestSCons.TestSCons()
@@ -50,7 +48,7 @@ File('subdir')
 test.run()
 
 test.run(arguments='--diskcheck=match', status=2, stderr=None)
-test.fail_test(string.find(test.stderr(), "found where file expected") == -1)
+test.must_contain_all_lines(test.stderr(), ["found where file expected"])
 
 
 
@@ -62,7 +60,7 @@ Dir('file')
 test.run()
 
 test.run(arguments='--diskcheck=match', status=2, stderr=None)
-test.fail_test(string.find(test.stderr(), "found where directory expected") == -1)
+test.must_contain_all_lines(test.stderr(), ["found where directory expected"])
 
 
 
@@ -74,7 +72,7 @@ Dir('file/subdir')
 test.run()
 
 test.run(arguments='--diskcheck=match', status=2, stderr=None)
-test.fail_test(string.find(test.stderr(), "found where directory expected") == -1)
+test.must_contain_all_lines(test.stderr(), ["found where directory expected"])
 
 
 
index 98e3e834db30a25b6b137bd2a8debb2b55dd4c63..12efdf0a6be03678f0f00f5c50b64668db96f365 100644 (file)
@@ -26,7 +26,6 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import os
 import re
-import string
 import sys
 import TestSCons
 import TestCmd
@@ -122,18 +121,7 @@ expected_stderr_list = [
 
 test.run(arguments = '-j7 -k .', status = 2, stderr = None)
 
-missing = []
-for es in expected_stderr_list:
-    if string.find(test.stderr(), es) == -1:
-        missing.append(es)
-
-if missing:
-    sys.stderr.write("Missing the following lines from stderr:\n")
-    for m in missing:
-        sys.stderr.write(m)
-    sys.stderr.write('STDERR ===============================================\n')
-    sys.stderr.write(test.stderr())
-    test.fail_test(1)
+test.must_contain_all_lines(test.stderr(), expected_stderr_list)
 
 
 test.pass_test()
index cf41640a906d05f4fc0159ac96b13ec1599a5fe2..a2afcc5f52593ba6824980b780525692a6b26ede 100644 (file)
@@ -29,8 +29,6 @@ Test that --implicit-cache works correctly in conjonction with a
 builder that produces multiple targets.
 """
 
-import string
-
 import TestSCons
 
 test = TestSCons.TestSCons()
@@ -84,7 +82,7 @@ test.must_exist('x.lib')
 test.must_exist('x.a')
 test.must_exist('x.b')
 
-test.fail_test(string.find(test.stdout(), 'Copy') == -1)
+test.must_contain_all_lines(test.stdout(), ['Copy'])
 
 # Double check that targets are not rebuilt.
 test.run(arguments = '.')
@@ -93,7 +91,7 @@ test.must_exist('x.lib')
 test.must_exist('x.a')
 test.must_exist('x.b')
 
-test.fail_test(string.find(test.stdout(), 'Copy') != -1)
+test.must_not_contain_any_line(test.stdout(), ['Copy'])
 
 # Double check that targets are not rebuilt even with --implicit-cache
 test.run(arguments = '--implicit-cache x.a')
@@ -102,7 +100,7 @@ test.must_exist('x.lib')
 test.must_exist('x.a')
 test.must_exist('x.b')
 
-test.fail_test(string.find(test.stdout(), 'Copy') != -1)
+test.must_not_contain_any_line(test.stdout(), ['Copy'])
 
 # Double check that targets are not rebuilt even with --implicit-cache
 # a second time.
@@ -112,7 +110,7 @@ test.must_exist('x.lib')
 test.must_exist('x.a')
 test.must_exist('x.b')
 
-test.fail_test(string.find(test.stdout(), 'Copy') != -1)
+test.must_not_contain_any_line(test.stdout(), ['Copy'])
 
 # Double check that targets are not rebuilt if we reran without
 # --implicit-cache
@@ -122,7 +120,7 @@ test.must_exist('x.lib')
 test.must_exist('x.a')
 test.must_exist('x.b')
 
-test.fail_test(string.find(test.stdout(), 'Copy') != -1)
+test.must_not_contain_any_line(test.stdout(), ['Copy'])
 
 # Double check again
 test.run(arguments = '.')
@@ -131,7 +129,7 @@ test.must_exist('x.lib')
 test.must_exist('x.a')
 test.must_exist('x.b')
 
-test.fail_test(string.find(test.stdout(), 'Copy') != -1)
+test.must_not_contain_any_line(test.stdout(), ['Copy'])
 
 # Then only of the targets using --implicit-cache
 test.pass_test()
index 3b6ba977c54bd03c156c88d96966c664a2a5321e..eb3e6093ea52f44f1cd046f1e2c9c677e8ebfdeb 100644 (file)
@@ -35,8 +35,6 @@ done to speed-up a partial rebuild when the developer knows that only
 a subset of the targets need to be rebuilt.
 """
 
-import string
-
 import TestSCons
 
 test = TestSCons.TestSCons()
@@ -92,12 +90,12 @@ test.must_not_exist('build/dir1/x.cpp')
 # Build everything first.
 test.run(arguments = 'duplicate=False view_all_dependencies=True .')
 test.must_exist('build/dir1/x.cpp')
-test.fail_test(string.find(test.stdout(), "`.' is up to date.") != -1)
+test.must_not_contain_any_line(test.stdout(), ["`.' is up to date."])
 
 # Double check that targets are not rebuilt.
 test.run(arguments = 'duplicate=False view_all_dependencies=True .')
 test.must_exist('build/dir1/x.cpp')
-test.fail_test(string.find(test.stdout(), "`.' is up to date.") == -1)
+test.must_contain_all_lines(test.stdout(), ["`.' is up to date."])
 
 # Clean-up only the object file
 test.run(arguments = 'duplicate=False view_all_dependencies=False -c .')
@@ -106,17 +104,17 @@ test.must_exist('build/dir1/x.cpp')
 # Rebuild the only object file without seeing all the dependencies.
 test.run(arguments = 'duplicate=False view_all_dependencies=False .')
 test.must_exist('build/dir1/x.cpp')
-test.fail_test(string.find(test.stdout(), "`.' is up to date.") != -1)
+test.must_not_contain_any_line(test.stdout(), ["`.' is up to date."])
 
 # Double check that targets are not rebuilt without and with all the
 # dependencies.
 test.run(arguments = 'duplicate=False view_all_dependencies=False .')
 test.must_exist('build/dir1/x.cpp')
-test.fail_test(string.find(test.stdout(), "`.' is up to date.") == -1)
+test.must_contain_all_lines(test.stdout(), ["`.' is up to date."])
 
 test.run(arguments = 'duplicate=False view_all_dependencies=True .')
 test.must_exist('build/dir1/x.cpp')
-test.fail_test(string.find(test.stdout(), "`.' is up to date.") == -1)
+test.must_contain_all_lines(test.stdout(), ["`.' is up to date."])
 
 # Clean-up everything.
 test.run(arguments = 'duplicate=False view_all_dependencies=True -c .')
@@ -136,12 +134,12 @@ test.must_not_exist('build/dir1/x.cpp')
 # # Build everything first.
 # test.run(arguments = 'duplicate=True view_all_dependencies=True .')
 # test.must_exist('build/dir1/x.cpp')
-# test.fail_test(string.find(test.stdout(), "`.' is up to date.") != -1)
+# test.must_not_contain_any_line(test.stdout(), ["`.' is up to date."])
 
 # # Double check that targets are not rebuilt.
 # test.run(arguments = 'duplicate=True view_all_dependencies=True .')
 # test.must_exist('build/dir1/x.cpp')
-# test.fail_test(string.find(test.stdout(), "`.' is up to date.") == -1)
+# test.must_contain_all_lines(test.stdout(), ["`.' is up to date."])
 
 # # Clean-up only the object file
 # test.run(arguments = 'duplicate=True view_all_dependencies=False -c .')
@@ -150,17 +148,17 @@ test.must_not_exist('build/dir1/x.cpp')
 # # Rebuild the only object file without seeing all the dependencies.
 # test.run(arguments = 'duplicate=True view_all_dependencies=False .')
 # test.must_exist('build/dir1/x.cpp')
-# test.fail_test(string.find(test.stdout(), "`.' is up to date.") != -1)
+# test.must_not_contain_any_line(test.stdout(), ["`.' is up to date."])
 
 # # Double check that targets are not rebuilt without and with all the
 # # dependencies.
 # test.run(arguments = 'duplicate=True view_all_dependencies=False .')
 # test.must_exist('build/dir1/x.cpp')
-# test.fail_test(string.find(test.stdout(), "`.' is up to date.") == -1)
+# test.must_contain_all_lines(test.stdout(), ["`.' is up to date."])
 
 # test.run(arguments = 'duplicate=True view_all_dependencies=True .')
 # test.must_exist('build/dir1/x.cpp')
-# test.fail_test(string.find(test.stdout(), "`.' is up to date.") == -1)
+# test.must_contain_all_lines(test.stdout(), ["`.' is up to date."])
 
 # # Clean-up everything.
 # test.run(arguments = 'duplicate=True view_all_dependencies=True -c .')
index ffb290cd0de165f7ef743d2658f68e012b9beac2..4a3669bbc82e9ca1266596f0019a1abe1388d918 100644 (file)
@@ -146,7 +146,7 @@ warn = \
 """scons: warning: parallel builds are unsupported by this version of Python;
 \tignoring -j or num_jobs option.
 """
-test.fail_test(string.find(test.stderr(), warn) == -1)
+test.must_contain_all_lines(test.stderr(), [warn])
 
 str = test.read("f1")
 start1,finish1 = map(float, string.split(str, "\n"))
index de9b2887ec321aab30014b9c4b98dce8d207b044..b923306b9b8e07cb0ee063e192c9564fedef6e47 100644 (file)
@@ -31,7 +31,6 @@ dependencies of a target.
 
 import TestSCons
 import sys
-import string
 import re
 import time
 
@@ -88,13 +87,7 @@ includes = """
 """
 test.run(arguments = "--debug=includes foo.obj")
 
-if string.find(test.stdout(), includes) == -1:
-    print "Did not find expected string in standard output."
-    print "Expected =========================================================="
-    print includes
-    print "Actual ============================================================"
-    print test.stdout()
-    test.fail_test()
+test.must_contain_all_lines(test.stdout(), [includes])
 
 
 
@@ -115,7 +108,7 @@ if string.find(test.stdout(), includes) == -1:
 #test.run(arguments = "--debug=includes foo.exe",
 #         status = 2,
 #         stderr = None)
-#test.fail_test(string.find(test.stdout(), includes) == -1)
+#test.must_contain_all_lines(test.stdout(), [includes])
 
 
 
index 7d984ded77511a50b8d0539564445b453d00655e..709f2b182c781c221bdae608941089e65687a35a 100644 (file)
@@ -30,8 +30,6 @@ Test calling the --debug=memoizer option.
 
 import os
 import new
-import string
-
 import TestSCons
 
 test = TestSCons.TestSCons(match = TestSCons.match_re_dotall)
@@ -85,14 +83,7 @@ if use_metaclass:
 
     def run_and_check(test, args, desc):
         test.run(arguments = args)
-        stdout = test.stdout()
-        missing = filter(lambda e, s=stdout: string.find(s, e) == -1, expect)
-        if missing:
-            print "Missing the following strings in the %s output:" % desc
-            print "    " + string.join(missing, "\n    ")
-            print "STDOUT ============"
-            print stdout
-            test.fail_test()
+        test.must_contain_any_line(test.stdout(), expect)
 
 else:
 
@@ -104,14 +95,7 @@ scons: warning: memoization is not supported in this version of Python \\(%s\\)
 
     def run_and_check(test, args, desc):
         test.run(arguments = args, stderr = expect_no_metaclasses)
-        stdout = test.stdout()
-        present = filter(lambda e, s=stdout: string.find(s, e) != -1, expect)
-        if present:
-            print "The following unexpected strings are present in the %s output:" % desc
-            print "    " + string.join(present, "\n    ")
-            print "STDOUT ============"
-            print stdout
-            test.fail_test()
+        test.must_contain_not_contain_any_line(test.stdout(), expect)
 
 
 for args in ['-h --debug=memoizer', '--debug=memoizer']:
index fa703d54ccd4d06f3ee743e3346713004120e7d4..bd79d7f740212af26b44d8a8f8fb816df19f909d 100644 (file)
@@ -24,8 +24,6 @@
 
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
-import string
-
 import TestSCons
 
 test = TestSCons.TestSCons()
@@ -35,7 +33,6 @@ env = Environment()
 """)
 
 test.run(arguments = "--debug=pdb", stdin = "n\ns\nq\n")
-test.fail_test(string.find(test.stdout(), "(Pdb)") == -1)
-test.fail_test(string.find(test.stdout(), "SCons") == -1)
+test.must_contain_all_lines(test.stdout(), ["(Pdb)", "SCons"])
 
 test.pass_test()
index 93cb20645dedbcb1a4ab0a58af8edadf9061fcd7..80915fd05df6f59e0332759a58f6eb9cd9bceabf 100644 (file)
@@ -29,26 +29,9 @@ Test the --debug=stacktrace option.
 """
 
 import TestSCons
-import sys
-import string
-import re
-import time
 
 test = TestSCons.TestSCons()
 
-def must_contain_all_lines(content, lines):
-    missing = filter(lambda l, c=content: string.find(c, l) == -1, lines)
-    if missing:
-        return [
-                "Missing the following lines:\n",
-                "\t" + string.join(missing, "\n\t") + "\n",
-                "Output =====\n",
-                content
-                ]
-    return None
-
-
-
 test.write('SConstruct', """\
 def kfile_scan(node, env, target):
     raise Exception, "kfile_scan error"
@@ -77,10 +60,7 @@ lines = [
     'raise Exception, "kfile_scan error"',
 ]
 
-err = must_contain_all_lines(test.stderr(), lines)
-if err:
-    print string.join(err, '')
-    test.fail_test(1)
+test.must_contain_all_lines(test.stderr(), lines)
 
 
 
@@ -96,7 +76,7 @@ test.run(arguments = '--debug=stacktrace',
          status = 2,
          stderr = None)
 
-lines = [
+user_error_lines = [
     'UserError: explicit UserError!',
     'scons: *** explicit UserError!',
 ]
@@ -104,15 +84,13 @@ lines = [
 # The "(most recent call last)" message is used by more recent Python
 # versions than the "(innermost last)" message, so that's the one
 # we report if neither matches.
-recent_lines = [ "Traceback (most recent call last)" ] + lines
-inner_lines = [ "Traceback (innermost last)" ] + lines
-
-err = must_contain_all_lines(test.stderr(), recent_lines)
-if err and must_contain_all_lines(test.stderr(), inner_lines):
-    print string.join(err, '')
-    test.fail_test(1)
-
+traceback_lines = [
+    "Traceback (most recent call last)",
+    "Traceback (innermost last)",
+]
 
+test.must_contain_all_lines(test.stderr(), user_error_lines)
+test.must_contain_any_line(test.stderr(), traceback_lines)
 
 # Test that full path names to SConscript files show up in stack traces.
 
@@ -128,10 +106,7 @@ lines = [
     '  File "%s", line 1:' % test.workpath('SConstruct'),
 ]
 
-err = must_contain_all_lines(test.stderr(), lines)
-if err:
-    print string.join(err, '')
-    test.fail_test(1)
+test.must_contain_all_lines(test.stderr(), lines)
 
 
 
index bf6a6ae0d2b17d9eb7aa360ec39c00356b97b125..f9213334752bb89e1c1e8c173f5a85f896a603c4 100644 (file)
 
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
-import string
-
 import TestSCons
 
 test = TestSCons.TestSCons()
 
 test.run(arguments = '-h')
-test.fail_test(string.find(test.stdout(), '-h, --help') == -1)
+test.must_contain_all_lines(test.stdout(), ['-h, --help'])
 
 test.run(arguments = '-u -h')
-test.fail_test(string.find(test.stdout(), '-h, --help') == -1)
+test.must_contain_all_lines(test.stdout(), ['-h, --help'])
 
 test.run(arguments = '-U -h')
-test.fail_test(string.find(test.stdout(), '-h, --help') == -1)
+test.must_contain_all_lines(test.stdout(), ['-h, --help'])
 
 test.run(arguments = '-D -h')
-test.fail_test(string.find(test.stdout(), '-h, --help') == -1)
+test.must_contain_all_lines(test.stdout(), ['-h, --help'])
 
 test.write('SConstruct', "")
 
 test.run(arguments = '-h')
-test.fail_test(string.find(test.stdout(), '-h, --help') == -1)
+test.must_contain_all_lines(test.stdout(), ['-h, --help'])
 
 test.run(arguments = '-u -h')
-test.fail_test(string.find(test.stdout(), '-h, --help') == -1)
+test.must_contain_all_lines(test.stdout(), ['-h, --help'])
 
 test.run(arguments = '-U -h')
-test.fail_test(string.find(test.stdout(), '-h, --help') == -1)
+test.must_contain_all_lines(test.stdout(), ['-h, --help'])
 
 test.run(arguments = '-D -h')
-test.fail_test(string.find(test.stdout(), '-h, --help') == -1)
+test.must_contain_all_lines(test.stdout(), ['-h, --help'])
 
 test.pass_test()
index 5f8270fa2b44e20e70b6b875036948b1c3515110..f33ae5244da7888ece55e8d152ef4cd48a6d5136 100644 (file)
@@ -39,8 +39,11 @@ test.write('SConstruct', "")
 
 test.run(arguments = '-H')
 
-test.fail_test(string.find(test.stdout(), '-H, --help-options') == -1)
-test.fail_test(string.find(test.stdout(), '--debug=TYPE') == -1)
+expect = [
+    '-H, --help-options',
+    '--debug=TYPE',
+]
+test.must_contain_all_lines(test.stdout(), expect)
 
 # Validate that the help output lists the options in case-insensitive
 # alphabetical order.
index d0c0ffc853c02a7318b56c4f84798d1be5618485..aafebda1de70b317f34fcde725c94864daa965bd 100644 (file)
@@ -46,7 +46,7 @@ test.write('file.in', "file.in\n")
 scons_prof = test.workpath('scons.prof')
 
 test.run(arguments = "--profile=%s -h" % scons_prof)
-test.fail_test(string.find(test.stdout(), 'usage: scons [OPTION]') == -1)
+test.must_contain_all_lines(test.stdout(), ['usage: scons [OPTION]'])
 
 try:
     save_stdout = sys.stdout
@@ -61,8 +61,7 @@ try:
 finally:
     sys.stdout = save_stdout
 
-test.fail_test(string.find(s, 'Main.py') == -1)
-test.fail_test(string.find(s, '_main') == -1)
+test.must_contain_all_lines(s, ['Main.py', '_main'])
 
 
 
@@ -83,17 +82,18 @@ try:
 finally:
     sys.stdout = save_stdout
 
-test.fail_test(string.find(s, 'Main.py') == -1)
-test.fail_test(string.find(s, '_main') == -1)
-test.fail_test(string.find(s, 'FS.py') == -1)
+test.must_contain_all_lines(s, ['Main.py', '_main', 'FS.py'])
 
 
 
 scons_prof = test.workpath('scons3.prof')
 
 test.run(arguments = "--profile %s --debug=memory -h" % scons_prof)
-test.fail_test(string.find(test.stdout(), 'usage: scons [OPTION]') == -1)
-test.fail_test(string.find(test.stdout(), 'Options:') == -1)
+expect = [
+    'usage: scons [OPTION]',
+    'Options:'
+]
+test.must_contain_all_lines(test.stdout(), expect)
 
 expect = 'Memory before reading SConscript files'
 lines = string.split(test.stdout(), '\n')
index 0a0af7dc506d1e421763bfffd802c8b4adf931fe..d569b31446f91684fc5a3da2e4192f3b2661c1d2 100644 (file)
@@ -134,10 +134,7 @@ tree2 = """
 """ % locals()
 
 test.run(arguments = "--tree=all .")
-if string.find(test.stdout(), tree2) == -1:
-    sys.stdout.write('Did not find expected tree in the following output:\n')
-    sys.stdout.write(test.stdout())
-    test.fail_test()
+test.must_contain_all_lines(test.stdout(), [tree2])
 
 tree3 = """
 +-.
index 43735f8cf98a55a6f2117944716096358d3794da..3f7cb45607c1b2a91f36650cbdd6198e0de329cb 100644 (file)
@@ -31,7 +31,6 @@ dependencies (sources or Depends()) of a target.
 
 import TestSCons
 import sys
-import string
 import re
 import time
 
@@ -80,7 +79,7 @@ dtree1 = """
 """
 
 test.run(arguments = "--tree=derived foo.xxx")
-test.fail_test(string.find(test.stdout(), dtree1) == -1)
+test.must_contain_all_lines(test.stdout(), [dtree1])
 
 dtree2 = """
 +-.
@@ -92,7 +91,7 @@ dtree2 = """
 """
 
 test.run(arguments = "--tree=derived .")
-test.fail_test(string.find(test.stdout(), dtree2) == -1)
+test.must_contain_all_lines(test.stdout(), [dtree2])
 
 dtree3 = """
 +-.
@@ -104,7 +103,7 @@ dtree3 = """
 """
 
 test.run(arguments = "--tree=derived,prune .")
-test.fail_test(string.find(test.stdout(), dtree3) == -1)
+test.must_contain_all_lines(test.stdout(), [dtree3])
 
 dtree4 = """
  E         = exists
@@ -126,7 +125,7 @@ dtree4 = """
 test.run(arguments = '-c foo.xxx')
 
 test.run(arguments = "--no-exec --tree=derived,status foo.xxx")
-test.fail_test(string.find(test.stdout(), dtree4) == -1)
+test.must_contain_all_lines(test.stdout(), [dtree4])
 
 # Make sure we print the debug stuff even if there's a build failure.
 test.write('bar.h', """
@@ -140,6 +139,6 @@ THIS SHOULD CAUSE A BUILD FAILURE
 test.run(arguments = "--tree=derived foo.xxx",
          status = 2,
          stderr = None)
-test.fail_test(string.find(test.stdout(), dtree1) == -1)
+test.must_contain_all_lines(test.stdout(), [dtree1])
 
 test.pass_test()
index 8858b74423c710dd5674b331cc9a67ad9e2be9a4..d1fdcd276f23059fa7220ab129107c96de1aefdb 100644 (file)
@@ -33,7 +33,6 @@ on disk.)
 Issue 1363:  http://scons.tigris.org/issues/show_bug.cgi?id=1363
 """
 
-import string
 import sys
 
 import TestSCons
@@ -78,10 +77,7 @@ expect = """
 """
 
 test.run(arguments = '--tree=derived foo.h')
-if string.find(test.stdout(), expect) == -1:
-    sys.stdout.write('Did not find expected tree in the following output:\n')
-    sys.stdout.write(test.stdout())
-    test.fail_test()
+test.must_contain_all_lines(test.stdout(), [expect])
 
 test.up_to_date(arguments = 'foo.h')
 
index d0fce837c6b1be03487d332bc744b4bcdd4fc0b6..c08b4ef5f77514ea6bc2805186f6cfc291081634 100644 (file)
@@ -29,7 +29,6 @@ Test the ability to add file tags
 """
 
 import os
-import string
 
 import TestSCons
 
@@ -97,6 +96,6 @@ test.fail_test( not os.popen('rpm -qpl %s' % machine_rpm).read()=='/bin/main\n')
 test.fail_test( not os.popen('rpm -qpl %s' % src_rpm).read()=='foo-1.2.3.spec\nfoo-1.2.3.tar.gz\n')
 
 expect = '(0755, root, users) /bin/main'
-test.fail_test(string.find(test.read('foo-1.2.3.spec'), expect) == -1)
+test.must_contain_all_lines(test.read('foo-1.2.3.spec'), [expect])
 
 test.pass_test()
index 7341ade441f4497de2e2078d4214e5d93d9ecb41..c451b338c4cadb131d6c28a4fa476fcbd5bbaa0b 100644 (file)
@@ -40,18 +40,18 @@ expect = [
 
 test.run(arguments = 'func -h')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.run(arguments = 'func -?')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.run(arguments = 'func --help')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.run(arguments = 'help func')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.pass_test()
index 6fa0fac26e1066efb067f34cacba037b4b85f21d..52842abe757433a80cc81696a0d80f9f67c8971a 100644 (file)
@@ -53,6 +53,6 @@ expect = map(lambda x: '    %s ' % x, subcommands)
 
 test.run(arguments = 'help')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.pass_test()
index 942dfa6e0937faea28642336fcba4e46aadede53..43f442741d134db9ff75d27ace5985eed9c28cd4 100644 (file)
@@ -42,18 +42,18 @@ expect = [
 
 test.run(arguments = 'help')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.run(arguments = '-h')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.run(arguments = '-?')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.run(arguments = '--help')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.pass_test()
index 0658d5b4a36bdf616c78220d5f20dc7a488d0bf2..3adb1213cfeec04c407d0a703a10cb1e0e457db3 100644 (file)
@@ -40,18 +40,18 @@ expect = [
 
 test.run(arguments = 'mem -h')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.run(arguments = 'mem -?')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.run(arguments = 'mem --help')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.run(arguments = 'help mem')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.pass_test()
index 95abad6ea6ce3b73f0ab86157253b571f6cb580e..0f21f4d25f2e2961c0320d031f94ca3d29911e75 100644 (file)
@@ -40,18 +40,18 @@ expect = [
 
 test.run(arguments = 'obj -h')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.run(arguments = 'obj -?')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.run(arguments = 'obj --help')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.run(arguments = 'help obj')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.pass_test()
index 641f1291addb1288e104813b95b1bbb295aafa7e..eebd933f84e46d656c725711ee33d331d221f861 100644 (file)
@@ -66,6 +66,8 @@ expect = [
 
 content = test.read(test.workpath('foo-321-2.log'))
 
-test.must_contain_all_lines('foo-617-2.log', content, expect, re.search)
+def re_find(content, line):
+    return re.search(line, content)
+test.must_contain_all_lines(content, expect, 'foo-617-2.log', re_find)
 
 test.pass_test()
index 304992fdd68b1f891ce1911e4dce6484220e0b78..00a4eb735d33060039c9e3a83b91a4299b9f5743 100644 (file)
@@ -42,18 +42,18 @@ expect = [
 
 test.run(arguments = 'run -h')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.run(arguments = 'run -?')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.run(arguments = 'run --help')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.run(arguments = 'help run')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.pass_test()
index 757f6dffc8afa0c720a7c1c1a8c486effdfe1b20..d265422695dc216b4b8cc8cb3aab134711817f26 100644 (file)
@@ -67,6 +67,8 @@ expect = [
 
 content = test.read(test.workpath('foo-617-2.log'), mode='r')
 
-test.must_contain_all_lines('foo-617-2.log', content, expect, re.search)
+def re_find(content, line):
+    return re.search(line, content)
+test.must_contain_all_lines(content, expect, 'foo-617-2.log', re_find)
 
 test.pass_test()
index 2f7cb67cbd45eb1916ae08f42b51f11ee09f2545..aec4c6fe77224c2e9fbadf9da322c6bb49105f35 100644 (file)
@@ -40,18 +40,18 @@ expect = [
 
 test.run(arguments = 'time -h')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.run(arguments = 'time -?')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.run(arguments = 'time --help')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.run(arguments = 'help time')
 
-test.must_contain_all_lines('Standard output', test.stdout(), expect)
+test.must_contain_all_lines(test.stdout(), expect)
 
 test.pass_test()
index 366d017ec8f4abcb634cfd81f867ff8230cb3141..41d892e17691adb37f3c7aa2992aee0a1e4b58de 100644 (file)
@@ -28,8 +28,6 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 Verify appropriate printing of "is up to date" messages.
 """
 
-import string
-
 import TestSCons
 
 _python_ = TestSCons._python_
@@ -79,19 +77,7 @@ expected_lines = [
 ]
 
 test.run(options = '-j4 f1.out f2.out f3.out f4.out')
-stdout = test.stdout()
-
-missing = []
-for line in expected_lines:
-    if string.find(stdout, line) == -1:
-        missing.append(line)
 
-if missing:
-    print "Missing the following expected lines:"
-    for line in missing:
-        print line
-    print "STDOUT =========="
-    print stdout
-    test.fail_test()
+test.must_contain_all_lines(test.stdout(), expected_lines)
 
 test.pass_test()