separate tests/ package, although the import paths are still wonky
authorTero Marttila <terom@fixme.fi>
Mon, 16 Feb 2009 18:35:57 +0200
changeset 75 f94c06cfcc0e
parent 74 406cf77d23f9
child 76 2f659ff51c75
separate tests/ package, although the import paths are still wonky
test.py
tests/__init__.py
tests/test_http.py
--- a/test.py	Mon Feb 16 18:20:31 2009 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,199 +0,0 @@
-#!/usr/bin/env python2.5
-# :set encoding=utf8
-
-"""
-    General unit tests
-"""
-
-import unittest
-from cStringIO import StringIO
-
-import http
-
-class TestHttpUtil (unittest.TestCase) :
-    def test_request_url (self) :
-        for env, url in (
-            ({
-                'wsgi.url_scheme':  "https",
-                'HTTP_HOST':        "testhost",
-                'REQUEST_URI':      "/test"
-            }, "https://testhost/test"),
-            ({
-                'HTTP_HOST':        "-"
-            }, "[???]://-[???]")
-        ) :
-            self.assertEqual(http.request_url(env), url)
-
-class TestHttpRequest (unittest.TestCase) :
-    def build_request (self, env_dict={}, **env_kw) :
-        env = {
-            'wsgi.url_scheme':      "http",
-            'HTTP_HOST':            "testhost",
-            'REQUEST_METHOD':       "GET",
-        }
-        env.update(env_dict)
-        env.update(env_kw)
-
-        return http.Request(env)
-    
-    def test_site_host (self) :
-        self.assertEqual(self.build_request(HTTP_HOST='testhost').site_host, "testhost")
-        self.assertEqual(self.build_request(HTTP_HOST='testhost:13').site_host, "testhost:13")
-    
-    def test_site_root (self) :
-        for script_name, site_root in (
-            ('',            ""         ),
-            ('/foo',        ""         ),
-            ('/foo/bar/',   "/foo/bar"  ),
-        ) :
-            self.assertEqual(self.build_request(SCRIPT_NAME=script_name).site_root, site_root)
-    
-    def test_get_page_name (self) :
-        for path_info, page_name in (
-            ('',                ""),
-            ('/',               ""),
-            ('/foo1/bar',       "foo1/bar"),
-            ('/foo2/bar/',      "foo2/bar/"),
-            ('/foo3/bar/../',   "foo3/"),
-            ('/foo4/bar/..',    "foo4"),
-            ('//',              ""),
-        ) :
-            self.assertEqual(self.build_request(PATH_INFO=path_info).get_page_name(), page_name)
-    
-    def _test_page_prefix (self, request_uri, path_info, page_prefix) :
-        self.assertEqual(self.build_request(REQUEST_URI=request_uri, PATH_INFO=path_info).page_prefix, page_prefix)
-
-    def test_page_prefix_empty (self) :
-        self._test_page_prefix('', '', "")
-
-    def test_page_prefix_root_dir (self) :
-        self._test_page_prefix('/foo/', '/foo/', "")
-    
-    def test_page_prefix_cgi (self) :
-        self._test_page_prefix('/foo.cgi/quux', '/quux', "/foo.cgi")
-
-    def test_page_prefix_qargs (self) :
-        self._test_page_prefix('/foo.cgi/?foo', '/', "/foo.cgi")
-    
-    def test_get_arg (self) :
-        for query_string, key, value in (
-            ('',                'foo',      None),
-            ('foo',             'foo',      ''),
-            ('foo=',            'foo',      ''),
-            ('foo=bar',         'foo',      'bar'),
-            ('foo=&bar=.',      'bar',      '.'),
-        ) :
-            self.assertEqual(self.build_request(QUERY_STRING=query_string).get_arg(key, None), value)
-    
-    def test_get_args (self) :
-        for query_string, keyvals in (
-            ('',                []),
-            ('foo1=&bar',       [('foo1', ''), ('bar', '')]),
-            ('foo2=bar',        [('foo2', 'bar')]),
-            ('foo3=bar&foo3',   [('foo3', 'bar'), ('foo3', '')]),
-        ) :
-            self.assertEqual(self.build_request(QUERY_STRING=query_string).get_args(), keyvals)
-    
-    def _build_post (self, method='POST', **vals) :
-        data = '&'.join('%s=%s' % kv for kv in vals.iteritems())
-
-        return self.build_request({'wsgi.input': StringIO(data)}, REQUEST_METHOD=method, CONTENT_TYPE='application/x-www-form-urlencoded')
-
-    def test_is_post (self) :
-        for request_method, bool in (
-            ('GET',             False),
-            ('POST',            True),
-            ('post',            True),
-        ) :
-            self.assertEqual(self._build_post(method=request_method).is_post(), bool)
-        
-    def _test_post (self, **vals) :
-        req = self._build_post(**vals)
-    
-    def test_post_empty (self) :
-        req = self._build_post()
-
-        self.assertTrue(req.is_post())
-        self.assertEqual(req.get_post('foo', None), None)
-    
-    def test_post_simple (self) :
-        req = self._build_post(foo='bar')
-
-        self.assertTrue(req.is_post())
-        self.assertEqual(req.get_post('foo', None), 'bar')
-
-class TestHttpResponse (unittest.TestCase) :
-    def test_status (self) :
-        response = http.Response(None, status='100 Continue')
-
-        self.assertEqual(response.get_status(), '100 Continue')
-    
-    def test_data_empty (self) :
-        self.assertEqual(http.Response(None).get_data(), '')
-
-    def test_data_str (self) :
-        self.assertEqual(http.Response('foo').get_data(), 'foo')
-    
-    def test_data_utf8 (self) :
-        data = u'föö'
-
-        self.assertEqual(http.Response(data).get_data(), data.encode('utf8'))
-
-    def test_data_utf16 (self) :
-        data = u'fåå'
-
-        self.assertEqual(http.Response(data, charset='utf16').get_data(), data.encode('utf16'))
-    
-    def test_data_binary (self) :
-        data = '\x01\x00'
-
-        self.assertEqual(http.Response(data, charset=None).get_data(), data)
-    
-    def test_content_type_none (self) :
-        response = http.Response(None, content_type=None)
-
-        self.assertEqual(response.get_headers(), [])
-    
-    def test_content_type_default (self) :
-        self.assertEqual(http.Response(None).get_headers(), [('Content-type', "text/html; charset=\"UTF-8\"")])
-
-    def test_content_type_weird (self) :
-        self.assertEqual(http.Response(None, content_type="foo/x-bar").get_headers(), [('Content-type', "foo/x-bar; charset=\"UTF-8\"")])
-
-    def test_content_type_charset (self) :
-        self.assertEqual(http.Response(None, content_type="foo/x-bar", charset="---").get_headers(), [('Content-type', "foo/x-bar; charset=\"---\"")])
-    
-    def _build_headers (self, tlist=None, **map) :
-        response = http.Response(None)
-
-        if tlist :
-            for name, value, params in tlist :
-                response.add_header(name, value, **params)
-        
-        for name, value in map.iteritems() :
-            response.add_header(name, value)
-       
-        return response
-        
-    def test_headers_simple (self) :
-        self.assertEqual(self._build_headers(**{'X-Foo': 'bar, never'}).get_headers(), [
-            ('Content-type', "text/html; charset=\"UTF-8\""),
-            ('X-Foo', "bar, never")
-        ])
-
-    def test_headers_params (self) :
-        self.assertEqual(self._build_headers([('X-Bar', 'bar', dict(never='yes'))]).get_headers(), [
-            ('Content-type', "text/html; charset=\"UTF-8\""),
-            ('X-Bar', "bar; never=\"yes\"")
-        ])
-
-    def test_headers_multi (self) :
-        self.assertEqual(self._build_headers([('X-Bar', 'bar', {}), ('X-bar', 'foo', {})]).get_headers(), [
-            ('Content-type', "text/html; charset=\"UTF-8\""),
-            ('X-Bar', "bar"),
-            ('X-bar', "foo"),
-        ])
-
-if __name__ == '__main__' :
-    unittest.main()
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/__init__.py	Mon Feb 16 18:35:57 2009 +0200
@@ -0,0 +1,16 @@
+"""
+    Our collection of unittest's for the various modules
+"""
+
+import unittest
+import test_http
+
+def all_tests () :
+    """
+        Return a TestSuite with all test cases loaded
+    """
+    
+    return unittest.TestSuite(unittest.defaultTestLoader.loadTestsFromModule(module) for module in (
+        test_http,
+    ))
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test_http.py	Mon Feb 16 18:35:57 2009 +0200
@@ -0,0 +1,209 @@
+# :set encoding=utf8
+
+"""
+    Unit tests for qmsk.web.http
+"""
+
+import unittest
+from cStringIO import StringIO
+
+import http
+
+class TestHttpUtil (unittest.TestCase) :
+    def test_request_url (self) :
+        for env, url in (
+            ({
+                'wsgi.url_scheme':  "https",
+                'HTTP_HOST':        "testhost",
+                'REQUEST_URI':      "/test"
+            }, "https://testhost/test"),
+            ({
+                'HTTP_HOST':        "-"
+            }, "[???]://-[???]")
+        ) :
+            self.assertEqual(http.request_url(env), url)
+
+class TestHttpRequest (unittest.TestCase) :
+    def build_request (self, env_dict={}, **env_kw) :
+        env = {
+            'wsgi.url_scheme':      "http",
+            'HTTP_HOST':            "testhost",
+            'REQUEST_METHOD':       "GET",
+        }
+        env.update(env_dict)
+        env.update(env_kw)
+
+        return http.Request(env)
+    
+    def test_site_host (self) :
+        self.assertEqual(self.build_request(HTTP_HOST='testhost').site_host, "testhost")
+        self.assertEqual(self.build_request(HTTP_HOST='testhost:13').site_host, "testhost:13")
+    
+    def test_site_root (self) :
+        for script_name, site_root in (
+            ('',            ""         ),
+            ('/foo',        ""         ),
+            ('/foo/bar/',   "/foo/bar"  ),
+        ) :
+            self.assertEqual(self.build_request(SCRIPT_NAME=script_name).site_root, site_root)
+    
+    def test_get_page_name (self) :
+        for path_info, page_name in (
+            ('',                ""),
+            ('/',               ""),
+            ('/foo1/bar',       "foo1/bar"),
+            ('/foo2/bar/',      "foo2/bar/"),
+            ('/foo3/bar/../',   "foo3/"),
+            ('/foo4/bar/..',    "foo4"),
+            ('//',              ""),
+        ) :
+            self.assertEqual(self.build_request(PATH_INFO=path_info).get_page_name(), page_name)
+    
+    def _test_page_prefix (self, request_uri, path_info, page_prefix) :
+        self.assertEqual(self.build_request(REQUEST_URI=request_uri, PATH_INFO=path_info).page_prefix, page_prefix)
+
+    def test_page_prefix_empty (self) :
+        self._test_page_prefix('', '', "")
+
+    def test_page_prefix_root_dir (self) :
+        self._test_page_prefix('/foo/', '/foo/', "")
+    
+    def test_page_prefix_cgi (self) :
+        self._test_page_prefix('/foo.cgi/quux', '/quux', "/foo.cgi")
+
+    def test_page_prefix_qargs (self) :
+        self._test_page_prefix('/foo.cgi/?foo', '/', "/foo.cgi")
+    
+    def test_get_arg (self) :
+        for query_string, key, value in (
+            ('',                'foo',      None),
+            ('foo',             'foo',      ''),
+            ('foo=',            'foo',      ''),
+            ('foo=bar',         'foo',      'bar'),
+            ('foo=&bar=.',      'bar',      '.'),
+        ) :
+            self.assertEqual(self.build_request(QUERY_STRING=query_string).get_arg(key, None), value)
+    
+    def test_get_args (self) :
+        for query_string, keyvals in (
+            ('',                []),
+            ('foo1=&bar',       [('foo1', ''), ('bar', '')]),
+            ('foo2=bar',        [('foo2', 'bar')]),
+            ('foo3=bar&foo3',   [('foo3', 'bar'), ('foo3', '')]),
+        ) :
+            self.assertEqual(self.build_request(QUERY_STRING=query_string).get_args(), keyvals)
+    
+    def _build_post (self, method='POST', **vals) :
+        data = '&'.join('%s=%s' % kv for kv in vals.iteritems())
+
+        return self.build_request({'wsgi.input': StringIO(data)}, REQUEST_METHOD=method, CONTENT_TYPE='application/x-www-form-urlencoded')
+
+    def test_is_post (self) :
+        for request_method, bool in (
+            ('GET',             False),
+            ('POST',            True),
+            ('post',            True),
+        ) :
+            self.assertEqual(self._build_post(method=request_method).is_post(), bool)
+        
+    def _test_post (self, **vals) :
+        req = self._build_post(**vals)
+    
+    def test_post_empty (self) :
+        req = self._build_post()
+
+        self.assertTrue(req.is_post())
+        self.assertEqual(req.get_post('foo', None), None)
+    
+    def test_post_simple (self) :
+        req = self._build_post(foo='bar')
+
+        self.assertTrue(req.is_post())
+        self.assertEqual(req.get_post('foo', None), 'bar')
+
+class TestHttpResponse (unittest.TestCase) :
+    def test_status (self) :
+        response = http.Response(None, status='100 Continue')
+
+        self.assertEqual(response.get_status(), '100 Continue')
+    
+    def test_data_empty (self) :
+        self.assertEqual(http.Response(None).get_data(), '')
+
+    def test_data_str (self) :
+        self.assertEqual(http.Response('foo').get_data(), 'foo')
+    
+    def test_data_utf8 (self) :
+        data = u'föö'
+
+        self.assertEqual(http.Response(data).get_data(), data.encode('utf8'))
+
+    def test_data_utf16 (self) :
+        data = u'fåå'
+
+        self.assertEqual(http.Response(data, charset='utf16').get_data(), data.encode('utf16'))
+    
+    def test_data_invalid (self) :
+        data = 'fää'
+
+        self.assertRaises(UnicodeDecodeError, http.Response(data).get_data)
+
+    def test_data_binary (self) :
+        data = '\x01\x00'
+
+        self.assertEqual(http.Response(data, charset=None).get_data(), data)
+    
+    def test_content_type_none (self) :
+        response = http.Response(None, content_type=None)
+
+        self.assertEqual(response.get_headers(), [])
+    
+    def test_content_type_default (self) :
+        self.assertEqual(http.Response(None).get_headers(), [('Content-type', "text/html; charset=\"UTF-8\"")])
+
+    def test_content_type_weird (self) :
+        self.assertEqual(http.Response(None, content_type="foo/x-bar").get_headers(), [('Content-type', "foo/x-bar; charset=\"UTF-8\"")])
+
+    def test_content_type_charset (self) :
+        self.assertEqual(http.Response(None, content_type="foo/x-bar", charset="---").get_headers(), [('Content-type', "foo/x-bar; charset=\"---\"")])
+    
+    def _build_headers (self, tlist=None, **map) :
+        response = http.Response(None)
+
+        if tlist :
+            for name, value, params in tlist :
+                response.add_header(name, value, **params)
+        
+        for name, value in map.iteritems() :
+            response.add_header(name, value)
+       
+        return response
+        
+    def test_headers_simple (self) :
+        self.assertEqual(self._build_headers(**{'X-Foo': 'bar, never'}).get_headers(), [
+            ('Content-type', "text/html; charset=\"UTF-8\""),
+            ('X-Foo', "bar, never")
+        ])
+
+    def test_headers_params (self) :
+        self.assertEqual(self._build_headers([('X-Bar', 'bar', dict(never='yes'))]).get_headers(), [
+            ('Content-type', "text/html; charset=\"UTF-8\""),
+            ('X-Bar', "bar; never=\"yes\"")
+        ])
+
+    def test_headers_multi (self) :
+        self.assertEqual(self._build_headers([('X-Bar', 'bar', {}), ('X-bar', 'foo', {})]).get_headers(), [
+            ('Content-type', "text/html; charset=\"UTF-8\""),
+            ('X-Bar', "bar"),
+            ('X-bar', "foo"),
+        ])
+
+class TestHttpRedirect (unittest.TestCase) :
+    def test_redirect (self) :
+        response = http.Redirect('http://test/bar')
+
+        self.assertEquals(response.get_status(), '302 Found')
+        self.assertEquals(response.get_headers(), [('Location', 'http://test/bar')])
+        self.assertEquals(response.get_data(), '')
+
+