[Checkins] SVN: Sandbox/nadako/zope.browserresource/src/zope/browserresource/ Move file resource tests to doctest.
Dan Korostelev
nadako at gmail.com
Mon Aug 24 07:00:40 EDT 2009
Log message for revision 103135:
Move file resource tests to doctest.
Changed:
U Sandbox/nadako/zope.browserresource/src/zope/browserresource/file.py
U Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_file.py
-=-
Modified: Sandbox/nadako/zope.browserresource/src/zope/browserresource/file.py
===================================================================
--- Sandbox/nadako/zope.browserresource/src/zope/browserresource/file.py 2009-08-24 10:41:05 UTC (rev 103134)
+++ Sandbox/nadako/zope.browserresource/src/zope/browserresource/file.py 2009-08-24 11:00:40 UTC (rev 103135)
@@ -57,20 +57,66 @@
cacheTimeout = 86400
def publishTraverse(self, request, name):
- '''See interface IBrowserPublisher'''
+ '''File resources can't be traversed further, so raise NotFound if
+ someone tries to traverse it.
+
+ >>> factory = FileResourceFactory(testFilePath, nullChecker, 'test.txt')
+ >>> request = TestRequest()
+ >>> resource = factory(request)
+ >>> resource.publishTraverse(request, '_testData')
+ Traceback (most recent call last):
+ ...
+ NotFound: Object: None, name: '_testData'
+
+ '''
raise NotFound(None, name)
def browserDefault(self, request):
- '''See interface IBrowserPublisher'''
+ '''Return a callable for processing browser requests.
+
+ >>> factory = FileResourceFactory(testFilePath, nullChecker, 'test.txt')
+ >>> request = TestRequest(REQUEST_METHOD='GET')
+ >>> resource = factory(request)
+ >>> view, next = resource.browserDefault(request)
+ >>> view() == open(testFilePath, 'rb').read()
+ True
+ >>> next == ()
+ True
+
+ >>> request = TestRequest(REQUEST_METHOD='HEAD')
+ >>> resource = factory(request)
+ >>> view, next = resource.browserDefault(request)
+ >>> view() == ''
+ True
+ >>> next == ()
+ True
+
+ '''
return getattr(self, request.method), ()
def chooseContext(self):
- """Choose the appropriate context"""
+ '''Choose the appropriate context.
+
+ This method can be overriden in subclasses, that need to choose
+ appropriate file, based on current request or other condition,
+ like, for example, i18n files.
+
+ '''
return self.context
def GET(self):
- """Default document"""
+ '''Return a file data for downloading with GET requests
+
+ >>> factory = FileResourceFactory(testFilePath, nullChecker, 'test.txt')
+ >>> request = TestRequest()
+ >>> resource = factory(request)
+ >>> resource.GET() == open(testFilePath, 'rb').read()
+ True
+ >>> request.response.getHeader('Content-Type') == 'text/plain'
+ True
+ '''
+
file = self.chooseContext()
request = self.request
response = request.response
@@ -112,6 +158,17 @@
return data
def HEAD(self):
+ '''Return proper headers and no content for HEAD requests
+
+ >>> factory = FileResourceFactory(testFilePath, nullChecker, 'test.txt')
+ >>> request = TestRequest()
+ >>> resource = factory(request)
+ >>> resource.HEAD() == ''
+ True
+ >>> request.response.getHeader('Content-Type') == 'text/plain'
+ True
+
+ '''
file = self.chooseContext()
response = self.request.response
response.setHeader('Content-Type', file.content_type)
Modified: Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_file.py
===================================================================
--- Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_file.py 2009-08-24 10:41:05 UTC (rev 103134)
+++ Sandbox/nadako/zope.browserresource/src/zope/browserresource/tests/test_file.py 2009-08-24 11:00:40 UTC (rev 103135)
@@ -16,83 +16,29 @@
$Id$
"""
import os
-from unittest import TestCase, main, makeSuite
+import unittest
+from zope.testing import cleanup, doctest
-from zope.publisher.interfaces import NotFound
-from zope.i18n.interfaces import IUserPreferredCharsets
-from zope.security.proxy import removeSecurityProxy
+from zope.publisher.browser import TestRequest
from zope.security.checker import NamesChecker
-from zope.testing import cleanup
-from zope.component import provideAdapter
-from zope.publisher.http import IHTTPRequest
-from zope.publisher.http import HTTPCharsets
-from zope.publisher.browser import TestRequest
+def setUp(test):
+ cleanup.setUp()
+ data_dir = os.path.join(os.path.dirname(__file__), 'testfiles')
-from zope.browserresource.file import FileResourceFactory
-import zope.browserresource.tests as p
+ test.globs['testFilePath'] = os.path.join(data_dir, 'test.txt')
+ test.globs['nullChecker'] = NamesChecker()
+ test.globs['TestRequest'] = TestRequest
-checker = NamesChecker(
- ('__call__', 'HEAD', 'request', 'publishTraverse', 'GET')
- )
-test_directory = os.path.dirname(p.__file__)
+def tearDown(test):
+ cleanup.tearDown()
-class Test(cleanup.CleanUp, TestCase):
-
- def setUp(self):
- super(Test, self).setUp()
- provideAdapter(HTTPCharsets, (IHTTPRequest,), IUserPreferredCharsets)
-
- def testNoTraversal(self):
-
- path = os.path.join(test_directory, 'testfiles', 'test.txt')
- factory = FileResourceFactory(path, checker, 'test.txt')
- resource = factory(TestRequest())
- self.assertRaises(NotFound,
- resource.publishTraverse,
- resource.request,
- '_testData')
-
- def testFileGET(self):
-
- path = os.path.join(test_directory, 'testfiles', 'test.txt')
-
- factory = FileResourceFactory(path, checker, 'test.txt')
- resource = factory(TestRequest())
- self.assertEqual(resource.GET(), open(path, 'rb').read())
-
- response = removeSecurityProxy(resource.request).response
- self.assertEqual(response.getHeader('Content-Type'), 'text/plain')
-
- def testFileHEAD(self):
-
- path = os.path.join(test_directory, 'testfiles', 'test.txt')
- factory = FileResourceFactory(path, checker, 'test.txt')
- resource = factory(TestRequest())
-
- self.assertEqual(resource.HEAD(), '')
-
- response = removeSecurityProxy(resource.request).response
- self.assertEqual(response.getHeader('Content-Type'), 'text/plain')
-
- def testBrowserDefault(self):
- path = os.path.join(test_directory, 'testfiles', 'test.txt')
- factory = FileResourceFactory(path, checker, 'test.txt')
-
- request = TestRequest(REQUEST_METHOD='GET')
- resource = factory(request)
- view, next = resource.browserDefault(request)
- self.assertEqual(view(), open(path, 'rb').read())
- self.assertEqual(next, ())
-
- request = TestRequest(REQUEST_METHOD='HEAD')
- resource = factory(request)
- view, next = resource.browserDefault(request)
- self.assertEqual(view(), '')
- self.assertEqual(next, ())
-
-
def test_suite():
- return makeSuite(Test)
+ return unittest.TestSuite((
+ doctest.DocTestSuite(
+ 'zope.browserresource.file',
+ setUp=setUp, tearDown=tearDown,
+ optionflags=doctest.ELLIPSIS | doctest.NORMALIZE_WHITESPACE),
+ ))
More information about the Checkins
mailing list