[Erp5-report] r44198 leonardo - /erp5/trunk/products/ERP5Type/tests/ERP5TypeLiveTestCase.py

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Mar 11 17:28:28 CET 2011


Author: leonardo
Date: Fri Mar 11 17:28:28 2011
New Revision: 44198

URL: http://svn.erp5.org?rev=44198&view=rev
Log:
some live-test-runner cleanups: stop bloating sys.path at every run, stop assuming test names are test modules (allows specifying testPackingList.TestPackingList in the test list), stop monkeypatching classes

Modified:
    erp5/trunk/products/ERP5Type/tests/ERP5TypeLiveTestCase.py

Modified: erp5/trunk/products/ERP5Type/tests/ERP5TypeLiveTestCase.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/ERP5TypeLiveTestCase.py?rev=44198&r1=44197&r2=44198&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/ERP5TypeLiveTestCase.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/tests/ERP5TypeLiveTestCase.py [utf8] Fri Mar 11 17:28:28 2011
@@ -29,6 +29,8 @@
 import unittest
 import os
 import sys
+import imp
+import re
 
 from Testing import ZopeTestCase
 from Testing.ZopeTestCase import PortalTestCase, user_name
@@ -125,14 +127,27 @@ class ERP5TypeLiveTestCase(ERP5TypeTestC
         '''Returns the app object for a test.'''
         return self.getPortal().aq_parent
 
+from Products.ERP5Type.tests.runUnitTest import ERP5TypeTestLoader
+
+class ERP5TypeTestReLoader(ERP5TypeTestLoader):
+
+  def __init__(self, filter_test_list=()):
+    super(ERP5TypeTestLoader, self).__init__()
+    if len(filter_test_list):
+      # do not filter if no filter, otherwise no tests run
+      self.filter_test_list = filter_test_list
+
+  def loadTestsFromModule(self, module):
+    """ERP5Type test re-loader supports reloading test modules before
+    running them.
+    """
+    reload(module)
+    return super(ERP5TypeTestLoader, self).loadTestsFromModule(module)
 
 def runLiveTest(test_list, verbosity=1, stream=None, **kw):
   from Products.ERP5Type.tests.runUnitTest import DebugTestResult
-  from Products.ERP5Type.tests.runUnitTest import ERP5TypeTestLoader
   from Products.ERP5Type.tests import backportUnittest
   from StringIO import StringIO
-  import imp
-  import re
   # Add path of the TestTemplateItem folder of the instance
   path = kw.get('path', None)
   if path is not None and path not in sys.path:
@@ -141,12 +156,10 @@ def runLiveTest(test_list, verbosity=1, 
   import Products
   for product_path in Products.__path__:
     product_test_list.extend(glob(os.path.join(product_path, '*', 'tests')))
+  current_syspath = set(sys.path)
 
-  sys.path.extend(product_test_list)
-  # Reload the test class before runing tests
-  for test_name in test_list:
-    (test_file, test_path_name, test_description) = imp.find_module(test_name)
-    imp.load_module(test_name, test_file, test_path_name, test_description)
+  sys.path.extend(path for path in product_test_list
+                  if path not in current_syspath)
 
   TestRunner = backportUnittest.TextTestRunner
   if ERP5TypeLiveTestCase not in ERP5TypeTestCase.__bases__:
@@ -157,14 +170,10 @@ def runLiveTest(test_list, verbosity=1, 
         result = super(DebugTextTestRunner, self)._makeResult()
         return DebugTestResult(result)
     TestRunner = DebugTextTestRunner
-  loader = ERP5TypeTestLoader()
-  run_only = kw.get('run_only', None)
-  if run_only is not None:
-    ERP5TypeTestLoader.filter_test_list = \
-        [re.compile(x).search for x in run_only.split(',')]
+  run_only = kw.get('run_only', '').strip()
+  loader = ERP5TypeTestReLoader(filter_test_list=[re.compile(x.strip()).search 
+                                                  for x in run_only.split(',')])
   suite = loader.loadTestsFromNames(test_list)
-  if run_only is not None:
-    ERP5TypeTestLoader.filter_test_list = None
   output = stream
   if stream is None:
     output = StringIO()



More information about the Erp5-report mailing list