[Zope-Checkins] CVS: Zope3/lib/python/Zope/Configuration/tests - BaseTestDirectivesXML.py:1.2 testMetameta.py:1.2 testMetametaForDocgen.py:1.2 Directives.py:1.5 testDirectivesXML.py:1.5

R. David Murray bitz@bitdance.com
Wed, 6 Nov 2002 17:30:53 -0500


Update of /cvs-repository/Zope3/lib/python/Zope/Configuration/tests
In directory cvs.zope.org:/tmp/cvs-serv10913/lib/python/Zope/Configuration/tests

Modified Files:
	Directives.py testDirectivesXML.py 
Added Files:
	BaseTestDirectivesXML.py testMetameta.py 
	testMetametaForDocgen.py 
Log Message:
Merge of rdmurray-metameta-branch.  See checkin message for 
doc/zcml/meta.stx for a more comprehensive checkin comment.


=== Zope3/lib/python/Zope/Configuration/tests/BaseTestDirectivesXML.py 1.1 => 1.2 ===
--- /dev/null	Wed Nov  6 17:30:53 2002
+++ Zope3/lib/python/Zope/Configuration/tests/BaseTestDirectivesXML.py	Wed Nov  6 17:30:22 2002
@@ -0,0 +1,153 @@
+"""Tests of the XML parsing machinery
+
+This mixin passes a series of sets of configuration directives
+to xmlconfig to make sure the right things happen.  The
+directives first define one or or more new directives, implemented
+by code in the Directives.py module, and then use those
+directives.  The tests check to make sure the expected actions
+were taken, or the expected errors raised.
+
+These tests test only the capabilities of the meta-directives
+implemented by the bootstrap versions.
+"""
+
+from cStringIO import StringIO
+from Zope.Configuration.meta import InvalidDirective
+from Zope.Configuration.xmlconfig import xmlconfig, testxmlconfig
+from Zope.Configuration.tests.Directives import protections, done
+
+ns = 'http://www.zope.org/NS/Zope3/test'
+
+def makeconfig(metadirectives,directives):
+    return StringIO(
+        '''<zopeConfigure
+               xmlns="http://namespaces.zope.org/zope"
+               xmlns:test="%(ns)s">
+            <directives namespace="%(ns)s">
+              %(metadirectives)s
+            </directives>
+            %(directives)s
+            </zopeConfigure>''' % {
+                'metadirectives': metadirectives,
+                'directives': directives,
+                'ns': ns})
+
+
+class directiveTests:
+
+    def testDirective(self):
+        xmlconfig(makeconfig(
+            '''<directive
+                   name="doit"
+                   handler="Zope.Configuration.tests.Directives.doit" />''',
+            '''<test:doit name="splat" />'''
+            ))
+        self.assertEqual(done, ['splat'])
+        
+    def testSimpleComplexDirective(self):
+        xmlconfig(makeconfig(
+            '''<directive
+                   name="protectClass"
+                   handler="Zope.Configuration.tests.Directives.protectClass">
+                 <subdirective name="protect" namespace="%s" />
+               </directive>''',
+            '''<test:protectClass
+                   name=".Contact" permission="splat" names="update" />'''
+            ))
+        self.assertEquals(protections, [(".Contact", "splat", 'update')])
+        
+    def testComplexDirective(self):
+        xmlconfig(makeconfig(
+            '''<directive
+                   name="protectClass"
+                   handler="Zope.Configuration.tests.Directives.protectClass">
+                 <subdirective name="protect" />
+               </directive>''',
+            '''<test:protectClass name=".Contact">
+               <test:protect permission="edit" names='update' />
+               <test:protect permission="view" names='name email' />
+               </test:protectClass>'''
+            ))
+        self.assertEquals(protections, [
+            (".Contact", "edit", 'update'),
+            (".Contact", "view", 'name email'),
+            ])
+
+    def testSubSubdirective(self):
+        xmlconfig(makeconfig(
+            '''<directive name="protectClass"
+                   handler="Zope.Configuration.tests.Directives.protectClass">
+                 <subdirective name="subsub">
+                   <subdirective name="subsub">
+                     <subdirective name="subsub">
+                       <subdirective name="subsub">
+                         <subdirective name="protect"/>
+                       </subdirective>
+                     </subdirective>
+                   </subdirective>
+                 </subdirective>
+               </directive>''',
+            '''<test:protectClass
+                   name=".Contact" permission="splat" names="update"
+               >
+                 <test:subsub>
+                   <test:subsub>
+                     <test:subsub>
+                       <test:subsub> 
+                         <test:protect permission="beep" names="update" />
+                       </test:subsub>
+                     </test:subsub>
+                   </test:subsub>
+                 </test:subsub>
+               </test:protectClass>'''
+            ))
+        self.assertEquals(protections, [(".Contact", "beep", 'update')])
+
+    def testHandlerMethod(self):
+        xmlconfig(makeconfig(
+            '''<directive name="protectClass"
+                   handler="Zope.Configuration.tests.Directives.protectClass">
+                 <subdirective
+                     name="fish"
+                     handler_method="protect" />
+               </directive>''',
+            '''<test:protectClass name=".Contact">
+                 <test:fish permission="edit" names='update' />
+                 <test:fish permission="view" names='name email' />
+              </test:protectClass>'''
+            ))
+        self.assertEquals(protections, [
+            (".Contact", "edit", 'update'),
+            (".Contact", "view", 'name email'),
+            ])
+
+    def testBadNoPrefixComplexDirective(self):
+        self.assertRaises(
+            InvalidDirective,
+            testxmlconfig,
+            makeconfig(
+              '''<directive
+                     name="protectClass"
+                     handler="Zope.Configuration.tests.Directives.protectClass">
+                   <subdirective name="protect" namespace="%s" />
+                 </directive>''',
+              '''<test:protectClass name=".Contact">
+                 <test:protect permission="edit" names='update' />
+                 <protect permission="view" names='name email' />
+                 </test:protectClass>
+              '''))
+        
+    def testBadPrefixComplexDirective(self):
+        try: testxmlconfig(makeconfig(
+            '''<directive
+                   name="protectClass"
+                   handler="Zope.Configuration.tests.Directives.protectClass">
+                 <subdirective name="protect" namespace="%s" />
+               </directive>''',
+            '''<test:protectClass name=".Contact">
+               <test2:protect permission="edit" names='update' />
+               </test:protectClass>''')),
+        except InvalidDirective, v:
+            self.assertEqual(str(v), "(None, u'test2:protect')")
+        else:
+            self.fail('Should have raised InvalidDirective')


