Rev 3176: More robust test serialization. in file:///v/home/vila/src/bzr/experimental/selftest/
Vincent Ladeuil
v.ladeuil+lp at free.fr
Thu Jan 10 19:54:04 GMT 2008
At file:///v/home/vila/src/bzr/experimental/selftest/
------------------------------------------------------------
revno: 3176
revision-id:v.ladeuil+lp at free.fr-20080110195359-wg1nrabfxb0poh24
parent: v.ladeuil+lp at free.fr-20080110162307-4ccv5e7140qf8cig
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: selftest
timestamp: Thu 2008-01-10 20:53:59 +0100
message:
More robust test serialization.
* bzrlib/tests/test_selftest.py:
(TestSelftestLoader): Add a test for unpickable tests.
* bzrlib/tests/__init__.py:
(save_test_list): Protect against unpickable tests.
modified:
bzrlib/tests/__init__.py selftest.py-20050531073622-8d0e3c8845c97a64
bzrlib/tests/test_selftest.py test_selftest.py-20051202044319-c110a115d8c0456a
-------------- next part --------------
=== modified file 'bzrlib/tests/__init__.py'
--- a/bzrlib/tests/__init__.py 2008-01-10 16:23:07 +0000
+++ b/bzrlib/tests/__init__.py 2008-01-10 19:53:59 +0000
@@ -2701,11 +2701,19 @@
return suite
-def save_test_list(suite, file_name):
+def save_test_list(suite, file_name, stream=sys.stderr):
ftest = open(file_name, 'wb')
pickler = cPickle.Pickler(ftest, cPickle.HIGHEST_PROTOCOL)
+ fpos = ftest.tell()
for t in iter_suite_tests(suite):
- pickler.dump(t)
+ try:
+ pickler.dump(t)
+ except cPickle.PicklingError, e:
+ ftest.truncate(fpos) # Get rid of partial pickle
+ ftest.seek(fpos, 0)
+ stream.write('Excluding %s: %s\n' % (t, e))
+ else:
+ fpos = ftest.tell()
ftest.close()
@@ -2718,6 +2726,7 @@
raise
else:
raise errors.NoSuchFile(file_name)
+
pick = cPickle.Unpickler(ftest)
suite = TestUtil.TestSuite()
while True:
=== modified file 'bzrlib/tests/test_selftest.py'
--- a/bzrlib/tests/test_selftest.py 2008-01-10 16:23:07 +0000
+++ b/bzrlib/tests/test_selftest.py 2008-01-10 19:53:59 +0000
@@ -18,6 +18,7 @@
import cStringIO
import cPickle
+import doctest
import os
from StringIO import StringIO
import sys
@@ -1884,8 +1885,6 @@
suite = self._create_test_list()
ref_test_id = tests.iter_suite_tests(suite).next().id()
- out = StringIO()
- err = StringIO()
result, runned_suite = self._run_suite(suite)
runned_tests = list(tests.iter_suite_tests(runned_suite))
self.assertEqual(1, len(runned_tests))
@@ -1918,3 +1917,18 @@
reloaded_tests = list(tests.iter_suite_tests(reloaded_suite))
self.assertEqual(1, len(reloaded_tests))
+ def test_cannot_save_unpickable_test(self):
+
+ class InnerStub(TestCase):
+ def test_bar(self):
+ pass
+
+ suite = tests.TestSuite()
+ unpickable = InnerStub('test_bar')
+ suite.addTest(unpickable)
+ partial_fname = 'partial'
+ out = StringIO()
+ tests.save_test_list(suite, partial_fname, stream=out)
+ self.assertContainsRe(out.getvalue(), r"Excluding test_bar.*InnerStub")
+ # Since no test was saved, the file size should be 0
+ self.assertEquals(0, os.stat(partial_fname)[6])
More information about the bazaar-commits
mailing list