summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Miedema <thomasmiedema@gmail.com>2016-06-21 18:35:42 +0200
committerThomas Miedema <thomasmiedema@gmail.com>2016-06-28 13:14:02 +0200
commitd8e9b876de8733600f6684b8f91ca2a67078edb4 (patch)
tree62d9b7dfcf4249facfe3966ccd9fe5c8e8d5cbed
parent58f0086b70f2f409b9f88de1611efcf18756f9e5 (diff)
downloadhaskell-d8e9b876de8733600f6684b8f91ca2a67078edb4.tar.gz
Testsuite: cleanup printing of summary
Just use a simple list of tuples, instead of a nested map. -90 lines of code.
-rw-r--r--testsuite/driver/runtests.py4
-rw-r--r--testsuite/driver/testglobals.py23
-rw-r--r--testsuite/driver/testlib.py164
3 files changed, 52 insertions, 139 deletions
diff --git a/testsuite/driver/runtests.py b/testsuite/driver/runtests.py
index b2054fe1dd..efd8b090e7 100644
--- a/testsuite/driver/runtests.py
+++ b/testsuite/driver/runtests.py
@@ -320,8 +320,8 @@ if config.list_broken:
print(' '.join(map (lambda bdn: '#' + str(bdn[0]) + '(' + bdn[1] + '/' + bdn[2] + ')', brokens)))
print('')
- if t.n_framework_failures != 0:
- print('WARNING:', str(t.n_framework_failures), 'framework failures!')
+ if t.framework_failures:
+ print('WARNING:', len(framework_failures), 'framework failures!')
print('')
else:
# Now run all the tests
diff --git a/testsuite/driver/testglobals.py b/testsuite/driver/testglobals.py
index 84921e43bc..2ddd4bf797 100644
--- a/testsuite/driver/testglobals.py
+++ b/testsuite/driver/testglobals.py
@@ -131,23 +131,18 @@ class TestRun:
self.start_time = None
self.total_tests = 0
self.total_test_cases = 0
- self.n_framework_failures = 0
- self.framework_failures = {}
+
self.n_tests_skipped = 0
- self.tests_skipped = {}
self.n_expected_passes = 0
- self.expected_passes = {}
self.n_expected_failures = 0
- self.expected_failures = {}
- self.n_missing_libs = 0
- self.missing_libs = {}
- self.n_unexpected_passes = 0
- self.unexpected_passes = {}
- self.n_unexpected_failures = 0
- self.unexpected_failures = {}
- self.n_unexpected_stat_failures = 0
- self.unexpected_stat_failures = {}
-
+
+ self.missing_libs = []
+ self.framework_failures = []
+
+ self.unexpected_passes = []
+ self.unexpected_failures = []
+ self.unexpected_stat_failures = []
+
global t
t = TestRun()
diff --git a/testsuite/driver/testlib.py b/testsuite/driver/testlib.py
index af1fc66c38..e9548c75fd 100644
--- a/testsuite/driver/testlib.py
+++ b/testsuite/driver/testlib.py
@@ -675,7 +675,7 @@ do_not_copy = ('.hi', '.o', '.dyn_hi', '.dyn_o') # 12112
def test_common_work (name, opts, func, args):
try:
- t.total_tests = t.total_tests+1
+ t.total_tests += 1
setLocalTestOpts(opts)
package_conf_cache_file_start_timestamp = get_package_cache_timestamp()
@@ -696,7 +696,7 @@ def test_common_work (name, opts, func, args):
# A test itself can request extra ways by setting opts.extra_ways
all_ways = all_ways + [way for way in opts.extra_ways if way not in all_ways]
- t.total_test_cases = t.total_test_cases + len(all_ways)
+ t.total_test_cases += len(all_ways)
ok_way = lambda way: \
not getTestOpts().skip \
@@ -761,9 +761,7 @@ def test_common_work (name, opts, func, args):
framework_fail(name, way, str(e))
traceback.print_exc()
- for way in all_ways:
- if way not in do_ways:
- skiptest (name,way)
+ t.n_tests_skipped += len(set(all_ways) - set(do_ways))
if config.cleanup and do_ways:
cleanup()
@@ -782,8 +780,10 @@ def do_test(name, way, func, args, files):
full_name = name + '(' + way + ')'
if_verbose(2, "=====> {0} {1} of {2} {3}".format(
- full_name, t.total_tests, len(allTestNames),
- [t.n_unexpected_passes, t.n_unexpected_failures, t.n_framework_failures]))
+ full_name, t.total_tests, len(allTestNames),
+ [len(t.unexpected_passes),
+ len(t.unexpected_failures),
+ len(t.framework_failures)]))
# Clean up prior to the test, so that we can't spuriously conclude
# that it passed on the basis of old run outputs.
@@ -847,86 +847,38 @@ def do_test(name, way, func, args, files):
except:
passFail = 'No passFail found'
+ directory = re.sub('^\\.[/\\\\]', '', opts.testdir)
+
if passFail == 'pass':
if _expect_pass(way):
- t.n_expected_passes = t.n_expected_passes + 1
- if name in t.expected_passes:
- t.expected_passes[name].append(way)
- else:
- t.expected_passes[name] = [way]
+ t.n_expected_passes += 1
else:
if_verbose(1, '*** unexpected pass for %s' % full_name)
- t.n_unexpected_passes = t.n_unexpected_passes + 1
- addPassingTestInfo(t.unexpected_passes, opts.testdir, name, way)
+ t.unexpected_passes.append((directory, name, 'unexpected', way))
elif passFail == 'fail':
if _expect_pass(way):
reason = result['reason']
tag = result.get('tag')
if tag == 'stat':
if_verbose(1, '*** unexpected stat test failure for %s' % full_name)
- t.n_unexpected_stat_failures = t.n_unexpected_stat_failures + 1
- addFailingTestInfo(t.unexpected_stat_failures, opts.testdir, name, reason, way)
+ t.unexpected_stat_failures.append((directory, name, reason, way))
else:
if_verbose(1, '*** unexpected failure for %s' % full_name)
- t.n_unexpected_failures = t.n_unexpected_failures + 1
- addFailingTestInfo(t.unexpected_failures, opts.testdir, name, reason, way)
+ t.unexpected_failures.append((directory, name, reason, way))
else:
if opts.expect == 'missing-lib':
- t.n_missing_libs = t.n_missing_libs + 1
- if name in t.missing_libs:
- t.missing_libs[name].append(way)
- else:
- t.missing_libs[name] = [way]
+ t.missing_libs.append((directory, name, 'missing-lib', way))
else:
- t.n_expected_failures = t.n_expected_failures + 1
- if name in t.expected_failures:
- t.expected_failures[name].append(way)
- else:
- t.expected_failures[name] = [way]
+ t.n_expected_failures += 1
else:
framework_fail(name, way, 'bad result ' + passFail)
-def addPassingTestInfo (testInfos, directory, name, way):
- directory = re.sub('^\\.[/\\\\]', '', directory)
-
- if not directory in testInfos:
- testInfos[directory] = {}
-
- if not name in testInfos[directory]:
- testInfos[directory][name] = []
-
- testInfos[directory][name].append(way)
-
-def addFailingTestInfo (testInfos, directory, name, reason, way):
- directory = re.sub('^\\.[/\\\\]', '', directory)
-
- if not directory in testInfos:
- testInfos[directory] = {}
-
- if not name in testInfos[directory]:
- testInfos[directory][name] = {}
-
- if not reason in testInfos[directory][name]:
- testInfos[directory][name][reason] = []
-
- testInfos[directory][name][reason].append(way)
-
-def skiptest (name, way):
- # print 'Skipping test \"', name, '\"'
- t.n_tests_skipped = t.n_tests_skipped + 1
- if name in t.tests_skipped:
- t.tests_skipped[name].append(way)
- else:
- t.tests_skipped[name] = [way]
-
-def framework_fail( name, way, reason ):
+def framework_fail(name, way, reason):
+ opts = getTestOpts()
+ directory = re.sub('^\\.[/\\\\]', '', opts.testdir)
full_name = name + '(' + way + ')'
if_verbose(1, '*** framework failure for %s %s ' % (full_name, reason))
- t.n_framework_failures = t.n_framework_failures + 1
- if name in t.framework_failures:
- t.framework_failures[name].append(way)
- else:
- t.framework_failures[name] = [way]
+ t.framework_failures.append((directory, name, way, reason))
def badResult(result):
try:
@@ -1907,89 +1859,55 @@ def summary(t, file, short=False):
+ repr(t.n_tests_skipped).rjust(8)
+ ' were skipped\n'
+ '\n'
- + repr(t.n_missing_libs).rjust(8)
+ + repr(len(t.missing_libs)).rjust(8)
+ ' had missing libraries\n'
+ repr(t.n_expected_passes).rjust(8)
+ ' expected passes\n'
+ repr(t.n_expected_failures).rjust(8)
+ ' expected failures\n'
+ '\n'
- + repr(t.n_framework_failures).rjust(8)
+ + repr(len(t.framework_failures)).rjust(8)
+ ' caused framework failures\n'
- + repr(t.n_unexpected_passes).rjust(8)
+ + repr(len(t.unexpected_passes)).rjust(8)
+ ' unexpected passes\n'
- + repr(t.n_unexpected_failures).rjust(8)
+ + repr(len(t.unexpected_failures)).rjust(8)
+ ' unexpected failures\n'
- + repr(t.n_unexpected_stat_failures).rjust(8)
+ + repr(len(t.unexpected_stat_failures)).rjust(8)
+ ' unexpected stat failures\n'
+ '\n')
- if t.n_unexpected_passes > 0:
+ if t.unexpected_passes:
file.write('Unexpected passes:\n')
- printPassingTestInfosSummary(file, t.unexpected_passes)
+ printTestInfosSummary(file, t.unexpected_passes)
- if t.n_unexpected_failures > 0:
+ if t.unexpected_failures:
file.write('Unexpected failures:\n')
- printFailingTestInfosSummary(file, t.unexpected_failures)
+ printTestInfosSummary(file, t.unexpected_failures)
- if t.n_unexpected_stat_failures > 0:
+ if t.unexpected_stat_failures:
file.write('Unexpected stat failures:\n')
- printFailingTestInfosSummary(file, t.unexpected_stat_failures)
+ printTestInfosSummary(file, t.unexpected_stat_failures)
- if t.n_framework_failures > 0:
- file.write('Test framework failures:\n')
- printFrameworkFailureSummary(file, t.framework_failures)
+ if t.framework_failures:
+ file.write('Framework failures:\n')
+ printTestInfosSummary(file, t.framework_failures)
if stopping():
file.write('WARNING: Testsuite run was terminated early\n')
def printUnexpectedTests(file, testInfoss):
- unexpected = []
- for testInfos in testInfoss:
- directories = testInfos.keys()
- for directory in directories:
- tests = list(testInfos[directory].keys())
- unexpected += tests
- if unexpected != []:
+ unexpected = {name for testInfos in testInfoss
+ for (_, name, _, _) in testInfos}
+ if unexpected:
file.write('Unexpected results from:\n')
file.write('TEST="' + ' '.join(unexpected) + '"\n')
file.write('\n')
-def printPassingTestInfosSummary(file, testInfos):
- directories = list(testInfos.keys())
- directories.sort()
- maxDirLen = max(len(x) for x in directories)
- for directory in directories:
- tests = list(testInfos[directory].keys())
- tests.sort()
- for test in tests:
- file.write(' ' + directory.ljust(maxDirLen + 2) + test + \
- ' (' + ','.join(testInfos[directory][test]) + ')\n')
- file.write('\n')
-
-def printFailingTestInfosSummary(file, testInfos):
- directories = list(testInfos.keys())
- directories.sort()
- maxDirLen = max(len(d) for d in directories)
- for directory in directories:
- tests = list(testInfos[directory].keys())
- tests.sort()
- for test in tests:
- reasons = testInfos[directory][test].keys()
- for reason in reasons:
- file.write(' ' + directory.ljust(maxDirLen + 2) + test + \
- ' [' + reason + ']' + \
- ' (' + ','.join(testInfos[directory][test][reason]) + ')\n')
- file.write('\n')
-
-def printFrameworkFailureSummary(file, testInfos):
- names = list(testInfos.keys())
- names.sort()
- maxNameLen = max(len(n) for n in names)
- for name in names:
- ways = testInfos[name]
- file.write(' ' + name.ljust(maxNameLen + 2) + \
- ' (' + ','.join(ways) + ')\n')
+def printTestInfosSummary(file, testInfos):
+ maxDirLen = max(len(directory) for (directory, _, _, _) in testInfos)
+ for (directory, name, reason, way) in testInfos:
+ directory = directory.ljust(maxDirLen)
+ file.write(' {directory} {name} [{reason}] ({way})\n'.format(**locals()))
file.write('\n')
def modify_lines(s, f):