Home | History | Annotate | Download | only in tests
      1 # -*- coding: utf-8 -*-
      2 import webob
      3 import webob.exc
      4 
      5 import webapp2
      6 
      7 import test_base
      8 
      9 
     10 class TestMiscellaneous(test_base.BaseTestCase):
     11 
     12     def test_abort(self):
     13         self.assertRaises(webob.exc.HTTPOk, webapp2.abort, 200)
     14         self.assertRaises(webob.exc.HTTPCreated, webapp2.abort, 201)
     15         self.assertRaises(webob.exc.HTTPAccepted, webapp2.abort, 202)
     16         self.assertRaises(webob.exc.HTTPNonAuthoritativeInformation, webapp2.abort, 203)
     17         self.assertRaises(webob.exc.HTTPNoContent, webapp2.abort, 204)
     18         self.assertRaises(webob.exc.HTTPResetContent, webapp2.abort, 205)
     19         self.assertRaises(webob.exc.HTTPPartialContent, webapp2.abort, 206)
     20         self.assertRaises(webob.exc.HTTPMultipleChoices, webapp2.abort, 300)
     21         self.assertRaises(webob.exc.HTTPMovedPermanently, webapp2.abort, 301)
     22         self.assertRaises(webob.exc.HTTPFound, webapp2.abort, 302)
     23         self.assertRaises(webob.exc.HTTPSeeOther, webapp2.abort, 303)
     24         self.assertRaises(webob.exc.HTTPNotModified, webapp2.abort, 304)
     25         self.assertRaises(webob.exc.HTTPUseProxy, webapp2.abort, 305)
     26         self.assertRaises(webob.exc.HTTPTemporaryRedirect, webapp2.abort, 307)
     27         self.assertRaises(webob.exc.HTTPClientError, webapp2.abort, 400)
     28         self.assertRaises(webob.exc.HTTPUnauthorized, webapp2.abort, 401)
     29         self.assertRaises(webob.exc.HTTPPaymentRequired, webapp2.abort, 402)
     30         self.assertRaises(webob.exc.HTTPForbidden, webapp2.abort, 403)
     31         self.assertRaises(webob.exc.HTTPNotFound, webapp2.abort, 404)
     32         self.assertRaises(webob.exc.HTTPMethodNotAllowed, webapp2.abort, 405)
     33         self.assertRaises(webob.exc.HTTPNotAcceptable, webapp2.abort, 406)
     34         self.assertRaises(webob.exc.HTTPProxyAuthenticationRequired, webapp2.abort, 407)
     35         self.assertRaises(webob.exc.HTTPRequestTimeout, webapp2.abort, 408)
     36         self.assertRaises(webob.exc.HTTPConflict, webapp2.abort, 409)
     37         self.assertRaises(webob.exc.HTTPGone, webapp2.abort, 410)
     38         self.assertRaises(webob.exc.HTTPLengthRequired, webapp2.abort, 411)
     39         self.assertRaises(webob.exc.HTTPPreconditionFailed, webapp2.abort, 412)
     40         self.assertRaises(webob.exc.HTTPRequestEntityTooLarge, webapp2.abort, 413)
     41         self.assertRaises(webob.exc.HTTPRequestURITooLong, webapp2.abort, 414)
     42         self.assertRaises(webob.exc.HTTPUnsupportedMediaType, webapp2.abort, 415)
     43         self.assertRaises(webob.exc.HTTPRequestRangeNotSatisfiable, webapp2.abort, 416)
     44         self.assertRaises(webob.exc.HTTPExpectationFailed, webapp2.abort, 417)
     45         self.assertRaises(webob.exc.HTTPInternalServerError, webapp2.abort, 500)
     46         self.assertRaises(webob.exc.HTTPNotImplemented, webapp2.abort, 501)
     47         self.assertRaises(webob.exc.HTTPBadGateway, webapp2.abort, 502)
     48         self.assertRaises(webob.exc.HTTPServiceUnavailable, webapp2.abort, 503)
     49         self.assertRaises(webob.exc.HTTPGatewayTimeout, webapp2.abort, 504)
     50         self.assertRaises(webob.exc.HTTPVersionNotSupported, webapp2.abort, 505)
     51 
     52         # Invalid use 500 as default.
     53         self.assertRaises(KeyError, webapp2.abort, 0)
     54         self.assertRaises(KeyError, webapp2.abort, 999999)
     55         self.assertRaises(KeyError, webapp2.abort, 'foo')
     56 
     57     def test_import_string(self):
     58         self.assertEqual(webapp2.import_string('webob.exc'), webob.exc)
     59         self.assertEqual(webapp2.import_string('webob'), webob)
     60 
     61         self.assertEqual(webapp2.import_string('asdfg', silent=True), None)
     62         self.assertEqual(webapp2.import_string('webob.asdfg', silent=True), None)
     63 
     64         self.assertRaises(webapp2.ImportStringError, webapp2.import_string, 'asdfg')
     65         self.assertRaises(webapp2.ImportStringError, webapp2.import_string, 'webob.asdfg')
     66 
     67     def test_to_utf8(self):
     68         res = webapp2._to_utf8('bcdf'.decode('utf-8'))
     69         self.assertEqual(isinstance(res, str), True)
     70 
     71         res = webapp2._to_utf8('abcdef')
     72         self.assertEqual(isinstance(res, str), True)
     73 
     74     '''
     75     # removed to simplify the codebase.
     76     def test_to_unicode(self):
     77         res = webapp2.to_unicode(unicode('foo'))
     78         self.assertEqual(isinstance(res, unicode), True)
     79 
     80         res = webapp2.to_unicode('foo')
     81         self.assertEqual(isinstance(res, unicode), True)
     82     '''
     83 
     84     def test_http_status_message(self):
     85         self.assertEqual(webapp2.Response.http_status_message(404), 'Not Found')
     86         self.assertEqual(webapp2.Response.http_status_message(500), 'Internal Server Error')
     87         self.assertRaises(KeyError, webapp2.Response.http_status_message, 9999)
     88 
     89     def test_cached_property(self):
     90         count = [0]
     91 
     92         class Foo(object):
     93             @webapp2.cached_property
     94             def bar(self):
     95                 count[0] += 1
     96                 return count[0]
     97 
     98         self.assertTrue(isinstance(Foo.bar, webapp2.cached_property))
     99 
    100         foo = Foo()
    101         self.assertEqual(foo.bar, 1)
    102         self.assertEqual(foo.bar, 1)
    103         self.assertEqual(foo.bar, 1)
    104 
    105     def test_redirect(self):
    106         app = webapp2.WSGIApplication()
    107         req = webapp2.Request.blank('/')
    108         req.app = app
    109         app.set_globals(app=app, request=req)
    110         rsp = webapp2.redirect('http://www.google.com/', code=301, body='Weee')
    111         self.assertEqual(rsp.status_int, 301)
    112         self.assertEqual(rsp.body, 'Weee')
    113         self.assertEqual(rsp.headers.get('Location'), 'http://www.google.com/')
    114 
    115     def test_redirect_to(self):
    116         app = webapp2.WSGIApplication([
    117             webapp2.Route('/home', handler='', name='home'),
    118         ])
    119         req = webapp2.Request.blank('/')
    120         req.app = app
    121         app.set_globals(app=app, request=req)
    122 
    123         rsp = webapp2.redirect_to('home', _code=301, _body='Weee')
    124         self.assertEqual(rsp.status_int, 301)
    125         self.assertEqual(rsp.body, 'Weee')
    126         self.assertEqual(rsp.headers.get('Location'), 'http://localhost/home')
    127 
    128 
    129 if __name__ == '__main__':
    130     test_base.main()
    131