[Piglit] [PATCH 02/12] summary.py: Convert from tabs to spaces
Dylan Baker
baker.dylan.c at gmail.com
Thu May 9 23:09:16 PDT 2013
The new summary code (in the next patch) is space indented, and rather
than having a file with mixed tabs and spaces just have one.
Signed-off-by: Dylan Baker <baker.dylan.c at gmail.com>
---
framework/summary.py | 366 +++++++++++++++++++++++++--------------------------
1 file changed, 183 insertions(+), 183 deletions(-)
diff --git a/framework/summary.py b/framework/summary.py
index 0b15814..b58e305 100644
--- a/framework/summary.py
+++ b/framework/summary.py
@@ -28,222 +28,222 @@ class PassVector:
Vector indicting the number of tests that have a particular status,
pass/fail/skip/etc.
"""
- def __init__(self, p, w, f, s, c):
- self.passnr = p
- self.warnnr = w
- self.failnr = f
- self.skipnr = s
- self.crashnr = c
+ def __init__(self, p, w, f, s, c):
+ self.passnr = p
+ self.warnnr = w
+ self.failnr = f
+ self.skipnr = s
+ self.crashnr = c
- def add(self, o):
- self.passnr += o.passnr
- self.warnnr += o.warnnr
- self.failnr += o.failnr
- self.skipnr += o.skipnr
- self.crashnr += o.crashnr
+ def add(self, o):
+ self.passnr += o.passnr
+ self.warnnr += o.warnnr
+ self.failnr += o.failnr
+ self.skipnr += o.skipnr
+ self.crashnr += o.crashnr
class TestSummary:
"""
Summarize the results for one test across a number of testruns
"""
- def isRegression(self, statiList):
- # Regression is:
- # - if an item is neither 'pass' nor 'skip'
- # - and if any item on the left side thereof is 'pass' or 'skip'
- for i in range(1, len(statiList)):
- if statiList[i-1] == 'pass' or statiList[i-1] == 'skip':
- for j in range(i, len(statiList)):
- if statiList[j] != 'pass' and statiList[j] != 'skip':
- return True
- return False
-
- def __init__(self, summary, path, name, results):
- """\
+ def isRegression(self, statiList):
+ # Regression is:
+ # - if an item is neither 'pass' nor 'skip'
+ # - and if any item on the left side thereof is 'pass' or 'skip'
+ for i in range(1, len(statiList)):
+ if statiList[i-1] == 'pass' or statiList[i-1] == 'skip':
+ for j in range(i, len(statiList)):
+ if statiList[j] != 'pass' and statiList[j] != 'skip':
+ return True
+ return False
+
+ def __init__(self, summary, path, name, results):
+ """\
summary is the root summary object
path is the path to the group (e.g. shaders/glean-fragProg1)
name is the display name of the group (e.g. glean-fragProg1)
results is an array of TestResult instances, one per testrun
"""
- self.summary = summary
- self.path = path
- self.name = name
- self.results = results[:]
-
- for j in range(len(self.results)):
- result = self.results[j]
- result.testrun = self.summary.testruns[j]
- result.status = ''
- if 'result' in result:
- result.status = result['result']
-
- vectormap = {
- 'pass': PassVector(1,0,0,0,0),
- 'warn': PassVector(0,1,0,0,0),
- 'fail': PassVector(0,0,1,0,0),
- 'skip': PassVector(0,0,0,1,0),
- 'crash': PassVector(0,0,0,0,1)
- }
-
- if result.status not in vectormap:
- result.status = 'warn'
-
- result.passvector = vectormap[result.status]
-
- statiList = [result.status for result in results]
- statiSet = set(statiList)
- self.changes = len(statiSet) > 1
- self.problems = len(statiSet - set(['pass', 'skip'])) > 0
- self.regressions = self.isRegression(statiList)
- statiList.reverse()
- self.fixes = self.isRegression(statiList)
- self.skipped = 'skip' in statiSet
-
- def allTests(self):
- return [self]
+ self.summary = summary
+ self.path = path
+ self.name = name
+ self.results = results[:]
+
+ for j in range(len(self.results)):
+ result = self.results[j]
+ result.testrun = self.summary.testruns[j]
+ result.status = ''
+ if 'result' in result:
+ result.status = result['result']
+
+ vectormap = {
+ 'pass': PassVector(1,0,0,0,0),
+ 'warn': PassVector(0,1,0,0,0),
+ 'fail': PassVector(0,0,1,0,0),
+ 'skip': PassVector(0,0,0,1,0),
+ 'crash': PassVector(0,0,0,0,1)
+ }
+
+ if result.status not in vectormap:
+ result.status = 'warn'
+
+ result.passvector = vectormap[result.status]
+
+ statiList = [result.status for result in results]
+ statiSet = set(statiList)
+ self.changes = len(statiSet) > 1
+ self.problems = len(statiSet - set(['pass', 'skip'])) > 0
+ self.regressions = self.isRegression(statiList)
+ statiList.reverse()
+ self.fixes = self.isRegression(statiList)
+ self.skipped = 'skip' in statiSet
+
+ def allTests(self):
+ return [self]
class GroupSummary:
"""
Summarize a group of tests
"""
- def createDummyGroup(self, result, test_name):
- new_group = core.GroupResult()
- new_group[' ' + test_name + '(All Tests)'] = result[test_name]
- result[test_name] = new_group
+ def createDummyGroup(self, result, test_name):
+ new_group = core.GroupResult()
+ new_group[' ' + test_name + '(All Tests)'] = result[test_name]
+ result[test_name] = new_group
- def __init__(self, summary, path, name, results):
- """\
+ def __init__(self, summary, path, name, results):
+ """\
summary is the root summary object
path is the path to the group (e.g. shaders/glean-fragProg1)
name is the display name of the group (e.g. glean-fragProg1)
results is an array of GroupResult instances, one per testrun
"""
- self.summary = summary
- self.path = path
- self.name = name
- self.results = results[:]
- self.changes = False
- self.problems = False
- self.regressions = False
- self.fixes = False
- self.skipped = False
- self.children = {}
-
- # Perform some initial annotations
- for j in range(len(self.results)):
- result = self.results[j]
- result.passvector = PassVector(0, 0, 0, 0, 0)
- result.testrun = self.summary.testruns[j]
-
- # Collect, create and annotate children
- for result in self.results:
- for name in result:
- if name in self.children:
- continue
-
- childpath = name
- if len(self.path) > 0:
- childpath = self.path + '/' + childpath
-
- if isinstance(result[name], core.GroupResult):
- # This loop checks to make sure that all results
- # with the same 'name' are of the same type.
- # This is necessary to handle the case where
- # a testname in an earlier result (an earlier
- # result in this case means a result that
- # comes before the current result in self.results)
- # denotes a test group but in a later
- # result it denotes a single test case, for example:
- #
- # result 0:
- # test/group/a PASS
- # test/group/b PASS
- # test/group/c PASS
- # result 1:
- # test/group PASS
- for r in self.results:
- if name in r and not isinstance(r[name], core.GroupResult):
- self.createDummyGroup(r, name)
-
- childresults = [r.get(name, core.GroupResult())
- for r in self.results]
-
- self.children[name] = GroupSummary(
- summary,
- childpath,
- name,
- childresults
- )
- else:
- # We need to check and handle the reversed case
- # described in the above comment e.g.:
- # result 0:
- # test/group PASS
- # result 1:
- # test/group/a PASS
- # test/group/b PASS
- # test/group/c PASS
- need_group = 0
- for r in self.results:
- if name in r and not isinstance(r[name], core.TestResult):
- need_group = 1
- if need_group:
- for r in self.results:
- if name in r and isinstance(r[name], core.TestResult):
- self.createDummyGroup(r, name)
- childresults = [r.get(name, core.GroupResult())
- for r in self.results]
-
- self.children[name] = GroupSummary(
- summary,
- childpath,
- name,
- childresults
- )
- else:
- childresults = [r.get(name, core.TestResult({ 'result': 'skip' }))
- for r in self.results]
- self.children[name] = TestSummary(
- summary,
- childpath,
- name,
- childresults
- )
-
- for j in range(len(self.results)):
- self.results[j].passvector.add(childresults[j].passvector)
-
- self.changes = self.changes or self.children[name].changes
- self.problems = self.problems or self.children[name].problems
- self.regressions = self.regressions or self.children[name].regressions
- self.fixes = self.fixes or self.children[name].fixes
- self.skipped = self.skipped or self.children[name].skipped
-
- def allTests(self):
- """\
+ self.summary = summary
+ self.path = path
+ self.name = name
+ self.results = results[:]
+ self.changes = False
+ self.problems = False
+ self.regressions = False
+ self.fixes = False
+ self.skipped = False
+ self.children = {}
+
+ # Perform some initial annotations
+ for j in range(len(self.results)):
+ result = self.results[j]
+ result.passvector = PassVector(0, 0, 0, 0, 0)
+ result.testrun = self.summary.testruns[j]
+
+ # Collect, create and annotate children
+ for result in self.results:
+ for name in result:
+ if name in self.children:
+ continue
+
+ childpath = name
+ if len(self.path) > 0:
+ childpath = self.path + '/' + childpath
+
+ if isinstance(result[name], core.GroupResult):
+ # This loop checks to make sure that all results
+ # with the same 'name' are of the same type.
+ # This is necessary to handle the case where
+ # a testname in an earlier result (an earlier
+ # result in this case means a result that
+ # comes before the current result in self.results)
+ # denotes a test group but in a later
+ # result it denotes a single test case, for example:
+ #
+ # result 0:
+ # test/group/a PASS
+ # test/group/b PASS
+ # test/group/c PASS
+ # result 1:
+ # test/group PASS
+ for r in self.results:
+ if name in r and not isinstance(r[name], core.GroupResult):
+ self.createDummyGroup(r, name)
+
+ childresults = [r.get(name, core.GroupResult())
+ for r in self.results]
+
+ self.children[name] = GroupSummary(
+ summary,
+ childpath,
+ name,
+ childresults
+ )
+ else:
+ # We need to check and handle the reversed case
+ # described in the above comment e.g.:
+ # result 0:
+ # test/group PASS
+ # result 1:
+ # test/group/a PASS
+ # test/group/b PASS
+ # test/group/c PASS
+ need_group = 0
+ for r in self.results:
+ if name in r and not isinstance(r[name], core.TestResult):
+ need_group = 1
+ if need_group:
+ for r in self.results:
+ if name in r and isinstance(r[name], core.TestResult):
+ self.createDummyGroup(r, name)
+ childresults = [r.get(name, core.GroupResult())
+ for r in self.results]
+
+ self.children[name] = GroupSummary(
+ summary,
+ childpath,
+ name,
+ childresults
+ )
+ else:
+ childresults = [r.get(name, core.TestResult({ 'result': 'skip' }))
+ for r in self.results]
+ self.children[name] = TestSummary(
+ summary,
+ childpath,
+ name,
+ childresults
+ )
+
+ for j in range(len(self.results)):
+ self.results[j].passvector.add(childresults[j].passvector)
+
+ self.changes = self.changes or self.children[name].changes
+ self.problems = self.problems or self.children[name].problems
+ self.regressions = self.regressions or self.children[name].regressions
+ self.fixes = self.fixes or self.children[name].fixes
+ self.skipped = self.skipped or self.children[name].skipped
+
+ def allTests(self):
+ """\
Returns an array of all child TestSummary instances.
"""
- return [t for name in self.children for t in self.children[name].allTests()]
+ return [t for name in self.children for t in self.children[name].allTests()]
class Summary:
"""
Summarize an array of testruns
"""
- def __init__(self, testruns):
- """\
+ def __init__(self, testruns):
+ """\
testruns is an array of TestrunResult instances
"""
- groups = [
- core.GroupResult.make_tree(testrun.tests)
- for testrun in testruns
- ]
- self.testruns = testruns
- self.root = GroupSummary(self, '', 'All', groups)
-
- def allTests(self):
- """\
+ groups = [
+ core.GroupResult.make_tree(testrun.tests)
+ for testrun in testruns
+ ]
+ self.testruns = testruns
+ self.root = GroupSummary(self, '', 'All', groups)
+
+ def allTests(self):
+ """\
Returns an array of all child TestSummary instances.
"""
- return self.root.allTests()
+ return self.root.allTests()
--
1.8.1.4
More information about the Piglit
mailing list