1930 self.stream.writeln('Failed %s: %s' % (test.name, msg)) |
1930 self.stream.writeln('Failed %s: %s' % (test.name, msg)) |
1931 for test, msg in result.errors: |
1931 for test, msg in result.errors: |
1932 self.stream.writeln('Errored %s: %s' % (test.name, msg)) |
1932 self.stream.writeln('Errored %s: %s' % (test.name, msg)) |
1933 |
1933 |
1934 if self._runner.options.xunit: |
1934 if self._runner.options.xunit: |
1935 with open(self._runner.options.xunit, 'wb') as xuf: |
1935 with open(self._runner.options.xunit, "wb") as xuf: |
1936 timesd = dict((t[0], t[3]) for t in result.times) |
1936 self._writexunit(result, xuf) |
1937 doc = minidom.Document() |
|
1938 s = doc.createElement('testsuite') |
|
1939 s.setAttribute('name', 'run-tests') |
|
1940 s.setAttribute('tests', str(result.testsRun)) |
|
1941 s.setAttribute('errors', "0") # TODO |
|
1942 s.setAttribute('failures', str(failed)) |
|
1943 s.setAttribute('skipped', str(skipped + ignored)) |
|
1944 doc.appendChild(s) |
|
1945 for tc in result.successes: |
|
1946 t = doc.createElement('testcase') |
|
1947 t.setAttribute('name', tc.name) |
|
1948 t.setAttribute('time', '%.3f' % timesd[tc.name]) |
|
1949 s.appendChild(t) |
|
1950 for tc, err in sorted(result.faildata.items()): |
|
1951 t = doc.createElement('testcase') |
|
1952 t.setAttribute('name', tc) |
|
1953 t.setAttribute('time', '%.3f' % timesd[tc]) |
|
1954 # createCDATASection expects a unicode or it will |
|
1955 # convert using default conversion rules, which will |
|
1956 # fail if string isn't ASCII. |
|
1957 err = cdatasafe(err).decode('utf-8', 'replace') |
|
1958 cd = doc.createCDATASection(err) |
|
1959 t.appendChild(cd) |
|
1960 s.appendChild(t) |
|
1961 xuf.write(doc.toprettyxml(indent=' ', encoding='utf-8')) |
|
1962 |
1937 |
1963 if self._runner.options.json: |
1938 if self._runner.options.json: |
1964 jsonpath = os.path.join(self._runner._testdir, b'report.json') |
1939 jsonpath = os.path.join(self._runner._testdir, b'report.json') |
1965 with open(jsonpath, 'w') as fp: |
1940 with open(jsonpath, 'w') as fp: |
1966 timesd = {} |
1941 timesd = {} |
2053 for tdata in times: |
2028 for tdata in times: |
2054 test = tdata[0] |
2029 test = tdata[0] |
2055 cuser, csys, real, start, end = tdata[1:6] |
2030 cuser, csys, real, start, end = tdata[1:6] |
2056 self.stream.writeln(cols % (start, end, cuser, csys, real, test)) |
2031 self.stream.writeln(cols % (start, end, cuser, csys, real, test)) |
2057 |
2032 |
|
2033 @staticmethod |
|
2034 def _writexunit(result, outf): |
|
2035 timesd = dict((t[0], t[3]) for t in result.times) |
|
2036 doc = minidom.Document() |
|
2037 s = doc.createElement('testsuite') |
|
2038 s.setAttribute('name', 'run-tests') |
|
2039 s.setAttribute('tests', str(result.testsRun)) |
|
2040 s.setAttribute('errors', "0") # TODO |
|
2041 s.setAttribute('failures', str(len(result.failures))) |
|
2042 s.setAttribute('skipped', str(len(result.skipped) + |
|
2043 len(result.ignored))) |
|
2044 doc.appendChild(s) |
|
2045 for tc in result.successes: |
|
2046 t = doc.createElement('testcase') |
|
2047 t.setAttribute('name', tc.name) |
|
2048 t.setAttribute('time', '%.3f' % timesd[tc.name]) |
|
2049 s.appendChild(t) |
|
2050 for tc, err in sorted(result.faildata.items()): |
|
2051 t = doc.createElement('testcase') |
|
2052 t.setAttribute('name', tc) |
|
2053 t.setAttribute('time', '%.3f' % timesd[tc]) |
|
2054 # createCDATASection expects a unicode or it will |
|
2055 # convert using default conversion rules, which will |
|
2056 # fail if string isn't ASCII. |
|
2057 err = cdatasafe(err).decode('utf-8', 'replace') |
|
2058 cd = doc.createCDATASection(err) |
|
2059 t.appendChild(cd) |
|
2060 s.appendChild(t) |
|
2061 outf.write(doc.toprettyxml(indent=' ', encoding='utf-8')) |
|
2062 |
2058 class TestRunner(object): |
2063 class TestRunner(object): |
2059 """Holds context for executing tests. |
2064 """Holds context for executing tests. |
2060 |
2065 |
2061 Tests rely on a lot of state. This object holds it for them. |
2066 Tests rely on a lot of state. This object holds it for them. |
2062 """ |
2067 """ |