OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # | 2 # |
3 # Copyright 2015 The Chromium Authors. All rights reserved. | 3 # Copyright 2015 The Chromium Authors. All rights reserved. |
4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
6 | 6 |
7 """Creates a script to run an android test using build/android/test_runner.py. | 7 """Creates a script to run an android test using build/android/test_runner.py. |
8 """ | 8 """ |
9 | 9 |
10 import argparse | 10 import argparse |
11 import os | 11 import os |
| 12 import re |
12 import sys | 13 import sys |
13 | 14 |
14 from util import build_utils | 15 from util import build_utils |
15 | 16 |
16 SCRIPT_TEMPLATE = """\ | 17 SCRIPT_TEMPLATE = """\ |
17 #!/usr/bin/env python | 18 #!/usr/bin/env python |
18 # | 19 # |
19 # This file was generated by build/android/gyp/create_test_runner_script.py | 20 # This file was generated by build/android/gyp/create_test_runner_script.py |
20 | 21 |
21 import os | 22 import os |
(...skipping 13 matching lines...) Expand all Loading... |
35 for arg, path in test_runner_path_args: | 36 for arg, path in test_runner_path_args: |
36 test_runner_args.extend([arg, ResolvePath(path)]) | 37 test_runner_args.extend([arg, ResolvePath(path)]) |
37 | 38 |
38 os.execv(test_runner_path, | 39 os.execv(test_runner_path, |
39 [test_runner_path] + test_runner_args + sys.argv[1:]) | 40 [test_runner_path] + test_runner_args + sys.argv[1:]) |
40 | 41 |
41 if __name__ == '__main__': | 42 if __name__ == '__main__': |
42 sys.exit(main()) | 43 sys.exit(main()) |
43 """ | 44 """ |
44 | 45 |
| 46 |
| 47 def _GenerateAdditionalApksErrorString(incremental_apks): |
| 48 err_string = ('Apks that are listed as additional_apks for ' |
| 49 'another target cannot be incremental. Please add never_incremental to ' |
| 50 'the following apks: %s') |
| 51 return err_string % ', '.join(a for a in incremental_apks) |
| 52 |
| 53 |
45 def main(args): | 54 def main(args): |
46 parser = argparse.ArgumentParser() | 55 parser = argparse.ArgumentParser() |
47 parser.add_argument('--script-output-path', | 56 parser.add_argument('--script-output-path', |
48 help='Output path for executable script.') | 57 help='Output path for executable script.') |
49 parser.add_argument('--depfile', | 58 parser.add_argument('--depfile', |
50 help='Path to the depfile. This must be specified as ' | 59 help='Path to the depfile. This must be specified as ' |
51 "the action's first output.") | 60 "the action's first output.") |
52 parser.add_argument('--test-runner-path', | 61 parser.add_argument('--test-runner-path', |
53 help='Path to test_runner.py (optional).') | 62 help='Path to test_runner.py (optional).') |
54 # We need to intercept any test runner path arguments and make all | 63 # We need to intercept any test runner path arguments and make all |
55 # of the paths relative to the output script directory. | 64 # of the paths relative to the output script directory. |
56 group = parser.add_argument_group('Test runner path arguments.') | 65 group = parser.add_argument_group('Test runner path arguments.') |
57 group.add_argument('--additional-apk', action='append', | 66 group.add_argument('--additional-apk', action='append', |
58 dest='additional_apks', default=[]) | 67 dest='additional_apks', default=[]) |
59 group.add_argument('--additional-apk-list') | 68 group.add_argument('--additional-apk-list') |
| 69 group.add_argument('--additional-apk-incremental', action='append', |
| 70 dest='additional_apks_incremental', default=[]) |
60 group.add_argument('--apk-under-test') | 71 group.add_argument('--apk-under-test') |
61 group.add_argument('--apk-under-test-incremental-install-script') | 72 group.add_argument('--apk-under-test-incremental-install-script') |
62 group.add_argument('--executable-dist-dir') | 73 group.add_argument('--executable-dist-dir') |
63 group.add_argument('--isolate-file-path') | 74 group.add_argument('--isolate-file-path') |
64 group.add_argument('--output-directory') | 75 group.add_argument('--output-directory') |
65 group.add_argument('--runtime-deps-path') | 76 group.add_argument('--runtime-deps-path') |
66 group.add_argument('--test-apk') | 77 group.add_argument('--test-apk') |
67 group.add_argument('--test-jar') | 78 group.add_argument('--test-jar') |
68 group.add_argument('--test-apk-incremental-install-script') | 79 group.add_argument('--test-apk-incremental-install-script') |
69 group.add_argument('--coverage-dir') | 80 group.add_argument('--coverage-dir') |
70 args, test_runner_args = parser.parse_known_args( | 81 args, test_runner_args = parser.parse_known_args( |
71 build_utils.ExpandFileArgs(args)) | 82 build_utils.ExpandFileArgs(args)) |
72 | 83 |
73 def RelativizePathToScript(path): | 84 def RelativizePathToScript(path): |
74 """Returns the path relative to the output script directory.""" | 85 """Returns the path relative to the output script directory.""" |
75 return os.path.relpath(path, os.path.dirname(args.script_output_path)) | 86 return os.path.relpath(path, os.path.dirname(args.script_output_path)) |
76 | 87 |
77 test_runner_path = args.test_runner_path or os.path.join( | 88 test_runner_path = args.test_runner_path or os.path.join( |
78 os.path.dirname(__file__), os.path.pardir, 'test_runner.py') | 89 os.path.dirname(__file__), os.path.pardir, 'test_runner.py') |
79 test_runner_path = RelativizePathToScript(test_runner_path) | 90 test_runner_path = RelativizePathToScript(test_runner_path) |
80 | 91 |
81 test_runner_path_args = [] | 92 test_runner_path_args = [] |
82 if args.additional_apk_list: | 93 if args.additional_apk_list: |
83 args.additional_apks.extend( | 94 args.additional_apks.extend( |
84 build_utils.ParseGnList(args.additional_apk_list)) | 95 build_utils.ParseGnList(args.additional_apk_list)) |
85 if args.additional_apks: | 96 if args.additional_apks: |
86 test_runner_path_args.extend( | 97 test_runner_path_args.extend( |
87 ('--additional-apk', RelativizePathToScript(a)) | 98 ('--additional-apk', RelativizePathToScript(a)) |
88 for a in args.additional_apks) | 99 for a in args.additional_apks) |
| 100 if args.additional_apks_incremental: |
| 101 bad_additional_apks = [a for a in args.additional_apks_incremental |
| 102 if a != 'None'] |
| 103 if bad_additional_apks: |
| 104 raise Exception(_GenerateAdditionalApksErrorString(bad_additional_apks)) |
89 if args.apk_under_test: | 105 if args.apk_under_test: |
90 test_runner_path_args.append( | 106 test_runner_path_args.append( |
91 ('--apk-under-test', RelativizePathToScript(args.apk_under_test))) | 107 ('--apk-under-test', RelativizePathToScript(args.apk_under_test))) |
92 if args.apk_under_test_incremental_install_script: | 108 if args.apk_under_test_incremental_install_script: |
93 test_runner_path_args.append( | 109 test_runner_path_args.append( |
94 ('--apk-under-test-incremental-install-script', | 110 ('--apk-under-test-incremental-install-script', |
95 RelativizePathToScript( | 111 RelativizePathToScript( |
96 args.apk_under_test_incremental_install_script))) | 112 args.apk_under_test_incremental_install_script))) |
97 if args.executable_dist_dir: | 113 if args.executable_dist_dir: |
98 test_runner_path_args.append( | 114 test_runner_path_args.append( |
(...skipping 28 matching lines...) Expand all Loading... |
127 test_runner_args=str(test_runner_args), | 143 test_runner_args=str(test_runner_args), |
128 test_runner_path_args=str(test_runner_path_args))) | 144 test_runner_path_args=str(test_runner_path_args))) |
129 | 145 |
130 os.chmod(args.script_output_path, 0750) | 146 os.chmod(args.script_output_path, 0750) |
131 | 147 |
132 if args.depfile: | 148 if args.depfile: |
133 build_utils.WriteDepfile(args.depfile, args.script_output_path) | 149 build_utils.WriteDepfile(args.depfile, args.script_output_path) |
134 | 150 |
135 if __name__ == '__main__': | 151 if __name__ == '__main__': |
136 sys.exit(main(sys.argv[1:])) | 152 sys.exit(main(sys.argv[1:])) |
OLD | NEW |