Commit e0d4bdba authored by Dylan Baker's avatar Dylan Baker

summary.py: Treat subtests as groups

This patch causes tests with subtests to be treated as a group, rather
than as a test. This means that the status the test itself stores will
be overwritten by those in the subtest.

There is one oddity about this to be aware of; a test with subtests that
crashes or fails before any of the subtests run will report a fraction
of 0/1 with the appropriate color, even though all of the subtests will
report Not Run.

v2: - Add subtests to the results file as full tests (the internal view
      of the json), without this they will not appear in changes, fixes,
      etc
    - Render the background color of Not Run tests correctly in HTML
    - Apply subtest fractions down the stack
v3: - Don't generate a link for Not Run tests in html page
Tested-by: default avatarBen Widawsky <ben@bwidawsk.net>
Tested-by: default avatarTom Stellard <thomas.stellard@amd.com>
Signed-off-by: Dylan Baker's avatarDylan Baker <baker.dylan.c@gmail.com>
parent 9c127a4e
......@@ -162,8 +162,17 @@ class HTMLIndex(list):
# is a KeyError (a result doesn't contain a particular test),
# return Not Run, with clas skip for highlighting
for each in summary.results:
# If the "group" at the top of the key heirachy contains
# 'subtest' then it is really not a group, link to that page
try:
self._testResult(each.name, key, each.tests[key]['result'])
if each.tests[path.dirname(key)]['subtest']:
href = path.dirname(key)
except KeyError:
href = key
try:
self._testResult(each.name, href,
summary.status[each.name][key])
except KeyError:
self.append({'type': 'other',
'text': '<td class="skip">Not Run</td>'})
......@@ -222,9 +231,17 @@ class HTMLIndex(list):
displaying pass/fail/crash/etc and formatting the cell to the
correct color.
"""
# "Not Run" is not a valid class, if it apears set the class to skip
if isinstance(text, so.NotRun):
css = 'skip'
href = None
else:
css = text
href = path.join(group, href + ".html")
self.append({'type': 'testResult',
'class': text,
'href': path.join(group, href + ".html"),
'class': css,
'href': href,
'text': text})
......@@ -280,19 +297,49 @@ class Summary:
fraction = self.fractions[results.name]
status = self.status[results.name]
# store the results to be appeneded to results. Adding them in the
# loop will cause a RuntimeError
temp_results = {}
for key, value in results.tests.iteritems():
#FIXME: Add subtest support
# Walk the test name as if it was a path, at each level update
# the tests passed over the total number of tests (fractions),
# and update the status of the current level if the status of
# the previous level was worse, but is not skip
while key != '':
fgh(key, value['result'])
key = path.dirname(key)
# when we hit the root update the 'all' group and stop
fgh('all', value['result'])
# Treat a test with subtests as if it is a group, assign the
# subtests' statuses and fractions down to the test, and then
# proceed like normal.
try:
for (subt, subv) in value['subtest'].iteritems():
subt = path.join(key, subt)
subv = so.status_lookup(subv)
# Add the subtest to the fractions and status lists
fraction[subt] = subv.fraction
status[subt] = subv
temp_results.update({subt: {'result': subv}})
self.tests['all'].add(subt)
while subt != '':
fgh(subt, subv)
subt = path.dirname(subt)
fgh('all', subv)
# remove the test from the 'all' list, this will cause to
# be treated as a group
self.tests['all'].discard(key)
except KeyError:
# Walk the test name as if it was a path, at each level update
# the tests passed over the total number of tests (fractions),
# and update the status of the current level if the status of
# the previous level was worse, but is not skip
while key != '':
fgh(key, value['result'])
key = path.dirname(key)
# when we hit the root update the 'all' group and stop
fgh('all', value['result'])
# Update the the results.tests dictionary with the subtests so that
# they are entered into the appropriate pages other than all.
# Updating it in the loop will raise a RuntimeError
results.tests.update({k:v for k,v in temp_results.iteritems()})
# Create the lists of statuses like problems, regressions, fixes,
# changes and skips
......
......@@ -60,7 +60,7 @@
<td class="${line['class']}">
## If the result is in the excluded results page list from
## argparse, just print the text, otherwise add the link
% if line['class'] not in exclude:
% if line['class'] not in exclude and line['href'] is not None:
<a href="${line['href']}">
${line['text']}
</a>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment