tests/run-tests.py
changeset 32701 60c921ff4104
parent 32700 3afe258fb0fe
child 32702 d0b9c36851f5
equal deleted inserted replaced
32700:3afe258fb0fe 32701:60c921ff4104
  1936                     self._writexunit(result, xuf)
  1936                     self._writexunit(result, xuf)
  1937 
  1937 
  1938             if self._runner.options.json:
  1938             if self._runner.options.json:
  1939                 jsonpath = os.path.join(self._runner._testdir, b'report.json')
  1939                 jsonpath = os.path.join(self._runner._testdir, b'report.json')
  1940                 with open(jsonpath, 'w') as fp:
  1940                 with open(jsonpath, 'w') as fp:
  1941                     timesd = {}
  1941                     self._writejson(result, fp)
  1942                     for tdata in result.times:
       
  1943                         test = tdata[0]
       
  1944                         timesd[test] = tdata[1:]
       
  1945 
       
  1946                     outcome = {}
       
  1947                     groups = [('success', ((tc, None)
       
  1948                                for tc in result.successes)),
       
  1949                               ('failure', result.failures),
       
  1950                               ('skip', result.skipped)]
       
  1951                     for res, testcases in groups:
       
  1952                         for tc, __ in testcases:
       
  1953                             if tc.name in timesd:
       
  1954                                 diff = result.faildata.get(tc.name, b'')
       
  1955                                 tres = {'result': res,
       
  1956                                         'time': ('%0.3f' % timesd[tc.name][2]),
       
  1957                                         'cuser': ('%0.3f' % timesd[tc.name][0]),
       
  1958                                         'csys': ('%0.3f' % timesd[tc.name][1]),
       
  1959                                         'start': ('%0.3f' % timesd[tc.name][3]),
       
  1960                                         'end': ('%0.3f' % timesd[tc.name][4]),
       
  1961                                         'diff': diff.decode('unicode_escape'),
       
  1962                                         }
       
  1963                             else:
       
  1964                                 # blacklisted test
       
  1965                                 tres = {'result': res}
       
  1966 
       
  1967                             outcome[tc.name] = tres
       
  1968                     jsonout = json.dumps(outcome, sort_keys=True, indent=4,
       
  1969                                          separators=(',', ': '))
       
  1970                     fp.writelines(("testreport =", jsonout))
       
  1971 
  1942 
  1972             self._runner._checkhglib('Tested')
  1943             self._runner._checkhglib('Tested')
  1973 
  1944 
  1974             savetimes(self._runner._testdir, result)
  1945             savetimes(self._runner._testdir, result)
  1975 
  1946 
  2058             cd = doc.createCDATASection(err)
  2029             cd = doc.createCDATASection(err)
  2059             t.appendChild(cd)
  2030             t.appendChild(cd)
  2060             s.appendChild(t)
  2031             s.appendChild(t)
  2061         outf.write(doc.toprettyxml(indent='  ', encoding='utf-8'))
  2032         outf.write(doc.toprettyxml(indent='  ', encoding='utf-8'))
  2062 
  2033 
       
  2034     @staticmethod
       
  2035     def _writejson(result, outf):
       
  2036         timesd = {}
       
  2037         for tdata in result.times:
       
  2038             test = tdata[0]
       
  2039             timesd[test] = tdata[1:]
       
  2040 
       
  2041         outcome = {}
       
  2042         groups = [('success', ((tc, None)
       
  2043                    for tc in result.successes)),
       
  2044                   ('failure', result.failures),
       
  2045                   ('skip', result.skipped)]
       
  2046         for res, testcases in groups:
       
  2047             for tc, __ in testcases:
       
  2048                 if tc.name in timesd:
       
  2049                     diff = result.faildata.get(tc.name, b'')
       
  2050                     tres = {'result': res,
       
  2051                             'time': ('%0.3f' % timesd[tc.name][2]),
       
  2052                             'cuser': ('%0.3f' % timesd[tc.name][0]),
       
  2053                             'csys': ('%0.3f' % timesd[tc.name][1]),
       
  2054                             'start': ('%0.3f' % timesd[tc.name][3]),
       
  2055                             'end': ('%0.3f' % timesd[tc.name][4]),
       
  2056                             'diff': diff.decode('unicode_escape'),
       
  2057                             }
       
  2058                 else:
       
  2059                     # blacklisted test
       
  2060                     tres = {'result': res}
       
  2061 
       
  2062                 outcome[tc.name] = tres
       
  2063         jsonout = json.dumps(outcome, sort_keys=True, indent=4,
       
  2064                              separators=(',', ': '))
       
  2065         outf.writelines(("testreport =", jsonout))
       
  2066 
  2063 class TestRunner(object):
  2067 class TestRunner(object):
  2064     """Holds context for executing tests.
  2068     """Holds context for executing tests.
  2065 
  2069 
  2066     Tests rely on a lot of state. This object holds it for them.
  2070     Tests rely on a lot of state. This object holds it for them.
  2067     """
  2071     """