some tests for wsgi.Application default tip
authorTero Marttila <terom@fixme.fi>
Mon, 16 Feb 2009 22:40:35 +0200
changeset 86 6ff1140586d6
parent 85 fd4b9a80e602
some tests for wsgi.Application
tests/__init__.py
tests/test_wsgi.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,
     ))
 
--- /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))
+