# HG changeset patch # User Tero Marttila # Date 1234816835 -7200 # Node ID 6ff1140586d603beadb8438c6ac042d2e287208a # Parent fd4b9a80e602f9014d2fe2dd0f683c8d17901099 some tests for wsgi.Application diff -r fd4b9a80e602 -r 6ff1140586d6 tests/__init__.py --- a/tests/__init__.py Mon Feb 16 21:52:03 2009 +0200 +++ b/tests/__init__.py Mon Feb 16 22:40:35 2009 +0200 @@ -3,7 +3,7 @@ """ import unittest -import test_http, test_treeparse, test_urltree +import test_http, test_treeparse, test_urltree, test_wsgi def all_tests () : """ @@ -14,5 +14,6 @@ test_http, test_treeparse, test_urltree, + test_wsgi, )) diff -r fd4b9a80e602 -r 6ff1140586d6 tests/test_wsgi.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_wsgi.py Mon Feb 16 22:40:35 2009 +0200 @@ -0,0 +1,110 @@ +# :set charset=utf8 +""" + Testing the basic wsgi.Application code +""" + +import unittest, sys +import wsgi, handler, http + +class _DummyHandler (handler.RequestHandler) : + def __init__ (self, response=None, error=None) : + self.response = response + self.error = error + + def handle_request (self, req) : + if self.error : + raise self.error + + elif self.response : + return self.response + + else : + assert False + +class TestWSGI (unittest.TestCase) : + def setUp (self) : + self.status = None + self.headers = None + + def _build_exc_info (self) : + # generate some random exception + try : + int("xxx") + + except ValueError, e : + return sys.exc_info() + + def _build_env (self) : + return { + 'REQUEST_METHOD': "GET", + 'SCRIPT_NAME': "/index.cgi", + 'PATH_INFO': "", + 'REQUEST_URI': "/index.cgi", + } + + def _build_app (self, **kwargs) : + return wsgi.Application(_DummyHandler(**kwargs)) + + def _start_response (self, status, headers, exc_info=None) : + self.assertEqual(self.status, None) + self.assertEqual(self.headers, None) + + self.assertEqual(type(status), str) + self.assertEqual(type(headers), list) + + for name, value in headers : + self.assertEqual(type(name), str) + self.assertEqual(type(value), str) + + self.status = status + self.headers = headers + + def test_handle_error (self) : + app = self._build_app() + env = self._build_env() + + data = app.handle_error(self._build_exc_info(), env, self._start_response) + + self.assertEqual(self.status[:3], "500") + self.assertEqual(type(data), str) + + def test_handle_request_response (self) : + app = self._build_app(response=http.Response("foo")) + env = self._build_env() + + data = list(app.handle_request(env, self._start_response)) + + self.assertEqual(self.status, "200 OK") + self.assertEqual(self.headers, [('Content-type', "text/html; charset=\"UTF-8\"")]) + self.assertEqual(data, ["foo"]) + + def test_handle_request_response_error (self) : + app = self._build_app(error=http.ResponseError("--bar--")) + env = self._build_env() + + data = list(app.handle_request(env, self._start_response)) + + self.assertEqual(self.status, "400 Bad Request") + self.assertEqual(self.headers, [('Content-type', "text/html; charset=\"UTF-8\"")]) + self.assertTrue("--bar--" in ''.join(data)) + + def test_call (self) : + app = self._build_app(response=http.Response("foo")) + env = self._build_env() + + data = list(app(env, self._start_response)) + + self.assertEqual(self.status, "200 OK") + self.assertEqual(self.headers, [('Content-type', "text/html; charset=\"UTF-8\"")]) + self.assertEqual(data, ["foo"]) + + def test_call_error (self) : + app = self._build_app(error=ValueError("--foo--")) + env = self._build_env() + + data = list(app(env, self._start_response)) + + self.assertEqual(self.status, "500 Internal Server Error") + self.assertEqual(self.headers, [('Content-type', "text/plain; charset=UTF-8")]) + self.assertTrue("ValueError: --foo--" in ''.join(data)) +