mailRe: r2863 - /branches/test_suite/test_suite/unit_tests/unit_test_runner.py


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by Edward d'Auvergne on November 21, 2006 - 15:35:
Are you having a play with the unittest GUI?  If so, is it any good?
Pity it's in Tk though, it might take more work to integrate it into a
Qt GUI (for all of relax).  Also where you say:

A concrete example:

for class <relax-root-directory>/maths-fns/chi2.py ***complete***

does 'complete' mean that this example is already completed or it is
to be completed?

Edward



On 11/21/06, garyt@xxxxxxxxxxxxxxx <garyt@xxxxxxxxxxxxxxx> wrote:
Author: varioustoxins
Date: Tue Nov 21 12:40:20 2006
New Revision: 2863

URL: http://svn.gna.org/viewcvs/relax?rev=2863&view=rev
Log:
updates to allow heirachical unit test trees


Modified: branches/test_suite/test_suite/unit_tests/unit_test_runner.py

Modified: branches/test_suite/test_suite/unit_tests/unit_test_runner.py
URL: 
http://svn.gna.org/viewcvs/relax/branches/test_suite/test_suite/unit_tests/unit_test_runner.py?rev=2863&r1=2862&r2=2863&view=diff
==============================================================================
--- branches/test_suite/test_suite/unit_tests/unit_test_runner.py (original)
+++ branches/test_suite/test_suite/unit_tests/unit_test_runner.py Tue Nov 21 
12:40:20 2006
@@ -23,11 +23,37 @@
 #                                                                            
  #
 
################################################################################

