Log message for revision 76987: Use a test_class to gain better control over fixture cleanup.
Changed: U Zope/branches/2.10/lib/python/Testing/ZopeTestCase/ZopeLite.py U Zope/branches/2.10/lib/python/Testing/ZopeTestCase/zopedoctest/testPackageAsProduct.py -=- Modified: Zope/branches/2.10/lib/python/Testing/ZopeTestCase/ZopeLite.py =================================================================== --- Zope/branches/2.10/lib/python/Testing/ZopeTestCase/ZopeLite.py 2007-06-23 13:18:57 UTC (rev 76986) +++ Zope/branches/2.10/lib/python/Testing/ZopeTestCase/ZopeLite.py 2007-06-23 15:02:50 UTC (rev 76987) @@ -216,6 +216,7 @@ configure = Zope2.configure def startup(): pass Zope = Zope2 +active = _patched # ZODB sandbox factory from ZODB.DemoStorage import DemoStorage Modified: Zope/branches/2.10/lib/python/Testing/ZopeTestCase/zopedoctest/testPackageAsProduct.py =================================================================== --- Zope/branches/2.10/lib/python/Testing/ZopeTestCase/zopedoctest/testPackageAsProduct.py 2007-06-23 13:18:57 UTC (rev 76986) +++ Zope/branches/2.10/lib/python/Testing/ZopeTestCase/zopedoctest/testPackageAsProduct.py 2007-06-23 15:02:50 UTC (rev 76987) @@ -20,9 +20,12 @@ execfile(os.path.join(sys.path[0], 'framework.py')) from unittest import TestSuite -from Testing.ZopeTestCase import FunctionalDocTestSuite +from Testing import ZopeTestCase +from Testing.ZopeTestCase import ZopeLite +from Testing.ZopeTestCase import ZopeDocTestSuite from Products.Five import zcml from zope.testing import cleanup +import Products def testInstallPackage(): @@ -31,15 +34,12 @@ >>> from Testing import ZopeTestCase >>> from Products.Five import zcml - >>> import sys, Products - Rig sys.path so testpackage can be imported + Register testpackage - >>> saved = sys.path[:] - >>> sys.path.append(ZopeTestCase.__path__[0]) + >>> ZopeTestCase.hasPackage('testpackage') + False - Register testpackage - >>> config = ''' ... <configure ... xmlns:five="http://namespaces.zope.org/five"> @@ -48,19 +48,18 @@ ... initialize="testpackage.initialize" ... /> ... </configure>''' + >>> zcml.load_string(config) + The package is registered now + >>> ZopeTestCase.hasPackage('testpackage') - False - >>> zcml.load_string(config) - >>> ZopeTestCase.hasPackage('testpackage') True - Not yet installed + But not yet installed - >>> app = ZopeTestCase.app() + >>> app = self._app() >>> 'testpackage' in app.Control_Panel.Products.objectIds() False - >>> ZopeTestCase.close(app) Install it @@ -69,39 +68,54 @@ Now it shows up in Control_Panel - >>> app = ZopeTestCase.app() + >>> app = self._app() >>> 'testpackage' in app.Control_Panel.Products.objectIds() True - >>> ZopeTestCase.close(app) hasPackage still returns True >>> ZopeTestCase.hasPackage('testpackage') True - Clean up + A package is only installed once, subsequent calls to installPackage + are ignored: - >>> import testpackage - >>> Products._registered_packages.remove(testpackage) - >>> sys.path[:] = saved + >>> ZopeTestCase.installPackage('testpackage', quiet=True) """ -def setUp(self): - cleanup.cleanUp() - zcml._initialized = False - zcml.load_site() +class TestClass(ZopeTestCase.FunctionalTestCase): -def tearDown(self): - cleanup.cleanUp() - zcml._initialized = False + def afterSetUp(self): + cleanup.cleanUp() + zcml._initialized = False + zcml.load_site() + self.saved = sys.path[:] + sys.path.append(ZopeTestCase.__path__[0]) + def afterClear(self): + cleanup.cleanUp() + sys.path[:] = self.saved + + registered = getattr(Products, '_registered_packages', None) + if registered is not None: + Products._registered_packages = [m for m in registered + if m.__name__ != 'testpackage'] + + to_initialize = getattr(Products, '_packages_to_initialize', None) + if to_initialize is not None: + Products._packages_to_initialize = [(m, f) for (m, f) in to_initialize + if m.__name__ != 'testpackage'] + + def test_suite(): - return TestSuite(( - # Must use functional because installPackage commits - FunctionalDocTestSuite(setUp=setUp, tearDown=tearDown), - )) + if ZopeLite.active: + return TestSuite(( + ZopeDocTestSuite(test_class=TestClass), + )) + else: + return TestSuite() if __name__ == '__main__': framework() _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins