1############################################################################## 2# 3# Copyright (c) 2001, 2002 Zope Foundation and Contributors. 4# All Rights Reserved. 5# 6# This software is subject to the provisions of the Zope Public License, 7# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. 8# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED 9# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 10# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS 11# FOR A PARTICULAR PURPOSE. 12# 13############################################################################## 14"""baserequest tests 15""" 16from unittest import TestCase, main, makeSuite 17 18from zope.publisher.tests.basetestipublicationrequest \ 19 import BaseTestIPublicationRequest 20 21from zope.publisher.tests.basetestipublisherrequest \ 22 import BaseTestIPublisherRequest 23 24from zope.publisher.tests.basetestiapplicationrequest \ 25 import BaseTestIApplicationRequest 26 27from StringIO import StringIO 28from zope.interface import Interface, providedBy, alsoProvides 29from zope.component import provideAdapter 30 31class TestBaseRequest(BaseTestIPublicationRequest, 32 BaseTestIApplicationRequest, 33 BaseTestIPublisherRequest, 34 TestCase): 35 36 def _Test__new(self, **kw): 37 from zope.publisher.base import BaseRequest 38 return BaseRequest(StringIO(''), kw) 39 40 def _Test__expectedViewType(self): 41 return None # we don't expect 42 43 def test_IApplicationRequest_bodyStream(self): 44 from zope.publisher.base import BaseRequest 45 46 request = BaseRequest(StringIO('spam'), {}) 47 self.assertEqual(request.bodyStream.read(), 'spam') 48 49 def test_IPublicationRequest_getPositionalArguments(self): 50 self.assertEqual(self._Test__new().getPositionalArguments(), ()) 51 52 def test_IPublisherRequest_retry(self): 53 self.assertEqual(self._Test__new().supportsRetry(), 0) 54 55 def test_IPublisherRequest_traverse(self): 56 from zope.publisher.tests.publication import TestPublication 57 request = self._Test__new() 58 request.setPublication(TestPublication()) 59 app = request.publication.getApplication(request) 60 61 request.setTraversalStack([]) 62 self.assertEqual(request.traverse(app).name, '') 63 self.assertEqual(request._last_obj_traversed, app) 64 request.setTraversalStack(['ZopeCorp']) 65 self.assertEqual(request.traverse(app).name, 'ZopeCorp') 66 self.assertEqual(request._last_obj_traversed, app.ZopeCorp) 67 request.setTraversalStack(['Engineering', 'ZopeCorp']) 68 self.assertEqual(request.traverse(app).name, 'Engineering') 69 self.assertEqual(request._last_obj_traversed, app.ZopeCorp.Engineering) 70 71 def test_IPublisherRequest_processInputs(self): 72 self._Test__new().processInputs() 73 74 def test_AnnotationsExist(self): 75 self.assertEqual(self._Test__new().annotations, {}) 76 77 # Needed by BaseTestIEnumerableMapping tests: 78 def _IEnumerableMapping__stateDict(self): 79 return {'id': 'ZopeOrg', 'title': 'Zope Community Web Site', 80 'greet': 'Welcome to the Zope Community Web site'} 81 82 def _IEnumerableMapping__sample(self): 83 return self._Test__new(**(self._IEnumerableMapping__stateDict())) 84 85 def _IEnumerableMapping__absentKeys(self): 86 return 'foo', 'bar' 87 88 def test_SetRequestInResponse(self): 89 request = self._Test__new() 90 self.assertEqual(request.response._request, request) 91 92 def test_retry_keeps_everything(self): 93 """lowlevel test for retry (see #98440)""" 94 from zope.publisher.browser import TestRequest 95 from zope.publisher.skinnable import setDefaultSkin 96 from zope.publisher.interfaces import IDefaultSkin 97 from zope.publisher.interfaces.browser import IBrowserRequest 98 from zope.publisher.interfaces.browser import IBrowserSkinType 99 # create a retryable request 100 request = TestRequest() 101 self.assertTrue(request.supportsRetry()) 102 # create a skin and register it as the default skin 103 class ISomeSkin(Interface): 104 pass 105 alsoProvides(ISomeSkin, IBrowserSkinType) 106 provideAdapter(ISomeSkin, (IBrowserRequest,), IDefaultSkin) 107 # set the default skin for the request 108 setDefaultSkin(request) 109 110 # create a retried request 111 retried = request.retry() 112 113 # the requests are not the same 114 self.assertTrue(request is not retried) 115 # the requests both provide the default skin 116 self.assertTrue(ISomeSkin.providedBy(request)) 117 self.assertTrue(ISomeSkin.providedBy(retried)) 118 119 120def test_suite(): 121 return makeSuite(TestBaseRequest) 122 123if __name__=='__main__': 124 main(defaultTest='test_suite') 125