Don't write anything until startTestRun is called.
authorJonathan Lange <jml@mumak.net>
Sun, 25 Mar 2012 14:57:45 +0000 (15:57 +0100)
committerJonathan Lange <jml@mumak.net>
Sun, 25 Mar 2012 14:57:45 +0000 (15:57 +0100)
python/subunit/test_results.py
python/subunit/tests/test_test_results.py

index f64126d6923b930b951db8187ded40de10b4c2a6..73adfab99cebf4b0dca3b6dadfc0761cd6e8fb60 100644 (file)
@@ -579,14 +579,15 @@ class TestByTestResult(testtools.TestResult):
         self._details = details
 
 
-def csv_result(stream):
-    writer = csv.writer(stream)
-    w = writer.writerow
-    # XXX: Not great that we write this out immediately. Probably better to
-    # wait for startTestRun.
-    w(['test', 'status', 'start_time', 'stop_time'])
-    def on_test(test, status, start_time, stop_time, tags, details):
-        # XXX: Don't really know how to serialize tags or details into csv in
-        # a useful way.
-        w([test.id(), status, start_time, stop_time])
-    return TestByTestResult(on_test)
+class csv_result(TestByTestResult):
+
+    def __init__(self, stream):
+        super(csv_result, self).__init__(self._on_test)
+        self._write_row = csv.writer(stream).writerow
+
+    def _on_test(self, test, status, start_time, stop_time, tags, details):
+        self._write_row([test.id(), status, start_time, stop_time])
+
+    def startTestRun(self):
+        super(csv_result, self).startTestRun()
+        self._write_row(['test', 'status', 'start_time', 'stop_time'])
index 1a95e9e56790c67091b6f0735a9861fe0b4b6436..0e8d81e93ed8b384dc676d7788e4b4567e70edad 100644 (file)
@@ -486,6 +486,11 @@ class TestCsvResult(testtools.TestCase):
             [['test', 'status', 'start_time', 'stop_time']],
             self.parse_stream(stream))
 
+    def test_no_output_before_events(self):
+        stream = StringIO()
+        subunit.test_results.csv_result(stream)
+        self.assertEqual([], self.parse_stream(stream))
+
 
 def test_suite():
     loader = subunit.tests.TestUtil.TestLoader()