[Checkins]
SVN: Sandbox/ulif/z3c-testsetup/trunk/src/z3c/testsetup/testgetter.py
Provide testgetters for reusable customized testsetups.
Uli Fouquet
uli at gnufix.de
Wed Feb 13 06:39:18 EST 2008
Log message for revision 83784:
Provide testgetters for reusable customized testsetups.
Changed:
A Sandbox/ulif/z3c-testsetup/trunk/src/z3c/testsetup/testgetter.py
-=-
Added: Sandbox/ulif/z3c-testsetup/trunk/src/z3c/testsetup/testgetter.py
===================================================================
--- Sandbox/ulif/z3c-testsetup/trunk/src/z3c/testsetup/testgetter.py (rev 0)
+++ Sandbox/ulif/z3c-testsetup/trunk/src/z3c/testsetup/testgetter.py 2008-02-13 11:39:18 UTC (rev 83784)
@@ -0,0 +1,109 @@
+##############################################################################
+#
+# Copyright (c) 2008 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Factories for testcollectors.
+"""
+import unittest
+from z3c.testsetup.doctesting import UnitDocTestSetup, FunctionalDocTestSetup
+from z3c.testsetup.testing import UnitTestSetup
+from z3c.testsetup.util import get_package, get_keyword_params
+
+class BasicTestGetter(object):
+ """Abstract base.
+ """
+ defaults = {}
+ settings = {}
+ args = ()
+
+ def __init__(self, pkg_or_dotted_name, *args, **kw):
+ self.args = args
+ if 'defaults' in kw.keys():
+ self.defaults = kw['defaults']
+ del kw['defaults']
+ self.settings = kw
+ self.package = get_package(pkg_or_dotted_name)
+ self.initialize()
+ return
+
+ def initialize(self):
+ self.filter_keywords()
+ return
+
+ def __call__(self):
+ suite = unittest.TestSuite()
+ suite.addTest(
+ self.wrapped_class(
+ self.package, **self.settings).getTestSuite()
+ )
+ return suite
+
+ def filter_keywords(self):
+ new_kws = self.defaults.copy()
+ new_kws.update(self.settings)
+ self.settings = new_kws
+ if not getattr(self, 'wrapped_class', None):
+ return
+ supported_kws = get_keyword_params(self.wrapped_class, '__init__')
+ for kw, val in new_kws.items():
+ if (kw.startswith(self.special_char) and
+ kw[1:] in supported_kws):
+ new_kws[kw[1:]] = val
+ if kw not in supported_kws:
+ del new_kws[kw]
+ self.settings = new_kws
+ return
+
+
+class FunctionalDocTestGetter(BasicTestGetter):
+ """Collect functional doctests.
+ """
+
+ wrapped_class = FunctionalDocTestSetup
+ special_char = 'f'
+
+class UnitDocTestGetter(BasicTestGetter):
+ """Collect unit doctests.
+ """
+
+ wrapped_class = UnitDocTestSetup
+ special_char = 'u'
+
+class PythonTestGetter(BasicTestGetter):
+ """Collect 'normal' python tests.
+ """
+
+ wrapped_class = UnitTestSetup
+ special_char = 'p'
+
+
+
+class TestGetter(BasicTestGetter):
+ """Handle and pass parameters to different test setup types.
+
+ In fact ``TestGetter``s are a replacement for the normally used
+ ``test_suite()`` functions in test setup modules. Because in that
+ case only callables are expected, we can also use classes.
+ """
+
+ def __call__(self):
+ """Return a test suite.
+ """
+ suite = unittest.TestSuite()
+ for getter in [FunctionalDocTestGetter, UnitDocTestGetter,
+ PythonTestGetter]:
+ suite_getter = getter(self.package, **self.settings)
+ suite_getter.defaults = getattr(self, 'defaults', {})
+ suite.addTest(
+ suite_getter()
+ )
+ return suite
More information about the Checkins
mailing list