Skip to content

Commit

Permalink
tools: make test.py Python 3 compatible
Browse files Browse the repository at this point in the history
PR-URL: #25767
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
Reviewed-By: cclauss <cclauss@me.com>
Reviewed-By: gengjiawen <technicalcute@gmail.com>
  • Loading branch information
thefourtheye authored and addaleax committed Feb 1, 2019
1 parent dee9a61 commit 5e0a326
Showing 1 changed file with 22 additions and 15 deletions.
37 changes: 22 additions & 15 deletions tools/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,12 @@ def cmp(x, y): # Python 3
except NameError:
xrange = range # Python 3

try:
from urllib.parse import unquote # Python 3
except ImportError:
from urllib import unquote # Python 2


logger = logging.getLogger('testrunner')
skip_regex = re.compile(r'# SKIP\S*\s+(.*)', re.IGNORECASE)

Expand Down Expand Up @@ -119,7 +125,7 @@ def Run(self, tasks):
# Spawn N-1 threads and then use this thread as the last one.
# That way -j1 avoids threading altogether which is a nice fallback
# in case of threading problems.
for i in xrange(tasks - 1):
for i in range(tasks - 1):
thread = threading.Thread(target=self.RunSingle, args=[True, i + 1])
threads.append(thread)
thread.start()
Expand Down Expand Up @@ -755,7 +761,7 @@ def Execute(args, context, timeout=None, env={}, faketty=False, disable_core_fil
del env_copy["NODE_PATH"]

# Extend environment
for key, value in env.iteritems():
for key, value in env.items():
env_copy[key] = value

preexec_fn = None
Expand Down Expand Up @@ -808,7 +814,7 @@ def __init__(self, context, root, section):
def Contains(self, path, file):
if len(path) > len(file):
return False
for i in xrange(len(path)):
for i in range(len(path)):
if not path[i].match(NormalizePath(file[i])):
return False
return True
Expand Down Expand Up @@ -1263,7 +1269,7 @@ def GetOutcomes(self, env, defs):
def Contains(self, path):
if len(self.path) > len(path):
return False
for i in xrange(len(self.path)):
for i in range(len(self.path)):
if not self.path[i].match(path[i]):
return False
return True
Expand Down Expand Up @@ -1330,7 +1336,7 @@ def BuildOptions():
help='write test output to file. NOTE: this only applies the tap progress indicator')
result.add_option("-p", "--progress",
help="The style of progress indicator (verbose, dots, color, mono, tap)",
choices=PROGRESS_INDICATORS.keys(), default="mono")
choices=list(PROGRESS_INDICATORS.keys()), default="mono")
result.add_option("--report", help="Print a summary of the tests to be run",
default=False, action="store_true")
result.add_option("-s", "--suite", help="A test suite",
Expand Down Expand Up @@ -1403,15 +1409,15 @@ def ProcessOptions(options):
options.mode = options.mode.split(',')
options.run = options.run.split(',')
# Split at commas and filter out all the empty strings.
options.skip_tests = filter(bool, options.skip_tests.split(','))
options.skip_tests = [test for test in options.skip_tests.split(',') if test]
if options.run == [""]:
options.run = None
elif len(options.run) != 2:
print("The run argument must be two comma-separated integers.")
return False
else:
try:
options.run = map(int, options.run)
options.run = [int(level) for level in options.run]
except ValueError:
print("Could not parse the integers from the run argument.")
return False
Expand Down Expand Up @@ -1479,10 +1485,9 @@ def ExpandCommand(args):
return args
return ExpandCommand
else:
pos = value.find('@')
import urllib
prefix = urllib.unquote(value[:pos]).split()
suffix = urllib.unquote(value[pos+1:]).split()
prefix, _, suffix = value.partition('@')
prefix = unquote(prefix).split()
suffix = unquote(suffix).split()
def ExpandCommand(args):
return prefix + args + suffix
return ExpandCommand
Expand Down Expand Up @@ -1531,8 +1536,8 @@ def PrintCrashed(code):

def ArgsToTestPaths(test_root, args, suites):
if len(args) == 0 or 'default' in args:
def_suites = filter(lambda s: s not in IGNORED_SUITES, suites)
args = filter(lambda a: a != 'default', args) + def_suites
def_suites = [s for s in suites if s not in IGNORED_SUITES]
args = [a for a in args if a != 'default'] + def_suites
subsystem_regex = re.compile(r'^[a-zA-Z-]*$')
check = lambda arg: subsystem_regex.match(arg) and (arg not in suites)
mapped_args = ["*/test*-%s-*" % arg if check(arg) else arg for arg in args]
Expand Down Expand Up @@ -1699,7 +1704,9 @@ def should_keep(case):
else:
return True

cases_to_run = filter(should_keep, all_cases)
cases_to_run = [
test_case for test_case in all_cases if should_keep(test_case)
]

if options.report:
print(REPORT_TEMPLATE % {
Expand All @@ -1716,7 +1723,7 @@ def should_keep(case):
# can be different in different machines
cases_to_run.sort(key=lambda c: (c.arch, c.mode, c.file))
cases_to_run = [ cases_to_run[i] for i
in xrange(options.run[0],
in range(options.run[0],
len(cases_to_run),
options.run[1]) ]
if len(cases_to_run) == 0:
Expand Down

0 comments on commit 5e0a326

Please sign in to comment.