[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