=== Zope3/lib/python/Zope/Configuration/tests/testMetameta.py 1.1 => 1.2 ===
--- /dev/null	Wed Nov  6 17:30:53 2002
+++ Zope3/lib/python/Zope/Configuration/tests/testMetameta.py	Wed Nov  6 17:30:22 2002
@@ -0,0 +1,89 @@
+##############################################################################
+#
+# 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.
+# 
+##############################################################################
+import sys, unittest
+from Zope.Testing.CleanUp import CleanUp
+from Zope.Configuration.xmlconfig import xmlconfig, testxmlconfig, XMLConfig
+from Zope.Configuration.tests.Directives import done
+from Zope.Configuration.tests.BaseTestDirectivesXML import directiveTests
+from Zope.Configuration.tests.BaseTestDirectivesXML import makeconfig
+import Zope.Configuration
+
+class Test(CleanUp, unittest.TestCase, directiveTests):
+
+    def setUp(self):
+        XMLConfig('metameta.zcml', Zope.Configuration)()
+
+
+    def testDescription(self):
+        xmlconfig(makeconfig(
+            '''<directive
+                   name="doit"
+                   description="Something to Do"
+                   handler="Zope.Configuration.tests.Directives.doit" />''',
+            '''<test:doit name="splat" />'''
+            ))
+        self.assertEqual(done, ['splat'])
+
+    def testAttribute(self):
+        xmlconfig(makeconfig(
+            '''<directive
+                   name="doit"
+                   handler="Zope.Configuration.tests.Directives.doit"
+                   description="Something to Do"
+               >
+                 <attribute
+                     name="name"
+                     required="yes"
+                     description="Just Do It" />
+               </directive>''',
+            '''<test:doit name="splat" />'''
+            ))
+        self.assertEqual(done, ['splat'])
+
+    def testBadRequired(self):
+        self.assertRaises(
+            ValueError,
+            testxmlconfig,
+            makeconfig(
+                '''<directive
+                       name="doit"
+                       handler="Zope.Configuration.tests.Directives.doit"
+                   >
+                     <attribute
+                         name="name"
+                         required="badvalue"
+                         description="Just Do It" />
+                   </directive>''',
+                '''<test:doit name="splat" />'''
+                ))
+        
+def test_suite():
+    loader=unittest.TestLoader()
+    return loader.loadTestsFromTestCase(Test)
+
+def run():
+    unittest.TextTestRunner().run(test_suite())
+
+def debug():
+    test_suite().debug()
+
+def pdb():
+    import pdb
+    pdb.run('debug()')
+
+if __name__=='__main__':
+    if len(sys.argv) < 2:
+        run()
+    else:
+        globals()[sys.argv[1]]()


