diff options
author | Sylvain Th?nault <sylvain.thenault@logilab.fr> | 2009-10-20 14:27:11 +0200 |
---|---|---|
committer | Sylvain Th?nault <sylvain.thenault@logilab.fr> | 2009-10-20 14:27:11 +0200 |
commit | 78d91a5ffcf12ab811aca95e3596be842b02f988 (patch) | |
tree | 0fe329f28a46359b5423ffc4894c511dfd2d3742 | |
parent | 2d1c598df0a6759d7702a02a1147c856628a8af3 (diff) | |
parent | 166e3151585127b5569858794050bc5c18acfdd6 (diff) | |
download | logilab-common-78d91a5ffcf12ab811aca95e3596be842b02f988.tar.gz |
merge
-rw-r--r-- | debugger.py | 9 | ||||
-rw-r--r-- | test/unittest_testlib.py | 57 | ||||
-rw-r--r-- | testlib.py | 9 |
3 files changed, 69 insertions, 6 deletions
diff --git a/debugger.py b/debugger.py index 567c738..59bd0f8 100644 --- a/debugger.py +++ b/debugger.py @@ -74,11 +74,12 @@ class Debugger(Pdb): - overrides list command to search for current block instead of using 5 lines of context """ - def __init__(self, tcbk): + def __init__(self, tcbk=None): Pdb.__init__(self) self.reset() - while tcbk.tb_next is not None: - tcbk = tcbk.tb_next + if tcbk: + while tcbk.tb_next is not None: + tcbk = tcbk.tb_next self._tcbk = tcbk self._histfile = osp.join(os.environ["HOME"], ".pdbhist") @@ -187,3 +188,5 @@ def pm(): dbg = Debugger(sys.last_traceback) dbg.start() +def set_trace(): + Debugger().set_trace(sys._getframe().f_back) diff --git a/test/unittest_testlib.py b/test/unittest_testlib.py index 1bf5123..5e37cf0 100644 --- a/test/unittest_testlib.py +++ b/test/unittest_testlib.py @@ -20,7 +20,7 @@ except NameError: from unittest import TestSuite -from logilab.common.testlib import TestCase, SkipAwareTextTestRunner +from logilab.common.testlib import TestCase, SkipAwareTextTestRunner, Tags from logilab.common.testlib import mock_object, NonStrictTestLoader, create_files from logilab.common.testlib import capture_stdout, unittest_main, InnerTest from logilab.common.testlib import with_tempdir, tag @@ -776,6 +776,21 @@ class TagTC(TestCase): self.func = bob + class TagTestTC(TestCase): + tags = Tags(('one', 'two')) + + def test_one(self): + self.assertTrue(True) + + @tag('two', 'three') + def test_two(self): + self.assertTrue(True) + + @tag('three') + def test_three(self): + self.assertTrue(True) + self.cls = TagTestTC + def test_tag_decorator(self): bob = self.func @@ -804,5 +819,45 @@ class TagTC(TestCase): self.assertTrue(tags.match('not other or (testing and bibi)')) self.assertTrue(tags.match('other or (testing and bob)')) + def test_tagged_class(self): + def options(tags): + class Options(object): + tags_pattern = tags + return Options() + + cls = self.cls + + 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')) + 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')) + 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')) + 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')) + 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')) + 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)) + + + if __name__ == '__main__': unittest_main() @@ -466,8 +466,13 @@ class SkipAwareTextTestRunner(unittest.TextTestRunner): if self.options is not None: tags_pattern = getattr(self.options, 'tags_pattern', None) if tags_pattern is not None: - tags = getattr(test, 'tags', Tags()) - return tags.match(tags_pattern) + tags = getattr(test, 'tags', None) + if tags is not None: + return tags.match(tags_pattern) + if isinstance(test, types.MethodType): + tags = getattr(test.im_class, 'tags', Tags()) + return tags.match(tags_pattern) + return False return True # no pattern def _makeResult(self): |