diff -r 000000000000 -r 2e8eeb919028 configurationengine/build-scripts/export-bat/scripts-tests-overlay/runtests.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/configurationengine/build-scripts/export-bat/scripts-tests-overlay/runtests.py Thu Mar 11 17:04:37 2010 +0200 @@ -0,0 +1,108 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +import sys, os, re, unittest + +ROOT_PATH = os.path.abspath(os.path.dirname(__file__)) + +CONE_PATH = os.path.join(ROOT_PATH, 'cone') +EGGS_PATH = os.path.join(ROOT_PATH, 'eggs') + +def add_eggs_to_path(egg_path): + if not os.path.isdir(egg_path): + return + + for name in os.listdir(egg_path): + if name.endswith('.egg'): + path = os.path.normpath(os.path.join(egg_path, name)) + if path not in sys.path: + print "Adding '%s' to path" % name + sys.path.append(path) + + +def _collect_test_suite(base_dir, module_subdir): + # Check that the directory exists + module_dir = os.path.join(base_dir, module_subdir) + if not os.path.exists(module_dir): + raise RuntimeError("'%s' does not exist!" % module_dir) + + # Collect the names of all test modules (of the form "unittest_*.py") + test_modules_names = [] + for name in os.listdir(module_dir): + if re.match(r'^unittest_.*\.py$', name) != None: + test_modules_names.append(name[:-3]) + + # Import the modules + sys.path.insert(0, base_dir) + try: + suite = unittest.TestSuite() + for modname in test_modules_names: + # Load the test module dynamically and add it to the test suite + top_module = __import__(module_subdir + '.' + modname) + + # top_module contains now actually e.g. mymodule.unittest_sometest, + # so get the actual unit test module + module = getattr(top_module, modname) + + suite.addTests(unittest.TestLoader().loadTestsFromModule(module)) + return suite + finally: + del sys.path[0] + +def _run_without_nose(): + suite = unittest.TestSuite() + + # Collect script test suite + suite.addTest(_collect_test_suite(ROOT_PATH, 'tests')) + + # Collect test suites from the plugin-tests/ directory + PLUGIN_TEST_DIR = os.path.join(ROOT_PATH, 'plugin-tests') + if os.path.exists(PLUGIN_TEST_DIR): + for name in os.listdir(PLUGIN_TEST_DIR): + plugin_suite = _collect_test_suite(PLUGIN_TEST_DIR, name) + suite.addTest(plugin_suite) + + # Run the tests + unittest.TextTestRunner(verbosity=2).run(suite) + +def _run_with_nose(): + import nose + import nose.plugins.xunit + + # Configure nose + plugins = nose.plugins.manager.DefaultPluginManager() + allfiles = nose.config.all_config_files() + ['nose_bat.cfg'] + conf = nose.config.Config(files=allfiles, plugins=plugins) + + # Run the tests + nose.run(config=conf, argv=sys.argv[:1]) + +def main(): + if 'CONE_PATH' not in os.environ: + cone_path = os.path.join(ROOT_PATH, 'cone') + print "Setting CONE_PATH to '%s'" % cone_path + os.environ['CONE_PATH'] = cone_path + + add_eggs_to_path(EGGS_PATH) + + if '--with-nose' in sys.argv: + _run_with_nose() + else: + _run_without_nose() + return 0 + +if __name__ == "__main__": + sys.exit(main())