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