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 Gary S. Thompson on November 21, 2006 - 16:32:
Edward d'Auvergne wrote:

Are you having a play with the unittest GUI?


I was just having a go to see that it worked. The version I was using, however, is under the wrong license (I stole it from zope I think) so it was just a test of the code/concept and will most probably disappear again.

If so, is it any good?
Pity it's in Tk though,

Why the problem with tk? Tk is nice (mostly) and is present in all python distributions (note the prejudice, I am an old tcl/tk programmer)


it might take more work to integrate it into a
Qt GUI (for all of relax).


However, you can use the tk version as a template to build a qt version

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?


it is to be completed ;-) I had to leave for work... multiple *** round comments / code in my files ususally mean something to do ;-)


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


.



--
-------------------------------------------------------------------
Dr Gary Thompson
Astbury Centre for Structural Molecular Biology,
University of Leeds, Astbury Building,
Leeds, LS2 9JT, West-Yorkshire, UK             Tel. +44-113-3433024
email: garyt@xxxxxxxxxxxxxxx                   Fax  +44-113-2331407
-------------------------------------------------------------------





Related Messages


Powered by MHonArc, Updated Tue Nov 21 17:00:50 2006