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

Tres Seaver cvs-admin at zope.org
Tue Jun 26 23:01:25 UTC 2012


Log message for revision 127120:
  Coverage for z.c.zcml.view.

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

-=-
Modified: zope.component/tseaver-test_cleanup/src/zope/component/tests/test_zcml.py
===================================================================
--- zope.component/tseaver-test_cleanup/src/zope/component/tests/test_zcml.py	2012-06-26 23:01:18 UTC (rev 127119)
+++ zope.component/tseaver-test_cleanup/src/zope/component/tests/test_zcml.py	2012-06-26 23:01:22 UTC (rev 127120)
@@ -750,13 +750,15 @@
             def bar():
                 pass
         class _View(object):
+            def __init__(self, context):
+                self.context = context
             def foo():
                 pass
             def bar():
                 pass
         _cfg_ctx = _makeConfigContext()
         self.assertRaises(ComponentConfigurationError,
-                          self._callFUT, _cfg_ctx, _View, IViewType, 'test',
+                          self._callFUT, _cfg_ctx, (_View,), IViewType, '',
                                          for_=(Interface, Interface),
                                          allowed_interface=IView)
 
@@ -766,491 +768,666 @@
         class IViewType(Interface):
             pass
         class _View(object):
+            def __init__(self, context):
+                self.context = context
             def foo():
                 pass
             def bar():
                 pass
         _cfg_ctx = _makeConfigContext()
         self.assertRaises(ComponentConfigurationError,
-                          self._callFUT, _cfg_ctx, _View, IViewType, 'test',
+                          self._callFUT, _cfg_ctx, (_View,), IViewType, '',
                                          for_=(Interface, Interface),
                                          allowed_attributes=('foo', 'bar'))
 
-    def test_w_factory_as_None(self):
+    def test_w_factory_as_empty(self):
         from zope.interface import Interface
         from zope.component.zcml import ComponentConfigurationError
         class IViewType(Interface):
             pass
         _cfg_ctx = _makeConfigContext()
         self.assertRaises(ComponentConfigurationError,
-                          self._callFUT, _cfg_ctx, None, IViewType, 'test',
+                          self._callFUT, _cfg_ctx, (), IViewType, '',
                                          for_=(Interface, Interface))
 
+    def test_w_multiple_factory_multiple_for_(self):
+        from zope.interface import Interface
+        from zope.component.zcml import ComponentConfigurationError
+        class IViewType(Interface):
+            pass
+        class Foo(object):
+            pass
+        class Bar(object):
+            pass
+        _cfg_ctx = _makeConfigContext()
+        self.assertRaises(ComponentConfigurationError,
+                          self._callFUT, _cfg_ctx, (Foo, Bar), IViewType, '',
+                                         for_=(Interface, Interface))
+
     def test_w_for__as_empty(self):
         from zope.interface import Interface
         from zope.component.zcml import ComponentConfigurationError
         class IViewType(Interface):
             pass
         class _View(object):
-            def foo():
-                pass
-            def bar():
-                pass
+            def __init__(self, context):
+                self.context = context
         _cfg_ctx = _makeConfigContext()
         self.assertRaises(ComponentConfigurationError,
-                          self._callFUT, _cfg_ctx, _View, IViewType, 'test',
+                          self._callFUT, _cfg_ctx, (_View,), IViewType, '',
                                          for_=())
 
+    def test_w_single_factory_single_for__wo_permission_w_name(self):
+        from zope.interface import Interface
+        from zope.component.zcml import handler
+        from zope.component.interface import provideInterface
+        class IViewType(Interface):
+            pass
+        class _View(object):
+            def __init__(self, context):
+                self.context = context
+        _cfg_ctx = _makeConfigContext()
+        self._callFUT(_cfg_ctx, (_View,), IViewType, 'test', for_=(Interface,))
+        self.assertEqual(len(_cfg_ctx._actions), 4)
+        self.assertEqual(_cfg_ctx._actions[0][0], ())
+        # Register the adapter
+        action =_cfg_ctx._actions[0][1]
+        self.assertEqual(action['callable'], handler)
+        self.assertEqual(action['discriminator'],
+                         ('view', (Interface, IViewType), 'test', Interface))
+        self.assertEqual(action['args'][0], 'registerAdapter')
+        self.assertEqual(action['args'][1], _View)
+        self.assertEqual(action['args'][2], (Interface, IViewType))
+        self.assertEqual(action['args'][3], Interface)
+        self.assertEqual(action['args'][4], 'test')
+        self.assertEqual(action['args'][5], 'TESTING')
+        # Register the provided interface
+        self.assertEqual(_cfg_ctx._actions[1][0], ())
+        action =_cfg_ctx._actions[1][1]
+        self.assertEqual(action['callable'], provideInterface)
+        self.assertEqual(action['discriminator'], None)
+        self.assertEqual(action['args'], ('', Interface))
+        # Register the required interface(s)
+        self.assertEqual(_cfg_ctx._actions[2][0], ())
+        action =_cfg_ctx._actions[2][1]
+        self.assertEqual(action['callable'], provideInterface)
+        self.assertEqual(action['discriminator'], None)
+        self.assertEqual(action['args'], ('', Interface))
+        self.assertEqual(_cfg_ctx._actions[3][0], ())
+        action =_cfg_ctx._actions[3][1]
+        self.assertEqual(action['callable'], provideInterface)
+        self.assertEqual(action['discriminator'], None)
+        self.assertEqual(action['args'], ('', IViewType))
 
