summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--__pkginfo__.py2
-rw-r--r--debian/changelog6
-rw-r--r--sphinxutils.py2
-rw-r--r--test/unittest_testlib.py95
-rw-r--r--testlib.py13
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))
diff --git a/testlib.py b/testlib.py
index aeaedb3..66a5210 100644
--- a/testlib.py
+++ b/testlib.py
@@ -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))