From 1d7e0281ab1beead3ac25e9a38cb9749e949d7ec Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Wed, 28 Oct 2015 02:36:45 +0000 Subject: [PATCH] lit/TestRunner.py: Factor variable subsitution into an own function; NFCI This is a clearer separation of concerns and makes it easier to reuse the function. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251481 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/lit/lit/TestRunner.py | 51 +++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/utils/lit/lit/TestRunner.py b/utils/lit/lit/TestRunner.py index 94bd73a38a4..78a4fa8e65b 100644 --- a/utils/lit/lit/TestRunner.py +++ b/utils/lit/lit/TestRunner.py @@ -456,13 +456,27 @@ def getDefaultSubstitutions(test, tmpDir, tmpBase, normalize_slashes=False): ]) return substitutions -def parseIntegratedTestScript(test, substitutions, require_script=True): +def applySubstitutions(script, substitutions): + """Apply substitutions to the script. Allow full regular expression syntax. + Replace each matching occurrence of regular expression pattern a with + substitution b in line ln.""" + def processLine(ln): + # Apply substitutions + for a,b in substitutions: + if kIsWindows: + b = b.replace("\\","\\\\") + ln = re.sub(a, b, ln) + + # Strip the trailing newline and any extra whitespace. + return ln.strip() + return map(processLine, script) + +def parseIntegratedTestScript(test, require_script=True): """parseIntegratedTestScript - Scan an LLVM/Clang style integrated test script and extract the lines to 'RUN' as well as 'XFAIL' and 'REQUIRES' - and 'UNSUPPORTED' information. The RUN lines also will have variable - substitution performed. If 'require_script' is False an empty script may be - returned. This can be used for test formats where the actual script is - optional or ignored. + and 'UNSUPPORTED' information. If 'require_script' is False an empty script + may be returned. This can be used for test formats where the actual script + is optional or ignored. """ # Collect the test lines from the script. sourcepath = test.getSourcePath() @@ -504,21 +518,6 @@ def parseIntegratedTestScript(test, substitutions, require_script=True): raise ValueError("unknown script command type: %r" % ( command_type,)) - # Apply substitutions to the script. Allow full regular - # expression syntax. Replace each matching occurrence of regular - # expression pattern a with substitution b in line ln. - def processLine(ln): - # Apply substitutions - for a,b in substitutions: - if kIsWindows: - b = b.replace("\\","\\\\") - ln = re.sub(a, b, ln) - - # Strip the trailing newline and any extra whitespace. - return ln.strip() - script = [processLine(ln) - for ln in script] - # Verify the script contains a run line. if require_script and not script: return lit.Test.Result(Test.UNRESOLVED, "Test has no run line!") @@ -596,16 +595,18 @@ def executeShTest(test, litConfig, useExternalSh, if test.config.unsupported: return (Test.UNSUPPORTED, 'Test is unsupported') - tmpDir, tmpBase = getTempPaths(test) - substitutions = list(extra_substitutions) - substitutions += getDefaultSubstitutions(test, tmpDir, tmpBase, - normalize_slashes=useExternalSh) - script = parseIntegratedTestScript(test, substitutions) + script = parseIntegratedTestScript(test) if isinstance(script, lit.Test.Result): return script if litConfig.noExecute: return lit.Test.Result(Test.PASS) + tmpDir, tmpBase = getTempPaths(test) + substitutions = list(extra_substitutions) + substitutions += getDefaultSubstitutions(test, tmpDir, tmpBase, + normalize_slashes=useExternalSh) + script = applySubstitutions(script, substitutions) + # Re-run failed tests up to test_retry_attempts times. attempts = 1 if hasattr(test.config, 'test_retry_attempts'): -- 2.34.1