import logging import os import sys import argparse from mjtest.environment import TestMode, Environment, TEST_MODES from mjtest.test.tests import TestSuite # adapted from http://stackoverflow.com/a/8527629 class LogLevelChoices(argparse.Action): CHOICES = ["error", "warn", "info", "debug"] def __call__(self, parser, namespace, values, option_string=None): if values: for value in values: if value not in self.CHOICES: message = ("invalid choice: {0!r} (choose from {1})" .format(value, ', '.join([repr(action) for action in self.CHOICES]))) raise argparse.ArgumentError(self, message) setattr(namespace, self.dest, values) if True:#__name__ == '__main__': parser = argparse.ArgumentParser(description="MiniJava test runner", add_help=True) parser.add_argument("mode", choices=TEST_MODES, help="What do you want to test?") if os.getenv("MJ_RUN", None) is None: parser.add_argument("mj_run", metavar="MJ_RUN", help="Command to run your MiniJava implementation, e.g. `mj/run`, " "can be omitted by assigning the environment variable MJ_RUN") #parser.add_argument("--tmp_dir", action="store_const", default="", const="tmp_dir", # help="Used temporary directory") #parser.add_argument("--test_dir", action="store_const", default="", const="test_dir", # help="Directory that contains all test cases, default is the 'tests' directory") parser.add_argument("--only_incorrect_tests", action="store_true", default=False, help="Only run the tests that were incorrect the last run") parser.add_argument("--produce_no_reports", action="store_true", default=False, help="Produce no long reports besides the command line output") parser.add_argument("--produce_all_reports", action="store_true", default=False, help="Produce reports also for correct test cases") parser.add_argument("--parallel", action="store_true", default=False, help="Run the tests in parallel") parser.add_argument("--output_no_incorrect_reports", action="store_true", default=False, help="Output the long report for every incorrect test case") #parser.add_argument("--timeout", action="store_const", default=30, const="timeout", # help="Abort a program after TIMEOUT seconds") #parser.add_argument("--report_dir", action="store_const", default="", const="report_dir", # help="Directory to store the reports in, default is 'reports'") parser.add_argument("--log_level", action=LogLevelChoices, default="warn", const="log_level", help="Logging level (error, warn, info or debug)") args = vars(parser.parse_args()) if os.getenv("MJ_RUN", None) is not None: args["mj_run"] = os.getenv("MJ_RUN") suite = TestSuite(Environment(**args)) ret = None try: ret = suite.run() finally: suite.env.clean_up() suite.store() if ret is None or ret.failed > 0: sys.exit(1) else: sys.exit(0)