|
6 | 6 | import re |
7 | 7 | from distutils.dir_util import copy_tree |
8 | 8 |
|
9 | | -# テスト事前準備 |
| 9 | +TEST_DIR = 'tests' |
| 10 | +TEST_TMP_DIR = './tmp_tests' |
10 | 11 |
|
11 | | -# テスト実行のためのtmpディレクトリを作成し、testsをコピーする |
12 | | -os.mkdir('./tmp_tests') |
13 | | -copy_tree('./tests/', './tmp_tests') |
14 | | -execute_dir = [] |
15 | | -exit_status = 0 |
16 | 12 |
|
17 | | -# 各テストファイル毎に、テスト対象ソースと共通ライブラリをテストファイルと同一のディレクトリに複製する。 |
18 | | -for name in glob.iglob('tmp_tests/**/test_*.py', recursive=True): |
| 13 | +def exec_test(target_dir): |
| 14 | + print(target_dir) |
| 15 | + exit_status = 0 |
| 16 | + try: |
| 17 | + subprocess.check_call(['green', '-vv', '--processes', '1', target_dir]) |
| 18 | + except subprocess.CalledProcessError: |
| 19 | + exit_status = 1 |
| 20 | + |
| 21 | + return exit_status |
| 22 | + |
| 23 | + |
| 24 | +def copy_required_files(path): |
19 | 25 | # テストの実行ディレクトリパスを取得 |
20 | | - test_dir = './' + name[:name.rfind('/')] |
21 | | - # テストの実行ディレクトリを追加 |
22 | | - execute_dir.append(test_dir) |
| 26 | + test_dir = path[:path.rfind('/')] |
| 27 | + |
23 | 28 | # テスト対象ソースを複製(対象ソースは tests 配下と同一構造の src ディレクトリ配下が対象) |
24 | 29 | copy_tree(re.sub(r'^\./tmp_tests', './src', test_dir), test_dir) |
| 30 | + |
25 | 31 | # 共通ライブラリを複製 |
26 | 32 | copy_tree('./src/common', test_dir) |
| 33 | + |
27 | 34 | # 共通ライブラリを複製 |
28 | 35 | copy_tree('./tests/tests_common', test_dir) |
29 | 36 |
|
30 | | -for name in execute_dir: |
31 | | - try: |
32 | | - subprocess.check_call(['green', name]) |
33 | | - except subprocess.CalledProcessError: |
34 | | - exit_status = 1 |
35 | 37 |
|
36 | | -# tmpディレクトリは削除 |
37 | | -shutil.rmtree('./tmp_tests') |
| 38 | +def main(): |
| 39 | + # テスト事前準備 |
| 40 | + if os.path.isdir(TEST_TMP_DIR): |
| 41 | + shutil.rmtree(TEST_TMP_DIR) |
| 42 | + |
| 43 | + # テスト実行のためのtmpディレクトリを作成し、testsをコピーする |
| 44 | + os.mkdir(TEST_TMP_DIR) |
| 45 | + copy_tree(TEST_DIR, TEST_TMP_DIR) |
| 46 | + |
| 47 | + # 引数でファイル名を受け取っている場合は変数にセットする |
| 48 | + target_file_path = sys.argv[1] if len(sys.argv) == 2 else None |
| 49 | + |
| 50 | + if target_file_path: |
| 51 | + # tmpフォルダ上の指定されたファイルのパスを取得 |
| 52 | + exec_file = TEST_TMP_DIR + target_file_path[(target_file_path.find(TEST_DIR) + len(TEST_DIR)):] |
| 53 | + exec_dir = exec_file[:exec_file.rfind('/')] |
| 54 | + copy_required_files(exec_file) |
| 55 | + else: |
| 56 | + exec_dir = TEST_TMP_DIR |
| 57 | + |
| 58 | + for name in glob.iglob(TEST_TMP_DIR + '/**/test_*.py', recursive=True): |
| 59 | + copy_required_files(name) |
| 60 | + |
| 61 | + result = exec_test(exec_dir) |
| 62 | + |
| 63 | + # tmpディレクトリは削除 |
| 64 | + |
| 65 | + shutil.rmtree(TEST_TMP_DIR) |
| 66 | + sys.exit(result) |
| 67 | + |
38 | 68 |
|
39 | | -sys.exit(exit_status) |
| 69 | +main() |
0 commit comments