tests/test_wsgi.py
changeset 86 6ff1140586d6
equal deleted inserted replaced
85:fd4b9a80e602 86:6ff1140586d6
       
     1 # :set charset=utf8
       
     2 """
       
     3     Testing the basic wsgi.Application code
       
     4 """
       
     5 
       
     6 import unittest, sys
       
     7 import wsgi, handler, http
       
     8 
       
     9 class _DummyHandler (handler.RequestHandler) :
       
    10     def __init__ (self, response=None, error=None) :
       
    11         self.response = response
       
    12         self.error = error
       
    13 
       
    14     def handle_request (self, req) :
       
    15         if self.error :
       
    16             raise self.error
       
    17 
       
    18         elif self.response :
       
    19             return self.response
       
    20         
       
    21         else :
       
    22             assert False
       
    23 
       
    24 class TestWSGI (unittest.TestCase) :
       
    25     def setUp (self) :
       
    26         self.status = None
       
    27         self.headers = None
       
    28     
       
    29     def _build_exc_info (self) :
       
    30         # generate some random exception
       
    31         try :
       
    32             int("xxx")
       
    33 
       
    34         except ValueError, e :
       
    35             return sys.exc_info()
       
    36     
       
    37     def _build_env (self) :
       
    38         return {
       
    39             'REQUEST_METHOD':   "GET",
       
    40             'SCRIPT_NAME':      "/index.cgi",
       
    41             'PATH_INFO':        "",
       
    42             'REQUEST_URI':      "/index.cgi",
       
    43         }
       
    44 
       
    45     def _build_app (self, **kwargs) :
       
    46         return wsgi.Application(_DummyHandler(**kwargs))
       
    47 
       
    48     def _start_response (self, status, headers, exc_info=None) :
       
    49         self.assertEqual(self.status, None)
       
    50         self.assertEqual(self.headers, None)
       
    51 
       
    52         self.assertEqual(type(status), str)
       
    53         self.assertEqual(type(headers), list)
       
    54 
       
    55         for name, value in headers :
       
    56             self.assertEqual(type(name), str)
       
    57             self.assertEqual(type(value), str)
       
    58         
       
    59         self.status = status
       
    60         self.headers = headers
       
    61 
       
    62     def test_handle_error (self) :
       
    63         app = self._build_app()
       
    64         env = self._build_env()
       
    65 
       
    66         data = app.handle_error(self._build_exc_info(), env, self._start_response)
       
    67 
       
    68         self.assertEqual(self.status[:3], "500")
       
    69         self.assertEqual(type(data), str)
       
    70     
       
    71     def test_handle_request_response (self) :
       
    72         app = self._build_app(response=http.Response("foo"))
       
    73         env = self._build_env()
       
    74 
       
    75         data = list(app.handle_request(env, self._start_response))
       
    76 
       
    77         self.assertEqual(self.status, "200 OK")
       
    78         self.assertEqual(self.headers, [('Content-type', "text/html; charset=\"UTF-8\"")])
       
    79         self.assertEqual(data, ["foo"])
       
    80 
       
    81     def test_handle_request_response_error (self) :
       
    82         app = self._build_app(error=http.ResponseError("--bar--"))
       
    83         env = self._build_env()
       
    84 
       
    85         data = list(app.handle_request(env, self._start_response))
       
    86 
       
    87         self.assertEqual(self.status, "400 Bad Request")
       
    88         self.assertEqual(self.headers, [('Content-type', "text/html; charset=\"UTF-8\"")])
       
    89         self.assertTrue("--bar--" in ''.join(data))
       
    90 
       
    91     def test_call (self) :
       
    92         app = self._build_app(response=http.Response("foo"))
       
    93         env = self._build_env()
       
    94         
       
    95         data = list(app(env, self._start_response))
       
    96 
       
    97         self.assertEqual(self.status, "200 OK")
       
    98         self.assertEqual(self.headers, [('Content-type', "text/html; charset=\"UTF-8\"")])
       
    99         self.assertEqual(data, ["foo"])
       
   100 
       
   101     def test_call_error (self) :
       
   102         app = self._build_app(error=ValueError("--foo--"))
       
   103         env = self._build_env()
       
   104 
       
   105         data = list(app(env, self._start_response))
       
   106 
       
   107         self.assertEqual(self.status, "500 Internal Server Error")
       
   108         self.assertEqual(self.headers, [('Content-type', "text/plain; charset=UTF-8")])
       
   109         self.assertTrue("ValueError: --foo--" in ''.join(data))
       
   110