From patchwork Sun Mar 29 17:41:34 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: run-tests: explicitly handle unicode when writing xunit file From: Gregory Szorc X-Patchwork-Id: 8352 Message-Id: <6172aafdb1a9310db266.1427650894@vm-ubuntu-main.gateway.sonic.net> To: mercurial-devel@selenic.com Date: Sun, 29 Mar 2015 10:41:34 -0700 diff --git a/tests/run-tests.py b/tests/run-tests.py --- a/tests/run-tests.py +++ b/tests/run-tests.py @@ -1515,9 +1515,13 @@ class TextTestRunner(unittest.TextTestRu for tc, err in sorted(result.faildata.iteritems()): t = doc.createElement('testcase') t.setAttribute('name', tc) t.setAttribute('time', '%.3f' % timesd[tc]) - cd = doc.createCDATASection(cdatasafe(err)) + # 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')) finally: diff --git a/tests/test-run-tests.t b/tests/test-run-tests.t --- a/tests/test-run-tests.t +++ b/tests/test-run-tests.t @@ -30,8 +30,12 @@ failing test > This is a noop statement so that > this test is still more bytes than success. > EOF + >>> fh = open('test-failure-unicode.t', 'wb') + >>> fh.write(u' $ echo babar\u03b1\n'.encode('utf-8')) + >>> fh.write(u' l\u03b5\u03b5t\n'.encode('utf-8')) + $ $TESTDIR/run-tests.py --with-hg=`which hg` --- $TESTTMP/test-failure.t +++ $TESTTMP/test-failure.t.err @@ -43,12 +47,23 @@ failing test this test is still more bytes than success. ERROR: test-failure.t output changed !. + --- $TESTTMP/test-failure-unicode.t + +++ $TESTTMP/test-failure-unicode.t.err + @@ -1,2 +1,2 @@ + $ echo babar\xce\xb1 (esc) + - l\xce\xb5\xce\xb5t (esc) + + babar\xce\xb1 (esc) + + ERROR: test-failure-unicode.t output changed + ! Failed test-failure.t: output changed - # Ran 2 tests, 0 skipped, 0 warned, 1 failed. + Failed test-failure-unicode.t: output changed + # Ran 3 tests, 0 skipped, 0 warned, 2 failed. python hash seed: * (glob) [1] + test --xunit support $ $TESTDIR/run-tests.py --with-hg=`which hg` --xunit=xunit.xml --- $TESTTMP/test-failure.t @@ -61,16 +76,34 @@ test --xunit support this test is still more bytes than success. ERROR: test-failure.t output changed !. + --- $TESTTMP/test-failure-unicode.t + +++ $TESTTMP/test-failure-unicode.t.err + @@ -1,2 +1,2 @@ + $ echo babar\xce\xb1 (esc) + - l\xce\xb5\xce\xb5t (esc) + + babar\xce\xb1 (esc) + + ERROR: test-failure-unicode.t output changed + ! Failed test-failure.t: output changed - # Ran 2 tests, 0 skipped, 0 warned, 1 failed. + Failed test-failure-unicode.t: output changed + # Ran 3 tests, 0 skipped, 0 warned, 2 failed. python hash seed: * (glob) [1] $ cat xunit.xml - + (glob) + (glob) + (glob) + $ rm test-failure-unicode.t + test for --retest ==================== $ $TESTDIR/run-tests.py --with-hg=`which hg` --retest