[Zope-Checkins] CVS: Zope3/lib/python/Zope/App/Publisher/Browser/tests - __init__.py:1.2 test.pt:1.2 testDirectives.py:1.2

Jim Fulton jim@zope.com
Mon, 10 Jun 2002 19:28:47 -0400


Update of /cvs-repository/Zope3/lib/python/Zope/App/Publisher/Browser/tests
In directory cvs.zope.org:/tmp/cvs-serv17445/lib/python/Zope/App/Publisher/Browser/tests

Added Files:
	__init__.py test.pt testDirectives.py 
Log Message:
Merged Zope-3x-branch into newly forked Zope3 CVS Tree.


=== Zope3/lib/python/Zope/App/Publisher/Browser/tests/__init__.py 1.1 => 1.2 ===
+#
+# Copyright (c) 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.
+# 
+##############################################################################


=== Zope3/lib/python/Zope/App/Publisher/Browser/tests/test.pt 1.1 => 1.2 ===


=== Zope3/lib/python/Zope/App/Publisher/Browser/tests/testDirectives.py 1.1 => 1.2 ===
+#
+# 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 os
+import unittest
+import sys
+
+from Zope.Configuration.xmlconfig import xmlconfig
+from Zope.Configuration.Exceptions import ConfigurationError
+from Zope.ComponentArchitecture.tests.TestViews import IC, V1, VZMI, R1, RZMI
+from Zope.ComponentArchitecture import getView, queryView, queryResource
+from Zope.ComponentArchitecture import getDefaultViewName, getResource
+from Zope.ComponentArchitecture.tests.PlacelessSetup import PlacelessSetup
+from cStringIO import StringIO
+
+from Zope.ComponentArchitecture.tests.Request import Request
+
+from Zope.Publisher.Browser.IBrowserPresentation import IBrowserPresentation
+
+import Zope.App.Publisher.Browser
+
+defs_path = os.path.join(
+    os.path.split(Zope.App.Publisher.Browser.__file__)[0],
+    'browser-meta.zcml')
+
+template = """<zopeConfigure
+   xmlns='http://namespaces.zope.org/zope'
+   xmlns:security='http://namespaces.zope.org/security'
+   xmlns:browser='http://namespaces.zope.org/browser'>
+   %s
+   </zopeConfigure>"""
+
+request = Request(IBrowserPresentation)
+
+class Ob:
+    __implements__ = IC
+
+ob = Ob()
+
+class Test(PlacelessSetup, unittest.TestCase):
+
+    def setUp(self):
+        PlacelessSetup.setUp(self)
+        xmlconfig(open(defs_path))
+
+    def testView(self):
+        self.assertEqual(queryView(ob, 'test', request),
+                         None)
+
+        xmlconfig(StringIO(template % (
+            """
+            <browser:view name="test"
+                  factory="Zope.ComponentArchitecture.tests.TestViews.V1"
+                  for="Zope.ComponentArchitecture.tests.TestViews.IC" /> 
+            """
+            ))) 
+        
+        self.assertEqual(
+            queryView(ob, 'test', request).__class__,
+            V1)
+         
+    def testDefaultView(self):
+        self.assertEqual(queryView(ob, 'test', request,
+                                   None), None)
+
+        xmlconfig(StringIO(template % (
+            """
+            <browser:defaultView name="test"
+                  factory="Zope.ComponentArchitecture.tests.TestViews.V1"
+                  for="Zope.ComponentArchitecture.tests.TestViews.IC" /> 
+            """
+            ))) 
+
+        self.assertEqual(queryView(ob, 'test',
+                                   request, None
+                                 ).__class__, V1)
+        self.assertEqual(getDefaultViewName(ob, request
+                                 ), 'test')
+                                 
+      
+    def testSKinView(self):
+        self.assertEqual(queryView(ob, 'test', request,
+                                   None), None)
+
+        xmlconfig(StringIO(template % (
+            """
+            <browser:skin name="zmi" layers="zmi default" />
+            <browser:view name="test"
+                  factory="Zope.ComponentArchitecture.tests.TestViews.VZMI"
+                  layer="zmi" 
+                  for="Zope.ComponentArchitecture.tests.TestViews.IC" /> 
+            <browser:view name="test"
+                  factory="Zope.ComponentArchitecture.tests.TestViews.V1"
+                  for="Zope.ComponentArchitecture.tests.TestViews.IC" />
+            """
+            ))) 
+        
+        self.assertEqual(
+            queryView(ob, 'test', request).__class__,
+            V1)
+        self.assertEqual(
+            queryView(ob, 'test',
+                      Request(IBrowserPresentation, 'zmi')).__class__,
+            VZMI)
+
+    def testResource(self):
+        self.assertEqual(queryResource(ob, 'test', request,
+                                       None),
+                         None)
+
+        xmlconfig(StringIO(template % (
+            """
+            <browser:resource name="test"
+                  factory="Zope.ComponentArchitecture.tests.TestViews.R1" /> 
+            """
+            ))) 
+
+        self.assertEqual(
+            queryResource(ob, 'test', request).__class__,
+            R1)
+         
+    def testSkinResource(self):
+        self.assertEqual(
+            queryResource(ob, 'test', request, None),
+            None)
+
+        xmlconfig(StringIO(template % (
+            """
+            <browser:skin name="zmi" layers="zmi default" />
+            <browser:resource name="test"
+                  factory="Zope.ComponentArchitecture.tests.TestViews.RZMI"
+                  layer="zmi" /> 
+            <browser:resource name="test"
+                  factory="Zope.ComponentArchitecture.tests.TestViews.R1" />
+            """
+            ))) 
+        
+        self.assertEqual(
+            queryResource(ob, 'test', request).__class__,
+            R1)
+        self.assertEqual(
+            queryResource(ob, 'test',
+                          Request(IBrowserPresentation, 'zmi')).__class__,
+            RZMI)
+
+
+    def testInterfaceProtectedView(self):
+        xmlconfig(StringIO(template %
+            """
+            <browser:view name="test"
+                  factory="Zope.ComponentArchitecture.tests.TestViews.V1"
+                  for="Zope.ComponentArchitecture.tests.TestViews.IC" 
+                  permission="Zope.Public"
+              allowed_interface="Zope.ComponentArchitecture.tests.TestViews.IV"
+                  /> 
+            """
+            ))
+
+        v = getView(ob, 'test', request)
+        self.assertEqual(v.index(), 'V1 here')
+        self.assertRaises(Exception, getattr, v, 'action')
+
+    def testAttributeProtectedView(self):
+        xmlconfig(StringIO(template %
+            """
+            <browser:view name="test"
+                  factory="Zope.ComponentArchitecture.tests.TestViews.V1"
+                  for="Zope.ComponentArchitecture.tests.TestViews.IC" 
+                  permission="Zope.Public"
+                  allowed_attributes="action"
+                  /> 
+            """
+            ))
+
+        v = getView(ob, 'test', request)
+        self.assertEqual(v.action(), 'done')
+        self.assertRaises(Exception, getattr, v, 'index')
+
+    def testInterfaceAndAttributeProtectedView(self):
+        xmlconfig(StringIO(template %
+            """
+            <browser:view name="test"
+                  factory="Zope.ComponentArchitecture.tests.TestViews.V1"
+                  for="Zope.ComponentArchitecture.tests.TestViews.IC" 
+                  permission="Zope.Public"
+                  allowed_attributes="action"
+              allowed_interface="Zope.ComponentArchitecture.tests.TestViews.IV"
+                  /> 
+            """
+            ))
+
+        v = getView(ob, 'test', request)
+        self.assertEqual(v.index(), 'V1 here')
+        self.assertEqual(v.action(), 'done')
+
+    def testDuplicatedInterfaceAndAttributeProtectedView(self):
+        xmlconfig(StringIO(template %
+            """
+            <browser:view name="test"
+                  factory="Zope.ComponentArchitecture.tests.TestViews.V1"
+                  for="Zope.ComponentArchitecture.tests.TestViews.IC" 
+                  permission="Zope.Public"
+                  allowed_attributes="action index"
+              allowed_interface="Zope.ComponentArchitecture.tests.TestViews.IV"
+                  /> 
+            """
+            ))
+
+        v = getView(ob, 'test', request)
+        self.assertEqual(v.index(), 'V1 here')
+        self.assertEqual(v.action(), 'done')
+
+    def testIncompleteProtectedViewNoPermission(self):
+        self.assertRaises(
+            ConfigurationError,
+            xmlconfig,
+            StringIO(template %
+            """
+            <browser:view name="test"
+                  factory="Zope.ComponentArchitecture.tests.TestViews.V1"
+                  for="Zope.ComponentArchitecture.tests.TestViews.IC" 
+                  allowed_attributes="action index"
+                  /> 
+            """
+            ))
+
+
+    def testPageViews(self):
+        self.assertEqual(queryView(ob, 'test', request),
+                         None)
+
+        xmlconfig(StringIO(template %
+            """
+            <browser:view
+                  factory="Zope.ComponentArchitecture.tests.TestViews.V1"
+                  for="Zope.ComponentArchitecture.tests.TestViews.IC">
+
+                <browser:page name="index.html" attribute="index" /> 
+                <browser:page name="action.html" attribute="action" /> 
+            </browser:view>
+            """
+            ))
+
+        v = getView(ob, 'index.html', request)
+        self.assertEqual(v(), 'V1 here')
+        v = getView(ob, 'action.html', request)
+        self.assertEqual(v(), 'done')
+
+    def testPageViewsWithName(self):
+        self.assertEqual(queryView(ob, 'test', request),
+                         None)
+
+        xmlconfig(StringIO(template %
+            """
+            <browser:view name="test"
+                  factory="Zope.ComponentArchitecture.tests.TestViews.V1"
+                  for="Zope.ComponentArchitecture.tests.TestViews.IC">
+
+                <browser:page name="index.html" attribute="index" /> 
+                <browser:page name="action.html" attribute="action" /> 
+            </browser:view>
+            """
+            ))
+
+        v = getView(ob, 'index.html', request)
+        self.assertEqual(v(), 'V1 here')
+        v = getView(ob, 'action.html', request)
+        self.assertEqual(v(), 'done')
+        v = getView(ob, 'test', request)
+        self.assertEqual(v.index(), 'V1 here')
+        self.assertEqual(v.action(), 'done')
+    
+
+    def testProtectedPageViews(self):
+        self.assertEqual(queryView(ob, 'test', request),
+                         None)
+
+        xmlconfig(StringIO(template %
+            """
+            <directives namespace="http://namespaces.zope.org/security">
+              <directive name="permission"
+                 attributes="id title description"
+                 handler="Zope.App.Security.metaConfigure.definePermission" />
+            </directives>
+
+            <security:permission id="XXX" title="xxx" />
+
+            <browser:view
+                  factory="Zope.ComponentArchitecture.tests.TestViews.V1"
+                  for="Zope.ComponentArchitecture.tests.TestViews.IC" 
+                  permission="XXX">
+
+                <browser:page name="index.html" attribute="index" /> 
+                <browser:page name="action.html" attribute="action"
+                              permission="Zope.Public" /> 
+            </browser:view>
+            """
+            ))
+
+        # Need to "log someone in" to turn on checks
+        from Zope.Security.SecurityManagement import newSecurityManager
+        newSecurityManager('someuser')
+
+        v = getView(ob, 'index.html', request)
+        self.assertRaises(Exception, v)
+        v = getView(ob, 'action.html', request)
+        self.assertEqual(v(), 'done')
+
+    def testSkinnedPageView(self):
+        self.assertEqual(queryView(ob, 'test', request), None)
+
+        xmlconfig(StringIO(template %
+            """
+            <browser:skin name="skinny" layers="layer default" />
+            <browser:view
+                  factory="Zope.ComponentArchitecture.tests.TestViews.V1">
+
+                <browser:page name="index.html" attribute="index" /> 
+                <browser:page name="index.html" attribute="action"
+                              layer="layer"/> 
+            </browser:view>
+            """
+            ))
+
+        v = getView(ob, 'index.html', request)
+        self.assertEqual(v(), 'V1 here')
+        v = getView(ob, 'index.html',
+                    Request(IBrowserPresentation, "skinny"))
+        self.assertEqual(v(), 'done')
+
+    def testPageResource(self):
+        self.assertEqual(queryResource(ob, 'test', request), None)
+
+        xmlconfig(StringIO(template %
+            """
+            <browser:resource
+                  factory="Zope.ComponentArchitecture.tests.TestViews.R1">
+
+                <browser:page name="index.html" attribute="index" /> 
+                <browser:page name="action.html" attribute="action" /> 
+            </browser:resource>
+            """
+            ))
+
+        v = getResource(ob, 'index.html', request)
+        self.assertEqual(v(), 'R1 here')
+        v = getResource(ob, 'action.html', request)
+        self.assertEqual(v(), 'R done')
+
+    def testtemplate(self):
+        path = os.path.join(os.path.split(defs_path)[0], 'tests', 'test.pt')
+        
+        self.assertEqual(queryView(ob, 'test', request),
+                         None)
+
+        xmlconfig(StringIO(template %
+            """
+            <browser:view
+                  name="index.html"
+                  template="%s"
+                  for="Zope.ComponentArchitecture.tests.TestViews.IC" />
+            """ % path
+            ))
+
+        v = getView(ob, 'index.html', request)
+        self.assertEqual(v().strip(), '<html><body><p>test</p></body></html>')
+
+    def testProtectedtemplate(self):
+        path = os.path.join(os.path.split(defs_path)[0], 'tests', 'test.pt')
+        
+        self.assertEqual(queryView(ob, 'test', request),
+                         None)
+
+        xmlconfig(StringIO(template %
+            """
+            <directives namespace="http://namespaces.zope.org/security">
+              <directive name="permission"
+                 attributes="id title description"
+                 handler="Zope.App.Security.metaConfigure.definePermission" />
+            </directives>
+
+            <security:permission id="XXX" title="xxx" />
+
+            <browser:view
+                  name="xxx.html"
+                  template="%s"
+                  permission="XXX"
+                  for="Zope.ComponentArchitecture.tests.TestViews.IC" />
+            """ % path
+            ))
+
+        xmlconfig(StringIO(template %
+            """
+            <browser:view
+                  name="index.html"
+                  template="%s"
+                  permission="Zope.Public"
+                  for="Zope.ComponentArchitecture.tests.TestViews.IC" />
+            """ % path
+            ))
+
+        # Need to "log someone in" to turn on checks
+        from Zope.Security.SecurityManagement import newSecurityManager
+        newSecurityManager('someuser')
+        
+        v = getView(ob, 'xxx.html', request)
+        self.assertRaises(Exception, v)
+
+        v = getView(ob, 'index.html', request)
+        self.assertEqual(v().strip(), '<html><body><p>test</p></body></html>')
+        
+
+    def testtemplateNoName(self):
+        path = os.path.join(os.path.split(defs_path)[0], 'tests', 'test.pt')
+        self.assertRaises(
+            ConfigurationError,
+            xmlconfig,
+            StringIO(template %
+            """
+            <browser:view
+                  template="%s"
+                  for="Zope.ComponentArchitecture.tests.TestViews.IC" 
+                  /> 
+            """ % path
+            ))
+
+    def testtemplateAndFactory(self):
+        path = os.path.join(os.path.split(defs_path)[0], 'tests', 'test.pt')
+        self.assertRaises(
+            ConfigurationError,
+            xmlconfig,
+            StringIO(template %
+            """
+            <browser:view
+                  name="index.html"
+                  template="%s"
+                  for="Zope.ComponentArchitecture.tests.TestViews.IC" 
+                  factory="Zope.ComponentArchitecture.tests.TestViews.V1">
+                  /> 
+            """ % path
+            ))
+
+    def testtemplateAndPage(self):
+        path = os.path.join(os.path.split(defs_path)[0], 'tests', 'test.pt')
+        self.assertRaises(
+            ConfigurationError,
+            xmlconfig,
+            StringIO(template %
+            """
+            <browser:view
+                  name="index.html"
+                  template="%s"
+                  for="Zope.ComponentArchitecture.tests.TestViews.IC" 
+                  >
+               <browser:page name="foo.html" attribute="index" />
+            </browser:view>
+            """ % path
+            ))
+
+
+    
+def test_suite():
+    loader=unittest.TestLoader()
+    return loader.loadTestsFromTestCase(Test)
+
+if __name__=='__main__':
+    unittest.TextTestRunner().run(test_suite())