[Checkins] SVN: zope.component/tseaver-test_cleanup/ Coverage for z.c._declaration.adapts.

Tres Seaver cvs-admin at zope.org
Fri Jun 22 19:26:09 UTC 2012


Log message for revision 127044:
  Coverage for z.c._declaration.adapts.

Changed:
  _U  zope.component/tseaver-test_cleanup/
  U   zope.component/tseaver-test_cleanup/src/zope/component/tests/test__declaration.py

-=-
Modified: zope.component/tseaver-test_cleanup/src/zope/component/tests/test__declaration.py
===================================================================
--- zope.component/tseaver-test_cleanup/src/zope/component/tests/test__declaration.py	2012-06-22 19:26:01 UTC (rev 127043)
+++ zope.component/tseaver-test_cleanup/src/zope/component/tests/test__declaration.py	2012-06-22 19:26:06 UTC (rev 127044)
@@ -66,6 +66,27 @@
 
 class Test_adapts(unittest.TestCase):
 
+    def _run_generated_code(self, code, globs, locs,
+                            fails_under_py3k=True,
+                           ):
+        import warnings
+        #from zope.component._compat import PYTHON3
+        PYTHON3 = False
+        with warnings.catch_warnings(record=True) as log:
+            warnings.resetwarnings()
+            if not PYTHON3:
+                exec(code, globs, locs)
+                self.assertEqual(len(log), 0) # no longer warn
+                return True
+            else:
+                try:
+                    exec(code, globs, locs)
+                except TypeError:
+                    return False
+                else:
+                    if fails_under_py3k:
+                        self.fail("Didn't raise TypeError")
+
     def test_instances_not_affected(self):
         from zope.component._declaration import adapts
         class C(object):
@@ -76,7 +97,68 @@
             return C().__component_adapts__
         self.assertRaises(AttributeError, _try)
 
+    def test_called_from_function(self):
+        import warnings
+        from zope.component._declaration import adapts
+        from zope.interface import Interface
+        class IFoo(Interface):
+            pass
+        globs = {'adapts': adapts, 'IFoo': IFoo}
+        locs = {}
+        CODE = "\n".join([
+            'def foo():',
+            '    adapts(IFoo)'
+            ])
+        if self._run_generated_code(CODE, globs, locs, False):
+            foo = locs['foo']
+            with warnings.catch_warnings(record=True) as log:
+                warnings.resetwarnings()
+                self.assertRaises(TypeError, foo)
+                self.assertEqual(len(log), 0) # no longer warn
 
+    def test_called_twice_from_class(self):
+        import warnings
+        from zope.component._declaration import adapts
+        from zope.interface import Interface
+        from zope.interface._compat import PYTHON3
+        class IFoo(Interface):
+            pass
+        class IBar(Interface):
+            pass
+        globs = {'adapts': adapts, 'IFoo': IFoo, 'IBar': IBar}
+        locs = {}
+        CODE = "\n".join([
+            'class Foo(object):',
+            '    adapts(IFoo)',
+            '    adapts(IBar)',
+            ])
+        with warnings.catch_warnings(record=True) as log:
+            warnings.resetwarnings()
+            try:
+                exec(CODE, globs, locs)
+            except TypeError:
+                if not PYTHON3:
+                    self.assertEqual(len(log), 0) # no longer warn
+            else:
+                self.fail("Didn't raise TypeError")
+
+    def test_called_once_from_class(self):
+        from zope.component._declaration import adapts
+        from zope.interface import Interface
+        class IFoo(Interface):
+            pass
+        globs = {'adapts': adapts, 'IFoo': IFoo}
+        locs = {}
+        CODE = "\n".join([
+            'class Foo(object):',
+            '    adapts(IFoo)',
+            ])
+        if self._run_generated_code(CODE, globs, locs):
+            Foo = locs['Foo']
+            spec = Foo.__component_adapts__
+            self.assertEqual(list(spec), [IFoo])
+
+
 def test_suite():
     return unittest.TestSuite((
         unittest.makeSuite(Test_adapter),



More information about the checkins mailing list