=== Zope3/lib/python/Zope/Configuration/tests/testMetametaForDocgen.py 1.1 => 1.2 ===
--- /dev/null	Wed Nov  6 17:30:53 2002
+++ Zope3/lib/python/Zope/Configuration/tests/testMetametaForDocgen.py	Wed Nov  6 17:30:22 2002
@@ -0,0 +1,109 @@
+##############################################################################
+#
+# 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.
+# 
+##############################################################################
+import sys, unittest
+from Zope.Testing.CleanUp import CleanUp
+from Zope.Configuration.xmlconfig import xmlconfig, testxmlconfig, XMLConfig
+from Zope.Configuration.meta import _directives
+from Zope.Configuration.metametaConfigureForDocgen import _metadataKey
+from Zope.Configuration.tests.Directives import done
+from Zope.Configuration.tests.BaseTestDirectivesXML import directiveTests
+from Zope.Configuration.tests.BaseTestDirectivesXML import makeconfig, ns
+import Zope.Configuration
+
+class Test(CleanUp, unittest.TestCase, directiveTests):
+
+    def setUp(self):
+        XMLConfig('metameta.zcml', Zope.Configuration)()
+        XMLConfig('metametaForDocgen.zcml', Zope.Configuration)()
+
+
+    def testDescription(self):
+        xmlconfig(makeconfig(
+            '''<directive
+                   name="doit"
+                   description="Just Do It"
+                   handler="Zope.Configuration.tests.Directives.doit" />''',
+            '''<test:doit name="splat" />'''
+            ))
+        self.assertEqual(done, ['splat'])
+        md = _directives[(ns, 'doit')][1][_metadataKey]
+        self.assertEqual(md['description'], "Just Do It")
+
+    def testAttribute(self):
+        xmlconfig(makeconfig(
+            '''<directive
+                   name="doit"
+                   handler="Zope.Configuration.tests.Directives.doit"
+               >
+                 <attribute
+                     name="name"
+                     required="Yes"
+                     description="Just Do It" />
+                 <attribute
+                     name="opt1"
+                     required="no"
+                     description="ho hum" />
+                 <attribute
+                     name="opt2"
+                     description="ho hummer" />
+               </directive>''',
+            '''<test:doit name="splat" />'''
+            ))
+        self.assertEqual(done, ['splat'])
+        md = _directives[(ns, 'doit')][1][_metadataKey]['attributes']['name']
+        self.assertEqual(md['description'],'Just Do It')
+        self.assertEqual(md['required'],'yes')
+        md = _directives[(ns, 'doit')][1][_metadataKey]['attributes']['opt1']
+        self.assertEqual(md['description'],'ho hum')
+        self.assertEqual(md['required'],'no')
+        md = _directives[(ns, 'doit')][1][_metadataKey]['attributes']['opt2']
+        self.assertEqual(md['description'],'ho hummer')
+        self.assertEqual(md['required'],'')
+
+    def testBadRequired(self):
+        self.assertRaises(
+            ValueError,
+            testxmlconfig,
+            makeconfig(
+                '''<directive
+                       name="doit"
+                       handler="Zope.Configuration.tests.Directives.doit"
+                   >
+                     <attribute
+                         name="name"
+                         required="badvalue"
+                         description="Just Do It" />
+                   </directive>''',
+                '''<test:doit name="splat" />'''
+                ))
+        
+def test_suite():
+    loader=unittest.TestLoader()
+    return loader.loadTestsFromTestCase(Test)
+
+def run():
+    unittest.TextTestRunner().run(test_suite())
+
+def debug():
+    test_suite().debug()
+
+def pdb():
+    import pdb
+    pdb.run('debug()')
+
+if __name__=='__main__':
+    if len(sys.argv) < 2:
+        run()
+    else:
+        globals()[sys.argv[1]]()


