tests/run-tests.py
changeset 32700 3afe258fb0fe
parent 32622 931bb962e0eb
child 32701 60c921ff4104
equal deleted inserted replaced
32699:f75d0aa5dc83 32700:3afe258fb0fe
  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     """