[Checkins] SVN: Products.CMFCore/trunk/Products/CMFCore/ - use catch_warnings context manager instead of WarningInterceptor

Yvo Schubbe cvs-admin at zope.org
Wed May 23 09:38:07 UTC 2012


Log message for revision 126450:
  - use catch_warnings context manager instead of WarningInterceptor

Changed:
  U   Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_typeinfo.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/base/testcase.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_ActionProviderBase.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_DirectoryView.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_FSPythonScript.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_TypesTool.py

-=-
Modified: Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_typeinfo.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_typeinfo.py	2012-05-23 09:36:26 UTC (rev 126449)
+++ Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_typeinfo.py	2012-05-23 09:38:04 UTC (rev 126450)
@@ -19,20 +19,18 @@
 from OFS.Folder import Folder
 from zope.component import getSiteManager
 
-from Products.GenericSetup.testing import BodyAdapterTestCase
-from Products.GenericSetup.tests.common import BaseRegistryTests
-from Products.GenericSetup.tests.common import DummyExportContext
-from Products.GenericSetup.tests.common import DummyImportContext
-
 from Products.CMFCore.interfaces import ITypesTool
 from Products.CMFCore.permissions import AccessContentsInformation
 from Products.CMFCore.permissions import ModifyPortalContent
 from Products.CMFCore.permissions import View
 from Products.CMFCore.testing import ExportImportZCMLLayer
-from Products.CMFCore.tests.base.testcase import WarningInterceptor
 from Products.CMFCore.TypesTool import FactoryTypeInformation
 from Products.CMFCore.TypesTool import ScriptableTypeInformation
 from Products.CMFCore.TypesTool import TypesTool
+from Products.GenericSetup.testing import BodyAdapterTestCase
+from Products.GenericSetup.tests.common import BaseRegistryTests
+from Products.GenericSetup.tests.common import DummyExportContext
+from Products.GenericSetup.tests.common import DummyImportContext
 
 _FTI_BODY = """\
 <?xml version="1.0"?>
@@ -321,8 +319,7 @@
 """
 
 
-class TypeInformationXMLAdapterTests(
-    BodyAdapterTestCase, unittest.TestCase, WarningInterceptor):
+class TypeInformationXMLAdapterTests(BodyAdapterTestCase, unittest.TestCase):
 
     layer = ExportImportZCMLLayer
 
@@ -361,15 +358,10 @@
     def setUp(self):
         self._obj = FactoryTypeInformation('foo_fti')
         self._BODY = _FTI_BODY
-        self._trap_warning_output()
 
-    def tearDown(self):
-        self._free_warning_output()
 
+class TypesToolXMLAdapterTests(BodyAdapterTestCase, unittest.TestCase):
 
-class TypesToolXMLAdapterTests(
-    BodyAdapterTestCase, unittest.TestCase, WarningInterceptor):
-
     layer = ExportImportZCMLLayer
 
     def _getTargetClass(self):
@@ -384,21 +376,10 @@
     def setUp(self):
         self._obj = TypesTool()
         self._BODY = _TYPESTOOL_BODY
-        self._trap_warning_output()
 
-    def tearDown(self):
-        self._free_warning_output()
 
+class _TypeInfoSetup(BaseRegistryTests):
 
-class _TypeInfoSetup(BaseRegistryTests, WarningInterceptor):
-
-    def setUp(self):
-        BaseRegistryTests.setUp(self)
-        self._trap_warning_output()
-
-    def tearDown(self):
-        self._free_warning_output()
-
     def _initSite(self, foo=0):
         site = Folder(id='site').__of__(self.app)
         ttool = TypesTool()

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/base/testcase.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/base/testcase.py	2012-05-23 09:36:26 UTC (rev 126449)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/base/testcase.py	2012-05-23 09:38:04 UTC (rev 126450)
@@ -66,29 +66,6 @@
         self.installed = tuple([s for s in self.installed if s != subsystem])
 
 
-class WarningInterceptor:
-
-    _old_stderr = None
-    _our_stderr_stream = None
-
-    def _trap_warning_output(self):
-
-        if self._old_stderr is not None:
-            return
-
-        from StringIO import StringIO
-
-        self._old_stderr = sys.stderr
-        self._our_stderr_stream = sys.stderr = StringIO()
-
-    def _free_warning_output(self):
-
-        if self._old_stderr is None:
-            return
-
-        sys.stderr = self._old_stderr
-
-
 class TransactionalTest(unittest.TestCase):
 
     layer = ZopeLite

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_ActionProviderBase.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_ActionProviderBase.py	2012-05-23 09:36:26 UTC (rev 126449)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_ActionProviderBase.py	2012-05-23 09:38:04 UTC (rev 126450)
@@ -16,6 +16,8 @@
 import unittest
 import Testing
 