-class ResourceViewTests(PlacelessSetup, unittest.TestCase):
+    def test_w_multiple_factory_single_for__wo_permission(self):
+        from zope.interface import Interface
+        from zope.component.zcml import handler
+        class IViewType(Interface):
+            pass
+        class _View(object):
+            def __init__(self, context):
+                self.context = context
+        class _View2(object):
+            def __init__(self, context, request):
+                self.context = context
+                self.request = request
+        _cfg_ctx = _makeConfigContext()
+        self._callFUT(_cfg_ctx, [_View, _View2], IViewType, '',
+                      for_=(Interface,))
+        self.assertEqual(_cfg_ctx._actions[0][0], ())
+        # Register the adapter
+        action =_cfg_ctx._actions[0][1]
+        self.assertEqual(action['callable'], handler)
+        self.assertEqual(action['discriminator'],
+                         ('view', (Interface, IViewType), '', Interface))
+        self.assertEqual(action['args'][0], 'registerAdapter')
+        factory = action['args'][1]
+        self.assertTrue(factory.factory is _View)
+        context = object()
+        request = object()
+        view = factory(context, request)
+        self.assertTrue(isinstance(view, _View2))
+        self.assertTrue(view.request is request)
+        self.assertTrue(isinstance(view.context, _View))
+        self.assertTrue(view.context.context is context)
+        self.assertEqual(action['args'][2], (Interface, IViewType))
+        self.assertEqual(action['args'][3], Interface)
+        self.assertEqual(action['args'][4], '')
+        self.assertEqual(action['args'][5], 'TESTING')
 
-    def setUp(self):
-        from zope import component
-        from zope import security
-        from zope.configuration.xmlconfig import XMLConfig
-        super(ResourceViewTests, self).setUp()
-        XMLConfig('meta.zcml', component)()
-        XMLConfig('meta.zcml', security)()
+    def test_w_single_factory_single_for__w_permission(self):
+        from zope.interface import Interface
+        from zope.component.zcml import handler
+        class IViewType(Interface):
+            pass
+        class _View(object):
+            def __init__(self, context, request):
+                self.context = context
+                self.request = request
+        _cfg_ctx = _makeConfigContext()
+        self._callFUT(_cfg_ctx, [_View], IViewType, '', for_=(Interface,),
+                      permission='testing')
+        self.assertEqual(_cfg_ctx._actions[0][0], ())
+        # Register the adapter
+        action =_cfg_ctx._actions[0][1]
+        self.assertEqual(action['callable'], handler)
+        self.assertEqual(action['discriminator'],
+                         ('view', (Interface, IViewType), '', Interface))
+        self.assertEqual(action['args'][0], 'registerAdapter')
+        factory = action['args'][1]
+        context = object()
+        request = object()
+        view = factory(context, request)
+        self.assertTrue(view.context is context)
+        self.assertTrue(view.request is request)
+        self.assertTrue(factory.factory is _View)
+        self.assertEqual(action['args'][2], (Interface, IViewType))
+        self.assertEqual(action['args'][3], Interface)
+        self.assertEqual(action['args'][4], '')
+        self.assertEqual(action['args'][5], 'TESTING')
 
-    def _config(self, zcml, testing=0):
-        from cStringIO import StringIO
-        from zope.configuration.xmlconfig import xmlconfig
-        xmlconfig(StringIO(_ZCML_TEMPLATE % zcml), testing=testing)
+    def test_w_single_factory_single_for__w_permission_and_allowed_attrs(self):
+        from zope.interface import Interface
+        from zope.component.zcml import handler
+        class IViewType(Interface):
+            pass
+        class _View(object):
+            def __init__(self, context, request):
+                self.context = context
+                self.request = request
+            def bar(self):
+                pass
+        _cfg_ctx = _makeConfigContext()
+        self._callFUT(_cfg_ctx, [_View], IViewType, '', for_=(Interface,),
+                      permission='testing', allowed_attributes=('bar',))
+        self.assertEqual(_cfg_ctx._actions[0][0], ())
+        # Register the adapter
+        action =_cfg_ctx._actions[0][1]
+        self.assertEqual(action['callable'], handler)
+        self.assertEqual(action['discriminator'],
+                         ('view', (Interface, IViewType), '', Interface))
+        self.assertEqual(action['args'][0], 'registerAdapter')
+        factory = action['args'][1]
+        checker = factory.checker
+        self.assertEqual(checker.get_permissions, {'bar': 'testing'})
 
-    def testView(self):
-        from zope.component import queryMultiAdapter
-        from zope.component.tests.examples import Ob3
-        from zope.component.testfiles.views import IV
-        from zope.component.testfiles.views import Request
-        from zope.component.testfiles.views import V1
-        ob = Ob3()
-        request = Request(IV)
-        self.assertEqual(queryMultiAdapter((ob, request), name=u'test'), None)
+    def test_w_single_factory_single_for__w_permission_and_allowed_iface(self):
+        from zope.interface import Interface
+        from zope.component.zcml import handler
+        class IViewType(Interface):
+            def bar(self):
+                pass
+        class _View(object):
+            def __init__(self, context, request):
+                self.context = context
+                self.request = request
+            def bar(self):
+                pass
+        _cfg_ctx = _makeConfigContext()
+        self._callFUT(_cfg_ctx, [_View], IViewType, '', for_=(Interface,),
+                      permission='testing', allowed_interface=(IViewType,))
+        self.assertEqual(_cfg_ctx._actions[0][0], ())
+        # Register the adapter
+        action =_cfg_ctx._actions[0][1]
+        self.assertEqual(action['callable'], handler)
+        self.assertEqual(action['discriminator'],
+                         ('view', (Interface, IViewType), '', Interface))
+        self.assertEqual(action['args'][0], 'registerAdapter')
+        factory = action['args'][1]
+        checker = factory.checker
+        self.assertEqual(checker.get_permissions, {'bar': 'testing'})
 
