[Checkins] SVN: zope.security/trunk/ Consolidate tests of z.s.zcml.
Tres Seaver
cvs-admin at zope.org
Mon Dec 24 16:38:18 UTC 2012
Log message for revision 128895:
Consolidate tests of z.s.zcml.
Changed:
_U zope.security/trunk/
U zope.security/trunk/src/zope/security/proxy.py
U zope.security/trunk/src/zope/security/tests/redefineperms.zcml
D zope.security/trunk/src/zope/security/tests/test_contentdirective.py
D zope.security/trunk/src/zope/security/tests/test_directives.py
D zope.security/trunk/src/zope/security/tests/test_module_directives.py
A zope.security/trunk/src/zope/security/tests/test_zcml.py
-=-
Modified: zope.security/trunk/src/zope/security/proxy.py
===================================================================
--- zope.security/trunk/src/zope/security/proxy.py 2012-12-24 15:58:45 UTC (rev 128894)
+++ zope.security/trunk/src/zope/security/proxy.py 2012-12-24 16:38:17 UTC (rev 128895)
@@ -42,12 +42,15 @@
return items
-builtin_isinstance = isinstance
+builtin_isinstance = None
def isinstance(object, cls):
"""Test whether an object is an instance of a type.
This works even if the object is security proxied:
"""
+ global builtin_isinstance
+ if builtin_isinstance is None:
+ builtin_isinstance = __builtins__['isinstance']
# The removeSecurityProxy call is OK here because it is *only*
# being used for isinstance
return builtin_isinstance(removeSecurityProxy(object), cls)
Modified: zope.security/trunk/src/zope/security/tests/redefineperms.zcml
===================================================================
--- zope.security/trunk/src/zope/security/tests/redefineperms.zcml 2012-12-24 15:58:45 UTC (rev 128894)
+++ zope.security/trunk/src/zope/security/tests/redefineperms.zcml 2012-12-24 16:38:17 UTC (rev 128895)
@@ -9,8 +9,8 @@
<meta:directive
name="dummy"
namespace="http://namespaces.zope.org/zope"
- schema=".test_module_directives.IDummy"
- handler=".test_module_directives.dummy" />
+ schema=".test_zcml.IDummy"
+ handler=".test_zcml.dummy" />
<permission
id="zope.View"
Deleted: zope.security/trunk/src/zope/security/tests/test_contentdirective.py
===================================================================
--- zope.security/trunk/src/zope/security/tests/test_contentdirective.py 2012-12-24 15:58:45 UTC (rev 128894)
+++ zope.security/trunk/src/zope/security/tests/test_contentdirective.py 2012-12-24 16:38:17 UTC (rev 128895)
@@ -1,269 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2001, 2002 Zope Foundation 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.
-#
-##############################################################################
-"""Test 'zope:class' ZCML directive.
-"""
-import unittest
-
-
-def _skip_wo_zope_configuration(testfunc):
- try:
- import zope.configuration.xmlconfig
- except ImportError:
- from functools import update_wrapper
- def dummy(self):
- pass
- update_wrapper(dummy, testfunc)
- return dummy
- else:
- return testfunc
-
-def configfile(s):
- from StringIO import StringIO
- return StringIO("""<configure
- xmlns='http://namespaces.zope.org/zope'
- i18n_domain='zope'>
- %s
- </configure>
- """ % s)
-
-class TestClassDirective(unittest.TestCase):
-
- def setUp(self):
- from zope.security.tests.exampleclass import ExampleClass
- try:
- del ExampleClass.__implements__
- except AttributeError:
- pass
- try:
- from zope.component.testing import setUp
- except ImportError:
- pass
- else:
- setUp()
-
- def tearDown(self):
- from zope.security.tests.exampleclass import ExampleClass
- try:
- del ExampleClass.__implements__
- except AttributeError:
- pass
- try:
- from zope.component.testing import tearDown
- except ImportError:
- pass
- else:
- tearDown()
-
- def _meta(self):
- from zope.configuration.xmlconfig import XMLConfig
- import zope.security
- XMLConfig('meta.zcml', zope.security)()
-
- @_skip_wo_zope_configuration
- def testEmptyDirective(self):
- from zope.configuration.xmlconfig import xmlconfig
- self._meta()
- f = configfile("""
-<class class="zope.security.tests.exampleclass.ExampleClass">
-</class>
- """)
- xmlconfig(f)
-
-
- @_skip_wo_zope_configuration
- def testImplements(self):
- from zope.component.interface import queryInterface
- from zope.configuration.xmlconfig import xmlconfig
- from zope.security.tests.exampleclass import ExampleClass
- from zope.security.tests.exampleclass import IExample
- self._meta()
- self.assertEqual(queryInterface(
- "zope.security.tests.exampleclass.IExample"), None)
-
- f = configfile("""
-<class class="zope.security.tests.exampleclass.ExampleClass">
- <implements interface="zope.security.tests.exampleclass.IExample" />
-</class>
- """)
- xmlconfig(f)
- self.failUnless(IExample.implementedBy(ExampleClass))
-
- self.assertEqual(queryInterface(
- "zope.security.tests.exampleclass.IExample"), IExample)
-
-
- @_skip_wo_zope_configuration
- def testMulImplements(self):
- from zope.component.interface import queryInterface
- from zope.configuration.xmlconfig import xmlconfig
- from zope.security.tests.exampleclass import ExampleClass
- from zope.security.tests.exampleclass import IExample
- from zope.security.tests.exampleclass import IExample2
- self._meta()
- self.assertEqual(queryInterface(
- "zope.security.tests.exampleclass.IExample"), None)
- self.assertEqual(queryInterface(
- "zope.security.tests.exampleclass.IExample2"), None)
-
- f = configfile("""
-<class class="zope.security.tests.exampleclass.ExampleClass">
- <implements interface="
- zope.security.tests.exampleclass.IExample
- zope.security.tests.exampleclass.IExample2
- " />
-</class>
- """)
- xmlconfig(f)
- self.failUnless(IExample.implementedBy(ExampleClass))
- self.failUnless(IExample2.implementedBy(ExampleClass))
-
- self.assertEqual(queryInterface(
- "zope.security.tests.exampleclass.IExample"), IExample)
- self.assertEqual(queryInterface(
- "zope.security.tests.exampleclass.IExample2"),
- IExample2)
-
- @_skip_wo_zope_configuration
- def testRequire(self):
- from zope.configuration.xmlconfig import xmlconfig
- self._meta()
- f = configfile("""
-<permission id="zope.View" title="Zope view permission" />
-<class class="zope.security.tests.exampleclass.ExampleClass">
- <require permission="zope.View"
- attributes="anAttribute anotherAttribute" />
-</class>
- """)
- xmlconfig(f)
-
- @_skip_wo_zope_configuration
- def testAllow(self):
- from zope.configuration.xmlconfig import xmlconfig
- self._meta()
- f = configfile("""
-<class class="zope.security.tests.exampleclass.ExampleClass">
- <allow attributes="anAttribute anotherAttribute" />
-</class>
- """)
- xmlconfig(f)
-
- @_skip_wo_zope_configuration
- def testMimic(self):
- from zope.configuration.xmlconfig import xmlconfig
- self._meta()
- f = configfile("""
-<class class="zope.security.tests.exampleclass.ExampleClass">
- <require like_class="zope.security.tests.exampleclass.ExampleClass" />
-</class>
- """)
- xmlconfig(f)
-
-
-class TestFactorySubdirective(unittest.TestCase):
-
- def setUp(self):
- try:
- from zope.component.testing import setUp
- except ImportError:
- pass
- else:
- setUp()
-
- def tearDown(self):
- try:
- from zope.component.testing import tearDown
- except ImportError:
- pass
- else:
- tearDown()
-
- def _meta(self):
- from zope.configuration.xmlconfig import XMLConfig
- import zope.security
- XMLConfig('meta.zcml', zope.security)()
-
- @_skip_wo_zope_configuration
- def testFactory(self):
- from zope.component import getUtility
- from zope.component.interfaces import IFactory
- from zope.configuration.xmlconfig import xmlconfig
- self._meta()
- f = configfile("""
-<permission id="zope.Foo" title="Zope Foo Permission" />
-
-<class class="zope.security.tests.exampleclass.ExampleClass">
- <factory
- id="test.Example"
- title="Example content"
- description="Example description"
- />
-</class>
- """)
- xmlconfig(f)
- factory = getUtility(IFactory, 'test.Example')
- self.assertEquals(factory.title, "Example content")
- self.assertEquals(factory.description, "Example description")
-
- @_skip_wo_zope_configuration
- def testFactoryNoId(self):
- from zope.component import getUtility
- from zope.component.interfaces import IFactory
- from zope.component.interfaces import ComponentLookupError
- from zope.configuration.xmlconfig import xmlconfig
- self._meta()
- f = configfile("""
-<permission id="zope.Foo" title="Zope Foo Permission" />
-
-<class class="zope.security.tests.exampleclass.ExampleClass">
- <factory
- title="Example content"
- description="Example description"
- />
-</class>
- """)
- xmlconfig(f)
- self.assertRaises(ComponentLookupError, getUtility,
- IFactory, 'Example')
- factory = getUtility(
- IFactory, 'zope.security.tests.exampleclass.ExampleClass')
- self.assertEquals(factory.title, "Example content")
- self.assertEquals(factory.description, "Example description")
-
-
- @_skip_wo_zope_configuration
- def testFactoryPublicPermission(self):
- from zope.component import getUtility
- from zope.component.interfaces import IFactory
- from zope.configuration.xmlconfig import xmlconfig
- self._meta()
- f = configfile("""
-<class class="zope.security.tests.exampleclass.ExampleClass">
- <factory
- id="test.Example"
- title="Example content"
- description="Example description"
- />
-</class>
- """)
- xmlconfig(f)
- factory = getUtility(IFactory, 'test.Example')
- self.assert_(hasattr(factory, '__Security_checker__'))
-
-
-def test_suite():
-
- return unittest.TestSuite((
- unittest.makeSuite(TestClassDirective),
- unittest.makeSuite(TestFactorySubdirective),
- ))
Deleted: zope.security/trunk/src/zope/security/tests/test_directives.py
===================================================================
--- zope.security/trunk/src/zope/security/tests/test_directives.py 2012-12-24 15:58:45 UTC (rev 128894)
+++ zope.security/trunk/src/zope/security/tests/test_directives.py 2012-12-24 16:38:17 UTC (rev 128895)
@@ -1,427 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2001, 2002 Zope Foundation 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.
-#
-##############################################################################
-"""Component Directives Tests
-"""
-import unittest
-
-
-def _skip_wo_zope_configuration(testfunc):
- try:
- import zope.configuration.xmlconfig
- except ImportError:
- from functools import update_wrapper
- def dummy(self):
- pass
- update_wrapper(dummy, testfunc)
- return dummy
- else:
- return testfunc
-
-
-
-class Context(object):
- actions = ()
-
- def action(self, discriminator, callable, args):
- self.actions += ((discriminator, callable, args), )
-
- def __repr__(self):
- from cStringIO import StringIO
- import re
- import pprint
- atre = re.compile(' at [0-9a-fA-Fx]+')
- stream = StringIO()
- pprinter = pprint.PrettyPrinter(stream=stream, width=60)
- pprinter.pprint(self.actions)
- r = stream.getvalue()
- return (''.join(atre.split(r))).strip()
-
-
-template = """<configure
- xmlns='http://namespaces.zope.org/zope'
- xmlns:test='http://www.zope.org/NS/Zope3/test'
- i18n_domain='zope'>
- %s
- </configure>"""
-
-
-def configfile(s):
- from cStringIO import StringIO
- return StringIO("""<configure
- xmlns='http://namespaces.zope.org/zope'
- i18n_domain='zope'>
- %s
- </configure>
- """ % s)
-
-class TestFactoryDirective(unittest.TestCase):
-
- def setUp(self):
- try:
- from zope.component.testing import setUp
- except ImportError:
- pass
- else:
- setUp()
-
- def tearDown(self):
- try:
- from zope.component.testing import tearDown
- except ImportError:
- pass
- else:
- tearDown()
-
- def meta(self):
- import zope.security
- from zope.configuration.xmlconfig import XMLConfig
- XMLConfig('meta.zcml', zope.security)()
-
- @_skip_wo_zope_configuration
- def testFactory(self):
- from zope.component import createObject
- from zope.configuration.xmlconfig import xmlconfig
- from zope.security import proxy
- from zope.security.tests import exampleclass
- self.meta()
- f = configfile('''
-<permission id="zope.Foo" title="Zope Foo Permission" />
-<class class="zope.security.tests.exampleclass.ExampleClass">
- <factory
- id="test.Example"
- title="Example content"
- description="Example description"
- />
-</class>''')
- xmlconfig(f)
- obj = createObject('test.Example')
- self.failUnless(proxy.isinstance(obj, exampleclass.ExampleClass))
-
-
-
-def _pfx(name):
- from zope.security.tests import module
- return module.__name__ + '.' + name
-
-def defineDirectives():
- from cStringIO import StringIO
- from zope.configuration.xmlconfig import XMLConfig
- from zope.configuration.xmlconfig import xmlconfig
- import zope.security
- XMLConfig('meta.zcml', zope.security)()
- xmlconfig(StringIO("""<configure
- xmlns='http://namespaces.zope.org/zope'
- i18n_domain='zope'>
- <permission id="zope.Extravagant" title="extravagant" />
- <permission id="zope.Paltry" title="paltry" />
- </configure>"""))
-
-NOTSET = []
-
-P1 = "zope.Extravagant"
-P2 = "zope.Paltry"
-
-class TestRequireDirective(unittest.TestCase):
-
- def setUp(self):
- from zope.interface import implementer
- from zope.security.tests import module
- try:
- from zope.component.testing import setUp
- except ImportError:
- pass
- else:
- setUp()
- defineDirectives()
-
- class B(object):
- def m1(self):
- return "m1"
- def m2(self):
- return "m2"
- @implementer(module.I)
- class C(B):
- def m3(self):
- return "m3"
- def m4(self):
- return "m4"
- module.test_base = B
- module.test_class = C
- module.test_instance = C()
- self.assertState()
-
- def tearDown(self):
- from zope.security.tests import module
- module.test_class = None
- try:
- from zope.component.testing import tearDown
- except ImportError:
- pass
- else:
- tearDown()
-
- def assertState(self, m1P=NOTSET, m2P=NOTSET, m3P=NOTSET):
- #Verify that class, instance, and methods have expected permissions
- from zope.security.checker import selectChecker
- from zope.security.tests import module
- checker = selectChecker(module.test_instance)
- self.assertEqual(checker.permission_id('m1'), (m1P or None))
- self.assertEqual(checker.permission_id('m2'), (m2P or None))
- self.assertEqual(checker.permission_id('m3'), (m3P or None))
-
- def assertDeclaration(self, declaration, **state):
- from zope.security.tests import module
- apply_declaration(module.template_bracket % declaration)
- self.assertState(**state)
-
- # "testSimple*" exercises tags that do NOT have children. This mode
- # inherently sets the instances as well as the class attributes.
-
- @_skip_wo_zope_configuration
- def testSimpleMethodsPlural(self):
- declaration = ('''<class class="%s">
- <require
- permission="%s"
- attributes="m1 m3"/>
- </class>'''
- % (_pfx("test_class"), P1))
- self.assertDeclaration(declaration, m1P=P1, m3P=P1)
-
- def assertSetattrState(self, m1P=NOTSET, m2P=NOTSET, m3P=NOTSET):
- # Verify that class, instance, and methods have expected permissions
- from zope.security.checker import selectChecker
- from zope.security.tests import module
- checker = selectChecker(module.test_instance)
- self.assertEqual(checker.setattr_permission_id('m1'), (m1P or None))
- self.assertEqual(checker.setattr_permission_id('m2'), (m2P or None))
- self.assertEqual(checker.setattr_permission_id('m3'), (m3P or None))
-
- def assertSetattrDeclaration(self, declaration, **state):
- self.assertSetattrState(**state)
-
- @_skip_wo_zope_configuration
- def test_set_attributes(self):
- from zope.security.checker import selectChecker
- from zope.security.tests import module
- declaration = ('''<class class="%s">
- <require
- permission="%s"
- set_attributes="m1 m3"/>
- </class>'''
- % (_pfx("test_class"), P1))
- apply_declaration(module.template_bracket % declaration)
- checker = selectChecker(module.test_instance)
- self.assertEqual(checker.setattr_permission_id('m1'), P1)
- self.assertEqual(checker.setattr_permission_id('m2'), None)
- self.assertEqual(checker.setattr_permission_id('m3'), P1)
-
- @_skip_wo_zope_configuration
- def test_set_schema(self):
- from zope.component.interface import queryInterface
- from zope.security.checker import selectChecker
- from zope.security.tests import module
- self.assertEqual(queryInterface(_pfx("S")), None)
-
- declaration = ('''<class class="%s">
- <require
- permission="%s"
- set_schema="%s"/>
- </class>'''
- % (_pfx("test_class"), P1, _pfx("S")))
- apply_declaration(module.template_bracket % declaration)
-
- self.assertEqual(queryInterface(_pfx("S")), module.S)
-
-
- checker = selectChecker(module.test_instance)
- self.assertEqual(checker.setattr_permission_id('m1'), None)
- self.assertEqual(checker.setattr_permission_id('m2'), None)
- self.assertEqual(checker.setattr_permission_id('m3'), None)
- self.assertEqual(checker.setattr_permission_id('foo'), P1)
- self.assertEqual(checker.setattr_permission_id('bar'), P1)
- self.assertEqual(checker.setattr_permission_id('baro'), None)
-
- @_skip_wo_zope_configuration
- def test_multiple_set_schema(self):
- from zope.component.interface import queryInterface
- from zope.security.checker import selectChecker
- from zope.security.tests import module
- self.assertEqual(queryInterface(_pfx("S")), None)
- self.assertEqual(queryInterface(_pfx("S2")), None)
-
- declaration = ('''<class class="%s">
- <require
- permission="%s"
- set_schema="%s %s"/>
- </class>'''
- % (_pfx("test_class"), P1, _pfx("S"), _pfx("S2")))
- apply_declaration(module.template_bracket % declaration)
-
- self.assertEqual(queryInterface(_pfx("S")), module.S)
- self.assertEqual(queryInterface(_pfx("S2")), module.S2)
-
-
- checker = selectChecker(module.test_instance)
- self.assertEqual(checker.setattr_permission_id('m1'), None)
- self.assertEqual(checker.setattr_permission_id('m2'), None)
- self.assertEqual(checker.setattr_permission_id('m3'), None)
- self.assertEqual(checker.setattr_permission_id('foo'), P1)
- self.assertEqual(checker.setattr_permission_id('bar'), P1)
- self.assertEqual(checker.setattr_permission_id('foo2'), P1)
- self.assertEqual(checker.setattr_permission_id('bar2'), P1)
- self.assertEqual(checker.setattr_permission_id('baro'), None)
-
- @_skip_wo_zope_configuration
- def testSimpleInterface(self):
- from zope.component.interface import queryInterface
- from zope.security.tests import module
- self.assertEqual(queryInterface(_pfx("I")), None)
-
- declaration = ('''<class class="%s">
- <require
- permission="%s"
- interface="%s"/>
- </class>'''
- % (_pfx("test_class"), P1, _pfx("I")))
- # m1 and m2 are in the interface, so should be set, and m3 should not:
- self.assertDeclaration(declaration, m1P=P1, m2P=P1)
-
- # Make sure we know about the interfaces
- self.assertEqual(queryInterface(_pfx("I")), module.I)
-
-
- @_skip_wo_zope_configuration
- def testMultipleInterface(self):
- from zope.component.interface import queryInterface
- from zope.security.tests import module
- self.assertEqual(queryInterface(_pfx("I3")), None)
- self.assertEqual(queryInterface(_pfx("I4")), None)
-
- declaration = ('''<class class="%s">
- <require
- permission="%s"
- interface=" %s
- %s "/>
- </class>'''
- % (_pfx("test_class"), P1, _pfx("I3"), _pfx("I4")))
- self.assertDeclaration(declaration, m3P=P1, m2P=P1)
-
- # Make sure we know about the interfaces
- self.assertEqual(queryInterface(_pfx("I3")), module.I3)
- self.assertEqual(queryInterface(_pfx("I4")), module.I4)
-
- # "testComposite*" exercises tags that DO have children.
- # "testComposite*TopPerm" exercises tags with permission in containing tag.
- # "testComposite*ElementPerm" exercises tags w/permission in children.
-
- @_skip_wo_zope_configuration
- def testCompositeNoPerm(self):
- # Establish rejection of declarations lacking a permission spec.
- from zope.configuration.xmlconfig import ZopeXMLConfigurationError
- declaration = ('''<class class="%s">
- <require
- attributes="m1"/>
- </class>'''
- % (_pfx("test_class")))
- self.assertRaises(ZopeXMLConfigurationError,
- self.assertDeclaration,
- declaration)
-
-
-
- @_skip_wo_zope_configuration
- def testCompositeMethodsPluralElementPerm(self):
- declaration = ('''<class class="%s">
- <require
- permission="%s"
- attributes="m1 m3"/>
- </class>'''
- % (_pfx("test_class"), P1))
- self.assertDeclaration(declaration,
- m1P=P1, m3P=P1)
-
- @_skip_wo_zope_configuration
- def testCompositeInterfaceTopPerm(self):
- declaration = ('''<class class="%s">
- <require
- permission="%s"
- interface="%s"/>
- </class>'''
- % (_pfx("test_class"), P1, _pfx("I")))
- self.assertDeclaration(declaration,
- m1P=P1, m2P=P1)
-
-
- @_skip_wo_zope_configuration
- def testSubInterfaces(self):
- declaration = ('''<class class="%s">
- <require
- permission="%s"
- interface="%s"/>
- </class>'''
- % (_pfx("test_class"), P1, _pfx("I2")))
- # m1 and m2 are in the interface, so should be set, and m3 should not:
- self.assertDeclaration(declaration, m1P=P1, m2P=P1)
-
-
- @_skip_wo_zope_configuration
- def testMimicOnly(self):
- declaration = ('''<class class="%s">
- <require
- permission="%s"
- attributes="m1 m2"/>
- </class>
- <class class="%s">
- <require like_class="%s" />
- </class>
- ''' % (_pfx("test_base"), P1,
- _pfx("test_class"), _pfx("test_base")))
- # m1 and m2 are in the interface, so should be set, and m3 should not:
- self.assertDeclaration(declaration,
- m1P=P1, m2P=P1)
-
-
- @_skip_wo_zope_configuration
- def testMimicAsDefault(self):
- declaration = ('''<class class="%s">
- <require
- permission="%s"
- attributes="m1 m2"/>
- </class>
- <class class="%s">
- <require like_class="%s" />
- <require
- permission="%s"
- attributes="m2 m3"/>
- </class>
- ''' % (_pfx("test_base"), P1,
- _pfx("test_class"), _pfx("test_base"), P2))
-
- # m1 and m2 are in the interface, so should be set, and m3 should not:
- self.assertDeclaration(declaration,
- m1P=P1, m2P=P2, m3P=P2)
-
-
-def apply_declaration(declaration):
- '''Apply the xmlconfig machinery.'''
- from cStringIO import StringIO
- from zope.configuration.xmlconfig import xmlconfig
- return xmlconfig(StringIO(declaration))
-
-
-def test_suite():
- return unittest.TestSuite((
- unittest.makeSuite(TestFactoryDirective),
- unittest.makeSuite(TestRequireDirective),
- ))
Deleted: zope.security/trunk/src/zope/security/tests/test_module_directives.py
===================================================================
--- zope.security/trunk/src/zope/security/tests/test_module_directives.py 2012-12-24 15:58:45 UTC (rev 128894)
+++ zope.security/trunk/src/zope/security/tests/test_module_directives.py 2012-12-24 16:38:17 UTC (rev 128895)
@@ -1,78 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2003 Zope Foundation 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.
-#
-##############################################################################
-"""Directives Tests
-"""
-import unittest
-
-
-def _skip_wo_zope_configuration(testfunc):
- try:
- import zope.configuration.xmlconfig
- except ImportError:
- from functools import update_wrapper
- def dummy(self):
- pass
- update_wrapper(dummy, testfunc)
- return dummy
- else:
- return testfunc
-
-
- at _skip_wo_zope_configuration
-def make_dummy():
- from zope.interface import Interface
- import zope.security.zcml
- global IDummy
- class IDummy(Interface):
- perm = zope.security.zcml.Permission(title=u'')
-
-
-perms = []
-
-def dummy(context_, perm):
- global perms
- perms.append(perm)
-
-
-class DirectivesTest(unittest.TestCase):
-
- def setUp(self):
- try:
- from zope.component.testing import setUp
- except ImportError:
- pass
- else:
- setUp()
-
- def tearDown(self):
- del perms[:]
- try:
- from zope.component.testing import tearDown
- except ImportError:
- pass
- else:
- tearDown()
-
- @_skip_wo_zope_configuration
- def testRedefinePermission(self):
- from zope.configuration import xmlconfig
- from zope.security import tests
- make_dummy()
- xmlconfig.file("redefineperms.zcml", tests)
- self.assertEqual(perms, ['zope.Security'])
-
-def test_suite():
- return unittest.TestSuite((
- unittest.makeSuite(DirectivesTest),
- ))
Added: zope.security/trunk/src/zope/security/tests/test_zcml.py
===================================================================
--- zope.security/trunk/src/zope/security/tests/test_zcml.py (rev 0)
+++ zope.security/trunk/src/zope/security/tests/test_zcml.py 2012-12-24 16:38:17 UTC (rev 128895)
@@ -0,0 +1,699 @@
+##############################################################################
+#
+# Copyright (c) 2001, 2002, 2003, 2012 Zope Foundation 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.
+#
+##############################################################################
+"""Directives Tests
+"""
+import unittest
+
+
+def _skip_wo_zope_configuration(testfunc):
+ try:
+ import zope.configuration.xmlconfig
+ except ImportError:
+ from functools import update_wrapper
+ def dummy(self):
+ pass
+ update_wrapper(dummy, testfunc)
+ return dummy
+ else:
+ return testfunc
+
+
+def configfile(s):
+ from StringIO import StringIO
+ return StringIO("""<configure
+ xmlns='http://namespaces.zope.org/zope'
+ i18n_domain='zope'>
+ %s
+ </configure>
+ """ % s)
+
+
+class TestClassDirective(unittest.TestCase):
+
+ def setUp(self):
+ from zope.security.tests.exampleclass import ExampleClass
+ try:
+ del ExampleClass.__implements__
+ except AttributeError:
+ pass
+ try:
+ from zope.component.testing import setUp
+ except ImportError:
+ pass
+ else:
+ setUp()
+
+ def tearDown(self):
+ from zope.security.tests.exampleclass import ExampleClass
+ try:
+ del ExampleClass.__implements__
+ except AttributeError:
+ pass
+ try:
+ from zope.component.testing import tearDown
+ except ImportError:
+ pass
+ else:
+ tearDown()
+
+ def _meta(self):
+ from zope.configuration.xmlconfig import XMLConfig
+ import zope.security
+ XMLConfig('meta.zcml', zope.security)()
+
+ @_skip_wo_zope_configuration
+ def testEmptyDirective(self):
+ from zope.configuration.xmlconfig import xmlconfig
+ self._meta()
+ f = configfile("""
+<class class="zope.security.tests.exampleclass.ExampleClass">
+</class>
+ """)
+ xmlconfig(f)
+
+
+ @_skip_wo_zope_configuration
+ def testImplements(self):
+ from zope.component.interface import queryInterface
+ from zope.configuration.xmlconfig import xmlconfig
+ from zope.security.tests.exampleclass import ExampleClass
+ from zope.security.tests.exampleclass import IExample
+ self._meta()
+ self.assertEqual(queryInterface(
+ "zope.security.tests.exampleclass.IExample"), None)
+
+ f = configfile("""
+<class class="zope.security.tests.exampleclass.ExampleClass">
+ <implements interface="zope.security.tests.exampleclass.IExample" />
+</class>
+ """)
+ xmlconfig(f)
+ self.failUnless(IExample.implementedBy(ExampleClass))
+
+ self.assertEqual(queryInterface(
+ "zope.security.tests.exampleclass.IExample"), IExample)
+
+
+ @_skip_wo_zope_configuration
+ def testMulImplements(self):
+ from zope.component.interface import queryInterface
+ from zope.configuration.xmlconfig import xmlconfig
+ from zope.security.tests.exampleclass import ExampleClass
+ from zope.security.tests.exampleclass import IExample
+ from zope.security.tests.exampleclass import IExample2
+ self._meta()
+ self.assertEqual(queryInterface(
+ "zope.security.tests.exampleclass.IExample"), None)
+ self.assertEqual(queryInterface(
+ "zope.security.tests.exampleclass.IExample2"), None)
+
+ f = configfile("""
+<class class="zope.security.tests.exampleclass.ExampleClass">
+ <implements interface="
+ zope.security.tests.exampleclass.IExample
+ zope.security.tests.exampleclass.IExample2
+ " />
+</class>
+ """)
+ xmlconfig(f)
+ self.failUnless(IExample.implementedBy(ExampleClass))
+ self.failUnless(IExample2.implementedBy(ExampleClass))
+
+ self.assertEqual(queryInterface(
+ "zope.security.tests.exampleclass.IExample"), IExample)
+ self.assertEqual(queryInterface(
+ "zope.security.tests.exampleclass.IExample2"),
+ IExample2)
+
+ @_skip_wo_zope_configuration
+ def testRequire(self):
+ from zope.configuration.xmlconfig import xmlconfig
+ self._meta()
+ f = configfile("""
+<permission id="zope.View" title="Zope view permission" />
+<class class="zope.security.tests.exampleclass.ExampleClass">
+ <require permission="zope.View"
+ attributes="anAttribute anotherAttribute" />
+</class>
+ """)
+ xmlconfig(f)
+
+ @_skip_wo_zope_configuration
+ def testAllow(self):
+ from zope.configuration.xmlconfig import xmlconfig
+ self._meta()
+ f = configfile("""
+<class class="zope.security.tests.exampleclass.ExampleClass">
+ <allow attributes="anAttribute anotherAttribute" />
+</class>
+ """)
+ xmlconfig(f)
+
+ @_skip_wo_zope_configuration
+ def testMimic(self):
+ from zope.configuration.xmlconfig import xmlconfig
+ self._meta()
+ f = configfile("""
+<class class="zope.security.tests.exampleclass.ExampleClass">
+ <require like_class="zope.security.tests.exampleclass.ExampleClass" />
+</class>
+ """)
+ xmlconfig(f)
+
+
+class TestFactorySubdirective(unittest.TestCase):
+
+ def setUp(self):
+ try:
+ from zope.component.testing import setUp
+ except ImportError:
+ pass
+ else:
+ setUp()
+
+ def tearDown(self):
+ try:
+ from zope.component.testing import tearDown
+ except ImportError:
+ pass
+ else:
+ tearDown()
+
+ def _meta(self):
+ from zope.configuration.xmlconfig import XMLConfig
+ import zope.security
+ XMLConfig('meta.zcml', zope.security)()
+
+ @_skip_wo_zope_configuration
+ def testFactory(self):
+ from zope.component import getUtility
+ from zope.component.interfaces import IFactory
+ from zope.configuration.xmlconfig import xmlconfig
+ self._meta()
+ f = configfile("""
+<permission id="zope.Foo" title="Zope Foo Permission" />
+
+<class class="zope.security.tests.exampleclass.ExampleClass">
+ <factory
+ id="test.Example"
+ title="Example content"
+ description="Example description"
+ />
+</class>
+ """)
+ xmlconfig(f)
+ factory = getUtility(IFactory, 'test.Example')
+ self.assertEquals(factory.title, "Example content")
+ self.assertEquals(factory.description, "Example description")
+
+ @_skip_wo_zope_configuration
+ def testFactoryNoId(self):
+ from zope.component import getUtility
+ from zope.component.interfaces import IFactory
+ from zope.component.interfaces import ComponentLookupError
+ from zope.configuration.xmlconfig import xmlconfig
+ self._meta()
+ f = configfile("""
+<permission id="zope.Foo" title="Zope Foo Permission" />
+
+<class class="zope.security.tests.exampleclass.ExampleClass">
+ <factory
+ title="Example content"
+ description="Example description"
+ />
+</class>
+ """)
+ xmlconfig(f)
+ self.assertRaises(ComponentLookupError, getUtility,
+ IFactory, 'Example')
+ factory = getUtility(
+ IFactory, 'zope.security.tests.exampleclass.ExampleClass')
+ self.assertEquals(factory.title, "Example content")
+ self.assertEquals(factory.description, "Example description")
+
+
+ @_skip_wo_zope_configuration
+ def testFactoryPublicPermission(self):
+ from zope.component import getUtility
+ from zope.component.interfaces import IFactory
+ from zope.configuration.xmlconfig import xmlconfig
+ self._meta()
+ f = configfile("""
+<class class="zope.security.tests.exampleclass.ExampleClass">
+ <factory
+ id="test.Example"
+ title="Example content"
+ description="Example description"
+ />
+</class>
+ """)
+ xmlconfig(f)
+ factory = getUtility(IFactory, 'test.Example')
+ self.assert_(hasattr(factory, '__Security_checker__'))
+
+
+class Context(object):
+ actions = ()
+
+ def action(self, discriminator, callable, args):
+ self.actions += ((discriminator, callable, args), )
+
+ def __repr__(self):
+ from cStringIO import StringIO
+ import re
+ import pprint
+ atre = re.compile(' at [0-9a-fA-Fx]+')
+ stream = StringIO()
+ pprinter = pprint.PrettyPrinter(stream=stream, width=60)
+ pprinter.pprint(self.actions)
+ r = stream.getvalue()
+ return (''.join(atre.split(r))).strip()
+
+
+template = """<configure
+ xmlns='http://namespaces.zope.org/zope'
+ xmlns:test='http://www.zope.org/NS/Zope3/test'
+ i18n_domain='zope'>
+ %s
+ </configure>"""
+
+
+class TestFactoryDirective(unittest.TestCase):
+
+ def setUp(self):
+ try:
+ from zope.component.testing import setUp
+ except ImportError:
+ pass
+ else:
+ setUp()
+
+ def tearDown(self):
+ try:
+ from zope.component.testing import tearDown
+ except ImportError:
+ pass
+ else:
+ tearDown()
+
+ def meta(self):
+ import zope.security
+ from zope.configuration.xmlconfig import XMLConfig
+ XMLConfig('meta.zcml', zope.security)()
+
+ @_skip_wo_zope_configuration
+ def testFactory(self):
+ from zope.component import createObject
+ from zope.configuration.xmlconfig import xmlconfig
+ from zope.security import proxy
+ from zope.security.tests import exampleclass
+ self.meta()
+ f = configfile('''
+<permission id="zope.Foo" title="Zope Foo Permission" />
+<class class="zope.security.tests.exampleclass.ExampleClass">
+ <factory
+ id="test.Example"
+ title="Example content"
+ description="Example description"
+ />
+</class>''')
+ xmlconfig(f)
+ obj = createObject('test.Example')
+ self.failUnless(proxy.isinstance(obj, exampleclass.ExampleClass))
+
+
+
+def _pfx(name):
+ from zope.security.tests import module
+ return module.__name__ + '.' + name
+
+def defineDirectives():
+ from cStringIO import StringIO
+ from zope.configuration.xmlconfig import XMLConfig
+ from zope.configuration.xmlconfig import xmlconfig
+ import zope.security
+ XMLConfig('meta.zcml', zope.security)()
+ xmlconfig(StringIO("""<configure
+ xmlns='http://namespaces.zope.org/zope'
+ i18n_domain='zope'>
+ <permission id="zope.Extravagant" title="extravagant" />
+ <permission id="zope.Paltry" title="paltry" />
+ </configure>"""))
+
+NOTSET = []
+
+P1 = "zope.Extravagant"
+P2 = "zope.Paltry"
+
+class TestRequireDirective(unittest.TestCase):
+
+ def setUp(self):
+ from zope.interface import implementer
+ from zope.security.tests import module
+ try:
+ from zope.component.testing import setUp
+ except ImportError:
+ pass
+ else:
+ setUp()
+ defineDirectives()
+
+ class B(object):
+ def m1(self):
+ return "m1"
+ def m2(self):
+ return "m2"
+ @implementer(module.I)
+ class C(B):
+ def m3(self):
+ return "m3"
+ def m4(self):
+ return "m4"
+ module.test_base = B
+ module.test_class = C
+ module.test_instance = C()
+ self.assertState()
+
+ def tearDown(self):
+ from zope.security.tests import module
+ module.test_class = None
+ try:
+ from zope.component.testing import tearDown
+ except ImportError:
+ pass
+ else:
+ tearDown()
+
+ def assertState(self, m1P=NOTSET, m2P=NOTSET, m3P=NOTSET):
+ #Verify that class, instance, and methods have expected permissions
+ from zope.security.checker import selectChecker
+ from zope.security.tests import module
+ checker = selectChecker(module.test_instance)
+ self.assertEqual(checker.permission_id('m1'), (m1P or None))
+ self.assertEqual(checker.permission_id('m2'), (m2P or None))
+ self.assertEqual(checker.permission_id('m3'), (m3P or None))
+
+ def assertDeclaration(self, declaration, **state):
+ from zope.security.tests import module
+ apply_declaration(module.template_bracket % declaration)
+ self.assertState(**state)
+
+ # "testSimple*" exercises tags that do NOT have children. This mode
+ # inherently sets the instances as well as the class attributes.
+
+ @_skip_wo_zope_configuration
+ def testSimpleMethodsPlural(self):
+ declaration = ('''<class class="%s">
+ <require
+ permission="%s"
+ attributes="m1 m3"/>
+ </class>'''
+ % (_pfx("test_class"), P1))
+ self.assertDeclaration(declaration, m1P=P1, m3P=P1)
+
+ def assertSetattrState(self, m1P=NOTSET, m2P=NOTSET, m3P=NOTSET):
+ # Verify that class, instance, and methods have expected permissions
+ from zope.security.checker import selectChecker
+ from zope.security.tests import module
+ checker = selectChecker(module.test_instance)
+ self.assertEqual(checker.setattr_permission_id('m1'), (m1P or None))
+ self.assertEqual(checker.setattr_permission_id('m2'), (m2P or None))
+ self.assertEqual(checker.setattr_permission_id('m3'), (m3P or None))
+
+ def assertSetattrDeclaration(self, declaration, **state):
+ self.assertSetattrState(**state)
+
+ @_skip_wo_zope_configuration
+ def test_set_attributes(self):
+ from zope.security.checker import selectChecker
+ from zope.security.tests import module
+ declaration = ('''<class class="%s">
+ <require
+ permission="%s"
+ set_attributes="m1 m3"/>
+ </class>'''
+ % (_pfx("test_class"), P1))
+ apply_declaration(module.template_bracket % declaration)
+ checker = selectChecker(module.test_instance)
+ self.assertEqual(checker.setattr_permission_id('m1'), P1)
+ self.assertEqual(checker.setattr_permission_id('m2'), None)
+ self.assertEqual(checker.setattr_permission_id('m3'), P1)
+
+ @_skip_wo_zope_configuration
+ def test_set_schema(self):
+ from zope.component.interface import queryInterface
+ from zope.security.checker import selectChecker
+ from zope.security.tests import module
+ self.assertEqual(queryInterface(_pfx("S")), None)
+
+ declaration = ('''<class class="%s">
+ <require
+ permission="%s"
+ set_schema="%s"/>
+ </class>'''
+ % (_pfx("test_class"), P1, _pfx("S")))
+ apply_declaration(module.template_bracket % declaration)
+
+ self.assertEqual(queryInterface(_pfx("S")), module.S)
+
+
+ checker = selectChecker(module.test_instance)
+ self.assertEqual(checker.setattr_permission_id('m1'), None)
+ self.assertEqual(checker.setattr_permission_id('m2'), None)
+ self.assertEqual(checker.setattr_permission_id('m3'), None)
+ self.assertEqual(checker.setattr_permission_id('foo'), P1)
+ self.assertEqual(checker.setattr_permission_id('bar'), P1)
+ self.assertEqual(checker.setattr_permission_id('baro'), None)
+
+ @_skip_wo_zope_configuration
+ def test_multiple_set_schema(self):
+ from zope.component.interface import queryInterface
+ from zope.security.checker import selectChecker
+ from zope.security.tests import module
+ self.assertEqual(queryInterface(_pfx("S")), None)
+ self.assertEqual(queryInterface(_pfx("S2")), None)
+
+ declaration = ('''<class class="%s">
+ <require
+ permission="%s"
+ set_schema="%s %s"/>
+ </class>'''
+ % (_pfx("test_class"), P1, _pfx("S"), _pfx("S2")))
+ apply_declaration(module.template_bracket % declaration)
+
+ self.assertEqual(queryInterface(_pfx("S")), module.S)
+ self.assertEqual(queryInterface(_pfx("S2")), module.S2)
+
+
+ checker = selectChecker(module.test_instance)
+ self.assertEqual(checker.setattr_permission_id('m1'), None)
+ self.assertEqual(checker.setattr_permission_id('m2'), None)
+ self.assertEqual(checker.setattr_permission_id('m3'), None)
+ self.assertEqual(checker.setattr_permission_id('foo'), P1)
+ self.assertEqual(checker.setattr_permission_id('bar'), P1)
+ self.assertEqual(checker.setattr_permission_id('foo2'), P1)
+ self.assertEqual(checker.setattr_permission_id('bar2'), P1)
+ self.assertEqual(checker.setattr_permission_id('baro'), None)
+
+ @_skip_wo_zope_configuration
+ def testSimpleInterface(self):
+ from zope.component.interface import queryInterface
+ from zope.security.tests import module
+ self.assertEqual(queryInterface(_pfx("I")), None)
+
+ declaration = ('''<class class="%s">
+ <require
+ permission="%s"
+ interface="%s"/>
+ </class>'''
+ % (_pfx("test_class"), P1, _pfx("I")))
+ # m1 and m2 are in the interface, so should be set, and m3 should not:
+ self.assertDeclaration(declaration, m1P=P1, m2P=P1)
+
+ # Make sure we know about the interfaces
+ self.assertEqual(queryInterface(_pfx("I")), module.I)
+
+
+ @_skip_wo_zope_configuration
+ def testMultipleInterface(self):
+ from zope.component.interface import queryInterface
+ from zope.security.tests import module
+ self.assertEqual(queryInterface(_pfx("I3")), None)
+ self.assertEqual(queryInterface(_pfx("I4")), None)
+
+ declaration = ('''<class class="%s">
+ <require
+ permission="%s"
+ interface=" %s
+ %s "/>
+ </class>'''
+ % (_pfx("test_class"), P1, _pfx("I3"), _pfx("I4")))
+ self.assertDeclaration(declaration, m3P=P1, m2P=P1)
+
+ # Make sure we know about the interfaces
+ self.assertEqual(queryInterface(_pfx("I3")), module.I3)
+ self.assertEqual(queryInterface(_pfx("I4")), module.I4)
+
+ # "testComposite*" exercises tags that DO have children.
+ # "testComposite*TopPerm" exercises tags with permission in containing tag.
+ # "testComposite*ElementPerm" exercises tags w/permission in children.
+
+ @_skip_wo_zope_configuration
+ def testCompositeNoPerm(self):
+ # Establish rejection of declarations lacking a permission spec.
+ from zope.configuration.xmlconfig import ZopeXMLConfigurationError
+ declaration = ('''<class class="%s">
+ <require
+ attributes="m1"/>
+ </class>'''
+ % (_pfx("test_class")))
+ self.assertRaises(ZopeXMLConfigurationError,
+ self.assertDeclaration,
+ declaration)
+
+
+
+ @_skip_wo_zope_configuration
+ def testCompositeMethodsPluralElementPerm(self):
+ declaration = ('''<class class="%s">
+ <require
+ permission="%s"
+ attributes="m1 m3"/>
+ </class>'''
+ % (_pfx("test_class"), P1))
+ self.assertDeclaration(declaration,
+ m1P=P1, m3P=P1)
+
+ @_skip_wo_zope_configuration
+ def testCompositeInterfaceTopPerm(self):
+ declaration = ('''<class class="%s">
+ <require
+ permission="%s"
+ interface="%s"/>
+ </class>'''
+ % (_pfx("test_class"), P1, _pfx("I")))
+ self.assertDeclaration(declaration,
+ m1P=P1, m2P=P1)
+
+
+ @_skip_wo_zope_configuration
+ def testSubInterfaces(self):
+ declaration = ('''<class class="%s">
+ <require
+ permission="%s"
+ interface="%s"/>
+ </class>'''
+ % (_pfx("test_class"), P1, _pfx("I2")))
+ # m1 and m2 are in the interface, so should be set, and m3 should not:
+ self.assertDeclaration(declaration, m1P=P1, m2P=P1)
+
+
+ @_skip_wo_zope_configuration
+ def testMimicOnly(self):
+ declaration = ('''<class class="%s">
+ <require
+ permission="%s"
+ attributes="m1 m2"/>
+ </class>
+ <class class="%s">
+ <require like_class="%s" />
+ </class>
+ ''' % (_pfx("test_base"), P1,
+ _pfx("test_class"), _pfx("test_base")))
+ # m1 and m2 are in the interface, so should be set, and m3 should not:
+ self.assertDeclaration(declaration,
+ m1P=P1, m2P=P1)
+
+
+ @_skip_wo_zope_configuration
+ def testMimicAsDefault(self):
+ declaration = ('''<class class="%s">
+ <require
+ permission="%s"
+ attributes="m1 m2"/>
+ </class>
+ <class class="%s">
+ <require like_class="%s" />
+ <require
+ permission="%s"
+ attributes="m2 m3"/>
+ </class>
+ ''' % (_pfx("test_base"), P1,
+ _pfx("test_class"), _pfx("test_base"), P2))
+
+ # m1 and m2 are in the interface, so should be set, and m3 should not:
+ self.assertDeclaration(declaration,
+ m1P=P1, m2P=P2, m3P=P2)
+
+
+def apply_declaration(declaration):
+ '''Apply the xmlconfig machinery.'''
+ from cStringIO import StringIO
+ from zope.configuration.xmlconfig import xmlconfig
+ return xmlconfig(StringIO(declaration))
+
+
+ at _skip_wo_zope_configuration
+def make_dummy():
+ from zope.interface import Interface
+ import zope.security.zcml
+ global IDummy
+ class IDummy(Interface):
+ perm = zope.security.zcml.Permission(title=u'')
+
+
+perms = []
+
+def dummy(context_, perm):
+ global perms
+ perms.append(perm)
+
+
+class DirectivesTest(unittest.TestCase):
+
+ def setUp(self):
+ try:
+ from zope.component.testing import setUp
+ except ImportError:
+ pass
+ else:
+ setUp()
+
+ def tearDown(self):
+ del perms[:]
+ try:
+ from zope.component.testing import tearDown
+ except ImportError:
+ pass
+ else:
+ tearDown()
+
+ @_skip_wo_zope_configuration
+ def testRedefinePermission(self):
+ from zope.configuration import xmlconfig
+ from zope.security import tests
+ make_dummy()
+ xmlconfig.file("redefineperms.zcml", tests)
+ self.assertEqual(perms, ['zope.Security'])
+
+
+def test_suite():
+
+ return unittest.TestSuite((
+ unittest.makeSuite(TestClassDirective),
+ unittest.makeSuite(TestFactorySubdirective),
+ unittest.makeSuite(TestFactoryDirective),
+ unittest.makeSuite(TestRequireDirective),
+ unittest.makeSuite(DirectivesTest),
+ ))
More information about the checkins
mailing list