Another fix for Makefile.
[cppu.git] / cppu-aggregate
blob31140147f1a67cc32f1867ce42332992945e31cf
1 #!/usr/bin/python
2 #
3 # This program run tests given as arguments one by one. On the end the
4 # program prints out aggregated information about tests. All error messages
5 # and other info is printed out immediately.
9 import os
10 import sys
11 import re
13 re_start_summary = re.compile(r"^[=]{10,}$")
14 re_values = re.compile(r".*([0-9]+)[ |]+([0-9]+)[ |]+([0-9]+).*")
16 class Summary:
17 def __init__(self):
18 self._assertations = 0
19 self._assertations_failed = 0
20 self._assertations_succeed = 0
21 self._tests = 0
22 self._tests_failed = 0
23 self._tests_succeed = 0
24 self._test_cases = 0
25 self._test_cases_failed = 0
26 self._test_cases_succeed = 0
27 self._test_suites = 0
28 self._test_suites_failed = 0
29 self._test_suites_succeed = 0
31 def addAssertations(self, sum, failed, succeed):
32 self._assertations = self._assertations + sum
33 self._assertations_failed = self._assertations_failed + failed
34 self._assertations_succeed = self._assertations_succeed + succeed
36 def addTests(self, sum, failed, succeed):
37 self._tests = self._tests + sum
38 self._tests_failed = self._tests_failed + failed
39 self._tests_succeed = self._tests_succeed + succeed
41 def addTestCases(self, sum, failed, succeed):
42 self._test_cases = self._test_cases + sum
43 self._test_cases_failed = self._test_cases_failed + failed
44 self._test_cases_succeed = self._test_cases_succeed + succeed
46 def addTestSuites(self, sum, failed, succeed):
47 self._test_suites = self._test_suites + sum
48 self._test_suites_failed = self._test_suites_failed + failed
49 self._test_suites_succeed = self._test_suites_succeed + succeed
51 def __str__(self):
52 str = """
53 ==================================================
54 | | failed | succeed | total |
55 |------------------------------------------------|
56 | assertations: | %-6d | %-7d | %-5d |
57 | tests: | %-6d | %-7d | %-5d |
58 | test cases: | %-6d | %-7d | %-5d |
59 | test suites: | %-6d | %-7d | %-5d |
60 ==================================================
61 """ % (self._assertations_failed,self._assertations_succeed,self._assertations,
62 self._tests_failed,self._tests_succeed,self._tests,
63 self._test_cases_failed,self._test_cases_succeed,self._test_cases,
64 self._test_suites_failed,self._test_suites_succeed,self._test_suites)
65 return str
69 def getValues(line):
70 match = re_values.match(line)
71 if match is not None:
72 return (match.group(1), match.group(2), match.group(3))
73 else:
74 return (0,0,0)
76 def processSummary(stdin, summary):
77 line = stdin.readline() # | | failed | succeed | total |
78 line = stdin.readline() # |------------------------------------------------|
79 line = stdin.readline() # | assertations: | 0 | 0 | 0 |
80 asserts_failed, asserts_succeed, asserts = getValues(line)
81 line = stdin.readline() # | tests: | 3 | 5 | 8 |
82 tests_failed, tests_succeed, tests = getValues(line)
83 line = stdin.readline() # | tests cases: | 2 | 1 | 3 |
84 test_cases_failed, test_cases_succeed, test_cases = getValues(line)
85 line = stdin.readline() # | tests suites: | 1 | 1 | 2 |
86 test_suites_failed, test_suites_succeed, test_suites = getValues(line)
87 line = stdin.readline() # ==================================================
89 summary.addAssertations(int(asserts), int(asserts_failed),
90 int(asserts_succeed))
91 summary.addTests(int(tests), int(tests_failed), int(tests_succeed))
92 summary.addTestCases(int(test_cases), int(test_cases_failed),
93 int(test_cases_succeed))
94 summary.addTestSuites(int(test_suites), int(test_suites_failed),
95 int(test_suites_succeed))
98 def runTest(test_cmd, summary):
99 stdin = os.popen("./" + test_cmd, "r")
101 line = stdin.readline()
102 while len(line) > 0:
103 if re_start_summary.search(line) is not None:
104 processSummary(stdin, summary)
105 else:
106 print line,
107 line = stdin.readline()
109 if __name__ == "__main__":
110 if len(sys.argv) <= 1:
111 sys.exit(-1);
113 summary = Summary()
114 for test in sys.argv[1:]:
115 runTest(test, summary)
116 print summary
118 sys.exit(0)