Commit | Line | Data |
---|---|---|
9cf643d1 PP |
1 | # The MIT License (MIT) |
2 | # | |
3 | # Copyright (c) 2016 Philippe Proulx <pproulx@efficios.com> | |
4 | # | |
5 | # Permission is hereby granted, free of charge, to any person obtaining a copy | |
6 | # of this software and associated documentation files (the "Software"), to deal | |
7 | # in the Software without restriction, including without limitation the rights | |
8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
9 | # copies of the Software, and to permit persons to whom the Software is | |
10 | # furnished to do so, subject to the following conditions: | |
11 | # | |
12 | # The above copyright notice and this permission notice shall be included in | |
13 | # all copies or substantial portions of the Software. | |
14 | # | |
15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |
21 | # THE SOFTWARE. | |
22 | ||
23 | from tap import TAPTestRunner | |
24 | import unittest | |
25 | import sys | |
274a82ad | 26 | import argparse |
9cf643d1 PP |
27 | |
28 | ||
29 | if __name__ == '__main__': | |
274a82ad | 30 | argparser = argparse.ArgumentParser() |
cfbd7cf3 FD |
31 | argparser.add_argument( |
32 | '-f', '--failfast', help='Stop on first fail or error', action='store_true' | |
33 | ) | |
a818a617 | 34 | |
cfbd7cf3 FD |
35 | argparser.add_argument( |
36 | 'start_dir', help='Base directory where to search for tests', type=str | |
37 | ) | |
a818a617 FD |
38 | |
39 | mut_exclu_group = argparser.add_mutually_exclusive_group(required=True) | |
40 | ||
cfbd7cf3 FD |
41 | mut_exclu_group.add_argument( |
42 | '-p', | |
43 | '--pattern', | |
44 | help='Glob-style pattern of test files to run ' '(e.g. test_event*.py)', | |
45 | type=str, | |
46 | ) | |
a818a617 | 47 | |
cfbd7cf3 FD |
48 | mut_exclu_group.add_argument( |
49 | '-t', | |
50 | '--test-case', | |
51 | help='Run a specfic test module name, test class ' | |
52 | 'name, or test method name ' | |
53 | '(e.g. test_event.EventTestCase.test_clock_value)', | |
54 | type=str, | |
55 | ) | |
274a82ad SM |
56 | |
57 | args = argparser.parse_args() | |
58 | ||
9cf643d1 | 59 | loader = unittest.TestLoader() |
b83084f5 | 60 | |
274a82ad SM |
61 | start_dir = args.start_dir |
62 | pattern = args.pattern | |
63 | failfast = args.failfast | |
a818a617 FD |
64 | test_case = args.test_case |
65 | ||
66 | if test_case: | |
67 | sys.path.append(start_dir) | |
68 | tests = loader.loadTestsFromName(test_case) | |
69 | elif pattern: | |
70 | tests = loader.discover(start_dir, pattern) | |
71 | else: | |
72 | # This will never happen because the mutual exclusion group has the | |
73 | # `required` parameter set to True. So one or the other must be set or | |
74 | # else it will fail to parse. | |
75 | sys.exit(1) | |
b83084f5 | 76 | |
644e0364 MJ |
77 | if tests.countTestCases() < 1: |
78 | print("No tests matching '%s' found in '%s'" % (pattern, start_dir)) | |
79 | sys.exit(1) | |
80 | ||
274a82ad | 81 | runner = TAPTestRunner(failfast=failfast) |
9cf643d1 PP |
82 | runner.set_stream(True) |
83 | runner.set_format('{method_name}') | |
84 | sys.exit(0 if runner.run(tests).wasSuccessful() else 1) |