[Erp5-report] r44362 leonardo - in /erp5/trunk/products/ERP5Type: Tool/ tests/
nobody at svn.erp5.org
nobody at svn.erp5.org
Wed Mar 16 16:36:24 CET 2011
Author: leonardo
Date: Wed Mar 16 16:36:24 2011
New Revision: 44362
URL: http://svn.erp5.org?rev=44362&view=rev
Log:
live test improvements: reload test modules also when specifying test classes in the test list (like 'testPackingList.TestPackingList') plus some cleanup and refactoring
Modified:
erp5/trunk/products/ERP5Type/Tool/ClassTool.py
erp5/trunk/products/ERP5Type/tests/ERP5TypeLiveTestCase.py
Modified: erp5/trunk/products/ERP5Type/Tool/ClassTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Tool/ClassTool.py?rev=44362&r1=44361&r2=44362&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Tool/ClassTool.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/Tool/ClassTool.py [utf8] Wed Mar 16 16:36:24 2011
@@ -1203,6 +1203,17 @@ def initialize( context ):
result = global_stream.read()
return result
+ security.declarePrivate('_getCommaSeparatedParameterList')
+ def _getCommaSeparatedParameterList(self, parameter_list):
+ # clean parameter_list and split it by commas if necessary
+ if not parameter_list:
+ parameter_list = ()
+ elif isinstance(parameter_list, basestring):
+ parameter_list = tuple(parameter_name.strip()
+ for parameter_name in parameter_list.split(',')
+ if parameter_name.strip())
+ return parameter_list
+
security.declareProtected(Permissions.ManagePortal, 'runLiveTest')
def runLiveTest(self, test_list=None, run_only=None, debug=False,
verbose=False):
@@ -1218,18 +1229,22 @@ def initialize( context ):
# Allow having strings for verbose and debug
verbose = int(verbose) and True or False
debug = int(debug) and True or False
- if test_list is None:
- test_list = []
- elif isinstance(test_list, str):
- test_list = test_list.split(',')
+ test_list = self._getCommaSeparatedParameterList(test_list)
+ run_only = self._getCommaSeparatedParameterList(run_only)
+ if not test_list:
+ # no test to run
+ return ''
path = os.path.join(getConfiguration().instancehome, 'tests')
verbosity = verbose and 2 or 1
- instance_home = getConfiguration().instancehome
global global_stream
global_stream = StringIO()
from Products.ERP5Type.tests.ERP5TypeLiveTestCase import runLiveTest
- result = runLiveTest(test_list, run_only=run_only, debug=debug, path=path,
- stream=global_stream, verbosity=verbosity)
+ result = runLiveTest(test_list,
+ run_only=run_only,
+ debug=debug,
+ path=path,
+ stream=global_stream,
+ verbosity=verbosity)
global_stream.seek(0)
return global_stream.read()
Modified: erp5/trunk/products/ERP5Type/tests/ERP5TypeLiveTestCase.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/ERP5TypeLiveTestCase.py?rev=44362&r1=44361&r2=44362&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/ERP5TypeLiveTestCase.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/tests/ERP5TypeLiveTestCase.py [utf8] Wed Mar 16 16:36:24 2011
@@ -132,18 +132,37 @@ from Products.ERP5Type.tests.runUnitTest
class ERP5TypeTestReLoader(ERP5TypeTestLoader):
- def __init__(self, filter_test_list=()):
- super(ERP5TypeTestReLoader, 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(ERP5TypeTestReLoader, self).loadTestsFromModule(module)
+ def __init__(self, filter_test_list=()):
+ super(ERP5TypeTestReLoader, 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 loadTestsFromNames(self, test_list):
+ # ERP5TypeTestLoader is monkey-patched into unittest
+ # so we have to monkeypatch it in turn
+ if self.filter_test_list is not None:
+ old_filter_test_list = ERP5TypeTestLoader.filter_test_list
+ ERP5TypeTestLoader.filter_test_list = self.filter_test_list
+ try:
+ return super(ERP5TypeTestReLoader,
+ self).loadTestsFromNames(test_list)
+ finally:
+ # and undo the monkeypatch afterwards
+ if self.filter_test_list:
+ ERP5TypeTestLoader.filter_test_list = old_filter_test_list
+
+ def loadTestsFromModule(self, module):
+ """ERP5Type test re-loader supports reloading test modules before
+ running them.
+ """
+ reload(module)
+ return super(ERP5TypeTestReLoader, self).loadTestsFromModule(module)
+
+ def loadTestsFromTestCase(self, testCaseClass):
+ reload(sys.modules[testCaseClass.__module__])
+ return super(ERP5TypeTestReLoader,
+ self).loadTestsFromTestCase(testCaseClass)
def runLiveTest(test_list, verbosity=1, stream=None, **kw):
from Products.ERP5Type.tests.runUnitTest import DebugTestResult
@@ -171,19 +190,11 @@ def runLiveTest(test_list, verbosity=1,
result = super(DebugTextTestRunner, self)._makeResult()
return DebugTestResult(result)
TestRunner = DebugTextTestRunner
- run_only = kw.get('run_only', '').strip()
- filter_test_list = [re.compile(x.strip()).search
- for x in run_only.split(',')]
- loader = ERP5TypeTestReLoader()
- # ERP5TypeTestLoader is monkey-patched into unittest
- # so we have to monkeypatch it
- if filter_test_list:
- old_filter_test_list = ERP5TypeTestLoader.filter_test_list
- ERP5TypeTestLoader.filter_test_list = filter_test_list
+ run_only = kw.get('run_only', ())
+ filter_test_list = [re.compile(x).search
+ for x in run_only]
+ loader = ERP5TypeTestReLoader(filter_test_list)
suite = loader.loadTestsFromNames(test_list)
- # and undo the monkeypatch afterwards
- if filter_test_list:
- ERP5TypeTestLoader.filter_test_list = old_filter_test_list
output = stream
if stream is None:
output = StringIO()
More information about the Erp5-report
mailing list