[Zope-Checkins] SVN: Zope/branches/tseaver-fix_wsgi/src/ZPublisher/ Coverage for __init__, retry.
Tres Seaver
tseaver at palladion.com
Mon Dec 21 15:38:21 EST 2009
Log message for revision 106833:
Coverage for __init__, retry.
Changed:
U Zope/branches/tseaver-fix_wsgi/src/ZPublisher/HTTPResponse.py
U Zope/branches/tseaver-fix_wsgi/src/ZPublisher/tests/testHTTPResponse.py
-=-
Modified: Zope/branches/tseaver-fix_wsgi/src/ZPublisher/HTTPResponse.py
===================================================================
--- Zope/branches/tseaver-fix_wsgi/src/ZPublisher/HTTPResponse.py 2009-12-21 20:37:38 UTC (rev 106832)
+++ Zope/branches/tseaver-fix_wsgi/src/ZPublisher/HTTPResponse.py 2009-12-21 20:38:20 UTC (rev 106833)
@@ -152,6 +152,7 @@
""" #'
body = ''
+ base = ''
realm = 'Zope'
_error_format = 'text/html'
_locked_status = 0
@@ -163,9 +164,14 @@
# 2 - ignore accept-encoding (i.e. force)
use_HTTP_content_compression = 0
- def __init__(self, body='', status=200, headers=None,
- stdout=sys.stdout, stderr=sys.stderr,):
- """ Creates a new response using the given values.
+ def __init__(self,
+ body='',
+ status=200,
+ headers=None,
+ stdout=sys.stdout,
+ stderr=sys.stderr,
+ ):
+ """ Create a new response using the given values.
"""
if headers is None:
headers = {}
@@ -178,9 +184,10 @@
headers['status'] = "200 OK"
else:
self.setStatus(status)
- self.base = ''
+
if body:
self.setBody(body)
+
self.cookies = {}
self.stdout = stdout
self.stderr = stderr
@@ -481,20 +488,23 @@
return body
else:
if ct.startswith('text/') or ct.startswith('application/'):
- self.headers['content-type'] = '%s; charset=%s' % (ct, default_encoding)
+ self.headers['content-type'] = '%s; charset=%s' % (ct,
+ default_encoding)
# Use the default character encoding
body = body.encode(default_encoding, 'replace')
body = fix_xml_preamble(body, default_encoding)
return body
- def setBase(self,base):
+ def setBase(self, base):
"""Set the base URL for the returned document.
- If base is None, or the document already has a base, do nothing."""
+
+ If base is None, or the document already has a base, do nothing.
+ """
if base is None:
base = ''
elif not base.endswith('/'):
- base = base+'/'
+ base = base + '/'
self.base = str(base)
def insertBase(self,
Modified: Zope/branches/tseaver-fix_wsgi/src/ZPublisher/tests/testHTTPResponse.py
===================================================================
--- Zope/branches/tseaver-fix_wsgi/src/ZPublisher/tests/testHTTPResponse.py 2009-12-21 20:37:38 UTC (rev 106832)
+++ Zope/branches/tseaver-fix_wsgi/src/ZPublisher/tests/testHTTPResponse.py 2009-12-21 20:38:20 UTC (rev 106833)
@@ -13,23 +13,151 @@
return self._getTargetClass()(*args, **kw)
- def test_setStatus_with_exceptions(self):
+ def test_ctor_defaults(self):
+ import sys
+ response = self._makeOne()
+ self.assertEqual(response.headers, {'status': '200 OK'}) # XXX WTF?
+ self.assertEqual(response.accumulated_headers, [])
+ self.assertEqual(response.status, 200)
+ self.assertEqual(response.errmsg, 'OK')
+ self.assertEqual(response.base, '')
+ self.assertEqual(response.body, '')
+ self.assertEqual(response.cookies, {})
+ self.failUnless(response.stdout is sys.stdout)
+ self.failUnless(response.stderr is sys.stderr)
+ def test_ctor_w_body(self):
+ response = self._makeOne(body='ABC')
+ self.assertEqual(response.body, 'ABC')
+
+ def test_ctor_w_headers(self):
+ response = self._makeOne(headers={'foo': 'bar'})
+ self.assertEqual(response.headers, {'foo': 'bar',
+ 'status': '200 OK', # XXX WTF
+ })
+
+ def test_ctor_w_status_code(self):
+ response = self._makeOne(status=401)
+ self.assertEqual(response.status, 401)
+ self.assertEqual(response.errmsg, 'Unauthorized')
+ self.assertEqual(response.headers,
+ {'status': '401 Unauthorized'}) # XXX WTF?
+
+ def test_ctor_w_status_errmsg(self):
+ response = self._makeOne(status='Unauthorized')
+ self.assertEqual(response.status, 401)
+ self.assertEqual(response.errmsg, 'Unauthorized')
+ self.assertEqual(response.headers,
+ {'status': '401 Unauthorized'}) # XXX WTF?
+
+ def test_ctor_w_status_exception(self):
from zExceptions import Unauthorized
+ response = self._makeOne(status=Unauthorized)
+ self.assertEqual(response.status, 401)
+ self.assertEqual(response.errmsg, 'Unauthorized')
+ self.assertEqual(response.headers,
+ {'status': '401 Unauthorized'}) # XXX WTF?
+
+ def test_retry(self):
+ STDOUT, STDERR = object(), object()
+ response = self._makeOne(stdout=STDOUT, stderr=STDERR)
+ cloned = response.retry()
+ self.failUnless(isinstance(cloned, self._getTargetClass()))
+ self.failUnless(cloned.stdout is STDOUT)
+ self.failUnless(cloned.stderr is STDERR)
+
+ def test_ctor_charset_no_content_type_header(self):
+ response = self._makeOne(body='foo')
+ self.assertEqual(response.headers.get('content-type'),
+ 'text/plain; charset=iso-8859-15')
+
+ def test_ctor_charset_text_header_no_charset_defaults_latin1(self):
+ response = self._makeOne(body='foo',
+ headers={'content-type': 'text/plain'})
+ self.assertEqual(response.headers.get('content-type'),
+ 'text/plain; charset=iso-8859-15')
+
+ def test_ctor_charset_application_header_no_header(self):
+ response = self._makeOne(body='foo',
+ headers={'content-type': 'application/foo'})
+ self.assertEqual(response.headers.get('content-type'),
+ 'application/foo')
+
+ def test_ctor_charset_application_header_with_header(self):
+ response = self._makeOne(body='foo',
+ headers={'content-type':
+ 'application/foo; charset: something'})
+ self.assertEqual(response.headers.get('content-type'),
+ 'application/foo; charset: something')
+
+ def test_ctor_charset_unicode_body_application_header(self):
+ BODY = unicode('ärger', 'iso-8859-15')
+ response = self._makeOne(body=BODY,
+ headers={'content-type': 'application/foo'})
+ self.assertEqual(response.headers.get('content-type'),
+ 'application/foo; charset=iso-8859-15')
+ self.assertEqual(response.body, 'ärger')
+
+ def test_ctor_charset_unicode_body_application_header_diff_encoding(self):
+ BODY = unicode('ärger', 'iso-8859-15')
+ response = self._makeOne(body=BODY,
+ headers={'content-type':
+ 'application/foo; charset=utf-8'})
+ self.assertEqual(response.headers.get('content-type'),
+ 'application/foo; charset=utf-8')
+ # Body is re-encoded to match the header
+ self.assertEqual(response.body, BODY.encode('utf-8'))
+
+ def test_ctor_body_recodes_to_match_content_type_charset(self):
+ xml = (u'<?xml version="1.0" encoding="iso-8859-15" ?>\n'
+ '<foo><bar/></foo>')
+ response = self._makeOne(body=xml, headers={'content-type':
+ 'text/xml; charset=utf-8'})
+ self.assertEqual(response.body, xml.replace('iso-8859-15', 'utf-8'))
+
+ def test_ctor_body_already_matches_charset_unchanged(self):
+ xml = (u'<?xml version="1.0" encoding="iso-8859-15" ?>\n'
+ '<foo><bar/></foo>')
+ response = self._makeOne(body=xml, headers={'content-type':
+ 'text/xml; charset=iso-8859-15'})
+ self.assertEqual(response.body, xml)
+
+ def test_setStatus_BadRequest(self):
+ from zExceptions import BadRequest
+ response = self._makeOne()
+ response.setStatus(BadRequest)
+ self.assertEqual(response.status, 400)
+
+ def test_setStatus_Unauthorized(self):
+ from zExceptions import Unauthorized
+ response = self._makeOne()
+ response.setStatus(Unauthorized)
+ self.assertEqual(response.status, 401)
+
+ def test_setStatus_Forbidden(self):
from zExceptions import Forbidden
+ response = self._makeOne()
+ response.setStatus(Forbidden)
+ self.assertEqual(response.status, 403)
+
+ def test_setStatus_NotFound(self):
from zExceptions import NotFound
- from zExceptions import BadRequest
+ response = self._makeOne()
+ response.setStatus(NotFound)
+ self.assertEqual(response.status, 404)
+
+ def test_setStatus_ResourceLockedError(self):
+ response = self._makeOne()
+ from webdav.Lockable import ResourceLockedError
+ response.setStatus(ResourceLockedError)
+ self.assertEqual(response.status, 423)
+
+ def test_setStatus_InternalError(self):
from zExceptions import InternalError
+ response = self._makeOne()
+ response.setStatus(InternalError)
+ self.assertEqual(response.status, 500)
- for exc_type, code in ((Unauthorized, 401),
- (Forbidden, 403),
- (NotFound, 404),
- (BadRequest, 400),
- (InternalError, 500)):
- response = self._makeOne()
- response.setStatus(exc_type)
- self.assertEqual(response.status, code)
-
def test_setCookie_no_attrs(self):
response = self._makeOne()
response.setCookie('foo', 'bar')
@@ -116,15 +244,6 @@
self.assertEqual(len(cookies), 1)
self.assertEqual(cookies[0], 'Set-Cookie: foo="bar"')
- def test_expireCookie(self):
- response = self._makeOne()
- response.expireCookie('foo', path='/')
- cookie = response.cookies.get('foo', None)
- self.failUnless(cookie)
- self.assertEqual(cookie.get('expires'), 'Wed, 31-Dec-97 23:59:59 GMT')
- self.assertEqual(cookie.get('max_age'), 0)
- self.assertEqual(cookie.get('path'), '/')
-
def test_setCookie_w_httponly_true_value(self):
response = self._makeOne()
response.setCookie('foo', 'bar', http_only=True)
@@ -149,6 +268,15 @@
self.assertEqual(len(cookie_list), 1)
self.assertEqual(cookie_list[0], 'Set-Cookie: foo="bar"')
+ def test_expireCookie(self):
+ response = self._makeOne()
+ response.expireCookie('foo', path='/')
+ cookie = response.cookies.get('foo', None)
+ self.failUnless(cookie)
+ self.assertEqual(cookie.get('expires'), 'Wed, 31-Dec-97 23:59:59 GMT')
+ self.assertEqual(cookie.get('max_age'), 0)
+ self.assertEqual(cookie.get('path'), '/')
+
def test_expireCookie1160(self):
# Verify that the cookie is expired even if an expires kw arg is passed
# http://zope.org/Collectors/Zope/1160
@@ -196,64 +324,6 @@
self.assertEqual(response.getHeader('SPAM', literal=True), 'eggs')
self.assertEqual(response.getHeader('spam'), None)
- def test_setStatus_ResourceLockedError(self):
- response = self._makeOne()
- from webdav.Lockable import ResourceLockedError
- response.setStatus(ResourceLockedError)
- self.assertEqual(response.status, 423)
-
- def test_ctor_charset_no_header(self):
- response = self._makeOne(body='foo')
- self.assertEqual(response.headers.get('content-type'),
- 'text/plain; charset=iso-8859-15')
-
- def test_ctor_charset_text_header(self):
- response = self._makeOne(body='foo',
- headers={'content-type': 'text/plain'})
- self.assertEqual(response.headers.get('content-type'),
- 'text/plain; charset=iso-8859-15')
-
- def test_ctor_charset_application_header_no_header(self):
- response = self._makeOne(body='foo',
- headers={'content-type': 'application/foo'})
- self.assertEqual(response.headers.get('content-type'),
- 'application/foo')
-
- def test_ctor_charset_application_header_with_header(self):
- response = self._makeOne(body='foo', headers={'content-type':
- 'application/foo; charset: something'})
- self.assertEqual(response.headers.get('content-type'),
- 'application/foo; charset: something')
-
- def test_ctor_charset_application_header_unicode(self):
- response = self._makeOne(body=unicode('ärger', 'iso-8859-15'),
- headers={'content-type': 'application/foo'})
- self.assertEqual(response.headers.get('content-type'),
- 'application/foo; charset=iso-8859-15')
- self.assertEqual(response.body, 'ärger')
-
- def test_ctor_charset_application_header_unicode_1(self):
- response = self._makeOne(body=unicode('ärger', 'iso-8859-15'),
- headers={'content-type': 'application/foo; charset=utf-8'})
- self.assertEqual(response.headers.get('content-type'),
- 'application/foo; charset=utf-8')
- self.assertEqual(response.body, unicode('ärger',
- 'iso-8859-15').encode('utf-8'))
-
- def test_ctor_body_recodes_to_match_content_type_charset(self):
- xml = (u'<?xml version="1.0" encoding="iso-8859-15" ?>\n'
- '<foo><bar/></foo>')
- response = self._makeOne(body=xml, headers={'content-type':
- 'text/xml; charset=utf-8'})
- self.assertEqual(response.body, xml.replace('iso-8859-15', 'utf-8'))
-
- def test_ctor_body_already_matches_charset_unchanged(self):
- xml = (u'<?xml version="1.0" encoding="iso-8859-15" ?>\n'
- '<foo><bar/></foo>')
- response = self._makeOne(body=xml, headers={'content-type':
- 'text/xml; charset=iso-8859-15'})
- self.assertEqual(response.body, xml)
-
def test_addHeader_drops_CRLF(self):
# RFC2616 disallows CRLF in a header value.
response = self._makeOne()
More information about the Zope-Checkins
mailing list