-        self._config(
-            '''
-            <view name="test"
-                  factory="zope.component.testfiles.views.V1"
-                  for="zope.component.testfiles.views.IC"
-                  type="zope.component.testfiles.views.IV"/>
-            ''')
+if 0: #these tests suck:  get coverage to 100% without them
 
-        view = queryMultiAdapter((ob, request), name=u'test')
-        self.assertEqual(view.__class__, V1)
+    class ResourceViewTests(PlacelessSetup, unittest.TestCase):
 
-    def testMultiView(self):
-        from zope.component import queryMultiAdapter
-        from zope.component.tests.examples import Ob3
-        from zope.component.testfiles.adapter import A1
-        from zope.component.testfiles.adapter import A2
-        from zope.component.testfiles.adapter import A3
-        from zope.component.testfiles.views import IV
-        from zope.component.testfiles.views import Request
-        self._config(
-            '''
-            <view name="test"
-                  factory="zope.component.testfiles.adapter.A3"
-                  for="zope.component.testfiles.views.IC
-                       zope.component.testfiles.adapter.I1
-                       zope.component.testfiles.adapter.I2"
-                  type="zope.component.testfiles.views.IV"/>
-            ''')
+        def setUp(self):
+            from zope import component
+            from zope import security
+            from zope.configuration.xmlconfig import XMLConfig
+            super(ResourceViewTests, self).setUp()
+            XMLConfig('meta.zcml', component)()
+            XMLConfig('meta.zcml', security)()
 
+        def _config(self, zcml, testing=0):
+            from cStringIO import StringIO
+            from zope.configuration.xmlconfig import xmlconfig
+            xmlconfig(StringIO(_ZCML_TEMPLATE % zcml), testing=testing)
 
-        ob = Ob3()
-        a1 = A1()
-        a2 = A2()
-        request = Request(IV)
-        view = queryMultiAdapter((ob, a1, a2, request), name=u'test')
-        self.assertEqual(view.__class__, A3)
-        self.assertEqual(view.context, (ob, a1, a2, request))
+        def testView(self):
+            from zope.component import queryMultiAdapter
+            from zope.component.tests.examples import Ob3
+            from zope.component.testfiles.views import IV
+            from zope.component.testfiles.views import Request
+            from zope.component.testfiles.views import V1
+            ob = Ob3()
+            request = Request(IV)
+            self.assertEqual(queryMultiAdapter((ob, request), name=u'test'), None)
 
+            self._config(
+                '''
+                <view name="test"
+                    factory="zope.component.testfiles.views.V1"
+                    for="zope.component.testfiles.views.IC"
+                    type="zope.component.testfiles.views.IV"/>
+                ''')
 
-    def testMultiView_fails_w_multiple_factories(self):
-        from zope.component.zcml import ComponentConfigurationError
-        self.assertRaises(ComponentConfigurationError,
-            self._config,
-            '''
-              <view name="test"
-                    factory="zope.component.testfiles.adapter.A3
-                             zope.component.testfiles.adapter.A2"
+            view = queryMultiAdapter((ob, request), name=u'test')
+            self.assertEqual(view.__class__, V1)
+
+        def testMultiView(self):
+            from zope.component import queryMultiAdapter
+            from zope.component.tests.examples import Ob3
+            from zope.component.testfiles.adapter import A1
+            from zope.component.testfiles.adapter import A2
+            from zope.component.testfiles.adapter import A3
+            from zope.component.testfiles.views import IV
+            from zope.component.testfiles.views import Request
+            self._config(
+                '''
+                <view name="test"
+                    factory="zope.component.testfiles.adapter.A3"
                     for="zope.component.testfiles.views.IC
-                         zope.component.testfiles.adapter.I1
-                         zope.component.testfiles.adapter.I2"
+                        zope.component.testfiles.adapter.I1
+                        zope.component.testfiles.adapter.I2"
                     type="zope.component.testfiles.views.IV"/>
-            ''',
-            testing=1,
-           )
+                ''')
 
-    def testView_w_multiple_factories(self):
-        from zope.component import queryMultiAdapter
-        from zope.component.tests.examples import Ob3
-        from zope.component.testfiles.adapter import A1
-        from zope.component.testfiles.adapter import A2
-        from zope.component.testfiles.adapter import A3
-        from zope.component.testfiles.views import IV
-        from zope.component.testfiles.views import Request
-        from zope.component.testfiles.views import V1
-        self._config(
-            '''
-            <view name="test"
-                  factory="zope.component.testfiles.adapter.A1
-                           zope.component.testfiles.adapter.A2
-                           zope.component.testfiles.adapter.A3
-                           zope.component.testfiles.views.V1"
-                  for="zope.component.testfiles.views.IC"
-                  type="zope.component.testfiles.views.IV"/>
-            ''')
 
-        ob = Ob3()
+            ob = Ob3()
+            a1 = A1()
+            a2 = A2()
+            request = Request(IV)
+            view = queryMultiAdapter((ob, a1, a2, request), name=u'test')
+            self.assertEqual(view.__class__, A3)
+            self.assertEqual(view.context, (ob, a1, a2, request))
 