+import warnings
+
 from zope.component import getSiteManager
 from zope.interface.verify import verifyClass
 from zope.testing.cleanup import cleanUp
@@ -25,7 +27,6 @@
 from Products.CMFCore.tests.base.dummy import DummySite
 from Products.CMFCore.tests.base.dummy import DummyTool
 from Products.CMFCore.tests.base.testcase import SecurityTest
-from Products.CMFCore.tests.base.testcase import WarningInterceptor
 
 #
 #   We have to import these here to make the "ugly sharing" test case go.
@@ -60,10 +61,9 @@
                 or 0)
 
 
-class ActionProviderBaseTests(SecurityTest, WarningInterceptor):
+class ActionProviderBaseTests(SecurityTest):
 
     def setUp(self):
-        self._trap_warning_output()
         SecurityTest.setUp(self)
         self.site = DummySite('site').__of__(self.app)
         sm = getSiteManager()
@@ -73,7 +73,6 @@
     def tearDown(self):
         cleanUp()
         SecurityTest.tearDown(self)
-        self._free_warning_output()
 
     def _makeProvider(self, dummy=0):
 
@@ -213,21 +212,23 @@
         def idify(x):
             return id(x)
 
-        old_ids = one_ids = map(idify, one.listActions())
-        another_ids = map(idify, another.listActions())
+        with warnings.catch_warnings():
+            warnings.simplefilter('ignore')
+            old_ids = one_ids = map(idify, one.listActions())
+            another_ids = map(idify, another.listActions())
 
-        self.assertEqual(one_ids, another_ids)
+            self.assertEqual(one_ids, another_ids)
 
-        one.changeActions({'id_0': 'different_id',
-                           'name_0': 'A Different Title',
-                           'action_0': 'arise_shine',
-                           'condition_0': 'always',
-                           'permissions_0': 'granted',
-                           'category_0': 'quality',
-                           'visible_0': 1})
+            one.changeActions({'id_0': 'different_id',
+                               'name_0': 'A Different Title',
+                               'action_0': 'arise_shine',
+                               'condition_0': 'always',
+                               'permissions_0': 'granted',
+                               'category_0': 'quality',
+                               'visible_0': 1})
 
-        one_ids = map(idify, one.listActions())
-        another_ids = map(idify, another.listActions())
+            one_ids = map(idify, one.listActions())
+            another_ids = map(idify, another.listActions())
         self.assertFalse(one_ids == another_ids)
         self.assertEqual(old_ids, another_ids)
 
@@ -238,20 +239,24 @@
                    'icon': ''}]
 
         apb = self.site._setObject('portal_apb', self._makeProvider(1))
-        rval = apb.listActionInfos()
-        self.assertEqual(rval, [])
-        rval = apb.listActionInfos(check_visibility=0)
-        self.assertEqual(rval, wanted)
-        rval = apb.listActionInfos('foo/another_id', check_visibility=0)
-        self.assertEqual(rval, [])
+        with warnings.catch_warnings():
+            warnings.simplefilter('ignore')
+            rval = apb.listActionInfos()
+            self.assertEqual(rval, [])
+            rval = apb.listActionInfos(check_visibility=0)
+            self.assertEqual(rval, wanted)
+            rval = apb.listActionInfos('foo/another_id', check_visibility=0)
+            self.assertEqual(rval, [])
 
     def test_getActionObject(self):
         apb = self.site._setObject('portal_apb', self._makeProvider(1))
-        rval = apb.getActionObject('object/an_id')
-        self.assertEqual(rval, apb._actions[0])
-        rval = apb.getActionObject('object/not_existing_id')
-        self.assertEqual(rval, None)
-        self.assertRaises(ValueError, apb.getActionObject, 'wrong_format')
+        with warnings.catch_warnings():
+            warnings.simplefilter('ignore')
+            rval = apb.getActionObject('object/an_id')
+            self.assertEqual(rval, apb._actions[0])
+            rval = apb.getActionObject('object/not_existing_id')
+            self.assertEqual(rval, None)
+            self.assertRaises(ValueError, apb.getActionObject, 'wrong_format')
 
     def test_getActionInfo(self):
         wanted = {'id': 'an_id', 'title': 'A Title', 'description': '',
@@ -260,22 +265,25 @@
                   'icon': ''}
 
         apb = self.site._setObject('portal_apb', self._makeProvider(1))
