[Zope3-checkins] CVS: Zope3/src/zope/app/contentdirective/tests - module.py:1.1 exampleclass.py:1.3 test_directives.py:1.8 test_requirepermissions.py:1.4 modulehookup.py:NONE

Jim Fulton jim@zope.com
Fri, 21 Mar 2003 16:03:42 -0500


Update of /cvs-repository/Zope3/src/zope/app/contentdirective/tests
In directory cvs.zope.org:/tmp/cvs-serv19426/src/zope/app/contentdirective/tests

Modified Files:
	exampleclass.py test_directives.py test_requirepermissions.py 
Added Files:
	module.py 
Removed Files:
	modulehookup.py 
Log Message:
Made it possible to list multiple interfaces in a single interface or
set_schema attribute in a require or implements subdirective.

Changed to register mentioned interfaces with the global interface service.


=== Added File Zope3/src/zope/app/contentdirective/tests/module.py ===
##############################################################################
#
# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (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.
#
##############################################################################
"""Preliminaries to hookup a test suite with the external TestModule.

This is necessary because the test framework interferes with seeing changes in
the running modules via the module namespace.  This enables having some
subject classes, instances, permissions, etc, that don't live in the test
modules, themselves."""

from zope.interface import Interface
from zope.schema import Text

class I(Interface):
    def m1():
        pass
    def m2():
        pass

class I2(I):
    def m4():
        pass

class I3(Interface):
    def m3():
        pass

class I4(Interface):
    def m2():
        pass


class S(Interface):
    foo = Text()
    bar = Text()
    baro = Text(readonly=True)

class S2(Interface):
    foo2 = Text()
    bar2 = Text()


template_bracket = """<zopeConfigure
   xmlns="http://namespaces.zope.org/zope">
   %s
</zopeConfigure>"""


=== Zope3/src/zope/app/contentdirective/tests/exampleclass.py 1.2 => 1.3 ===
--- Zope3/src/zope/app/contentdirective/tests/exampleclass.py:1.2	Wed Dec 25 09:12:49 2002
+++ Zope3/src/zope/app/contentdirective/tests/exampleclass.py	Fri Mar 21 16:03:41 2003
@@ -6,5 +6,8 @@
 class IExample(Interface):
     pass
 
+class IExample2(Interface):
+    pass
+
 class IExampleContainer(Interface):
     pass


=== Zope3/src/zope/app/contentdirective/tests/test_directives.py 1.7 => 1.8 ===
--- Zope3/src/zope/app/contentdirective/tests/test_directives.py:1.7	Tue Feb 11 21:17:19 2003
+++ Zope3/src/zope/app/contentdirective/tests/test_directives.py	Fri Mar 21 16:03:41 2003
@@ -32,10 +32,12 @@
 from zope.app.security.exceptions import UndefinedPermissionError
 from zope.component import getService
 from zope.app.services.servicenames import Factories
+from zope.app.component.globalinterfaceservice import queryInterface
 
 # explicitly import ExampleClass and IExample using full paths
 # so that they are the same objects as resolve will get.
-from zope.app.contentdirective.tests.exampleclass import ExampleClass, IExample
+from zope.app.contentdirective.tests.exampleclass import ExampleClass
+from zope.app.contentdirective.tests.exampleclass import IExample, IExample2
 
 
 def configfile(s):
@@ -67,6 +69,9 @@
 
 
     def testImplements(self):
