[Checkins] SVN: Sandbox/nadako/zope.browserresource/src/zope/browserresource/ Remake tests for Resources class as a doctest.

Dan Korostelev nadako at gmail.com
Sun Aug 23 05:04:46 EDT 2009


Log message for revision 103101:
  Remake tests for Resources class as a doctest.

Changed:
  U   Sandbox/nadako/zope.browserresource/src/zope/browserresource/resources.py
  U   Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_resources.py

-=-
Modified: Sandbox/nadako/zope.browserresource/src/zope/browserresource/resources.py
===================================================================
--- Sandbox/nadako/zope.browserresource/src/zope/browserresource/resources.py	2009-08-23 08:33:18 UTC (rev 103100)
+++ Sandbox/nadako/zope.browserresource/src/zope/browserresource/resources.py	2009-08-23 09:04:45 UTC (rev 103101)
@@ -23,14 +23,80 @@
 from zope.publisher.interfaces.browser import IBrowserPublisher
 
 class Resources(BrowserView):
-    """Provide a URL-accessible resource namespace
+    """A view that can be traversed further to access browser resources
+    
+    This view is usually registered for zope.location.interfaces.ISite objects
+    with no name, so resources will be available at <site>/@@/<resource>.
+
+    Let's test how it's traversed to get registered resources. Let's create
+    a sample resource class and register it.
+
+      >>> from zope.component import provideAdapter
+      >>> from zope.interface import Interface
+      >>> from zope.publisher.interfaces import NotFound
+      >>> from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+      >>> from zope.publisher.browser import TestRequest
+
+      >>> class Resource(object):
+      ...     def __init__(self,request):
+      ...         self.request = request
+      ...     def __call__(self):
+      ...         return 'http://localhost/testresource'
+   
+      >>> provideAdapter(Resource, (IDefaultBrowserLayer,), Interface, 'test')
+    
+    Now, create a site and request objects and get the Resources object to
+    work with.
+     
+      >>> site = object()
+      >>> request = TestRequest()
+      >>> resources = Resources(site, request)
+
+    Okay, let's test the publishTraverse method. It should traverse to our
+    registered resource.
+
+      >>> resource = resources.publishTraverse(request, 'test')
+      >>> resource.__parent__ is site
+      True
+      >>> resource.__name__ == 'test'
+      True
+      >>> resource()
+      'http://localhost/testresource'
+
+    However, it will raise NotFound exception if we try to traverse to an
+    unregistered resource.
+
+      >>> resources.publishTraverse(request, 'does-not-exist')
+      Traceback (most recent call last):
+      ...
+      NotFound: Object: <zope.browserresource.resources.Resources object at 0x...>,
+                name: 'does-not-exist'
+      
+    When accessed without further traversing, it returns an empty page and no
+    futher traversing steps.
+    
+      >>> view, path = resources.browserDefault(request)
+      >>> view() == ''
+      True
+      >>> path == ()
+      True
+
+    The Resources view also provides __getitem__ method for use in templates.
+    
+      >>> resource = resources['test']
+      >>> resource.__parent__ is site
+      True
+      >>> resource.__name__ == 'test'
+      True
+      >>> resource()
+      'http://localhost/testresource'
+    
     """
 
     implements(IBrowserPublisher)
 
     def publishTraverse(self, request, name):
-        '''See interface IBrowserPublisher'''
-
+        '''See zope.publisher.interfaces.browser.IBrowserPublisher interface'''
         resource = queryAdapter(request, name=name)
         if resource is None:
             raise NotFound(self, name)
@@ -39,10 +105,13 @@
         return resource
 
     def browserDefault(self, request):
-        '''See IBrowserPublisher'''
+        '''See zope.publisher.interfaces.browser.IBrowserPublisher interface'''
         return empty, ()
 
     def __getitem__(self, name):
+        '''A helper method to make this view usable from templates,
+        so resources can be acessed in template like context/@@/<resourcename>.
+        '''
         return self.publishTraverse(self.request, name)
 
 

Modified: Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_resources.py
===================================================================
--- Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_resources.py	2009-08-23 08:33:18 UTC (rev 103100)
+++ Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_resources.py	2009-08-23 09:04:45 UTC (rev 103101)
@@ -15,72 +15,19 @@
 
 $Id: test_resources.py 67630 2006-04-27 00:54:03Z jim $
 """
-from unittest import TestCase, main, makeSuite
+import unittest
+from zope.testing import cleanup, doctest
 
-from zope.i18n.interfaces import IUserPreferredCharsets
-from zope.publisher.http import IHTTPRequest
-from zope.publisher.http import HTTPCharsets
-from zope.publisher.browser import TestRequest
-from zope.publisher.interfaces.browser import IBrowserView, IDefaultBrowserLayer
+def setUp(test):
+    cleanup.setUp()
 
-from zope.component import provideAdapter
-from zope.interface import Interface
-from zope.testing.cleanup import CleanUp
+def tearDown(test):
+    cleanup.tearDown()
 
-class Test(CleanUp, TestCase):
-
-    def setUp(self):
-        super(Test, self).setUp()
-        provideAdapter(HTTPCharsets, (IHTTPRequest,), IUserPreferredCharsets)
-
-    def test_publishTraverse(self):
-        from zope.browserresource.resources import Resources
-        request = TestRequest()
-
-        class Resource(object):
-            def __init__(self, request): pass
-            def __call__(self): return 42
-
-        site = object()
-        provideAdapter(Resource, (IDefaultBrowserLayer,), Interface, 'test')
-        view = Resources(site, request)
-        resource = view.publishTraverse(request, 'test')
-        self.assertTrue(resource.__parent__ is site)
-        self.assertEqual(resource.__name__, 'test') 
-        self.assertEqual(resource(), 42)
-
-    def test_browserDefault(self):
-        from zope.browserresource.resources import Resources
-        request = TestRequest()
-        site = object()
-        view = Resources(site, request)
-        empty, path = view.browserDefault(request)
-        self.assertEqual(empty(), '')
-        self.assertEqual(path, ())
-
-    def test_getitem(self):
-        from zope.browserresource.resources import Resources
-        request = TestRequest()
-
-        class Resource(object):
-            def __init__(self, request): pass
-            def __call__(self): return 42
-
-        provideAdapter(Resource, (IDefaultBrowserLayer,), Interface, 'test')
-        view = Resources(None, request)
-        resource = view['test']
-        self.assertEqual(resource(), 42)
-
-    def testNotFound(self):
-        from zope.browserresource.resources import Resources
-        from zope.publisher.interfaces import NotFound
-        request = TestRequest()
-        view = Resources(None, request)
-        self.assertRaises(NotFound,
-                          view.publishTraverse,
-                          request, 'test'
-                          )
-
-
 def test_suite():
-    return makeSuite(Test)
+    return unittest.TestSuite((
+        doctest.DocTestSuite(
+            'zope.browserresource.resources',
+            setUp=setUp, tearDown=tearDown,
+            optionflags=doctest.ELLIPSIS | doctest.NORMALIZE_WHITESPACE),
+        ))



More information about the Checkins mailing list