← Back to team overview

yellow team mailing list archive

[Merge] lp:~yellow/subunit/real-time into lp:subunit

 

Gary Poster has proposed merging lp:~yellow/subunit/real-time into lp:subunit.

Requested reviews:
  Subunit Developers (subunit)
Related bugs:
  Bug #988481 in Testrepository: "Testr tests generate an AttributeError when run with latest testtools"
  https://bugs.launchpad.net/testrepository/+bug/988481

For more details, see:
https://code.launchpad.net/~yellow/subunit/real-time/+merge/103701

This change makes the TestResultFilter send all time calls through directly.

It was part of one approach to make the testrepository tests pass for bug 988481 (see also lp:~yellow/testrepository/bug988481).

testrepository had a class (also called TestResultFilter) that tried to have this same approximate behavior--that is, sending all time calls through.  To implement, it subclassed subunit's TestResultFilter and then reached into the _buffered_calls while in the stopTest method to try and find the time calls.  Because of use of the decorator pattern, this was fragile.

This change in subunit means that testrepository can use subunit's TestResultFilter directly, thereby getting rid of the fragility associated with the combination of subclassing, decorating, and accessing a protected attribute.

It also has the possibly irrelevant advantage over the existing implementation that, when filtering live streams, the time calls come through also "live," at the expected time (assuming processing time is 0).

Tests pass, with the minimal test change describing the new behavior of the TestResultFilter itself.

This is work done by Benji York and Brad Crittenden; I'm just helping out with the MP.
-- 
https://code.launchpad.net/~yellow/subunit/real-time/+merge/103701
Your team Launchpad Yellow Squad is subscribed to branch lp:~yellow/subunit/real-time.
=== modified file 'python/subunit/test_results.py'
--- python/subunit/test_results.py	2012-04-20 11:32:41 +0000
+++ python/subunit/test_results.py	2012-04-26 14:17:22 +0000
@@ -439,10 +439,7 @@
         self._buffered_calls = []
 
     def time(self, a_time):
-        if self._current_test is not None:
-            self._buffered_calls.append(('time', [a_time], {}))
-        else:
-            return self.decorated.time(a_time)
+        return self.decorated.time(a_time)
 
     def id_to_orig_id(self, id):
         if id.startswith("subunit.RemotedTestCase."):

=== modified file 'python/subunit/tests/test_subunit_filter.py'
--- python/subunit/tests/test_subunit_filter.py	2011-05-09 21:00:42 +0000
+++ python/subunit/tests/test_subunit_filter.py	2012-04-26 14:17:22 +0000
@@ -179,10 +179,11 @@
         result_filter = TestResultFilter(result)
         self.run_tests(result_filter, subunit_stream)
         foo = subunit.RemotedTestCase('foo')
-        self.assertEquals(
+        self.maxDiff = None
+        self.assertSequenceEqual(
             [('time', date_a),
+             ('time', date_b),
              ('startTest', foo),
-             ('time', date_b),
              ('addError', foo, {}),
              ('stopTest', foo),
              ('time', date_c)], result._events)


Follow ups