diff options
Diffstat (limited to 'utils/lit')
-rw-r--r-- | utils/lit/lit/TestFormats.py | 3 | ||||
-rw-r--r-- | utils/lit/lit/TestRunner.py | 5 | ||||
-rw-r--r-- | utils/lit/lit/discovery.py | 31 | ||||
-rwxr-xr-x | utils/lit/lit/main.py | 2 | ||||
-rw-r--r-- | utils/lit/tests/Inputs/discovery/lit.cfg | 9 | ||||
-rw-r--r-- | utils/lit/tests/Inputs/exec-discovery-in-tree/lit.cfg | 7 | ||||
-rw-r--r-- | utils/lit/tests/Inputs/exec-discovery-in-tree/obj/lit.site.cfg | 4 | ||||
-rw-r--r-- | utils/lit/tests/Inputs/exec-discovery-in-tree/test-one.txt | 1 | ||||
-rw-r--r-- | utils/lit/tests/Inputs/exec-discovery/lit.site.cfg | 5 | ||||
-rw-r--r-- | utils/lit/tests/Inputs/progress-bar/lit.cfg | 5 | ||||
-rw-r--r-- | utils/lit/tests/Inputs/progress-bar/test-1.txt | 1 | ||||
-rw-r--r-- | utils/lit/tests/Inputs/progress-bar/test-2.txt | 1 | ||||
-rw-r--r-- | utils/lit/tests/Inputs/progress-bar/test-3.txt | 1 | ||||
-rw-r--r-- | utils/lit/tests/Inputs/progress-bar/test-4.txt | 1 | ||||
-rw-r--r-- | utils/lit/tests/discovery.py | 85 | ||||
-rw-r--r-- | utils/lit/tests/progress-bar.py | 13 |
16 files changed, 153 insertions, 21 deletions
diff --git a/utils/lit/lit/TestFormats.py b/utils/lit/lit/TestFormats.py index a272976ca0..26541f183b 100644 --- a/utils/lit/lit/TestFormats.py +++ b/utils/lit/lit/TestFormats.py @@ -97,6 +97,9 @@ class GoogleTest(object): if litConfig.useValgrind: cmd = litConfig.valgrindArgs + cmd + if litConfig.noExecute: + return Test.PASS, '' + out, err, exitCode = TestRunner.executeCommand( cmd, env=test.config.environment) diff --git a/utils/lit/lit/TestRunner.py b/utils/lit/lit/TestRunner.py index 07fb43f840..84176996a8 100644 --- a/utils/lit/lit/TestRunner.py +++ b/utils/lit/lit/TestRunner.py @@ -277,7 +277,10 @@ def executeScript(test, litConfig, tmpBase, commands, cwd): script += '.bat' # Write script file - f = open(script,'w') + mode = 'w' + if litConfig.isWindows and not isWin32CMDEXE: + mode += 'b' # Avoid CRLFs when writing bash scripts. + f = open(script, mode) if isWin32CMDEXE: f.write('\nif %ERRORLEVEL% NEQ 0 EXIT\n'.join(commands)) else: diff --git a/utils/lit/lit/discovery.py b/utils/lit/lit/discovery.py index c869a671ef..64a9510f95 100644 --- a/utils/lit/lit/discovery.py +++ b/utils/lit/lit/discovery.py @@ -137,7 +137,7 @@ def getTestsInSuite(ts, path_in_suite, litConfig, # Search subdirectories. for filename in os.listdir(source_path): # FIXME: This doesn't belong here? - if filename in ('Output', '.svn') or filename in lc.excludes: + if filename in ('Output', '.svn', '.git') or filename in lc.excludes: continue # Ignore non-directories. @@ -147,20 +147,31 @@ def getTestsInSuite(ts, path_in_suite, litConfig, # Check for nested test suites, first in the execpath in case there is a # site configuration and then in the source path. - file_execpath = ts.getExecPath(path_in_suite + (filename,)) + subpath = path_in_suite + (filename,) + file_execpath = ts.getExecPath(subpath) if dirContainsTestSuite(file_execpath, litConfig): - sub_ts, subiter = getTests(file_execpath, litConfig, - testSuiteCache, localConfigCache) + sub_ts, subpath_in_suite = getTestSuite(file_execpath, litConfig, + testSuiteCache) elif dirContainsTestSuite(file_sourcepath, litConfig): - sub_ts, subiter = getTests(file_sourcepath, litConfig, - testSuiteCache, localConfigCache) + sub_ts, subpath_in_suite = getTestSuite(file_sourcepath, litConfig, + testSuiteCache) else: - # Otherwise, continue loading from inside this test suite. - subiter = getTestsInSuite(ts, path_in_suite + (filename,), - litConfig, testSuiteCache, - localConfigCache) sub_ts = None + # If the this directory recursively maps back to the current test suite, + # disregard it (this can happen if the exec root is located inside the + # current test suite, for example). + if sub_ts is ts: + continue + + # Otherwise, load from the nested test suite, if present. + if sub_ts is not None: + subiter = getTestsInSuite(sub_ts, subpath_in_suite, litConfig, + testSuiteCache, localConfigCache) + else: + subiter = getTestsInSuite(ts, subpath, litConfig, testSuiteCache, + localConfigCache) + N = 0 for res in subiter: N += 1 diff --git a/utils/lit/lit/main.py b/utils/lit/lit/main.py index da961eeedc..de97a8e1aa 100755 --- a/utils/lit/lit/main.py +++ b/utils/lit/lit/main.py @@ -219,7 +219,7 @@ def main(builtinParameters = {}): group.add_option("", "--shuffle", dest="shuffle", help="Run tests in random order", action="store_true", default=False) - group.add_option("", "--filter", dest="filter", metavar="EXPRESSION", + group.add_option("", "--filter", dest="filter", metavar="REGEX", help=("Only run tests with paths matching the given " "regular expression"), action="store", default=None) diff --git a/utils/lit/tests/Inputs/discovery/lit.cfg b/utils/lit/tests/Inputs/discovery/lit.cfg index 3513bfffd1..4049ab16f9 100644 --- a/utils/lit/tests/Inputs/discovery/lit.cfg +++ b/utils/lit/tests/Inputs/discovery/lit.cfg @@ -1,5 +1,10 @@ config.name = 'top-level-suite' config.suffixes = ['.txt'] config.test_format = lit.formats.ShTest() -config.test_source_root = None -config.test_exec_root = None + +# We intentionally don't set the source root or exec root directories here, +# because this suite gets reused for testing the exec root behavior (in +# ../exec-discovery). +# +#config.test_source_root = None +#config.test_exec_root = None diff --git a/utils/lit/tests/Inputs/exec-discovery-in-tree/lit.cfg b/utils/lit/tests/Inputs/exec-discovery-in-tree/lit.cfg new file mode 100644 index 0000000000..342b2fdd3c --- /dev/null +++ b/utils/lit/tests/Inputs/exec-discovery-in-tree/lit.cfg @@ -0,0 +1,7 @@ +# Verify that the site configuration was loaded. +if config.test_source_root is None or config.test_exec_root is None: + lit.fatal("No site specific configuration") + +config.name = 'exec-discovery-in-tree-suite' +config.suffixes = ['.txt'] +config.test_format = lit.formats.ShTest() diff --git a/utils/lit/tests/Inputs/exec-discovery-in-tree/obj/lit.site.cfg b/utils/lit/tests/Inputs/exec-discovery-in-tree/obj/lit.site.cfg new file mode 100644 index 0000000000..de9a3d0c6d --- /dev/null +++ b/utils/lit/tests/Inputs/exec-discovery-in-tree/obj/lit.site.cfg @@ -0,0 +1,4 @@ +import os +config.test_exec_root = os.path.dirname(__file__) +config.test_source_root = os.path.dirname(config.test_exec_root) +lit.load_config(config, os.path.join(config.test_source_root, "lit.cfg"))
\ No newline at end of file diff --git a/utils/lit/tests/Inputs/exec-discovery-in-tree/test-one.txt b/utils/lit/tests/Inputs/exec-discovery-in-tree/test-one.txt new file mode 100644 index 0000000000..b80b60b7a2 --- /dev/null +++ b/utils/lit/tests/Inputs/exec-discovery-in-tree/test-one.txt @@ -0,0 +1 @@ +# RUN: true diff --git a/utils/lit/tests/Inputs/exec-discovery/lit.site.cfg b/utils/lit/tests/Inputs/exec-discovery/lit.site.cfg new file mode 100644 index 0000000000..796569a301 --- /dev/null +++ b/utils/lit/tests/Inputs/exec-discovery/lit.site.cfg @@ -0,0 +1,5 @@ +# Load the discovery suite, but with a separate exec root. +import os +config.test_exec_root = os.path.dirname(__file__) +config.test_source_root = os.path.join(os.path.dirname(config.test_exec_root), "discovery") +lit.load_config(config, os.path.join(config.test_source_root, "lit.cfg")) diff --git a/utils/lit/tests/Inputs/progress-bar/lit.cfg b/utils/lit/tests/Inputs/progress-bar/lit.cfg new file mode 100644 index 0000000000..4878b65609 --- /dev/null +++ b/utils/lit/tests/Inputs/progress-bar/lit.cfg @@ -0,0 +1,5 @@ +config.name = 'shtest-shell' +config.suffixes = ['.txt'] +config.test_format = lit.formats.ShTest() +config.test_source_root = None +config.test_exec_root = None diff --git a/utils/lit/tests/Inputs/progress-bar/test-1.txt b/utils/lit/tests/Inputs/progress-bar/test-1.txt new file mode 100644 index 0000000000..49932c3006 --- /dev/null +++ b/utils/lit/tests/Inputs/progress-bar/test-1.txt @@ -0,0 +1 @@ +# RUN: false diff --git a/utils/lit/tests/Inputs/progress-bar/test-2.txt b/utils/lit/tests/Inputs/progress-bar/test-2.txt new file mode 100644 index 0000000000..49932c3006 --- /dev/null +++ b/utils/lit/tests/Inputs/progress-bar/test-2.txt @@ -0,0 +1 @@ +# RUN: false diff --git a/utils/lit/tests/Inputs/progress-bar/test-3.txt b/utils/lit/tests/Inputs/progress-bar/test-3.txt new file mode 100644 index 0000000000..49932c3006 --- /dev/null +++ b/utils/lit/tests/Inputs/progress-bar/test-3.txt @@ -0,0 +1 @@ +# RUN: false diff --git a/utils/lit/tests/Inputs/progress-bar/test-4.txt b/utils/lit/tests/Inputs/progress-bar/test-4.txt new file mode 100644 index 0000000000..49932c3006 --- /dev/null +++ b/utils/lit/tests/Inputs/progress-bar/test-4.txt @@ -0,0 +1 @@ +# RUN: false diff --git a/utils/lit/tests/discovery.py b/utils/lit/tests/discovery.py index 54b99d3945..56d9dd07e8 100644 --- a/utils/lit/tests/discovery.py +++ b/utils/lit/tests/discovery.py @@ -5,17 +5,17 @@ # RUN: FileCheck --check-prefix=CHECK-BASIC-OUT < %t.out %s # RUN: FileCheck --check-prefix=CHECK-BASIC-ERR < %t.err %s # -# CHECK-BASIC-ERR: loading suite config '{{.*}}/tests/Inputs/discovery/lit.cfg' -# CHECK-BASIC-ERR: loading local config '{{.*}}/tests/Inputs/discovery/subdir/lit.local.cfg' -# CHECK-BASIC-ERR: loading suite config '{{.*}}/tests/Inputs/discovery/subsuite/lit.cfg' +# CHECK-BASIC-ERR: loading suite config '{{.*}}/discovery/lit.cfg' +# CHECK-BASIC-ERR: loading local config '{{.*}}/discovery/subdir/lit.local.cfg' +# CHECK-BASIC-ERR: loading suite config '{{.*}}/discovery/subsuite/lit.cfg' # # CHECK-BASIC-OUT: -- Test Suites -- # CHECK-BASIC-OUT: sub-suite - 2 tests -# CHECK-BASIC-OUT: Source Root: -# CHECK-BASIC-OUT: Exec Root : +# CHECK-BASIC-OUT: Source Root: {{.*/discovery/subsuite$}} +# CHECK-BASIC-OUT: Exec Root : {{.*/discovery/subsuite$}} # CHECK-BASIC-OUT: top-level-suite - 3 tests -# CHECK-BASIC-OUT: Source Root: -# CHECK-BASIC-OUT: Exec Root : +# CHECK-BASIC-OUT: Source Root: {{.*/discovery$}} +# CHECK-BASIC-OUT: Exec Root : {{.*/discovery$}} # # CHECK-BASIC-OUT: -- Testing: 5 tests, 1 threads -- # CHECK-BASIC-OUT: PASS: sub-suite :: test-one @@ -23,3 +23,74 @@ # CHECK-BASIC-OUT: PASS: top-level-suite :: subdir/test-three # CHECK-BASIC-OUT: PASS: top-level-suite :: test-one # CHECK-BASIC-OUT: PASS: top-level-suite :: test-two + + +# Check discovery when exact test names are given. +# +# RUN: %{lit} \ +# RUN: %{inputs}/discovery/subdir/test-three.py \ +# RUN: %{inputs}/discovery/subsuite/test-one.txt \ +# RUN: -j 1 --no-execute --show-suites -v > %t.out +# RUN: FileCheck --check-prefix=CHECK-EXACT-TEST < %t.out %s +# +# CHECK-EXACT-TEST: -- Testing: 2 tests, 1 threads -- +# CHECK-EXACT-TEST: PASS: sub-suite :: test-one +# CHECK-EXACT-TEST: PASS: top-level-suite :: subdir/test-three + + +# Check discovery when using an exec path. +# +# RUN: %{lit} %{inputs}/exec-discovery \ +# RUN: -j 1 --debug --no-execute --show-suites -v > %t.out 2> %t.err +# RUN: FileCheck --check-prefix=CHECK-ASEXEC-OUT < %t.out %s +# RUN: FileCheck --check-prefix=CHECK-ASEXEC-ERR < %t.err %s +# +# CHECK-ASEXEC-ERR: loading suite config '{{.*}}/exec-discovery/lit.site.cfg' +# CHECK-ASEXEC-ERR: load_config from '{{.*}}/discovery/lit.cfg' +# CHECK-ASEXEC-ERR: loaded config '{{.*}}/discovery/lit.cfg' +# CHECK-ASEXEC-ERR: loaded config '{{.*}}/exec-discovery/lit.site.cfg' +# CHECK-ASEXEC-ERR: loading local config '{{.*}}/discovery/subdir/lit.local.cfg' +# CHECK-ASEXEC-ERR: loading suite config '{{.*}}/discovery/subsuite/lit.cfg' +# +# CHECK-ASEXEC-OUT: -- Test Suites -- +# CHECK-ASEXEC-OUT: sub-suite - 2 tests +# CHECK-ASEXEC-OUT: Source Root: {{.*/discovery/subsuite$}} +# CHECK-ASEXEC-OUT: Exec Root : {{.*/discovery/subsuite$}} +# CHECK-ASEXEC-OUT: top-level-suite - 3 tests +# CHECK-ASEXEC-OUT: Source Root: {{.*/discovery$}} +# CHECK-ASEXEC-OUT: Exec Root : {{.*/exec-discovery$}} +# +# CHECK-ASEXEC-OUT: -- Testing: 5 tests, 1 threads -- +# CHECK-ASEXEC-OUT: PASS: sub-suite :: test-one +# CHECK-ASEXEC-OUT: PASS: sub-suite :: test-two +# CHECK-ASEXEC-OUT: PASS: top-level-suite :: subdir/test-three +# CHECK-ASEXEC-OUT: PASS: top-level-suite :: test-one +# CHECK-ASEXEC-OUT: PASS: top-level-suite :: test-two + + +# Check discovery when exact test names are given. +# +# FIXME: Note that using a path into a subsuite doesn't work correctly here. +# +# RUN: %{lit} \ +# RUN: %{inputs}/exec-discovery/subdir/test-three.py \ +# RUN: -j 1 --no-execute --show-suites -v > %t.out +# RUN: FileCheck --check-prefix=CHECK-ASEXEC-EXACT-TEST < %t.out %s +# +# CHECK-ASEXEC-EXACT-TEST: -- Testing: 1 tests, 1 threads -- +# CHECK-ASEXEC-EXACT-TEST: PASS: top-level-suite :: subdir/test-three + + +# Check that we don't recurse infinitely when loading an site specific test +# suite located inside the test source root. +# +# RUN: %{lit} \ +# RUN: %{inputs}/exec-discovery-in-tree/obj/ \ +# RUN: -j 1 --no-execute --show-suites -v > %t.out +# RUN: FileCheck --check-prefix=CHECK-ASEXEC-INTREE < %t.out %s +# +# CHECK-ASEXEC-INTREE: exec-discovery-in-tree-suite - 1 tests +# CHECK-ASEXEC-INTREE-NEXT: Source Root: {{.*/exec-discovery-in-tree$}} +# CHECK-ASEXEC-INTREE-NEXT: Exec Root : {{.*/exec-discovery-in-tree/obj$}} +# CHECK-ASEXEC-INTREE-NEXT: -- Testing: 1 tests, 1 threads -- +# CHECK-ASEXEC-INTREE-NEXT: PASS: exec-discovery-in-tree-suite :: test-one diff --git a/utils/lit/tests/progress-bar.py b/utils/lit/tests/progress-bar.py new file mode 100644 index 0000000000..d046748508 --- /dev/null +++ b/utils/lit/tests/progress-bar.py @@ -0,0 +1,13 @@ +# Check the simple progress bar. +# +# RUN: not %{lit} -j 1 -s %{inputs}/progress-bar > %t.out +# RUN: FileCheck < %t.out %s +# +# CHECK: Testing: 0 .. 10.. 20 +# CHECK: FAIL: shtest-shell :: test-1.txt (1 of 4) +# CHECK: Testing: 0 .. 10.. 20.. 30.. 40.. +# CHECK: FAIL: shtest-shell :: test-2.txt (2 of 4) +# CHECK: Testing: 0 .. 10.. 20.. 30.. 40.. 50.. 60.. 70 +# CHECK: FAIL: shtest-shell :: test-3.txt (3 of 4) +# CHECK: Testing: 0 .. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90.. +# CHECK: FAIL: shtest-shell :: test-4.txt (4 of 4) |