[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