summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDylan Baker <baker.dylan.c@gmail.com>2014-04-24 15:39:23 -0700
committerDylan Baker <baker.dylan.c@gmail.com>2014-05-19 14:38:11 -0700
commit80364ef8d6cc2ff8b3910aab4402305ab1aeb0f2 (patch)
treed781cc86b620ca49563ea80d44254bfb92418f28
parent61b6af11fe13948d30a709550433b1cdc3b8654e (diff)
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 de4b13de226e140313c3571e59a57438626da183. Signed-off-by: Dylan Baker <baker.dylan.c@gmail.com>
-rw-r--r--framework/summary.py86
-rw-r--r--templates/index.mako2
2 files changed, 71 insertions, 17 deletions
diff --git a/framework/summary.py b/framework/summary.py
index 260eb6896..c905b98d3 100644
--- a/framework/summary.py
+++ b/framework/summary.py
@@ -164,8 +164,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>'})
@@ -224,9 +233,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 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})
@@ -266,7 +283,12 @@ class Summary:
""" Helper for updating the fractions and status lists """
fraction[test] = tuple(
[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
for results in self.results:
@@ -283,6 +305,10 @@ 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():
# if the first character of key is a / then our while loop will
# become an infinite loop. Beyond that / should never be the
@@ -290,18 +316,46 @@ class Summary:
# test profiles.
assert key[0] != '/'
- #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.
+ if 'subtest' in value:
+ 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)
+ 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,
# changes and skips
diff --git a/templates/index.mako b/templates/index.mako
index e959a27e2..1ca46d34f 100644
--- a/templates/index.mako
+++ b/templates/index.mako
@@ -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>