=== Zope3/lib/python/Zope/Configuration/tests/Directives.py 1.4 => 1.5 ===
--- Zope3/lib/python/Zope/Configuration/tests/Directives.py:1.4	Sun Sep 22 12:05:18 2002
+++ Zope3/lib/python/Zope/Configuration/tests/Directives.py	Wed Nov  6 17:30:22 2002
@@ -18,12 +18,14 @@
 """
 
 from Zope.Configuration.INonEmptyDirective import INonEmptyDirective
+from Zope.Configuration.ISubdirectiveHandler import ISubdirectiveHandler
 
 protections=[]
 
 class protectClass:
 
-    __implements__ = INonEmptyDirective
+    __class_implements__ = INonEmptyDirective
+    __implements__ = ISubdirectiveHandler
 
     def __init__(self, _context, name, permission=None, names=None):
         self._name=name
@@ -55,6 +57,7 @@
         #If you put a protect inside a subsub, that'll set children,
         #so when the parser calls us, __call__ will return ().
         return self
+    subsub.__implements__ = INonEmptyDirective
 
 done = []
 


=== Zope3/lib/python/Zope/Configuration/tests/testDirectivesXML.py 1.4 => 1.5 ===
--- Zope3/lib/python/Zope/Configuration/tests/testDirectivesXML.py:1.4	Sun Sep 22 14:43:40 2002
+++ Zope3/lib/python/Zope/Configuration/tests/testDirectivesXML.py	Wed Nov  6 17:30:22 2002
@@ -12,186 +12,11 @@
 # 
 ##############################################################################
 import sys, unittest
-from cStringIO import StringIO
-from Zope.Configuration.xmlconfig import xmlconfig, ZopeXMLConfigurationError
-from Zope.Configuration.xmlconfig import testxmlconfig
-from Zope.Configuration.meta import InvalidDirective
-from Zope.Configuration.tests.Directives import protections, done
-from Zope.Testing.CleanUp import CleanUp # Base class w registry cleanup
+from Zope.Configuration.tests.BaseTestDirectivesXML import directiveTests
+from Zope.Testing.CleanUp import CleanUp
 
-template = """<zopeConfigure
-   xmlns='http://namespaces.zope.org/zope'
-   xmlns:test='http://www.zope.org/NS/Zope3/test'>
-   %s
-   %s
-   </zopeConfigure>"""
-
-
-ns='http://www.zope.org/NS/Zope3/test'
-
-class Test(CleanUp, unittest.TestCase):
-        
-    def testDirective(self):
-        xmlconfig(StringIO(
-            template % (
-            '''<directives  namespace="%s">
-                   <directive name="doit"
-                    handler="Zope.Configuration.tests.Directives.doit" />
-               </directives>''' % ns,
-            '<test:doit name="splat" />'
-            )))
-
-        self.assertEqual(done, ['splat'])
-        
-    def testSimpleComplexDirective(self):
-        xmlconfig(StringIO(
-            template % (
-            '''<directives  namespace="%s">
-                   <directive name="protectClass"
-                    handler="Zope.Configuration.tests.Directives.protectClass">
-                       <subdirective name="protect"/>
-               </directive>
-               </directives>
-                          ''' % ns,
-            '''<test:protectClass
-                   name=".Contact" permission="splat" names="update"
-               >
-                 <test:protect permission="beep" names="update" />
-               </test:protectClass>'''
-            )))
-        
-        self.assertEquals(protections, [(".Contact", "beep", 'update')])
-
-    def testDirectiveDirective(self):
-        xmlconfig(StringIO(
-            template % (
-            '''<directive name="protectClass" namespace="%s"
-                    handler="Zope.Configuration.tests.Directives.protectClass">
-                       <subdirective name="protect"/>
-               </directive>
-                          ''' % ns,
-            '''<test:protectClass
-                   name=".Contact" permission="splat" names="update"
-               >
-                 <test:protect permission="beep" names="update" />
-               </test:protectClass>'''
-            )))
-
-        self.assertEquals(protections, [(".Contact", "beep", 'update')])
-        
-    def testComplexDirective(self):
-        xmlconfig(StringIO(
-            template % (
-            '''<directives  namespace="%s">
-                   <directive name="protectClass"
-                    handler="Zope.Configuration.tests.Directives.protectClass">
-                      <subdirective name="protect" />
-                   </directive>
-               </directives>''' % ns,
-            '''<test:protectClass name=".Contact">
-                <test:protect permission="edit" names='update' />
-                <test:protect permission="view" names='name email' />
-              </test:protectClass>'''
-            )))
-
-        self.assertEquals(protections, [
-            (".Contact", "edit", 'update'),
-            (".Contact", "view", 'name email'),
-            ])
-        
-    def testSubSubdirective(self):
-        xmlconfig(StringIO(
-            template % (
-            '''<directives  namespace="%s">
-                 <directive name="protectClass"
-                    handler="Zope.Configuration.tests.Directives.protectClass">
-                       <subdirective name="subsub">
-                         <subdirective name="subsub">
-                           <subdirective name="protect"/>
-                         </subdirective>
-                       </subdirective>
-                 </directive>
-               </directives>
-                          ''' % ns,
-            '''<test:protectClass
-                   name=".Contact" permission="splat" names="update"
-               >
-                 <test:subsub>
-                   <test:subsub>
-                     <test:protect permission="beep" names="update" />
-                   </test:subsub>
-                 </test:subsub>
-               </test:protectClass>'''
-            )))
+class Test(CleanUp, unittest.TestCase, directiveTests): pass
         
-        self.assertEquals(protections, [(".Contact", "beep", 'update')])
-
-    def testHandlerMethod(self):
-        xmlconfig(StringIO(
-            template % (
-            '''<directives  namespace="%s">
-                   <directive name="protectClass"
-                    handler="Zope.Configuration.tests.Directives.protectClass">
-                      <subdirective name="fish"
-                                    handler_method="protect" />
-                   </directive>
-               </directives>''' % ns,
-            '''<test:protectClass name=".Contact">
-                <test:fish permission="edit" names='update' />
-                <test:fish permission="view" names='name email' />
-              </test:protectClass>'''
-            )))
-
-        self.assertEquals(protections, [
-            (".Contact", "edit", 'update'),
-            (".Contact", "view", 'name email'),
-            ])
-        
-        
-    def testBadNoPrefixComplexDirective(self):
-
-        self.assertRaises(
-            InvalidDirective,
-            xmlconfig,
-            StringIO(
-            template % (
-            '''<directives  namespace="%s">
-                   <directive name="protectClass"
-                    handler="Zope.Configuration.tests.Directives.protectClass">
-                  <subdirective name="protect" />
-               </directive>
-               </directives>''' % ns,
-
-            '''<test:protectClass name=".Contact">
-              <test:protect permission="edit" names='update' />
-              <protect permission="view" names='name email' />
-              </test:protectClass>'''
-            )),
-            testing=1)
-        
-    def testBadPrefixComplexDirective(self):
-
-        try:
-            testxmlconfig(
-                StringIO(
-                template % (
-            '''<directives  namespace="%s">
-                   <directive name="protectClass"
-                    handler="Zope.Configuration.tests.Directives.protectClass">
-                  <subdirective name="protect" />
-               </directive>
-               </directives>''' % ns,
-
-                '''<test:protectClass name=".Contact">
-                <test2:protect permission="edit" names='update' />
-                </test:protectClass>'''
-                )))
-        except InvalidDirective, v:
-            self.assertEqual(str(v), "(None, u'test2:protect')")
-        else:
-            self.fail('Should have raised ZopeXMLConfigurationError')
-        
-
 def test_suite():
     loader=unittest.TestLoader()
     return loader.loadTestsFromTestCase(Test)