+        self.assertEqual(queryInterface(
+            "zope.app.contentdirective.tests.exampleclass.IExample"), None)
+
         f = configfile("""
 <content class="zope.app.contentdirective.tests.exampleclass.ExampleClass">
   <implements interface="zope.app.contentdirective.tests.exampleclass.IExample" />
@@ -75,6 +80,33 @@
         xmlconfig(f)
         self.failUnless(IExample.isImplementedByInstancesOf(ExampleClass))
 
+        self.assertEqual(queryInterface(
+            "zope.app.contentdirective.tests.exampleclass.IExample"), IExample)
+
+
+    def testMulImplements(self):
+        self.assertEqual(queryInterface(
+            "zope.app.contentdirective.tests.exampleclass.IExample"), None)
+        self.assertEqual(queryInterface(
+            "zope.app.contentdirective.tests.exampleclass.IExample2"), None)
+
+        f = configfile("""
+<content class="zope.app.contentdirective.tests.exampleclass.ExampleClass">
+  <implements interface="
+           zope.app.contentdirective.tests.exampleclass.IExample
+           zope.app.contentdirective.tests.exampleclass.IExample2
+                       " />
+</content>
+                       """)
+        xmlconfig(f)
+        self.failUnless(IExample.isImplementedByInstancesOf(ExampleClass))
+        self.failUnless(IExample2.isImplementedByInstancesOf(ExampleClass))
+
+        self.assertEqual(queryInterface(
+            "zope.app.contentdirective.tests.exampleclass.IExample"), IExample)
+        self.assertEqual(queryInterface(
+            "zope.app.contentdirective.tests.exampleclass.IExample2"),
+                         IExample2)
 
     def testRequire(self):
         f = configfile("""


=== Zope3/src/zope/app/contentdirective/tests/test_requirepermissions.py 1.3 => 1.4 ===
--- Zope3/src/zope/app/contentdirective/tests/test_requirepermissions.py:1.3	Tue Jan 21 16:35:23 2003
+++ Zope3/src/zope/app/contentdirective/tests/test_requirepermissions.py	Fri Mar 21 16:03:41 2003
@@ -13,24 +13,23 @@
 ##############################################################################
 """ Test handler for 'require' subdirective of 'content' directive """
 
-import unittest
 from cStringIO import StringIO
-
-import zope.configuration
-import zope.app.security
+from zope.app.component.globalinterfaceservice import queryInterface
+from zope.app.contentdirective.tests import module
 from zope.app.security.exceptions import UndefinedPermissionError
-from zope.security.checker import selectChecker
+from zope.app.tests.placelesssetup import PlacelessSetup
 from zope.exceptions import Forbidden
+from zope.security.checker import selectChecker
+import unittest
+import zope.app.contentdirective
+import zope.app.security
+import zope.configuration
 
 # So we can use config parser to exercise protectClass stuff.
-from zope.configuration.xmlconfig import xmlconfig, ZopeXMLConfigurationError
 from zope.configuration.xmlconfig import XMLConfig
+from zope.configuration.xmlconfig import xmlconfig, ZopeXMLConfigurationError
 
-from zope.app.contentdirective.tests.modulehookup import * # XXX I hate this!
-
-from zope.testing.cleanup import CleanUp # Base class w registry cleanup
-
-import zope.app.contentdirective
+PREFIX = module.__name__ + '.'
 
 def defineDirectives():
     XMLConfig('metameta.zcml', zope.configuration)()
@@ -47,17 +46,19 @@
 P1 = "extravagant"
 P2 = "paltry"
 
-class Test(CleanUp, unittest.TestCase):
+class Test(PlacelessSetup, unittest.TestCase):
 
     def setUp(self):
+        PlacelessSetup.setUp(self)
         defineDirectives()
+        
         class B:
             def m1(self):
                 return "m1"
             def m2(self):
                 return "m2"
         class C(B):
-            __implements__ = I
+            __implements__ = module.I
             def m3(self):
                 return "m3"
             def m4(self):
@@ -68,7 +69,7 @@
         self.assertState()
 
     def tearDown(self):
-        CleanUp.tearDown(self)
+        PlacelessSetup.tearDown(self)
         module.test_class = None
 
     def assertState(self, m1P=NOTSET, m2P=NOTSET, m3P=NOTSET):
@@ -83,7 +84,7 @@
         self.assertEqual(checker.permission_id('m3'), (m3P or None))
 
     def assertDeclaration(self, declaration, **state):
-        apply_declaration(template_bracket % declaration)
+        apply_declaration(module.template_bracket % declaration)
         self.assertState(**state)
 
     # "testSimple*" exercises tags that do NOT have children.  This mode
@@ -119,29 +120,66 @@
                                 set_attributes="m1 m3"/>
                           </content>"""
                        % (PREFIX+"test_class", P1))
-        apply_declaration(template_bracket % declaration)
+        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)
 
     def test_set_schema(self):
+
+        self.assertEqual(queryInterface(PREFIX+"S"), None)
+
         declaration = ("""<content class="%s">
                             <require
                                 permission="%s"
                                 set_schema="%s"/>
                           </content>"""
                        % (PREFIX+"test_class", P1, PREFIX+"S"))
-        apply_declaration(template_bracket % declaration)
+        apply_declaration(module.template_bracket % declaration)
+
+        self.assertEqual(queryInterface(PREFIX+"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)
+
+    def test_multiple_set_schema(self):
+
+        self.assertEqual(queryInterface(PREFIX+"S"), None)
+        self.assertEqual(queryInterface(PREFIX+"S2"), None)
+
+        declaration = ("""<content class="%s">
+                            <require
+                                permission="%s"
+                                set_schema="%s %s"/>
+                          </content>"""
+                       % (PREFIX+"test_class", P1, PREFIX+"S", PREFIX+"S2"))
+        apply_declaration(module.template_bracket % declaration)
+
+        self.assertEqual(queryInterface(PREFIX+"S"), module.S)
+        self.assertEqual(queryInterface(PREFIX+"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)
 
     def testSimpleInterface(self):
+
+        self.assertEqual(queryInterface(PREFIX+"I"), None)
+
         declaration = ("""<content class="%s">
                             <require
                                 permission="%s"
@@ -150,6 +188,28 @@
                        % (PREFIX+"test_class", P1, PREFIX+"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(PREFIX+"I"), module.I)
+        
+
+    def testMultipleInterface(self):
+
+        self.assertEqual(queryInterface(PREFIX+"I3"), None)
+        self.assertEqual(queryInterface(PREFIX+"I4"), None)
+
+        declaration = ("""<content class="%s">
+                            <require
+                                permission="%s"
+                                interface="  %s
+                                             %s  "/>
+                          </content>"""
+                       % (PREFIX+"test_class", P1, PREFIX+"I3", PREFIX+"I4"))
+        self.assertDeclaration(declaration, m3P=P1, m2P=P1)
+
+        # Make sure we know about the interfaces
+        self.assertEqual(queryInterface(PREFIX+"I3"), module.I3)
+        self.assertEqual(queryInterface(PREFIX+"I4"), module.I4)
 
     # "testComposite*" exercises tags that DO have children.
     # "testComposite*TopPerm" exercises tags with permission in containing tag.

=== Removed File Zope3/src/zope/app/contentdirective/tests/modulehookup.py ===