summaryrefslogtreecommitdiff
path: root/src/wsgiref/tests
diff options
context:
space:
mode:
Diffstat (limited to 'src/wsgiref/tests')
-rw-r--r--src/wsgiref/tests/__init__.py4
-rw-r--r--src/wsgiref/tests/test_handlers.py142
-rw-r--r--src/wsgiref/tests/test_headers.py43
3 files changed, 182 insertions, 7 deletions
diff --git a/src/wsgiref/tests/__init__.py b/src/wsgiref/tests/__init__.py
index 6b61776..6b482a0 100644
--- a/src/wsgiref/tests/__init__.py
+++ b/src/wsgiref/tests/__init__.py
@@ -43,10 +43,12 @@ def test_suite():
from wsgiref.tests import test_util
from wsgiref.tests import test_headers
+ from wsgiref.tests import test_handlers
tests = [
test_util.test_suite(),
test_headers.test_suite(),
+ test_handlers.test_suite(),
]
return TestSuite(tests)
@@ -78,5 +80,3 @@ def test_suite():
-
-
diff --git a/src/wsgiref/tests/test_handlers.py b/src/wsgiref/tests/test_handlers.py
new file mode 100644
index 0000000..2e6bcba
--- /dev/null
+++ b/src/wsgiref/tests/test_handlers.py
@@ -0,0 +1,142 @@
+from __future__ import nested_scopes # Backward compat for 2.1
+from unittest import TestCase, TestSuite, makeSuite
+from wsgiref.util import setup_testing_defaults
+from wsgiref.handlers import BaseHandler, BaseCGIHandler
+from StringIO import StringIO
+
+
+class TestHandler(BaseCGIHandler):
+ """Simple handler subclass for testing BaseHandler"""
+
+ def __init__(self,**kw):
+ setup_testing_defaults(kw)
+ BaseCGIHandler.__init__(
+ self, StringIO(''), StringIO(), StringIO(), kw,
+ multithread=True, multiprocess=True
+ )
+
+ def handle_error(self):
+ raise # for testing, we want to see what's happening
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+class HandlerTests(TestCase):
+
+ def checkEnvironAttrs(self, handler):
+ env = handler.environ
+ for attr in [
+ 'version','multithread','multiprocess','last_call','file_wrapper'
+ ]:
+ if attr=='file_wrapper' and handler.wsgi_file_wrapper is None:
+ continue
+ self.assertEqual(getattr(handler,'wsgi_'+attr),env['wsgi.'+attr])
+
+ def checkOSEnviron(self,handler):
+ empty = {}; setup_testing_defaults(empty)
+ env = handler.environ
+ from os import environ
+ for k,v in environ.items():
+ if not empty.has_key(k):
+ self.assertEqual(env[k],v)
+ for k,v in empty.items():
+ self.failUnless(env.has_key(k))
+
+ def testEnviron(self):
+ h = TestHandler(X="Y")
+ h.setup_environ()
+ self.checkEnvironAttrs(h)
+ self.checkOSEnviron(h)
+ self.assertEqual(h.environ["X"],"Y")
+
+ def testCGIEnviron(self):
+ h = BaseCGIHandler(None,None,None,{})
+ h.setup_environ()
+ for key in 'wsgi.url_scheme', 'wsgi.input', 'wsgi.errors':
+ assert h.environ.has_key(key)
+
+ def testScheme(self):
+ h=TestHandler(HTTPS="on"); h.setup_environ()
+ self.assertEqual(h.environ['wsgi.url_scheme'],'https')
+ h=TestHandler(); h.setup_environ()
+ self.assertEqual(h.environ['wsgi.url_scheme'],'http')
+
+
+ def testAbstractMethods(self):
+ h = BaseHandler()
+ for name in [
+ 'handle_error','_flush','get_stdin','get_stderr','add_cgi_vars'
+ ]:
+ self.assertRaises(NotImplementedError, getattr(h,name))
+ self.assertRaises(NotImplementedError, h._write, "test")
+
+
+ def testSimpleRun(self):
+ h = TestHandler()
+ h.run(lambda e,s: [(s('200 OK',[]) or 1) and e['wsgi.url_scheme']])
+ self.assertEqual(h.stdout.getvalue(),"Status: 200 OK\r\n\r\nhttp")
+
+
+
+
+
+
+TestClasses = (
+ HandlerTests,
+)
+
+def test_suite():
+ return TestSuite([makeSuite(t,'test') for t in TestClasses])
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wsgiref/tests/test_headers.py b/src/wsgiref/tests/test_headers.py
index 0ce53fe..c671dc0 100644
--- a/src/wsgiref/tests/test_headers.py
+++ b/src/wsgiref/tests/test_headers.py
@@ -41,11 +41,16 @@ class HeaderTests(TestCase):
def testExtras(self):
h = Headers([])
+ self.assertEqual(str(h),'\r\n')
+
h.add_header('foo','bar',baz="spam")
self.assertEqual(h['foo'], 'bar; baz="spam"')
+ self.assertEqual(str(h),'foo: bar; baz="spam"\r\n\r\n')
+
h.add_header('Foo','bar',cheese=None)
self.assertEqual(h.get_all('foo'),
['bar; baz="spam"', 'bar; cheese'])
+
self.assertEqual(str(h),
'foo: bar; baz="spam"\r\n'
'Foo: bar; cheese\r\n'
@@ -75,11 +80,6 @@ class HeaderTests(TestCase):
-
-
-
-
-
TestClasses = (
HeaderTests,
)
@@ -88,3 +88,36 @@ def test_suite():
return TestSuite([makeSuite(t,'test') for t in TestClasses])
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+