diff wibble/tests.py @ 5:f5e3ba8cfcd0

Improved test framework
author Ben Croston <ben@croston.org>
date Wed, 31 Aug 2011 22:45:55 +0100
parents ad5a8748afcf
children 3a6f3193cc7d
line wrap: on
line diff
--- a/wibble/tests.py	Wed Aug 31 21:35:14 2011 +0100
+++ b/wibble/tests.py	Wed Aug 31 22:45:55 2011 +0100
@@ -9,15 +9,19 @@
 ##### server vvv #####
 class api(object):
   def mymethod(self):
-      #raise Exception("This is a test error")
       return 'wibbler woz ere'
 
+  def myexception(self):
+      raise Exception('This is a test error')
+
 def myauth(username, password, useragent=None):
   #raise Exception("This is a test error in auth")
-  return username == 'testuser' and hashlib.md5('s3cr3t').hexdigest() == password and useragent == 'wibble_unittest'
+  return username == 'testuser' and \
+         hashlib.md5('s3cr3t').hexdigest() == password and \
+         useragent == 'wibble_unittest'
 
 def make_server():
-    from wibble.server import JsonRpcApp
+    from server import JsonRpcApp
     class myhandler(simple_server.WSGIRequestHandler):
         def log_request(self, *a, **b):
             pass # do not output log messages
@@ -28,13 +32,13 @@
 ##### client vvv #####
 class WibbleTests(unittest.TestCase):
     def setUp(self):
-        from wibble.client.ServerProxy import ServerProxy
+        from client.ServerProxy import ServerProxy
         self.client = ServerProxy('http://localhost:1337/',
                                   username='testuser',
                                   password='s3cr3t',
                                   user_agent='wibble_unittest')
 
-class IgnoreModuleNameTest(WibbleTests):
+class IgnoreClassNameTest(WibbleTests):
     def runTest(self):
         self.assertEqual(self.client.api.mymethod(),self.client.mymethod())
 
@@ -50,22 +54,31 @@
 
 ##### client ^^^ #####
 
+finished = False
 def suite():
     if platform.python_version().startswith('3'):
         # no tests for python 3 because server not ported yet
         return unittest.TestSuite()
     def test_wrapper():
         server = make_server()
-        server.log_request = None
-        server.serve_forever()
+        while not finished:
+            server.handle_request()
     thread = Thread(target=test_wrapper)
     thread.start()
     time.sleep(0.1) # wait for server thread to start
     suite = unittest.TestSuite()
-    suite.addTest(IgnoreModuleNameTest())
+    suite.addTest(IgnoreClassNameTest())
     return suite
 
 if __name__ == '__main__':
-#    unittest.main()
-    main()
+    finished = False
+    unittest.TextTestRunner(verbosity=2).run(suite())
+    finished = True
 
+    # make a dummy request to get server thread out of loop
+    try:
+       import urllib
+       urllib.urlopen('http://localhost:1337/')
+    except:
+       pass
+