# -*- coding: utf-8 -*-
import webob
import webob.exc
import webapp2
import test_base
class TestMiscellaneous(test_base.BaseTestCase):
def test_abort(self):
self.assertRaises(webob.exc.HTTPOk, webapp2.abort, 200)
self.assertRaises(webob.exc.HTTPCreated, webapp2.abort, 201)
self.assertRaises(webob.exc.HTTPAccepted, webapp2.abort, 202)
self.assertRaises(webob.exc.HTTPNonAuthoritativeInformation, webapp2.abort, 203)
self.assertRaises(webob.exc.HTTPNoContent, webapp2.abort, 204)
self.assertRaises(webob.exc.HTTPResetContent, webapp2.abort, 205)
self.assertRaises(webob.exc.HTTPPartialContent, webapp2.abort, 206)
self.assertRaises(webob.exc.HTTPMultipleChoices, webapp2.abort, 300)
self.assertRaises(webob.exc.HTTPMovedPermanently, webapp2.abort, 301)
self.assertRaises(webob.exc.HTTPFound, webapp2.abort, 302)
self.assertRaises(webob.exc.HTTPSeeOther, webapp2.abort, 303)
self.assertRaises(webob.exc.HTTPNotModified, webapp2.abort, 304)
self.assertRaises(webob.exc.HTTPUseProxy, webapp2.abort, 305)
self.assertRaises(webob.exc.HTTPTemporaryRedirect, webapp2.abort, 307)
self.assertRaises(webob.exc.HTTPClientError, webapp2.abort, 400)
self.assertRaises(webob.exc.HTTPUnauthorized, webapp2.abort, 401)
self.assertRaises(webob.exc.HTTPPaymentRequired, webapp2.abort, 402)
self.assertRaises(webob.exc.HTTPForbidden, webapp2.abort, 403)
self.assertRaises(webob.exc.HTTPNotFound, webapp2.abort, 404)
self.assertRaises(webob.exc.HTTPMethodNotAllowed, webapp2.abort, 405)
self.assertRaises(webob.exc.HTTPNotAcceptable, webapp2.abort, 406)
self.assertRaises(webob.exc.HTTPProxyAuthenticationRequired, webapp2.abort, 407)
self.assertRaises(webob.exc.HTTPRequestTimeout, webapp2.abort, 408)
self.assertRaises(webob.exc.HTTPConflict, webapp2.abort, 409)
self.assertRaises(webob.exc.HTTPGone, webapp2.abort, 410)
self.assertRaises(webob.exc.HTTPLengthRequired, webapp2.abort, 411)
self.assertRaises(webob.exc.HTTPPreconditionFailed, webapp2.abort, 412)
self.assertRaises(webob.exc.HTTPRequestEntityTooLarge, webapp2.abort, 413)
self.assertRaises(webob.exc.HTTPRequestURITooLong, webapp2.abort, 414)
self.assertRaises(webob.exc.HTTPUnsupportedMediaType, webapp2.abort, 415)
self.assertRaises(webob.exc.HTTPRequestRangeNotSatisfiable, webapp2.abort, 416)
self.assertRaises(webob.exc.HTTPExpectationFailed, webapp2.abort, 417)
self.assertRaises(webob.exc.HTTPInternalServerError, webapp2.abort, 500)
self.assertRaises(webob.exc.HTTPNotImplemented, webapp2.abort, 501)
self.assertRaises(webob.exc.HTTPBadGateway, webapp2.abort, 502)
self.assertRaises(webob.exc.HTTPServiceUnavailable, webapp2.abort, 503)
self.assertRaises(webob.exc.HTTPGatewayTimeout, webapp2.abort, 504)
self.assertRaises(webob.exc.HTTPVersionNotSupported, webapp2.abort, 505)
# Invalid use 500 as default.
self.assertRaises(KeyError, webapp2.abort, 0)
self.assertRaises(KeyError, webapp2.abort, 999999)
self.assertRaises(KeyError, webapp2.abort, 'foo')
def test_import_string(self):
self.assertEqual(webapp2.import_string('webob.exc'), webob.exc)
self.assertEqual(webapp2.import_string('webob'), webob)
self.assertEqual(webapp2.import_string('asdfg', silent=True), None)
self.assertEqual(webapp2.import_string('webob.asdfg', silent=True), None)
self.assertRaises(webapp2.ImportStringError, webapp2.import_string, 'asdfg')
self.assertRaises(webapp2.ImportStringError, webapp2.import_string, 'webob.asdfg')
def test_to_utf8(self):
res = webapp2._to_utf8('ábcdéf'.decode('utf-8'))
self.assertEqual(isinstance(res, str), True)
res = webapp2._to_utf8('abcdef')
self.assertEqual(isinstance(res, str), True)
'''
# removed to simplify the codebase.
def test_to_unicode(self):
res = webapp2.to_unicode(unicode('foo'))
self.assertEqual(isinstance(res, unicode), True)
res = webapp2.to_unicode('foo')
self.assertEqual(isinstance(res, unicode), True)
'''
def test_http_status_message(self):
self.assertEqual(webapp2.Response.http_status_message(404), 'Not Found')
self.assertEqual(webapp2.Response.http_status_message(500), 'Internal Server Error')
self.assertRaises(KeyError, webapp2.Response.http_status_message, 9999)
def test_cached_property(self):
count = [0]
class Foo(object):
@webapp2.cached_property
def bar(self):
count[0] += 1
return count[0]
self.assertTrue(isinstance(Foo.bar, webapp2.cached_property))
foo = Foo()
self.assertEqual(foo.bar, 1)
self.assertEqual(foo.bar, 1)
self.assertEqual(foo.bar, 1)
def test_redirect(self):
app = webapp2.WSGIApplication()
req = webapp2.Request.blank('/')
req.app = app
app.set_globals(app=app, request=req)
rsp = webapp2.redirect('http://www.google.com/', code=301, body='Weee')
self.assertEqual(rsp.status_int, 301)
self.assertEqual(rsp.body, 'Weee')
self.assertEqual(rsp.headers.get('Location'), 'http://www.google.com/')
def test_redirect_to(self):
app = webapp2.WSGIApplication([
webapp2.Route('/home', handler='', name='home'),
])
req = webapp2.Request.blank('/')
req.app = app
app.set_globals(app=app, request=req)
rsp = webapp2.redirect_to('home', _code=301, _body='Weee')
self.assertEqual(rsp.status_int, 301)
self.assertEqual(rsp.body, 'Weee')
self.assertEqual(rsp.headers.get('Location'), 'http://localhost/home')
if __name__ == '__main__':
test_base.main()