summaryrefslogtreecommitdiff
path: root/Source/UnitTests/run-unittests.py
diff options
context:
space:
mode:
Diffstat (limited to 'Source/UnitTests/run-unittests.py')
-rw-r--r--Source/UnitTests/run-unittests.py124
1 files changed, 124 insertions, 0 deletions
diff --git a/Source/UnitTests/run-unittests.py b/Source/UnitTests/run-unittests.py
new file mode 100644
index 00000000..be906edd
--- /dev/null
+++ b/Source/UnitTests/run-unittests.py
@@ -0,0 +1,124 @@
+#!/usr/bin/env python
+"""
+This is a simple script to invoke nunit-console.exe
+on Windows or Linux on all UnitTest libraries.
+"""
+import argparse
+import logging
+import os
+import subprocess
+import sys
+
+class ReturnCode:
+ SUCCESS = 0
+ CONFIG_ERROR = 1
+ RUN_ERROR = 2
+
+
+def main(args):
+ parser = argparse.ArgumentParser(description=__doc__)
+ parser.add_argument('BuildType', choices=['Release', 'Debug'],
+ help='Build type of unit test libraries')
+ parser.add_argument('-l','--log-level',
+ choices=['critical', 'error', 'warning', 'info', 'debug'],
+ default='info',
+ dest='log_level',
+ help='Logging level. Default %(default)s')
+ parser.add_argument('--nunit-console-path', default='',
+ help='Path to nunit-console tool. If not set the script will try to guess its location',
+ dest='nunit_console_path'
+ )
+ parser.add_argument('-e', '--nunit-console-extra-args', action='append',
+ help='Pass extra arguments to nunit-console. This can be used multiple times',
+ default=[],
+ dest='nunit_console_extra_args'
+ )
+ parser.add_argument('--no-progress',
+ action='store_true',
+ dest='no_progress',
+ help='Suppress nunit-console progress information')
+
+
+ parsedArgs = parser.parse_args(args)
+ logging.basicConfig(level=getattr(logging, parsedArgs.log_level.upper()))
+ buildType=parsedArgs.BuildType
+
+ logging.info('Build type is {}'.format(buildType))
+
+ if parsedArgs.no_progress:
+ parsedArgs.nunit_console_extra_args.append('-nodots')
+
+ logging.info('Extra arguments to nunit-console "{}"'.format(parsedArgs.nunit_console_extra_args))
+
+ UnitTestDirRoot = os.path.dirname(os.path.abspath(__file__))
+
+ # Find nunit-console.exe
+ if parsedArgs.nunit_console_path == "":
+ # Try to guess where the tool is
+ nunitConsolePath = os.path.join(os.path.join(UnitTestDirRoot,'..'),
+ "packages",
+ "NUnit.Runners.2.6.3",
+ "tools",
+ "nunit-console.exe"
+ )
+ # Mono needs the path to be absolute
+ nunitConsolePath = os.path.abspath(nunitConsolePath)
+ else:
+ nunitConsolePath = parsedArgs.nunit_console_path
+
+ logging.info('Looking for NUnit console at "{}"'.format(nunitConsolePath))
+ if not os.path.exists(nunitConsolePath):
+ logging.error('Could not find NUnit console tool')
+ return ReturnCode.CONFIG_ERROR
+
+ # Find unit test libraries
+ unitTestLibraries = [ ]
+ logging.info('Searching for Unit test libraries in "{}"'.format(UnitTestDirRoot))
+ for (dirpath, dirnames, filenames) in os.walk(UnitTestDirRoot):
+
+ # Search current directory for dll with correct suffix
+ for filename in filenames:
+ if filename.endswith('Tests.dll'):
+ logging.debug('Found "{}" checking build type'.format(filename))
+
+ pathComponents = dirpath.split(os.path.sep)
+ fullPath = os.path.join(dirpath, filename)
+ try:
+ buildTypeIndex = pathComponents.index(buildType)
+ if buildTypeIndex == 0 or pathComponents[buildTypeIndex -1] != 'bin':
+ continue
+
+ logging.info('Using "{}"'.format(fullPath))
+ unitTestLibraries.append(fullPath)
+ except ValueError:
+ pass
+
+ # Run Unit tests
+ if len(unitTestLibraries) == 0:
+ logging.error('No Unit test libraries were found')
+ return ReturnCode.CONFIG_ERROR
+
+ cmd = []
+
+ if os.name == 'posix':
+ cmd.append('mono')
+
+ cmd.extend([nunitConsolePath, '-nologo'])
+
+ if len(parsedArgs.nunit_console_extra_args) > 0:
+ cmd.extend(parsedArgs.nunit_console_extra_args)
+
+ cmd.extend(unitTestLibraries)
+ logging.info('Running "{}"'.format(cmd))
+ exitCode = subprocess.call(cmd)
+ if exitCode != 0:
+ logging.error('FAILED!')
+ return ReturnCode.RUN_ERROR
+ else:
+ logging.info('Succeeded')
+
+ return ReturnCode.SUCCESS
+
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv[1:]))