summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorRobert Collins <robertc@robertcollins.net>2009-10-24 20:40:51 +1100
committerRobert Collins <robertc@robertcollins.net>2009-10-24 20:40:51 +1100
commit887d9b402b18a94c4cb36eab1dbfd9df342be31e (patch)
tree060bab501460d0c29ae08e4d73852ee382a707f5 /python
parentb233594fc6031cc034e390387be187ae24c11e75 (diff)
downloadsubunit-git-887d9b402b18a94c4cb36eab1dbfd9df342be31e.tar.gz
Move skips to the details API.
Diffstat (limited to 'python')
-rw-r--r--python/subunit/__init__.py14
-rw-r--r--python/subunit/details.py15
-rw-r--r--python/subunit/tests/test_details.py10
-rw-r--r--python/subunit/tests/test_test_protocol.py27
4 files changed, 37 insertions, 29 deletions
diff --git a/python/subunit/__init__.py b/python/subunit/__init__.py
index 570af8b..ab7fbd9 100644
--- a/python/subunit/__init__.py
+++ b/python/subunit/__init__.py
@@ -284,8 +284,7 @@ class _InTest(_ParserState):
self.parser._reading_xfail_details)
def _failure(self):
- self.parser.client.addFailure(self.parser._current_test,
- details={})
+ self.parser.client.addFailure(self.parser._current_test, details={})
def addFailure(self, offset, line):
"""A 'failure:' directive has been read."""
@@ -293,7 +292,7 @@ class _InTest(_ParserState):
self.parser._reading_failure_details)
def _skip(self):
- self.parser._skip_or_error()
+ self.parser.client.addSkip(self.parser._current_test, details={})
def addSkip(self, offset, line):
"""A 'skip:' directive has been read."""
@@ -396,7 +395,8 @@ class _ReadingSkipDetails(_ReadingDetails):
"""State for the subunit parser when reading skip details."""
def _report_outcome(self):
- self.parser._skip_or_error(self.details_parser.get_message())
+ self.parser.client.addSkip(self.parser._current_test,
+ details=self.details_parser.get_details(True))
def _outcome_label(self):
return "skip"
@@ -442,12 +442,6 @@ class TestProtocolServer(object):
# start with outside test.
self._state = self._outside_test
- def _skip_or_error(self, message=None):
- """Report the current test as a skip if possible, or else an error."""
- if not message:
- message = "No reason given"
- self.client.addSkip(self._current_test, message)
-
def _handleProgress(self, offset, line):
"""Process a progress directive."""
line = line[offset:].strip()
diff --git a/python/subunit/details.py b/python/subunit/details.py
index c54a220..43e723d 100644
--- a/python/subunit/details.py
+++ b/python/subunit/details.py
@@ -42,11 +42,16 @@ class SimpleDetailsParser(DetailsParser):
else:
self._message += line
- def get_details(self):
+ def get_details(self, for_skip=False):
result = {}
- result['traceback'] = content.Content(
- content_type.ContentType("text", "x-traceback"),
- lambda:[self._message])
+ if not for_skip:
+ result['traceback'] = content.Content(
+ content_type.ContentType("text", "x-traceback"),
+ lambda:[self._message])
+ else:
+ result['reason'] = content.Content(
+ content_type.ContentType("text", "plain"),
+ lambda:[self._message])
return result
def get_message(self):
@@ -88,7 +93,7 @@ class MultipartDetailsParser(DetailsParser):
self._chunk_parser.close()
self._parse_state = self._look_for_content
- def get_details(self):
+ def get_details(self, for_skip=False):
return self._details
def get_message(self):
diff --git a/python/subunit/tests/test_details.py b/python/subunit/tests/test_details.py
index 5873ee7..af87655 100644
--- a/python/subunit/tests/test_details.py
+++ b/python/subunit/tests/test_details.py
@@ -60,6 +60,16 @@ class TestSimpleDetails(unittest.TestCase):
self.assertEqual(''.join(expected['traceback'].iter_bytes()),
''.join(found['traceback'].iter_bytes()))
+ def test_get_details_skip(self):
+ parser = details.SimpleDetailsParser(None)
+ traceback = ""
+ expected = {}
+ expected['reason'] = content.Content(
+ content_type.ContentType("text", "plain"),
+ lambda:[""])
+ found = parser.get_details(True)
+ self.assertEqual(expected, found)
+
class TestMultipartDetails(unittest.TestCase):
diff --git a/python/subunit/tests/test_test_protocol.py b/python/subunit/tests/test_test_protocol.py
index 1a4e1fd..da57745 100644
--- a/python/subunit/tests/test_test_protocol.py
+++ b/python/subunit/tests/test_test_protocol.py
@@ -582,19 +582,26 @@ class TestTestProtocolServerAddSkip(unittest.TestCase):
def setUp(self):
"""Setup a test object ready to be skipped."""
- self.client = Python27TestResult()
+ self.client = ExtendedTestResult()
self.protocol = subunit.TestProtocolServer(self.client)
self.protocol.lineReceived("test mcdonalds farm\n")
self.test = self.client._calls[-1][-1]
- def simple_skip_keyword(self, keyword):
- self.protocol.lineReceived("%s mcdonalds farm\n" % keyword)
+ def assertSkip(self, reason):
+ details = {}
+ if reason is not None:
+ details['reason'] = Content(
+ ContentType("text", "plain"), lambda:[reason])
self.assertEqual([
('startTest', self.test),
- ('addSkip', self.test, "No reason given"),
+ ('addSkip', self.test, details),
('stopTest', self.test),
], self.client._calls)
+ def simple_skip_keyword(self, keyword):
+ self.protocol.lineReceived("%s mcdonalds farm\n" % keyword)
+ self.assertSkip(None)
+
def test_simple_skip(self):
self.simple_skip_keyword("skip")
@@ -604,11 +611,7 @@ class TestTestProtocolServerAddSkip(unittest.TestCase):
def test_skip_empty_message(self):
self.protocol.lineReceived("skip mcdonalds farm [\n")
self.protocol.lineReceived("]\n")
- self.assertEqual([
- ('startTest', self.test),
- ('addSkip', self.test, "No reason given"),
- ('stopTest', self.test),
- ], self.client._calls)
+ self.assertSkip("")
def skip_quoted_bracket(self, keyword):
# This tests it is accepted, but cannot test it is used today, because
@@ -616,11 +619,7 @@ class TestTestProtocolServerAddSkip(unittest.TestCase):
self.protocol.lineReceived("%s mcdonalds farm [\n" % keyword)
self.protocol.lineReceived(" ]\n")
self.protocol.lineReceived("]\n")
- self.assertEqual([
- ('startTest', self.test),
- ('addSkip', self.test, "]\n"),
- ('stopTest', self.test),
- ], self.client._calls)
+ self.assertSkip("]\n")
def test_skip_quoted_bracket(self):
self.skip_quoted_bracket("skip")