Rev 3175: Naive test suite serialization with pickle. in file:///v/home/vila/src/bzr/experimental/selftest/

Vincent Ladeuil v.ladeuil+lp at free.fr
Thu Jan 10 16:23:13 GMT 2008


At file:///v/home/vila/src/bzr/experimental/selftest/

------------------------------------------------------------
revno: 3175
revision-id:v.ladeuil+lp at free.fr-20080110162307-4ccv5e7140qf8cig
parent: v.ladeuil+lp at free.fr-20080110155154-eg6c2an9ipdjnv31
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: selftest
timestamp: Thu 2008-01-10 17:23:07 +0100
message:
  Naive test suite serialization with pickle.
  
  * bzrlib/tests/__init__.py:
  (save_test_list, load_test_list): Implement a basic load/save
  based on pickle.
  
  * bzrlib/tests/test_selftest.py:
  (TestSelftestLoader): Tests for naive pickle implementation.
modified:
  bzrlib/builtins.py             builtins.py-20050830033751-fc01482b9ca23183
  bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
  bzrlib/tests/test_selftest.py  test_selftest.py-20051202044319-c110a115d8c0456a
-------------- next part --------------
=== modified file 'bzrlib/builtins.py'
--- a/bzrlib/builtins.py	2008-01-10 15:51:54 +0000
+++ b/bzrlib/builtins.py	2008-01-10 16:23:07 +0000
@@ -2653,7 +2653,7 @@
                                      exclude_pattern=exclude,
                                      coverage_dir=coverage,
                                      )
-             if strict:
+            if strict:
                 success = result.wasStrictlySuccessful()
             else:
                 success = result.wasSuccessful()

=== modified file 'bzrlib/tests/__init__.py'
--- a/bzrlib/tests/__init__.py	2008-01-10 15:51:54 +0000
+++ b/bzrlib/tests/__init__.py	2008-01-10 16:23:07 +0000
@@ -28,6 +28,7 @@
 
 import atexit
 import codecs
+import cPickle
 from cStringIO import StringIO
 import difflib
 import doctest
@@ -2700,6 +2701,36 @@
     return suite
 
 
+def save_test_list(suite, file_name):
+    ftest = open(file_name, 'wb')
+    pickler = cPickle.Pickler(ftest, cPickle.HIGHEST_PROTOCOL)
+    for t in iter_suite_tests(suite):
+        pickler.dump(t)
+    ftest.close()
+
+
+def load_test_list(file_name):
+    suite = TestUtil.TestSuite()
+    try:
+        ftest = open(file_name, 'rb')
+    except IOError, e:
+        if e.errno != errno.ENOENT:
+            raise
+        else:
+            raise errors.NoSuchFile(file_name)
+    pick = cPickle.Unpickler(ftest)
+    suite = TestUtil.TestSuite()
+    while True:
+        try:
+            test = pick.load()
+        except EOFError:
+            break
+        else:
+            suite.addTest(test)
+    ftest.close()
+    return suite
+
+
 def multiply_tests_from_modules(module_name_list, scenario_iter):
     """Adapt all tests in some given modules to given scenarios.
 
@@ -2741,23 +2772,6 @@
     return suite
 
 
-def save_test_list(suite, file_name):
-    ftest = open(file_name, 'wb')
-    ftest.close()
-
-
-def load_test_list(file_name):
-    suite = TestUtil.TestSuite()
-    try:
-        ftest = open(file_name, 'rb')
-    except IOError, e:
-        if e.errno != errno.ENOENT:
-            raise
-        else:
-            raise errors.NoSuchFile(file_name)
-    ftest.close()
-    return suite
-
 def multiply_scenarios(scenarios_left, scenarios_right):
     """Multiply two sets of scenarios.
 

=== modified file 'bzrlib/tests/test_selftest.py'
--- a/bzrlib/tests/test_selftest.py	2008-01-10 15:51:54 +0000
+++ b/bzrlib/tests/test_selftest.py	2008-01-10 16:23:07 +0000
@@ -17,6 +17,7 @@
 """Tests for the test framework."""
 
 import cStringIO
+import cPickle
 import os
 from StringIO import StringIO
 import sys
@@ -1844,17 +1845,19 @@
         self.assertEqual(2, loader.loadTestsFromModule(module).countTestCases())
 
 
+class Faketest(TestCase):
+
+    def test_foo(self):
+        pass
+
+
 class TestSelftestLoader(TestCaseInTempDir):
     """Tests for saving/loading test lists."""
 
     def _create_test_list(self):
 
-        class Stub(TestCase):
-            def test_foo(self):
-                pass
-
         suite = tests.TestSuite()
-        test = Stub('test_foo')
+        test = Faketest('test_foo')
         suite.addTest(test)
         return suite
 
@@ -1865,12 +1868,6 @@
             out, err, None, tests.run_suite, suite, **kwargs)
         return result, runned_suite
 
-    def test_save_test_list(self):
-        suite = self._create_test_list()
-        test_list_fname = 'test.list'
-        tests.save_test_list(suite, test_list_fname)
-        self.failUnlessExists(test_list_fname)
-
     def test_load_test_list_unknown(self):
         self.assertRaises(errors.NoSuchFile,
                           tests.load_test_list, 'i_do_not_exist')
@@ -1902,3 +1899,22 @@
         self.assertEqual([], runned_tests)
         self.assertEqual(0, result.testsRun)
 
+    def test_load_invalid_test_list(self):
+        invalid = 'invalid'
+        finvalid = open(invalid, 'wb')
+        finvalid.write('garbage')
+        finvalid.close()
+        self.assertRaises(cPickle.UnpicklingError,
+                          tests.load_test_list, invalid)
+
+    def test_save_test_list(self):
+        suite = self._create_test_list()
+        test_list_fname = 'test.list'
+        tests.save_test_list(suite, test_list_fname)
+        self.failUnlessExists(test_list_fname)
+
+        reloaded_suite = tests.load_test_list(test_list_fname)
+        self.assertIsInstance(reloaded_suite, TestSuite)
+        reloaded_tests =  list(tests.iter_suite_tests(reloaded_suite))
+        self.assertEqual(1, len(reloaded_tests))
+



More information about the bazaar-commits mailing list