1
# Copyright (c) 2009 Twisted Matrix Laboratories.
2
# See LICENSE for details.
5
Tests for L{twisted.web.resource}.
8
from twisted.trial.unittest import TestCase
9
from twisted.web import error
10
from twisted.web.http import NOT_FOUND, FORBIDDEN
11
from twisted.web.resource import ErrorPage, NoResource, ForbiddenResource
12
from twisted.web.test.test_web import DummyRequest
15
class ErrorPageTests(TestCase):
17
Tests for L{ErrorPage}, L{NoResource}, and L{ForbiddenResource}.
21
noResource = NoResource
22
forbiddenResource = ForbiddenResource
24
def test_getChild(self):
26
The C{getChild} method of L{ErrorPage} returns the L{ErrorPage} it is
29
page = self.errorPage(321, "foo", "bar")
30
self.assertIdentical(page.getChild("name", object()), page)
33
def _pageRenderingTest(self, page, code, brief, detail):
34
request = DummyRequest([''])
39
" <head><title>%s - %s</title></head>\n"
44
"</html>\n" % (code, brief, brief, detail))
45
self.assertEqual(request.responseCode, code)
47
request.outgoingHeaders, {'content-type': 'text/html'})
50
def test_errorPageRendering(self):
52
L{ErrorPage.render} returns a C{str} describing the error defined by
53
the response code and message passed to L{ErrorPage.__init__}. It also
54
uses that response code to set the response code on the L{Request}
58
brief = "brief description text"
59
detail = "much longer text might go here"
60
page = self.errorPage(code, brief, detail)
61
self._pageRenderingTest(page, code, brief, detail)
64
def test_noResourceRendering(self):
66
L{NoResource} sets the HTTP I{NOT FOUND} code.
68
detail = "long message"
69
page = self.noResource(detail)
70
self._pageRenderingTest(page, NOT_FOUND, "No Such Resource", detail)
73
def test_forbiddenResourceRendering(self):
75
L{ForbiddenResource} sets the HTTP I{FORBIDDEN} code.
77
detail = "longer message"
78
page = self.forbiddenResource(detail)
79
self._pageRenderingTest(page, FORBIDDEN, "Forbidden Resource", detail)
83
class DeprecatedErrorPageTests(ErrorPageTests):
85
Tests for L{error.ErrorPage}, L{error.NoResource}, and
86
L{error.ForbiddenResource}.
88
def errorPage(self, *args):
89
return error.ErrorPage(*args)
92
def noResource(self, *args):
93
return error.NoResource(*args)
96
def forbiddenResource(self, *args):
97
return error.ForbiddenResource(*args)
100
def _assertWarning(self, name, offendingFunction):
101
warnings = self.flushWarnings([offendingFunction])
102
self.assertEqual(len(warnings), 1)
103
self.assertEqual(warnings[0]['category'], DeprecationWarning)
105
warnings[0]['message'],
106
'twisted.web.error.%s is deprecated since Twisted 9.0. '
107
'See twisted.web.resource.%s.' % (name, name))
110
def test_getChild(self):
112
Like L{ErrorPageTests.test_getChild}, but flush the deprecation warning
113
emitted by instantiating L{error.ErrorPage}.
115
ErrorPageTests.test_getChild(self)
116
self._assertWarning('ErrorPage', self.errorPage)
119
def test_errorPageRendering(self):
121
Like L{ErrorPageTests.test_errorPageRendering}, but flush the
122
deprecation warning emitted by instantiating L{error.ErrorPage}.
124
ErrorPageTests.test_errorPageRendering(self)
125
self._assertWarning('ErrorPage', self.errorPage)
128
def test_noResourceRendering(self):
130
Like L{ErrorPageTests.test_noResourceRendering}, but flush the
131
deprecation warning emitted by instantiating L{error.NoResource}.
133
ErrorPageTests.test_noResourceRendering(self)
134
self._assertWarning('NoResource', self.noResource)
137
def test_forbiddenResourceRendering(self):
139
Like L{ErrorPageTests.test_forbiddenResourceRendering}, but flush the
140
deprecation warning emitted by instantiating
141
L{error.ForbiddenResource}.
143
ErrorPageTests.test_forbiddenResourceRendering(self)
144
self._assertWarning('ForbiddenResource', self.forbiddenResource)