-''' unit_test_runner provides utilities for the running of unit tests within
-    the relax testing frame work.
+''' unit_test_runner provides utilities for the running of unit tests from 
the
+    command line or within the relax testing frame work.
+
+    Unit tests in the relax frame work are stored in a directory structure
+    rooted at <relax-root-directory>/test_suite/unit_tests. The directory
+    unit tests contains a directory structure that mirrors the relax 
directory
+    structire and which ideally contains one unit test file/module for each
+    file/module in the relax framework. The dfault convettion is that the 
unit
+    test module for a relax module called <relax-module> is called
+    test_<relax-module> (stored in test_<relax-module>.py). The unit test 
module
+    test_<relax-module> should then contain a class called 
Test_<relax-module>
+    which is a child of TestCase and contains methods whose names start with
+    'test' and take no arguments other than self.
+
+    A concrete example:
+
+    for class <relax-root-directory>/maths-fns/chi2.py ***complete***
+
+
+
+
+    The framework can discover sets of unit tests from the file system and 
add
+    them to TestSuites either from the command line or programmatically from
+    inside another program. It also has the ability to search for a  root 
unit
+    test and system directory from a position anywhere inside the unit test
+    hierachy.
 '''

 import os,re,unittest,string,sys
+#import Tkinter as tk
+#import unittest.unittestgui as unitgui

 # utility functions
 ###################
@@ -45,6 +71,16 @@
     if startup_path == '':
         startup_path = os.getcwd()
     return startup_path
+
+def import_module(module_path):
+
+    module = __import__(module_path)
+    result = [module]
+    components = module_path.split('.')
+    for component in components[1:]:
+        module = getattr(module, component)
+        result.append(module)
+    return result


def get_module_relative_path(module_path, root_paths=None): @@ -199,6 +235,8 @@ def scan_paths(self): '''Scan directories and paths for unit test classes and load them into TestSuites'''

+        self.suite = unittest.TestSuite()
+        suite_dictionary = {'':self.suite}
         for (dir_path, dir_names, file_names) in os.walk(self.root_path):
              for file_name in file_names:
                  if self.pattern.match(file_name):
@@ -207,35 +245,29 @@
                      relative_module_path = 
get_module_relative_path(dir_path)

                      class_name = string.upper(file_name[0]) + file_name[1:]
-                     print relative_module_path, class_name, file_name
                      if relative_module_path != '':
                          module_path = '.'.join((relative_module_path, 
file_name))
                      else:
                          module_path = file_name
-                     module = __import__(module_path)
-                     clazz =  getattr(module, class_name)
-
-                     self.suite = 
unittest.TestLoader().loadTestsFromTestCase(clazz)
-
-
-    def run(self, test_runner=None):
-        '''Run the unit tests found using a TestRunner.
-
-           @type test_runner: an instance ot TestRunner
-           @param test_runner: the TestRunner instance  to be used to run the
-                               TestSuite  with. if the fefault value of None 
is
-                               used an instance of unittest.TextTestRunner is
-                               used
-        '''
-
-        if not self.paths_scanned:
-            self.scan_paths()
-            self.paths_scanned = True
-
-        if not test_runner:
-            runner = unittest.TextTestRunner()
-
-        runner.run(self.suite)
+
+                     modules = import_module(module_path)
+
+                     path  = ['']
+                     for i,elem in enumerate(module_path.split('.')):
+                         old_path_key  =  '.'.join(path)
+                         path.append(elem)
+                         path_key = '.'.join(path)
+                         if path_key not in suite_dictionary:
+                             test_suite = unittest.TestSuite()
+                             suite_dictionary[path_key]=test_suite
+                             
suite_dictionary[old_path_key].addTest(test_suite)
+
+                     clazz =  getattr(modules[-1], class_name)
+                     
suite_dictionary[path_key].addTest(unittest.TestLoader().loadTestsFromTestCase(clazz))
+
+
+
+

 class Run_unit_tests(object):
     '''Class to run a particular unit test or a directory of unit tests.'''
@@ -427,8 +459,12 @@
         return result


- def run(self): + def run(self, runner=None): '''Run a unit test or set of unit tests.''' + + print 'testing units...' + print '----------------' + print

         system_directory = self.find_system_directory_path(self.root_path)
         unit_test_directory = 
self.find_unit_test_directory_path(self.root_path)
@@ -437,10 +473,9 @@
             print 'root path:          ', self.root_path
             print 'system directory:   ', system_directory
             print 'unit test directory:', unit_test_directory
-            print 'module paths',modulePath
+            print 'module paths:       ', module_path
             print
         # add UnitTestDirectory to python path
-        print 'sys path',sys.path
         backup_python_path = sys.path[:]
         sys.path.insert(1,unit_test_directory)
         sys.path.insert(1,system_directory)
@@ -449,20 +484,29 @@
         #iterate and load unit tests from module path
         finder = Test_finder(unit_test_directory)
         finder.scan_paths()
-        finder.run()
+        if runner == None:
+            runner = unittest.TextTestRunner()
+        runner.run(finder.suite)
         # add SystemDirectory to python path
         # iterate and load files to be tested

 if __name__ == '__main__':
-    print '1',get_module_relative_path('/A/B/C', ('/A/B',))
-    print '2',get_module_relative_path('/A/B/C', ('/A/B/C',))
-    print '3',get_module_relative_path('/A/B/C', ('/A/B/D/W',))
-    print get_common_prefix(('A','B','C'), ('A','B','C'))
-    print get_common_prefix(('A','B','C'), ('A','B','C','D'))
-    print get_common_prefix(('D','E'), ('A','B','C','D'))
-    print get_common_prefix(('A','B','C','F'), ('A','B','C','D'))
-    print get_common_prefix((),('A','B','C','D'))
-    print ('A','B','C') == ('A','B','C')
-    runner = Run_unit_tests()
+#    print '1',get_module_relative_path('/A/B/C', ('/A/B',))
+#    print '2',get_module_relative_path('/A/B/C', ('/A/B/C',))
+#    print '3',get_module_relative_path('/A/B/C', ('/A/B/D/W',))
+#    print get_common_prefix(('A','B','C'), ('A','B','C'))
+#    print get_common_prefix(('A','B','C'), ('A','B','C','D'))
+#    print get_common_prefix(('D','E'), ('A','B','C','D'))
+#    print get_common_prefix(('A','B','C','F'), ('A','B','C','D'))
+#    print get_common_prefix((),('A','B','C','D'))
+#    print ('A','B','C') == ('A','B','C')
+    runner = Run_unit_tests(verbose=True)
     runner.run()
+
+#    root = tk.Tk()
+#    root.title("Realx unit tests")
+#    gui = unitgui.TkTestRunner(root)
+#    runner.run()
+
+
 # todo normcase home


_______________________________________________ relax (http://nmr-relax.com)

This is the relax-commits mailing list
relax-commits@xxxxxxx

To unsubscribe from this list, get a password
reminder, or change your subscription options,
visit the list information page at
https://mail.gna.org/listinfo/relax-commits




Related Messages


Powered by MHonArc, Updated Tue Nov 21 18:00:26 2006