-        # The view should be a V1 around an A3, around an A2, around
-        # an A1, anround ob:
-        view = queryMultiAdapter((ob, Request(IV)), name=u'test')
-        self.assertEqual(view.__class__, V1)
-        a3 = view.context
-        self.assertEqual(a3.__class__, A3)
-        a2 = a3.context[0]
-        self.assertEqual(a2.__class__, A2)
-        a1 = a2.context[0]
-        self.assertEqual(a1.__class__, A1)
-        self.assertEqual(a1.context[0], ob)
 
-    def testView_fails_w_no_factories(self):
-        from zope.component.zcml import ComponentConfigurationError
-        self.assertRaises(ComponentConfigurationError,
-            self._config,
-            '''
-                          <view name="test"
-                                   factory=""
-                                   for="zope.component.testfiles.views.IC"
-                                   type="zope.component.testfiles.views.IV"/>
-            ''',
-            testing=1,
+        def testMultiView_fails_w_multiple_factories(self):
+            from zope.component.zcml import ComponentConfigurationError
+            self.assertRaises(ComponentConfigurationError,
+                self._config,
+                '''
+                <view name="test"
+                        factory="zope.component.testfiles.adapter.A3
+                                zope.component.testfiles.adapter.A2"
+                        for="zope.component.testfiles.views.IC
+                            zope.component.testfiles.adapter.I1
+                            zope.component.testfiles.adapter.I2"
+                        type="zope.component.testfiles.views.IV"/>
+                ''',
+                testing=1,
             )
 
+        def testView_w_multiple_factories(self):
+            from zope.component import queryMultiAdapter
+            from zope.component.tests.examples import Ob3
+            from zope.component.testfiles.adapter import A1
+            from zope.component.testfiles.adapter import A2
+            from zope.component.testfiles.adapter import A3
+            from zope.component.testfiles.views import IV
+            from zope.component.testfiles.views import Request
+            from zope.component.testfiles.views import V1
+            self._config(
+                '''
+                <view name="test"
+                    factory="zope.component.testfiles.adapter.A1
+                            zope.component.testfiles.adapter.A2
+                            zope.component.testfiles.adapter.A3
+                            zope.component.testfiles.views.V1"
+                    for="zope.component.testfiles.views.IC"
+                    type="zope.component.testfiles.views.IV"/>
+                ''')
 
-    def testViewThatProvidesAnInterface(self):
-        from zope.component import queryMultiAdapter
-        from zope.component.tests.examples import Ob3
-        from zope.component.testfiles.views import IR
-        from zope.component.testfiles.views import IV
-        from zope.component.testfiles.views import Request
-        from zope.component.testfiles.views import V1
-        ob = Ob3()
-        self.assertEqual(queryMultiAdapter((ob, Request(IR)), IV, u'test'),
-                         None)
+            ob = Ob3()
 
-        self._config(
-            '''
-            <view name="test"
-                  factory="zope.component.testfiles.views.V1"
-                  for="zope.component.testfiles.views.IC"
-                  type="zope.component.testfiles.views.IR"
-                  />
-            ''')
+            # The view should be a V1 around an A3, around an A2, around
+            # an A1, anround ob:
+            view = queryMultiAdapter((ob, Request(IV)), name=u'test')
+            self.assertEqual(view.__class__, V1)
+            a3 = view.context
+            self.assertEqual(a3.__class__, A3)
+            a2 = a3.context[0]
+            self.assertEqual(a2.__class__, A2)
+            a1 = a2.context[0]
+            self.assertEqual(a1.__class__, A1)
+            self.assertEqual(a1.context[0], ob)
 
-        self.assertEqual(queryMultiAdapter((ob, Request(IR)), IV, u'test'),
-                         None)
+        def testView_fails_w_no_factories(self):
+            from zope.component.zcml import ComponentConfigurationError
+            self.assertRaises(ComponentConfigurationError,
+                self._config,
+                '''
+                            <view name="test"
+                                    factory=""
+                                    for="zope.component.testfiles.views.IC"
+                                    type="zope.component.testfiles.views.IV"/>
+                ''',
+                testing=1,
+                )
 
-        self._config(
-            '''
-            <view name="test"
-                  factory="zope.component.testfiles.views.V1"
-                  for="zope.component.testfiles.views.IC"
-                  type="zope.component.testfiles.views.IR"
-                  provides="zope.component.testfiles.views.IV"
-                  />
-            ''')
 
-        v = queryMultiAdapter((ob, Request(IR)), IV, u'test')
-        self.assertEqual(v.__class__, V1)
+        def testViewThatProvidesAnInterface(self):
+            from zope.component import queryMultiAdapter
+            from zope.component.tests.examples import Ob3
+            from zope.component.testfiles.views import IR
+            from zope.component.testfiles.views import IV
+            from zope.component.testfiles.views import Request
+            from zope.component.testfiles.views import V1
+            ob = Ob3()
+            self.assertEqual(queryMultiAdapter((ob, Request(IR)), IV, u'test'),
+                            None)
 
+            self._config(
+                '''
+                <view name="test"
+                    factory="zope.component.testfiles.views.V1"
+                    for="zope.component.testfiles.views.IC"
+                    type="zope.component.testfiles.views.IR"
+                    />
+                ''')
 
-    def testUnnamedViewThatProvidesAnInterface(self):
-        from zope.component import queryMultiAdapter
-        from zope.component.tests.examples import Ob3
-        from zope.component.testfiles.views import IR
-        from zope.component.testfiles.views import IV
-        from zope.component.testfiles.views import Request
-        from zope.component.testfiles.views import V1
-        ob = Ob3()
-        self.assertEqual(queryMultiAdapter((ob, Request(IR)), IV), None)
+            self.assertEqual(queryMultiAdapter((ob, Request(IR)), IV, u'test'),
+                            None)
 
-        self._config(
-            '''
-            <view factory="zope.component.testfiles.views.V1"
-                  for="zope.component.testfiles.views.IC"
-                  type="zope.component.testfiles.views.IR"
-                  />
-            ''')
+            self._config(
+                '''
+                <view name="test"
+                    factory="zope.component.testfiles.views.V1"
+                    for="zope.component.testfiles.views.IC"
+                    type="zope.component.testfiles.views.IR"
+                    provides="zope.component.testfiles.views.IV"
+                    />
+                ''')
 
-        v = queryMultiAdapter((ob, Request(IR)), IV)
-        self.assertEqual(v, None)
+            v = queryMultiAdapter((ob, Request(IR)), IV, u'test')
+            self.assertEqual(v.__class__, V1)
 
-        self._config(
-            '''
-            <view factory="zope.component.testfiles.views.V1"
-                  for="zope.component.testfiles.views.IC"
-                  type="zope.component.testfiles.views.IR"
-                  provides="zope.component.testfiles.views.IV"
-                  />
-            ''')
 
-        v = queryMultiAdapter((ob, Request(IR)), IV)
-        self.assertEqual(v.__class__, V1)
+        def testUnnamedViewThatProvidesAnInterface(self):
+            from zope.component import queryMultiAdapter
+            from zope.component.tests.examples import Ob3
+            from zope.component.testfiles.views import IR
+            from zope.component.testfiles.views import IV
+            from zope.component.testfiles.views import Request
+            from zope.component.testfiles.views import V1
+            ob = Ob3()
+            self.assertEqual(queryMultiAdapter((ob, Request(IR)), IV), None)
 
-    def testViewHavingARequiredClass(self):
-        from zope.interface import implementer
-        from zope.component import getMultiAdapter
-        from zope.component.interfaces import ComponentLookupError
-        from zope.component.testfiles.adapter import A1
-        from zope.component.testfiles.components import Content
-        from zope.component.testfiles.components import IContent
-        from zope.component.testfiles.views import IR
-        from zope.component.testfiles.views import Request
-        self._config(
-            '''
-            <view
-              for="zope.component.testfiles.components.Content"
-              type="zope.component.testfiles.views.IR"
-              factory="zope.component.testfiles.adapter.A1"
-              />
-            ''')
+            self._config(
+                '''
+                <view factory="zope.component.testfiles.views.V1"
+                    for="zope.component.testfiles.views.IC"
+                    type="zope.component.testfiles.views.IR"
+                    />
+                ''')
 
-        content = Content()
-        a1 = getMultiAdapter((content, Request(IR)))
-        self.assert_(isinstance(a1, A1))
+            v = queryMultiAdapter((ob, Request(IR)), IV)
+            self.assertEqual(v, None)
 
-        @implementer(IContent)
-        class MyContent:
-            pass
+            self._config(
+                '''
+                <view factory="zope.component.testfiles.views.V1"
+                    for="zope.component.testfiles.views.IC"
+                    type="zope.component.testfiles.views.IR"
+                    provides="zope.component.testfiles.views.IV"
+                    />
+                ''')
 
-        self.assertRaises(ComponentLookupError,
-                          getMultiAdapter, (MyContent(), Request(IR)))
+            v = queryMultiAdapter((ob, Request(IR)), IV)
+            self.assertEqual(v.__class__, V1)
 
-    def testInterfaceProtectedView(self):
-        from zope.security.checker import ProxyFactory
-        from zope.component import getMultiAdapter
-        from zope.component.tests.examples import Ob3
-        from zope.component.testfiles.views import IV
-        from zope.component.testfiles.views import Request
-        self._config(
-            '''
-            <view name="test"
-                  factory="zope.component.testfiles.views.V1"
-                  for="zope.component.testfiles.views.IC"
-                  type="zope.component.testfiles.views.IV"
-                  permission="zope.Public"
-              allowed_interface="zope.component.testfiles.views.IV"
-                  />
-            ''')
+        def testViewHavingARequiredClass(self):
+            from zope.interface import implementer
+            from zope.component import getMultiAdapter
+            from zope.component.interfaces import ComponentLookupError
+            from zope.component.testfiles.adapter import A1
+            from zope.component.testfiles.components import Content
+            from zope.component.testfiles.components import IContent
+            from zope.component.testfiles.views import IR
+            from zope.component.testfiles.views import Request
+            self._config(
+                '''
+                <view
+                for="zope.component.testfiles.components.Content"
+                type="zope.component.testfiles.views.IR"
+                factory="zope.component.testfiles.adapter.A1"
+                />
+                ''')
 
-        v = ProxyFactory(getMultiAdapter((Ob3(), Request(IV)), name='test'))
-        self.assertEqual(v.index(), 'V1 here')
-        self.assertRaises(Exception, getattr, v, 'action')
+            content = Content()
+            a1 = getMultiAdapter((content, Request(IR)))
+            self.assert_(isinstance(a1, A1))
 
-    def testAttributeProtectedView(self):
-        from zope.component import getMultiAdapter
-        from zope.component.tests.examples import Ob3
-        from zope.component.testfiles.views import IV
-        from zope.component.testfiles.views import Request
-        from zope.security.checker import ProxyFactory
-        self._config(
-            '''
-            <view name="test"
-                  factory="zope.component.testfiles.views.V1"
-                  for="zope.component.testfiles.views.IC"
-                  type="zope.component.testfiles.views.IV"
-                  permission="zope.Public"
-                  allowed_attributes="action"
-                  />
-            ''')
+            @implementer(IContent)
+            class MyContent:
+                pass
 
-        v = ProxyFactory(getMultiAdapter((Ob3(), Request(IV)), name='test'))
-        self.assertEqual(v.action(), 'done')
-        self.assertRaises(Exception, getattr, v, 'index')
+            self.assertRaises(ComponentLookupError,
+                            getMultiAdapter, (MyContent(), Request(IR)))
 
-    def testInterfaceAndAttributeProtectedView(self):
-        from zope.component import getMultiAdapter
-        from zope.component.tests.examples import Ob3
-        from zope.component.testfiles.views import IV
-        from zope.component.testfiles.views import Request
-        self._config(
-            '''
-            <view name="test"
-                  factory="zope.component.testfiles.views.V1"
-                  for="zope.component.testfiles.views.IC"
-                  type="zope.component.testfiles.views.IV"
-                  permission="zope.Public"
-                  allowed_attributes="action"
-              allowed_interface="zope.component.testfiles.views.IV"
-                  />
-            ''')
+        def testInterfaceProtectedView(self):
+            from zope.security.checker import ProxyFactory
+            from zope.component import getMultiAdapter
+            from zope.component.tests.examples import Ob3
+            from zope.component.testfiles.views import IV
+            from zope.component.testfiles.views import Request
+            self._config(
+                '''
+                <view name="test"
+                    factory="zope.component.testfiles.views.V1"
+                    for="zope.component.testfiles.views.IC"
+                    type="zope.component.testfiles.views.IV"
+                    permission="zope.Public"
+                allowed_interface="zope.component.testfiles.views.IV"
+                    />
+                ''')
 
-        v = getMultiAdapter((Ob3(), Request(IV)), name='test')
-        self.assertEqual(v.index(), 'V1 here')
-        self.assertEqual(v.action(), 'done')
+            v = ProxyFactory(getMultiAdapter((Ob3(), Request(IV)), name='test'))
+            self.assertEqual(v.index(), 'V1 here')
+            self.assertRaises(Exception, getattr, v, 'action')
 
-    def testDuplicatedInterfaceAndAttributeProtectedView(self):
-        from zope.component import getMultiAdapter
-        from zope.component.tests.examples import Ob3
-        from zope.component.testfiles.views import IV
-        from zope.component.testfiles.views import Request
-        self._config(
-            '''
-            <view name="test"
-                  factory="zope.component.testfiles.views.V1"
-                  for="zope.component.testfiles.views.IC"
-                  type="zope.component.testfiles.views.IV"
-                  permission="zope.Public"
-                  allowed_attributes="action index"
-              allowed_interface="zope.component.testfiles.views.IV"
-                  />
-            ''')
+        def testAttributeProtectedView(self):
+            from zope.component import getMultiAdapter
+            from zope.component.tests.examples import Ob3
+            from zope.component.testfiles.views import IV
+            from zope.component.testfiles.views import Request
+            from zope.security.checker import ProxyFactory
+            self._config(
+                '''
+                <view name="test"
+                    factory="zope.component.testfiles.views.V1"
+                    for="zope.component.testfiles.views.IC"
+                    type="zope.component.testfiles.views.IV"
+                    permission="zope.Public"
+                    allowed_attributes="action"
+                    />
+                ''')
 
-        v = getMultiAdapter((Ob3(), Request(IV)), name='test')
-        self.assertEqual(v.index(), 'V1 here')
-        self.assertEqual(v.action(), 'done')
+            v = ProxyFactory(getMultiAdapter((Ob3(), Request(IV)), name='test'))
+            self.assertEqual(v.action(), 'done')
+            self.assertRaises(Exception, getattr, v, 'index')
 
-    def testIncompleteProtectedViewNoPermission(self):
-        from zope.component.zcml import ComponentConfigurationError
-        self.assertRaises(ComponentConfigurationError,
-            self._config,
-            '''
-            <view name="test"
-                  factory="zope.component.testfiles.views.V1"
-                  for="zope.component.testfiles.views.IC"
-                  type="zope.component.testfiles.views.IV"
-                  allowed_attributes="action index"
-                  />
-            ''',
-            testing=1,
-            )
+        def testInterfaceAndAttributeProtectedView(self):
+            from zope.component import getMultiAdapter
+            from zope.component.tests.examples import Ob3
+            from zope.component.testfiles.views import IV
+            from zope.component.testfiles.views import Request
+            self._config(
+                '''
+                <view name="test"
+                    factory="zope.component.testfiles.views.V1"
+                    for="zope.component.testfiles.views.IC"
+                    type="zope.component.testfiles.views.IV"
+                    permission="zope.Public"
+                    allowed_attributes="action"
+                allowed_interface="zope.component.testfiles.views.IV"
+                    />
+                ''')
 
-    def testViewUndefinedPermission(self):
-        self.assertRaises(ValueError,  #raised from zope.security
-            self._config,
-            '''
-            <view name="test"
-                  factory="zope.component.testfiles.views.V1"
-                  for="zope.component.testfiles.views.IC"
-                  type="zope.component.testfiles.views.IV"
-                  permission="zope.UndefinedPermission"
-                  allowed_attributes="action index"
-              allowed_interface="zope.component.testfiles.views.IV"
-                  />
-            ''',
-            testing=1)
+            v = getMultiAdapter((Ob3(), Request(IV)), name='test')
+            self.assertEqual(v.index(), 'V1 here')
+            self.assertEqual(v.action(), 'done')
 
-    def testResource(self):
-        from zope.component import queryAdapter
-        from zope.component.tests.examples import Ob3
-        from zope.component.testfiles.views import IV
-        from zope.component.testfiles.views import Request
-        from zope.component.testfiles.views import R1
-        ob = Ob3()
-        self.assertEqual(
-            queryAdapter(Request(IV), name=u'test'), None)
-        self._config(
-            '''
-            <resource name="test"
-                  factory="zope.component.testfiles.views.R1"
-                  type="zope.component.testfiles.views.IV"/>
-            ''')
+        def testDuplicatedInterfaceAndAttributeProtectedView(self):
+            from zope.component import getMultiAdapter
+            from zope.component.tests.examples import Ob3
+            from zope.component.testfiles.views import IV
+            from zope.component.testfiles.views import Request
+            self._config(
+                '''
+                <view name="test"
+                    factory="zope.component.testfiles.views.V1"
+                    for="zope.component.testfiles.views.IC"
+                    type="zope.component.testfiles.views.IV"
+                    permission="zope.Public"
+                    allowed_attributes="action index"
+                allowed_interface="zope.component.testfiles.views.IV"
+                    />
+                ''')
 
-        self.assertEqual(
-            queryAdapter(Request(IV), name=u'test').__class__,
-            R1)
+            v = getMultiAdapter((Ob3(), Request(IV)), name='test')
+            self.assertEqual(v.index(), 'V1 here')
+            self.assertEqual(v.action(), 'done')
 
-    def testResourceThatProvidesAnInterface(self):
-        from zope.component import queryAdapter
-        from zope.component.tests.examples import Ob3
-        from zope.component.testfiles.views import IR
-        from zope.component.testfiles.views import IV
-        from zope.component.testfiles.views import Request
-        from zope.component.testfiles.views import R1
-        ob = Ob3()
-        self.assertEqual(queryAdapter(Request(IR), IV, u'test'),
-                         None)
+        def testIncompleteProtectedViewNoPermission(self):
+            from zope.component.zcml import ComponentConfigurationError
+            self.assertRaises(ComponentConfigurationError,
+                self._config,
+                '''
+                <view name="test"
+                    factory="zope.component.testfiles.views.V1"
+                    for="zope.component.testfiles.views.IC"
+                    type="zope.component.testfiles.views.IV"
+                    allowed_attributes="action index"
+                    />
+                ''',
+                testing=1,
+                )
 
-        self._config(
-            '''
-            <resource
-                name="test"
-                factory="zope.component.testfiles.views.R1"
-                type="zope.component.testfiles.views.IR"
-                />
-            ''')
+        def testViewUndefinedPermission(self):
+            self.assertRaises(ValueError,  #raised from zope.security
+                self._config,
+                '''
+                <view name="test"
+                    factory="zope.component.testfiles.views.V1"
+                    for="zope.component.testfiles.views.IC"
+                    type="zope.component.testfiles.views.IV"
+                    permission="zope.UndefinedPermission"
+                    allowed_attributes="action index"
+                allowed_interface="zope.component.testfiles.views.IV"
+                    />
+                ''',
+                testing=1)
 
-        v = queryAdapter(Request(IR), IV, name=u'test')
-        self.assertEqual(v, None)
+        def testResource(self):
+            from zope.component import queryAdapter
+            from zope.component.tests.examples import Ob3
+            from zope.component.testfiles.views import IV
+            from zope.component.testfiles.views import Request
+            from zope.component.testfiles.views import R1
+            ob = Ob3()
+            self.assertEqual(
+                queryAdapter(Request(IV), name=u'test'), None)
+            self._config(
+                '''
+                <resource name="test"
+                    factory="zope.component.testfiles.views.R1"
+                    type="zope.component.testfiles.views.IV"/>
+                ''')
 
-        self._config(
-            '''
-            <resource
-                name="test"
-                factory="zope.component.testfiles.views.R1"
-                type="zope.component.testfiles.views.IR"
-                provides="zope.component.testfiles.views.IV"
-                />
-            ''')
+            self.assertEqual(
+                queryAdapter(Request(IV), name=u'test').__class__,
+                R1)
 
-        v = queryAdapter(Request(IR), IV, name=u'test')
-        self.assertEqual(v.__class__, R1)
+        def testResourceThatProvidesAnInterface(self):
+            from zope.component import queryAdapter
+            from zope.component.tests.examples import Ob3
+            from zope.component.testfiles.views import IR
+            from zope.component.testfiles.views import IV
+            from zope.component.testfiles.views import Request
+            from zope.component.testfiles.views import R1
+            ob = Ob3()
+            self.assertEqual(queryAdapter(Request(IR), IV, u'test'),
+                            None)
 
-    def testUnnamedResourceThatProvidesAnInterface(self):
-        from zope.component import queryAdapter
-        from zope.component.tests.examples import Ob3
-        from zope.component.testfiles.views import IR
-        from zope.component.testfiles.views import IV
-        from zope.component.testfiles.views import Request
-        from zope.component.testfiles.views import R1
-        ob = Ob3()
-        self.assertEqual(queryAdapter(Request(IR), IV), None)
+            self._config(
+                '''
+                <resource
+                    name="test"
+                    factory="zope.component.testfiles.views.R1"
+                    type="zope.component.testfiles.views.IR"
+                    />
+                ''')
 
-        self._config(
-            '''
-            <resource
-                factory="zope.component.testfiles.views.R1"
-                type="zope.component.testfiles.views.IR"
-                />
-            ''')
+            v = queryAdapter(Request(IR), IV, name=u'test')
+            self.assertEqual(v, None)
 
-        v = queryAdapter(Request(IR), IV)
-        self.assertEqual(v, None)
+            self._config(
+                '''
+                <resource
+                    name="test"
+                    factory="zope.component.testfiles.views.R1"
+                    type="zope.component.testfiles.views.IR"
+                    provides="zope.component.testfiles.views.IV"
+                    />
+                ''')
 
-        self._config(
-            '''
-            <resource
-                factory="zope.component.testfiles.views.R1"
-                type="zope.component.testfiles.views.IR"
-                provides="zope.component.testfiles.views.IV"
-                />
-            ''')
+            v = queryAdapter(Request(IR), IV, name=u'test')
+            self.assertEqual(v.__class__, R1)
 
-        v = queryAdapter(Request(IR), IV)
-        self.assertEqual(v.__class__, R1)
+        def testUnnamedResourceThatProvidesAnInterface(self):
+            from zope.component import queryAdapter
+            from zope.component.tests.examples import Ob3
+            from zope.component.testfiles.views import IR
+            from zope.component.testfiles.views import IV
+            from zope.component.testfiles.views import Request
+            from zope.component.testfiles.views import R1
+            ob = Ob3()
+            self.assertEqual(queryAdapter(Request(IR), IV), None)
 
-    def testResourceUndefinedPermission(self):
-        self.assertRaises(ValueError,  #raised from zope.security
-            self._config,
-            '''
-            <resource name="test"
-                  factory="zope.component.testfiles.views.R1"
-                  type="zope.component.testfiles.views.IV"
-                  permission="zope.UndefinedPermission"/>
-            ''',
-            testing=1)
+            self._config(
+                '''
+                <resource
+                    factory="zope.component.testfiles.views.R1"
+                    type="zope.component.testfiles.views.IR"
+                    />
+                ''')
 
+            v = queryAdapter(Request(IR), IV)
+            self.assertEqual(v, None)
 
-_ZCML_TEMPLATE = """<configure
-   xmlns='http://namespaces.zope.org/zope'
-   i18n_domain='zope'>
-   %s
-   </configure>"""
+            self._config(
+                '''
+                <resource
+                    factory="zope.component.testfiles.views.R1"
+                    type="zope.component.testfiles.views.IR"
+                    provides="zope.component.testfiles.views.IV"
+                    />
+                ''')
 
+            v = queryAdapter(Request(IR), IV)
+            self.assertEqual(v.__class__, R1)
 
+        def testResourceUndefinedPermission(self):
+            self.assertRaises(ValueError,  #raised from zope.security
+                self._config,
+                '''
+                <resource name="test"
+                    factory="zope.component.testfiles.views.R1"
+                    type="zope.component.testfiles.views.IV"
+                    permission="zope.UndefinedPermission"/>
+                ''',
+                testing=1)
+
+
+    _ZCML_TEMPLATE = """<configure
+    xmlns='http://namespaces.zope.org/zope'
+    i18n_domain='zope'>
+    %s
+    </configure>"""
+
+
 def _makeConfigContext():
     class _Context(object):
         info = 'TESTING'
@@ -1269,5 +1446,5 @@
         unittest.makeSuite(Test_utility),
         unittest.makeSuite(Test_interface),
         unittest.makeSuite(Test_view),
-        unittest.makeSuite(ResourceViewTests),
+        #unittest.makeSuite(ResourceViewTests),
     ))

