diff --git a/tests/run-tests.py b/tests/run-tests.py --- a/tests/run-tests.py +++ b/tests/run-tests.py @@ -1469,7 +1469,11 @@ class TextTestRunner(unittest.TextTestRu 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')) 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 @@ -31,6 +31,10 @@ failing test > 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 @@ -44,10 +48,21 @@ failing test 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 @@ -62,14 +77,32 @@ test --xunit support 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 ====================