test.py
changeset 74 406cf77d23f9
parent 73 1554d3d083b8
--- a/test.py	Mon Feb 16 17:55:09 2009 +0200
+++ b/test.py	Mon Feb 16 18:20:31 2009 +0200
@@ -1,4 +1,5 @@
 #!/usr/bin/env python2.5
+# :set encoding=utf8
 
 """
     General unit tests
@@ -121,6 +122,78 @@
         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()