[PATCH 1 of 5] run-tests: factor out xunit write code into another method
Gregory Szorc
gregory.szorc at gmail.com
Tue Jun 6 17:45:57 EDT 2017
On Tue, Jun 6, 2017 at 2:39 PM, Siddharth Agarwal <sid0 at fb.com> wrote:
> # HG changeset patch
> # User Siddharth Agarwal <sid0 at fb.com>
> # Date 1496779855 25200
> # Tue Jun 06 13:10:55 2017 -0700
> # Node ID 2d78617dd0b04d927beff7bc8bb2a1329b92ed8e
> # Parent e696f597d02f971eeed1217096b8f200ddb903d2
> run-tests: factor out xunit write code into another method
>
Queued this series. Nice refactor and feature!
>
> We're going to use this code to output an XUnit-formatted listing of tests.
>
> diff --git a/tests/run-tests.py b/tests/run-tests.py
> --- a/tests/run-tests.py
> +++ b/tests/run-tests.py
> @@ -1932,33 +1932,8 @@ class TextTestRunner(unittest.TextTestRu
> self.stream.writeln('Errored %s: %s' % (test.name, msg))
>
> if self._runner.options.xunit:
> - with open(self._runner.options.xunit, 'wb') as xuf:
> - timesd = dict((t[0], t[3]) for t in result.times)
> - doc = minidom.Document()
> - s = doc.createElement('testsuite')
> - s.setAttribute('name', 'run-tests')
> - s.setAttribute('tests', str(result.testsRun))
> - s.setAttribute('errors', "0") # TODO
> - s.setAttribute('failures', str(failed))
> - s.setAttribute('skipped', str(skipped + ignored))
> - doc.appendChild(s)
> - for tc in result.successes:
> - t = doc.createElement('testcase')
> - t.setAttribute('name', tc.name)
> - t.setAttribute('time', '%.3f' % timesd[tc.name])
> - s.appendChild(t)
> - for tc, err in sorted(result.faildata.items()):
> - t = doc.createElement('testcase')
> - t.setAttribute('name', tc)
> - t.setAttribute('time', '%.3f' % timesd[tc])
> - # createCDATASection expects a unicode or it will
> - # convert using default conversion rules, which
> will
> - # fail if string isn't ASCII.
> - err = cdatasafe(err).decode('utf-8', 'replace')
> - cd = doc.createCDATASection(err)
> - t.appendChild(cd)
> - s.appendChild(t)
> - xuf.write(doc.toprettyxml(indent=' ',
> encoding='utf-8'))
> + with open(self._runner.options.xunit, "wb") as xuf:
> + self._writexunit(result, xuf)
>
> if self._runner.options.json:
> jsonpath = os.path.join(self._runner._testdir,
> b'report.json')
> @@ -2055,6 +2030,36 @@ class TextTestRunner(unittest.TextTestRu
> cuser, csys, real, start, end = tdata[1:6]
> self.stream.writeln(cols % (start, end, cuser, csys, real,
> test))
>
> + @staticmethod
> + def _writexunit(result, outf):
> + timesd = dict((t[0], t[3]) for t in result.times)
> + doc = minidom.Document()
> + s = doc.createElement('testsuite')
> + s.setAttribute('name', 'run-tests')
> + s.setAttribute('tests', str(result.testsRun))
> + s.setAttribute('errors', "0") # TODO
> + s.setAttribute('failures', str(len(result.failures)))
> + s.setAttribute('skipped', str(len(result.skipped) +
> + len(result.ignored)))
> + doc.appendChild(s)
> + for tc in result.successes:
> + t = doc.createElement('testcase')
> + t.setAttribute('name', tc.name)
> + t.setAttribute('time', '%.3f' % timesd[tc.name])
> + s.appendChild(t)
> + for tc, err in sorted(result.faildata.items()):
> + t = doc.createElement('testcase')
> + t.setAttribute('name', tc)
> + t.setAttribute('time', '%.3f' % timesd[tc])
> + # createCDATASection expects a unicode or it will
> + # convert using default conversion rules, which will
> + # fail if string isn't ASCII.
> + err = cdatasafe(err).decode('utf-8', 'replace')
> + cd = doc.createCDATASection(err)
> + t.appendChild(cd)
> + s.appendChild(t)
> + outf.write(doc.toprettyxml(indent=' ', encoding='utf-8'))
> +
> class TestRunner(object):
> """Holds context for executing tests.
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.mercurial-scm.org/pipermail/mercurial-devel/attachments/20170606/e9ad71e3/attachment.html>
More information about the Mercurial-devel
mailing list