Commit 80364ef8 authored by Dylan Baker's avatar Dylan Baker

summary.py: Treat subtests as groups, again

With this patch tests with subtests are treated as groups, their status
is thrown away, and they inherit the 'worst' status from their children
just like a group.

This reverts commit de4b13de.
Signed-off-by: Dylan Baker's avatarDylan Baker <baker.dylan.c@gmail.com>
parent 61b6af11
...@@ -164,8 +164,17 @@ class HTMLIndex(list): ...@@ -164,8 +164,17 @@ class HTMLIndex(list):
# is a KeyError (a result doesn't contain a particular test), # is a KeyError (a result doesn't contain a particular test),
# return Not Run, with clas skip for highlighting # return Not Run, with clas skip for highlighting
for each in summary.results: 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: 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: except KeyError:
self.append({'type': 'other', self.append({'type': 'other',
'text': '<td class="skip">Not Run</td>'}) 'text': '<td class="skip">Not Run</td>'})
...@@ -224,9 +233,17 @@ class HTMLIndex(list): ...@@ -224,9 +233,17 @@ class HTMLIndex(list):
displaying pass/fail/crash/etc and formatting the cell to the displaying pass/fail/crash/etc and formatting the cell to the
correct color. correct color.
""" """
# "Not Run" is not a valid class, if it apears set the class to skip
if text == so.NOTRUN:
css = 'skip'
href = None
else:
css = text
href = path.join(group, href + ".html")
self.append({'type': 'testResult', self.append({'type': 'testResult',
'class': text, 'class': css,
'href': path.join(group, href + ".html"), 'href': href,
'text': text}) 'text': text})
...@@ -266,7 +283,12 @@ class Summary: ...@@ -266,7 +283,12 @@ class Summary:
""" Helper for updating the fractions and status lists """ """ Helper for updating the fractions and status lists """
fraction[test] = tuple( fraction[test] = tuple(
[sum(i) for i in zip(fraction[test], result.fraction)]) [sum(i) for i in zip(fraction[test], result.fraction)])
if result != so.SKIP and status[test] < result:
# If the new status is worse update it, or if the new status is
# SKIP (which is equivalent to notrun) and the current is NOTRUN
# update it
if (status[test] < result or
(result == so.SKIP and status[test] == so.NOTRUN)):
status[test] = result status[test] = result
for results in self.results: for results in self.results:
...@@ -283,6 +305,10 @@ class Summary: ...@@ -283,6 +305,10 @@ class Summary:
fraction = self.fractions[results.name] fraction = self.fractions[results.name]
status = self.status[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(): for key, value in results.tests.iteritems():
# if the first character of key is a / then our while loop will # if the first character of key is a / then our while loop will
# become an infinite loop. Beyond that / should never be the # become an infinite loop. Beyond that / should never be the
...@@ -290,18 +316,46 @@ class Summary: ...@@ -290,18 +316,46 @@ class Summary:
# test profiles. # test profiles.
assert key[0] != '/' assert key[0] != '/'
#FIXME: Add subtest support # Treat a test with subtests as if it is a group, assign the
# subtests' statuses and fractions down to the test, and then
# Walk the test name as if it was a path, at each level update # proceed like normal.
# the tests passed over the total number of tests (fractions), if 'subtest' in value:
# and update the status of the current level if the status of for (subt, subv) in value['subtest'].iteritems():
# the previous level was worse, but is not skip subt = path.join(key, subt)
while key != '': subv = so.status_lookup(subv)
fgh(key, value['result'])
key = path.dirname(key) # Add the subtest to the fractions and status lists
fraction[subt] = subv.fraction
# when we hit the root update the 'all' group and stop status[subt] = subv
fgh('all', value['result']) 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)
else:
# 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
for key, value in temp_results.iteritems():
results.tests[key] = value
# Create the lists of statuses like problems, regressions, fixes, # Create the lists of statuses like problems, regressions, fixes,
# changes and skips # changes and skips
......
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
<td class="${line['class']}"> <td class="${line['class']}">
## If the result is in the excluded results page list from ## If the result is in the excluded results page list from
## argparse, just print the text, otherwise add the link ## 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']}"> <a href="${line['href']}">
${line['text']} ${line['text']}
</a> </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