summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorRobert Collins <robertc@robertcollins.net>2009-10-11 07:01:58 +1100
committerRobert Collins <robertc@robertcollins.net>2009-10-11 07:01:58 +1100
commit62f78e15b6431e33c78a9ccf6486eca02f86b903 (patch)
treec5a5018dd2923943e04c8a4f552dddba77f7ddd9 /python
parentc97f1fa37c488d40fae00fd5db5dc1a967111614 (diff)
downloadsubunit-git-62f78e15b6431e33c78a9ccf6486eca02f86b903.tar.gz
Move success details parsing to a state object in the Python parser.
Diffstat (limited to 'python')
-rw-r--r--python/subunit/__init__.py37
1 files changed, 18 insertions, 19 deletions
diff --git a/python/subunit/__init__.py b/python/subunit/__init__.py
index cad9498..8a8f45a 100644
--- a/python/subunit/__init__.py
+++ b/python/subunit/__init__.py
@@ -312,9 +312,14 @@ class _InTest(_ParserState):
def addSuccess(self, offset, line):
"""A 'success:' directive has been read."""
if self.parser.current_test_description == line[offset:-1]:
- self.parser._succeedTest()
+ self.parser._state = self.parser._outside_test
+ self.parser.state = TestProtocolServer.STATE_OBJECT
+ self.parser.current_test_description = None
+ self.parser.client.addSuccess(self.parser._current_test)
+ self.parser.client.stopTest(self.parser._current_test)
elif self.parser.current_test_description + " [" == line[offset:-1]:
- self.parser.state = TestProtocolServer.READING_SUCCESS
+ self.parser._state = self.parser._reading_success_details
+ self.parser.state = TestProtocolServer.STATE_OBJECT
self.parser._message = ""
else:
self.parser.stdOutLineReceived(line)
@@ -410,6 +415,16 @@ class _ReadingSkipDetails(_ReadingDetails):
return "skip"
+class _ReadingSuccessDetails(_ReadingDetails):
+ """State for the subunit parser when reading success details."""
+
+ def _report_outcome(self):
+ self.parser.client.addSuccess(self.parser._current_test)
+
+ def _outcome_label(self):
+ return "success"
+
+
class TestProtocolServer(object):
"""A parser for subunit.
@@ -418,7 +433,6 @@ class TestProtocolServer(object):
STATE_OBJECT = 0
STATE_OBJECTS = [0]
- READING_SUCCESS = 6
def __init__(self, client, stream=None):
"""Create a TestProtocolServer instance.
@@ -439,6 +453,7 @@ class TestProtocolServer(object):
self._reading_error_details = _ReadingErrorDetails(self)
self._reading_failure_details = _ReadingFailureDetails(self)
self._reading_skip_details = _ReadingSkipDetails(self)
+ self._reading_success_details = _ReadingSuccessDetails(self)
self._reading_xfail_details = _ReadingExpectedFailureDetails(self)
# start with outside test.
self._state = self._outside_test
@@ -494,8 +509,6 @@ class TestProtocolServer(object):
def endQuote(self, line):
if self.state in TestProtocolServer.STATE_OBJECTS:
self._state.endQuote(line)
- elif self.state == TestProtocolServer.READING_SUCCESS:
- self._succeedTest()
else:
self.stdOutLineReceived(line)
@@ -542,10 +555,6 @@ class TestProtocolServer(object):
self.endQuote(line)
elif self.state in TestProtocolServer.STATE_OBJECTS:
self._state.lineReceived(line)
- elif self.state in (
- TestProtocolServer.READING_SUCCESS,
- ):
- self._appendMessage(line)
else:
parts = line.split(None, 1)
if len(parts) == 2:
@@ -585,8 +594,6 @@ class TestProtocolServer(object):
"""The input connection has finished."""
if self.state in TestProtocolServer.STATE_OBJECTS:
self._state.lostConnection()
- elif self.state == TestProtocolServer.READING_SUCCESS:
- self._lostConnectionInTest('success report of ')
else:
self._lostConnectionInTest('unknown state of ')
@@ -605,14 +612,6 @@ class TestProtocolServer(object):
def stdOutLineReceived(self, line):
self._stream.write(line)
- def _succeedTest(self):
- self.client.addSuccess(self._current_test)
- self.client.stopTest(self._current_test)
- self.current_test_description = None
- self._current_test = None
- self._state = self._outside_test
- self.state = TestProtocolServer.STATE_OBJECT
-
class RemoteException(Exception):
"""An exception that occured remotely to Python."""