diff options
| author | Robert Collins <robertc@robertcollins.net> | 2012-12-17 20:58:13 +1300 |
|---|---|---|
| committer | Robert Collins <robertc@robertcollins.net> | 2012-12-17 20:58:13 +1300 |
| commit | 0977f94261bd3260e19ef3f290dde8f69ebd95b0 (patch) | |
| tree | 59af13f292bc8b3665a043e41f6f050bf4567668 /python | |
| parent | 36b29fad0197417a12b6109c7557638f3c86843e (diff) | |
| download | subunit-git-0977f94261bd3260e19ef3f290dde8f69ebd95b0.tar.gz | |
* Test ids which include non-ascii unicode characters are now supported.
(Robert Collins, #1029866)
Diffstat (limited to 'python')
| -rw-r--r-- | python/subunit/__init__.py | 10 | ||||
| -rw-r--r-- | python/subunit/tests/test_test_protocol.py | 15 |
2 files changed, 22 insertions, 3 deletions
diff --git a/python/subunit/__init__.py b/python/subunit/__init__.py index ebe6e8c..749eda1 100644 --- a/python/subunit/__init__.py +++ b/python/subunit/__init__.py @@ -689,7 +689,7 @@ class TestProtocolClient(testresult.TestResult): :param error_permitted: If True then one and only one of error or details must be supplied. If False then error must not be supplied and details is still optional. """ - self._stream.write(_b("%s: %s" % (outcome, test.id()))) + self._stream.write(_b("%s: " % outcome) + self._test_id(test)) if error_permitted: if error is None and details is None: raise ValueError @@ -737,10 +737,16 @@ class TestProtocolClient(testresult.TestResult): if self.failfast: self.stop() + def _test_id(self, test): + result = test.id() + if type(result) is not bytes: + result = result.encode('utf8') + return result + def startTest(self, test): """Mark a test as starting its test run.""" super(TestProtocolClient, self).startTest(test) - self._stream.write(_b("test: %s\n" % test.id())) + self._stream.write(_b("test: ") + self._test_id(test) + _b("\n")) self._stream.flush() def stopTest(self, test): diff --git a/python/subunit/tests/test_test_protocol.py b/python/subunit/tests/test_test_protocol.py index ec6830d..7831ba1 100644 --- a/python/subunit/tests/test_test_protocol.py +++ b/python/subunit/tests/test_test_protocol.py @@ -18,7 +18,7 @@ import datetime import unittest import os -from testtools import skipIf, TestCase, TestResult +from testtools import PlaceHolder, skipIf, TestCase, TestResult from testtools.compat import _b, _u, BytesIO from testtools.content import Content, TracebackContent, text_content from testtools.content_type import ContentType @@ -1133,6 +1133,7 @@ class TestTestProtocolClient(unittest.TestCase): def setUp(self): self.io = BytesIO() self.protocol = subunit.TestProtocolClient(self.io) + self.unicode_test = PlaceHolder(_u('\u2603')) self.test = TestTestProtocolClient("test_start_test") self.sample_details = {'something':Content( ContentType('text', 'plain'), lambda:[_b('serialised\nform')])} @@ -1145,6 +1146,12 @@ class TestTestProtocolClient(unittest.TestCase): self.protocol.startTest(self.test) self.assertEqual(self.io.getvalue(), _b("test: %s\n" % self.test.id())) + def test_start_test_unicode_id(self): + """Test startTest on a TestProtocolClient.""" + self.protocol.startTest(self.unicode_test) + expected = _b("test: ") + _u('\u2603').encode('utf8') + _b("\n") + self.assertEqual(expected, self.io.getvalue()) + def test_stop_test(self): # stopTest doesn't output anything. self.protocol.stopTest(self.test) @@ -1156,6 +1163,12 @@ class TestTestProtocolClient(unittest.TestCase): self.assertEqual( self.io.getvalue(), _b("successful: %s\n" % self.test.id())) + def test_add_outcome_unicode_id(self): + """Test addSuccess on a TestProtocolClient.""" + self.protocol.addSuccess(self.unicode_test) + expected = _b("successful: ") + _u('\u2603').encode('utf8') + _b("\n") + self.assertEqual(expected, self.io.getvalue()) + def test_add_success_details(self): """Test addSuccess on a TestProtocolClient with details.""" self.protocol.addSuccess(self.test, details=self.sample_details) |
