[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