Modified: zope.component/tseaver-test_cleanup/src/zope/component/zcml.py
===================================================================
--- zope.component/tseaver-test_cleanup/src/zope/component/zcml.py	2012-06-26 23:01:18 UTC (rev 127119)
+++ zope.component/tseaver-test_cleanup/src/zope/component/zcml.py	2012-06-26 23:01:22 UTC (rev 127120)
@@ -518,13 +518,9 @@
     if ((allowed_attributes or allowed_interface)
         and (not permission)):
         raise ComponentConfigurationError(
-            "Must use name attribute with allowed_interface or "
-            "allowed_attributes"
-            )
+            "'permission' required with 'allowed_interface' or "
+            "'allowed_attributes'")
 
-    if not factory:
-        raise ComponentConfigurationError("No view factory specified.")
-
     if permission is not None:
 
         checker = _checker(_context, permission,
@@ -552,7 +548,7 @@
     if len(factories) == 1:
         factory = factories[0]
     elif len(factories) < 1:
-        raise ComponentConfigurationError("No factory specified")
+        raise ComponentConfigurationError("No view factory specified")
     elif len(factories) > 1 and len(for_) > 1:
         raise ComponentConfigurationError(
             "Can't use multiple factories and multiple for")
@@ -561,6 +557,7 @@
             for f in factories[:-1]:
                 ob = f(ob)
             return factories[-1](ob, request)
+        factory.factory = factories[0]
 
     for_ = for_ + (type,)
 
@@ -570,12 +567,6 @@
         args = ('registerAdapter',
                 factory, for_, provides, name, _context.info),
         )
-    if type is not None:
-        _context.action(
-            discriminator = None,
-            callable = provideInterface,
-            args = ('', type)
-            )
 
     _context.action(
         discriminator = None,



More information about the checkins mailing list