-        rval = apb.getActionInfo(('object/an_id',))
-        self.assertEqual(rval, wanted)
-        rval = apb.getActionInfo('object/an_id')
-        self.assertEqual(rval, wanted)
-        self.assertRaises(ValueError, apb.getActionInfo, 'object/an_id',
-                          check_visibility=1)
+        with warnings.catch_warnings():
+            warnings.simplefilter('ignore')
+            rval = apb.getActionInfo(('object/an_id',))
+            self.assertEqual(rval, wanted)
+            rval = apb.getActionInfo('object/an_id')
+            self.assertEqual(rval, wanted)
+            self.assertRaises(ValueError, apb.getActionInfo, 'object/an_id',
+                              check_visibility=1)
 
-        # The following is nasty, but I want to make sure the ValueError
-        # carries some useful information
-        INVALID_ID = 'invalid_id'
-        try:
-            rval = apb.getActionInfo('object/%s' % INVALID_ID)
-        except ValueError, e:
-            message = e.args[0]
-            detail = '"%s" does not offer action "%s"' % (message, INVALID_ID)
-            self.assertTrue(message.find(INVALID_ID) != -1, detail)
+            # The following is nasty, but I want to make sure the ValueError
+            # carries some useful information
+            INVALID_ID = 'invalid_id'
+            try:
+                rval = apb.getActionInfo('object/%s' % INVALID_ID)
+            except ValueError, e:
+                message = e.args[0]
+                detail = '"%s" does not offer action "%s"' % (message,
+                                                              INVALID_ID)
+                self.assertTrue(message.find(INVALID_ID) != -1, detail)
 
 
 def test_suite():

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_DirectoryView.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_DirectoryView.py	2012-05-23 09:36:26 UTC (rev 126449)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_DirectoryView.py	2012-05-23 09:38:04 UTC (rev 126450)
@@ -17,6 +17,7 @@
 import Testing
 
 import sys
+import warnings
 from os import mkdir
 from os import remove
 from os.path import join
@@ -27,11 +28,10 @@
 from Products.CMFCore.tests import _globals
 from Products.CMFCore.tests.base.dummy import DummyFolder
 from Products.CMFCore.tests.base.testcase import FSDVTest
-from Products.CMFCore.tests.base.testcase import WarningInterceptor
 from Products.CMFCore.tests.base.testcase import WritableFSDVTest
 
 
