diff options
-rw-r--r-- | __pkginfo__.py | 2 | ||||
-rw-r--r-- | debian/changelog | 6 | ||||
-rw-r--r-- | sphinxutils.py | 2 | ||||
-rw-r--r-- | test/unittest_testlib.py | 95 | ||||
-rw-r--r-- | testlib.py | 13 |
5 files changed, 102 insertions, 16 deletions
diff --git a/__pkginfo__.py b/__pkginfo__.py index aed71c8..bebbf58 100644 --- a/__pkginfo__.py +++ b/__pkginfo__.py @@ -8,7 +8,7 @@ __docformat__ = "restructuredtext en" distname = 'logilab-common' modname = 'common' -numversion = (0, 47, 0) +numversion = (0, 48, 0) version = '.'.join([str(num) for num in numversion]) copyright = '2000-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.' license = 'GPL' diff --git a/debian/changelog b/debian/changelog index c95e535..668f0e4 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +logilab-common (0.48.0-1) unstable; urgency=low + + * new upstream release + + -- Nicolas Chauvat <nicolas.chauvat@logilab.fr> Wed, 17 Feb 2010 15:17:29 +0100 + logilab-common (0.47.0-1) unstable; urgency=low * new upstream release diff --git a/sphinxutils.py b/sphinxutils.py index 5dd0424..3889362 100644 --- a/sphinxutils.py +++ b/sphinxutils.py @@ -101,5 +101,5 @@ if __name__ == '__main__': title, code_dir, outfile = sys.argv[1:] generator = ModuleGenerator(title, code_dir) # XXX modnames = ['logilab'] - generator.make(outfile, ('test', 'tests', 'examples', + generator.generate(outfile, ('test', 'tests', 'examples', 'data', 'doc', '.hg', 'migration')) diff --git a/test/unittest_testlib.py b/test/unittest_testlib.py index 5e37cf0..152ccc7 100644 --- a/test/unittest_testlib.py +++ b/test/unittest_testlib.py @@ -1,7 +1,5 @@ """unittest module for logilab.comon.testlib""" -__revision__ = '$Id: unittest_testlib.py,v 1.5 2006-02-09 22:37:46 nico Exp $' - import unittest import os import sys @@ -323,7 +321,6 @@ class GenerativeTestsTC(TestCase): self.assertEquals(len(result.failures), 0) self.assertEquals(len(result.errors), 1) - def test_generative_error2(self): class FooTC(TestCase): def test_generative(self): @@ -351,6 +348,78 @@ class GenerativeTestsTC(TestCase): self.assertEquals(len(result.failures), 0) self.assertEquals(len(result.errors), 1) + def test_generative_inner_skip(self): + class FooTC(TestCase): + def check(self, val): + if val == 5: + self.innerSkip("no 5") + else: + self.assertEquals(val, val) + + def test_generative(self): + for i in xrange(10): + yield InnerTest("check_%s"%i, self.check, i) + + result = self.runner.run(FooTC('test_generative')) + self.assertEquals(result.testsRun, 10) + self.assertEquals(len(result.failures), 0) + self.assertEquals(len(result.errors), 0) + self.assertEquals(len(result.skipped), 1) + + def test_generative_skip(self): + class FooTC(TestCase): + def check(self, val): + if val == 5: + self.skip("no 5") + else: + self.assertEquals(val, val) + + def test_generative(self): + for i in xrange(10): + yield InnerTest("check_%s"%i, self.check, i) + + result = self.runner.run(FooTC('test_generative')) + self.assertEquals(result.testsRun, 6) + self.assertEquals(len(result.failures), 0) + self.assertEquals(len(result.errors), 0) + self.assertEquals(len(result.skipped), 1) + + def test_generative_inner_error(self): + class FooTC(TestCase): + def check(self, val): + if val == 5: + raise ValueError("no 5") + else: + self.assertEquals(val, val) + + def test_generative(self): + for i in xrange(10): + yield InnerTest("check_%s"%i, self.check, i) + + result = self.runner.run(FooTC('test_generative')) + self.assertEquals(result.testsRun, 6) + self.assertEquals(len(result.failures), 0) + self.assertEquals(len(result.errors), 1) + self.assertEquals(len(result.skipped), 0) + + def test_generative_inner_failure(self): + class FooTC(TestCase): + def check(self, val): + if val == 5: + self.assertEquals(val, val+1) + else: + self.assertEquals(val, val) + + def test_generative(self): + for i in xrange(10): + yield InnerTest("check_%s"%i, self.check, i) + + result = self.runner.run(FooTC('test_generative')) + self.assertEquals(result.testsRun, 10) + self.assertEquals(len(result.failures), 1) + self.assertEquals(len(result.errors), 0) + self.assertEquals(len(result.skipped), 0) + class ExitFirstTC(TestCase): def setUp(self): @@ -778,7 +847,7 @@ class TagTC(TestCase): class TagTestTC(TestCase): tags = Tags(('one', 'two')) - + def test_one(self): self.assertTrue(True) @@ -790,7 +859,7 @@ class TagTC(TestCase): def test_three(self): self.assertTrue(True) self.cls = TagTestTC - + def test_tag_decorator(self): bob = self.func @@ -824,35 +893,35 @@ class TagTC(TestCase): class Options(object): tags_pattern = tags return Options() - + cls = self.cls - - runner = SkipAwareTextTestRunner() + + runner = SkipAwareTextTestRunner() self.assertTrue(runner.does_match_tags(cls.test_one)) self.assertTrue(runner.does_match_tags(cls.test_two)) self.assertTrue(runner.does_match_tags(cls.test_three)) - runner = SkipAwareTextTestRunner(options=options('one')) + runner = SkipAwareTextTestRunner(options=options('one')) self.assertTrue(runner.does_match_tags(cls.test_one)) self.assertFalse(runner.does_match_tags(cls.test_two)) self.assertFalse(runner.does_match_tags(cls.test_three)) - runner = SkipAwareTextTestRunner(options=options('two')) + runner = SkipAwareTextTestRunner(options=options('two')) self.assertTrue(runner.does_match_tags(cls.test_one)) self.assertTrue(runner.does_match_tags(cls.test_two)) self.assertFalse(runner.does_match_tags(cls.test_three)) - runner = SkipAwareTextTestRunner(options=options('three')) + runner = SkipAwareTextTestRunner(options=options('three')) self.assertFalse(runner.does_match_tags(cls.test_one)) self.assertTrue(runner.does_match_tags(cls.test_two)) self.assertTrue(runner.does_match_tags(cls.test_three)) - runner = SkipAwareTextTestRunner(options=options('two or three')) + runner = SkipAwareTextTestRunner(options=options('two or three')) self.assertTrue(runner.does_match_tags(cls.test_one)) self.assertTrue(runner.does_match_tags(cls.test_two)) self.assertTrue(runner.does_match_tags(cls.test_three)) - runner = SkipAwareTextTestRunner(options=options('two and three')) + runner = SkipAwareTextTestRunner(options=options('two and three')) self.assertFalse(runner.does_match_tags(cls.test_one)) self.assertTrue(runner.does_match_tags(cls.test_two)) self.assertFalse(runner.does_match_tags(cls.test_three)) @@ -19,7 +19,7 @@ Command line options: If no non-option arguments are present, prefixes used are 'test', 'regrtest', 'smoketest' and 'unittest'. -:copyright: 2003-2008 LOGILAB S.A. (Paris, FRANCE), all rights reserved. +:copyright: 2003-2009 LOGILAB S.A. (Paris, FRANCE), all rights reserved. :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr :license: General Public License version 2 - http://www.gnu.org/licenses """ @@ -918,6 +918,9 @@ def unittest_main(module='__main__', defaultTest=None, class TestSkipped(Exception): """raised when a test is skipped""" +class InnerTestSkipped(TestSkipped): + """raised when a test is skipped""" + def is_generator(function): flags = function.func_code.co_flags return flags & CO_GENERATOR @@ -1188,6 +1191,9 @@ succeeded test into", osp.join(os.getcwd(),FILE_RESTART) except KeyboardInterrupt: self._stop_capture() raise + except InnerTestSkipped, e: + result.addSkipped(self, e) + return 1 except: self._stop_capture() result.addError(self, self.__exc_info()) @@ -1203,6 +1209,11 @@ succeeded test into", osp.join(os.getcwd(),FILE_RESTART) msg = msg or 'test was skipped' raise TestSkipped(msg) + def innerSkip(self, msg=None): + """mark a generative test as skipped for the <msg> reason""" + msg = msg or 'test was skipped' + raise InnerTestSkipped(msg) + def assertIn(self, object, set): """assert <object> are in <set>""" self.assert_(object in set, "%s not in %s" % (object, set)) |