--- 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,
))
--- /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))
+