-class DirectoryViewPathTests(unittest.TestCase, WarningInterceptor):
+class DirectoryViewPathTests(unittest.TestCase):
     """
     These test that, no matter what is stored in their dirpath,
     FSDV's will do their best to find an appropriate skin
@@ -46,9 +46,6 @@
         self.ob = DummyFolder()
         addDirectoryViews(self.ob, 'fake_skins', _globals)
 
-    def tearDown(self):
-        self._free_warning_output()
-
     def test__generateKey(self):
         from Products.CMFCore.DirectoryView import _generateKey
 
@@ -77,18 +74,17 @@
 
     # Test we do nothing if given a really wacky path
     def test_UnhandleableExpandPath(self):
-        from Products.CMFCore import DirectoryView
-
-        self._trap_warning_output()
         file = mktemp()
-        self.ob.fake_skin.manage_properties(file)
-        self.assertEqual(self.ob.fake_skin.objectIds(), [])
-        # Check that a warning was raised.
-        warnings = [t[0] for t in DirectoryView.__warningregistry__]
-        text = ('DirectoryView fake_skin refers to a non-existing path %r'
-                % file)
-        self.assertTrue(text in warnings)
-        self.assertTrue(text in self._our_stderr_stream.getvalue())
+        with warnings.catch_warnings(record=True) as w:
+            warnings.simplefilter('always')
+            self.ob.fake_skin.manage_properties(file)
+            self.assertEqual(self.ob.fake_skin.objectIds(), [])
+            # Check that a warning was raised.
+            self.assertEqual(len(w), 1)
+            self.assertTrue(issubclass(w[-1].category, UserWarning))
+            text = ('DirectoryView fake_skin refers to a non-existing path %r'
+                    % file)
+            self.assertTrue(text in str(w[-1].message))
 
     # this test tests that registerDirectory creates keys in the right format.
     def test_registerDirectoryKeys(self):

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_FSPythonScript.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_FSPythonScript.py	2012-05-23 09:36:26 UTC (rev 126449)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_FSPythonScript.py	2012-05-23 09:38:04 UTC (rev 126450)
@@ -18,6 +18,7 @@
 ZopeTestCase.installProduct('PythonScripts', 1)
 
 import os
+import warnings
 from os.path import join
 from sys import exc_info
 from thread import start_new_thread
@@ -34,7 +35,6 @@
 from Products.CMFCore.FSPythonScript import FSPythonScript
 from Products.CMFCore.tests.base.testcase import FSDVTest
 from Products.CMFCore.tests.base.testcase import SecurityTest
-from Products.CMFCore.tests.base.testcase import WarningInterceptor
 
 
 class FSPSMaker(FSDVTest):
@@ -273,19 +273,16 @@
         self._stacklevel = stacklevel
 
     def __call__(self):
-        import warnings
         warnings.warn('foo', stacklevel=self._stacklevel)
 
 
-class FSPythonScriptWarningsTests(SecurityTest, FSPSMaker, WarningInterceptor):
+class FSPythonScriptWarningsTests(SecurityTest, FSPSMaker):
 
     def setUp(self):
         SecurityTest.setUp(self)
         FSPSMaker.setUp(self)
-        self._trap_warning_output()
 
     def tearDown(self):
-        self._free_warning_output()
         FSPSMaker.tearDown(self)
         SecurityTest.tearDown(self)
 
@@ -297,7 +294,10 @@
         #   in warn_explicit
         #     if module[-3:].lower() == ".py":
         # TypeError: unsubscriptable object
-        self.app.warn1()
+        with warnings.catch_warnings():
+            warnings.simplefilter('ignore')
+            self.app.warn_me()
+            self.app.warn1()
 
 
 def test_suite():

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_TypesTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_TypesTool.py	2012-05-23 09:36:26 UTC (rev 126449)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_TypesTool.py	2012-05-23 09:38:04 UTC (rev 126450)
@@ -15,13 +15,14 @@
 
 import unittest
 
+import warnings
+
 from AccessControl.Permission import Permission
 from zope.component import getSiteManager
 
 from Products.CMFCore.interfaces import IWorkflowTool
 from Products.CMFCore.testing import FunctionalZCMLLayer
 from Products.CMFCore.tests.base.testcase import SecurityTest
-from Products.CMFCore.tests.base.testcase import WarningInterceptor
 
 
 class TypesToolTests(unittest.TestCase):
@@ -257,15 +258,9 @@
         self.assertEqual(folder.page2.portal_type, 'Baz')
 
 
-class TypeInfoTests(WarningInterceptor):
+class TypeInfoTests(object):
     # Subclass must define _getTargetClass
 
-    def setUp(self):
-        self._trap_warning_output()
-
-    def tearDown(self):
-        self._free_warning_output()
-
     def _makeOne(self, id='test', **kw):
         return self._getTargetClass()(id, **kw)
 
@@ -285,15 +280,20 @@
         verifyObject(ITypeInformation, self._makeOne())
 
     def test_construction(self):
-        ti = self._makeOne('Foo', description='Description', meta_type='Foo',
-                           icon='foo.gif')
+        with warnings.catch_warnings():
+            warnings.simplefilter('ignore')
+            ti = self._makeOne('Foo', description='Description',
+                               meta_type='Foo', icon='foo.gif')
         self.assertEqual(ti.getId(), 'Foo')
         self.assertEqual(ti.Title(), 'Foo')
         self.assertEqual(ti.Description(), 'Description')
         self.assertEqual(ti.Metatype(), 'Foo')
         self.assertEqual(ti.getIconExprObject().text,
                          'string:${portal_url}/foo.gif')
-        self.assertEqual(ti.getIcon(), 'foo.gif')
+
+        with warnings.catch_warnings():
+            warnings.simplefilter('ignore')
+            self.assertEqual(ti.getIcon(), 'foo.gif')
         self.assertEqual(ti.immediate_view, '')
 
         ti = self._makeOne('Foo', immediate_view='foo_view')



More information about the checkins mailing list