1092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks# Copyright 2017, The Android Open Source Project
2092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks#
3092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks# Licensed under the Apache License, Version 2.0 (the "License");
4092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks# you may not use this file except in compliance with the License.
5092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks# You may obtain a copy of the License at
6092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks#
7092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks# http://www.apache.org/licenses/LICENSE-2.0
8092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks#
9092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks# Unless required by applicable law or agreed to in writing, software
10092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks# distributed under the License is distributed on an "AS IS" BASIS,
11092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks# See the License for the specific language governing permissions and
13092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks# limitations under the License.
14092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
15092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
16092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks"""Generates necessary files for unit test versions for testing.
17092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
18092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur EubanksAfter adding/changing RenderScript unit tests, run `python RSUnitTests.py`
19092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanksto ensure that forward/backward compatibility tests run properly.
20092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
21092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur EubanksThis file is so when updating/adding unit tests there is one central location
22092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanksfor managing the list of unit tests and their versions.
23092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
24092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur EubanksThis is necessary since forward compatibility unit tests are chosen at compile
25092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubankstime where backward compatibility tests are chosen at runtime.
26092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
27092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur EubanksGenerates a Java file for backward compatibility testing.
28092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur EubanksGenerates an Android.mk file for forward compatibility testing.
29092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks"""
30092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
31092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
320d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksimport shutil
33092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanksimport sys
34092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanksimport os
35092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
36092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
37c07967f88c517044df738a984a26946d9657d20dArthur Eubanks# List of platform API versions and the tests that pass on that version as
38c07967f88c517044df738a984a26946d9657d20dArthur Eubanks# well as all newer versions (e.g. tests under 23 also pass on 24, 25, etc.).
39c07967f88c517044df738a984a26946d9657d20dArthur Eubanks# The Slang version that correctly compiles the test is assumed to be the
40c07967f88c517044df738a984a26946d9657d20dArthur Eubanks# same build tools version unless otherwise specified in
41c07967f88c517044df738a984a26946d9657d20dArthur Eubanks# UNIT_TEST_TOOLS_VERSIONS below.
42c07967f88c517044df738a984a26946d9657d20dArthur Eubanks# The test name must correspond to a UT_{}.java file.
4306af00c4009025b8e652a503c0a47340a239debaArthur Eubanks# e.g. alloc -> UT_alloc.java
44c07967f88c517044df738a984a26946d9657d20dArthur EubanksUNIT_TEST_PLATFORM_VERSIONS = {
45092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    19: [
46092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'alloc',
47092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'array_alloc',
48092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'array_init',
49092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'atomic',
50092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'bitfield',
51092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'bug_char',
52092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'check_dims',
53092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'clamp_relaxed',
54092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'clamp',
55092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'constant',
56092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'convert_relaxed',
57092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'convert',
58092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'copy_test',
59092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'element',
60092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'foreach',
61092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'foreach_bounds',
62092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'fp_mad',
636cac172ca1fedbed3a1b2b3ddd82856aa6345393Arthur Eubanks        'instance',
64092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'int4',
65092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'kernel',
66092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'kernel_struct',
67092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'math',
68092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'min',
69092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'noroot',
70092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'primitives',
71092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'refcount',
72a5eaa3f317eca21b72429b0616acc0882852efdcDavid Gross        'reflection3264',
73092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'rsdebug',
74092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'rstime',
75092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'rstypes',
76092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'sampler',
77092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'static_globals',
78092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'struct',
79092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'unsigned',
80092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'vector',
81092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    ],
82092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
83092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    21: [
84092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'foreach_multi',
85092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'math_agree',
86092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'math_conformance',
87092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    ],
88092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
89092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    23: [
906cac172ca1fedbed3a1b2b3ddd82856aa6345393Arthur Eubanks        'alloc_copy',
916cac172ca1fedbed3a1b2b3ddd82856aa6345393Arthur Eubanks        'alloc_copyPadded',
92092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'ctxt_default',
93092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'kernel2d',
94092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'kernel2d_oldstyle',
95092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'kernel3d',
96092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'rsdebug_23',
97092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'script_group2_gatherscatter',
98092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'script_group2_nochain',
99092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'script_group2_pointwise',
100092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    ],
101092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
102092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    24: [
103092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'fp16',
104092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'fp16_globals',
105092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'math_24',
106092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'math_fp16',
107092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'reduce_backward',
108092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'reduce',
109092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'rsdebug_24',
110092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'script_group2_float',
111092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'single_source_alloc',
112092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'single_source_ref_count',
113092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'single_source_script',
114092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'small_struct',
115092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'small_struct_2',
116092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    ],
117092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
118092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    26: [
119092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'blur_validation',
120092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks        'struct_field',
121dfdc0b8c7caad293a0a970a30d8dbec3b9fbdaf0Arthur Eubanks        'struct_field_simple',
122092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    ],
123092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks}
124092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
125092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
126c07967f88c517044df738a984a26946d9657d20dArthur Eubanks# List of tests and the build tools version they compile correctly on.
127c07967f88c517044df738a984a26946d9657d20dArthur Eubanks# The build tools version is the earliest build tools version that can
128c07967f88c517044df738a984a26946d9657d20dArthur Eubanks# compile it correctly, all versions newer than that version are also
129c07967f88c517044df738a984a26946d9657d20dArthur Eubanks# expected to compile correctly.
130c07967f88c517044df738a984a26946d9657d20dArthur Eubanks# Only to override the platform version in UNIT_TEST_PLATFORM_VERSIONS.
131c07967f88c517044df738a984a26946d9657d20dArthur Eubanks# Only affects forward compatibility tests.
132c07967f88c517044df738a984a26946d9657d20dArthur Eubanks# Useful for Slang regression fixes.
133c07967f88c517044df738a984a26946d9657d20dArthur EubanksUNIT_TEST_TOOLS_VERSIONS = {
134c07967f88c517044df738a984a26946d9657d20dArthur Eubanks    'reflection3264': 26,
135c07967f88c517044df738a984a26946d9657d20dArthur Eubanks}
136c07967f88c517044df738a984a26946d9657d20dArthur Eubanks
137c07967f88c517044df738a984a26946d9657d20dArthur Eubanks
1380d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks# Tests that only belong to RSTest_Compat (support lib tests)
1390d13f3929129bf7e34bde1ed3670195c37a180ebArthur EubanksSUPPORT_LIB_ONLY_UNIT_TESTS = {
1400d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks    'alloc_supportlib',
1410d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks    'apitest',
1420d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks}
1430d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
1440d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
1450d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks# Tests that are skipped in RSTest_Compat (support lib tests)
1460d13f3929129bf7e34bde1ed3670195c37a180ebArthur EubanksSUPPORT_LIB_IGNORE_TESTS = {
1470d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks    'fp16',
1480d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks    'fp16_globals',
1490d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks    'math_fp16',
1500d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks}
1510d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
1520d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
1530d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks# Dictionary mapping unit tests to the corresponding needed .rs files
1540d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks# Only needed if UT_{}.java does not map to {}.rs
155092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur EubanksUNIT_TEST_RS_FILES_OVERRIDE = {
1566cac172ca1fedbed3a1b2b3ddd82856aa6345393Arthur Eubanks    'alloc_copy': [],
1576cac172ca1fedbed3a1b2b3ddd82856aa6345393Arthur Eubanks    'alloc_copyPadded': [],
158092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    'blur_validation': [],
159092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    'script_group2_float': ['float_test.rs'],
160092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    'script_group2_gatherscatter': ['addup.rs'],
161092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    'script_group2_nochain': ['increment.rs', 'increment2.rs', 'double.rs'],
162092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    'script_group2_pointwise': ['increment.rs', 'double.rs'],
163092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks}
164092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
165092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
166092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks# List of API versions and the corresponding build tools release version
1670d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks# For use with forward compatibility testing
168092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur EubanksBUILD_TOOL_VERSIONS = {
169092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    21: '21.1.2',
170092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    22: '22.0.1',
171092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    23: '23.0.3',
172092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    24: '24.0.3',
173092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    25: '25.0.2',
174092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks}
175092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
176092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
1777c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks# ---------- Makefile generation ----------
1787c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
1797c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
1807c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanksdef WriteMakeCopyright(gen_file):
1817c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  """Writes the copyright for a Makefile to a file."""
1827c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  gen_file.write(
1837c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      '#\n'
1847c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      '# Copyright (C) 2017 The Android Open Source Project\n'
1857c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      '#\n'
1867c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      '# Licensed under the Apache License, Version 2.0 (the "License");\n'
1877c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      '# you may not use this file except in compliance with the License.\n'
1887c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      '# You may obtain a copy of the License at\n'
1897c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      '#\n'
1907c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      '#      http://www.apache.org/licenses/LICENSE-2.0\n'
1917c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      '#\n'
1927c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      '# Unless required by applicable law or agreed to in writing, software\n'
1937c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      '# distributed under the License is distributed on an "AS IS" BASIS,\n'
1947c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      '# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n'
1957c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      '# See the License for the specific language governing permissions and\n'
1967c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      '# limitations under the License.\n'
1977c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      '#\n\n'
1987c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  )
1997c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
2007c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
201adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanksdef WriteMakeSrcFiles(gen_file, api_version, src_dirs=['src'],
202c07967f88c517044df738a984a26946d9657d20dArthur Eubanks                      use_build_tools_version=False):
2037c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  """Writes applicable LOCAL_SRC_FILES to gen_file.
2047c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
2057c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  Includes everything under ./src, base UnitTest class, and test files.
2067c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
2077c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  api_version: only tests that can run on this version are added."""
2087c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  # Get all tests compatible with the build tool version
2097c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  # Compatible means build tool version >= test version
2107c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  tests = []
211c07967f88c517044df738a984a26946d9657d20dArthur Eubanks  for test_version, tests_for_version in (
212c07967f88c517044df738a984a26946d9657d20dArthur Eubanks      UNIT_TEST_PLATFORM_VERSIONS.iteritems()):
2137c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks    if api_version >= test_version:
2147c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      tests.extend(tests_for_version)
215c07967f88c517044df738a984a26946d9657d20dArthur Eubanks  if use_build_tools_version:
216c07967f88c517044df738a984a26946d9657d20dArthur Eubanks    tests = [x for x in tests if (x not in UNIT_TEST_TOOLS_VERSIONS or
217c07967f88c517044df738a984a26946d9657d20dArthur Eubanks                                  test_version >= UNIT_TEST_TOOLS_VERSIONS[x])]
2187c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  tests = sorted(tests)
2197c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  gen_file.write(
220adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks      'LOCAL_SRC_FILES :=\\\n'
221adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks  )
222adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks  for src_dir in src_dirs:
223adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks    gen_file.write('    $(call all-java-files-under,{})\\\n'.format(src_dir))
224adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks
225adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks  gen_file.write(
226adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks      '    $(my_rs_unit_tests_path)/UnitTest.java\\\n'.format(src_dir)
2277c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  )
2287c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  for test in tests:
2297c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks    # Add the Java and corresponding rs files to LOCAL_SRC_FILES
2307c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks    gen_file.write(
231adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks        '    $(my_rs_unit_tests_path)/{}\\\n'.format(JavaFileForUnitTest(test))
2327c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks    )
2337c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks    for rs_file in RSFilesForUnitTest(test):
234adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks      gen_file.write('    $(my_rs_unit_tests_path)/{}\\\n'.format(rs_file))
2357c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
2367c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
2377c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks# ---------- Java file generation ----------
2387c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
2397c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
2407c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanksdef WriteJavaCopyright(gen_file):
2417c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  """Writes the copyright for a Java file to gen_file."""
2427c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  gen_file.write(
2437c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      '/*\n'
2447c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      ' * Copyright (C) 2017 The Android Open Source Project\n'
2457c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      ' *\n'
2467c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      ' * Licensed under the Apache License, Version 2.0 (the "License");\n'
2477c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      ' * you may not use this file except in compliance with the License.\n'
2487c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      ' * You may obtain a copy of the License at\n'
2497c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      ' *\n'
2507c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      ' *      http://www.apache.org/licenses/LICENSE-2.0\n'
2517c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      ' *\n'
2527c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      ' * Unless required by applicable law or agreed to in writing, software\n'
2537c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      ' * distributed under the License is distributed on an "AS IS" BASIS,\n'
2547c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      ' * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n'
2557c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      ' * See the License for the specific language governing permissions and\n'
2567c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      ' * limitations under the License.\n'
2577c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      ' */\n\n'
2587c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  )
2597c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
2607c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
2617c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks# ---------- Unit Test file functions ----------
2627c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
2637c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
2647c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanksdef JavaFileForUnitTest(test):
2657c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  """Returns the Java file name for a unit test."""
2667c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  return 'UT_{}.java'.format(test)
2677c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
2687c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
2697c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanksdef RSFilesForUnitTest(test):
2707c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  """Returns a list of .rs files associated with a test."""
2717c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  if test in UNIT_TEST_RS_FILES_OVERRIDE:
2727c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks    return UNIT_TEST_RS_FILES_OVERRIDE[test]
2737c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  else:
2747c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks    # Default is one .rs file with the same name as the input
2757c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks    return ['{}.rs'.format(test)]
2767c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
2777c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
2787c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks# ---------- Dirs ----------
2797c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
2807c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
281092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanksdef ThisScriptDir():
282092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  """Returns the directory this script is in."""
283092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  return os.path.dirname(os.path.realpath(__file__))
284092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
285092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
2860d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksdef UnitTestDir():
2870d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  """Returns the path to the directory containing the unit tests."""
2880d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  return os.path.join(ThisScriptDir(), 'src', 'com', 'android', 'rs',
2890d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks                      'unittest')
2900d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
2910d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
2927c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanksdef SupportLibOnlyTestDir():
2930d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  """Returns the path to the directory with unit tests for support lib."""
2940d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  return os.path.join(ThisScriptDir(), 'supportlibonlysrc', 'com',
2950d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks                      'android', 'rs', 'unittest')
2960d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
2970d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
2987c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanksdef SupportLibGenTestDir():
2990d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  """Returns the path to the directory with unit tests for support lib."""
3000d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  return os.path.join(ThisScriptDir(), 'supportlibsrc_gen', 'com',
3010d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks                      'android', 'rs', 'unittest')
3020d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
3030d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
3047c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks# ---------- RSTest_Compat/RSTest_Compat19 test generation ----------
3057c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
3067c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
3070d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksdef AllUnitTestsExceptSupportLibOnly():
3080d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  """Returns a set of all unit tests except SUPPORT_LIB_ONLY_UNIT_TESTS."""
3090d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  ret = set()
310c07967f88c517044df738a984a26946d9657d20dArthur Eubanks  for _, tests in UNIT_TEST_PLATFORM_VERSIONS.iteritems():
3110d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks    ret.update(tests)
3120d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  return ret
3130d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
3140d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
3150d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksdef CopyUnitTestJavaFileToSupportLibTest(java_file_name, java_file_dir):
3160d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  """Copies the Java file to the support lib dir.
3170d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
3180d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  Replaces RenderScript imports with corresponding support lib imports."""
3190d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  in_path = os.path.join(java_file_dir, java_file_name)
3207c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  out_path = os.path.join(SupportLibGenTestDir(), java_file_name)
3210d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  with open(in_path, 'r') as in_file, open(out_path, 'w') as out_file:
3220d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks    out_file.write(
3230d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks        '// This file is automatically generated from\n'
3240d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks        '// frameworks/rs/tests/java_api/RSUnitTests/RSUnitTests.py\n'
3250d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks    )
3260d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks    for line in in_file.readlines():
3270d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks      if line.startswith('import android.renderscript.'):
3280d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks        line = line.replace('android.renderscript.',
3290d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks                            'android.support.v8.renderscript.')
3300d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks      out_file.write(line)
3310d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
3320d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
3330d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksdef CopyUnitTestRSToSupportLibTest(rs_file_name, rs_file_dir):
3340d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  """Copies the .rs to the support lib dir."""
3350d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  in_path = os.path.join(rs_file_dir, rs_file_name)
3367c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  out_path = os.path.join(SupportLibGenTestDir(), rs_file_name)
3370d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  with open(out_path, 'w') as out_file:
3380d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks    out_file.write(
3390d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks        '// This file is automatically generated from\n'
3400d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks        '// frameworks/rs/tests/java_api/RSUnitTests/RSUnitTests.py\n'
3410d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks    )
3420d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks    with open(in_path, 'r') as in_file:
3430d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks      out_file.write(in_file.read())
3440d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
3450d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
3460d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksdef CopySharedRshToSupportLibTest():
3470d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  """Copies shared.rsh to the support lib dir.
3480d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
3490d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  Adds a #define RSTEST_COMPAT at the end."""
3500d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  shared_rsh = 'shared.rsh'
3510d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  CopyUnitTestRSToSupportLibTest(shared_rsh, UnitTestDir())
3527c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  with open(os.path.join(SupportLibGenTestDir(), shared_rsh), 'a') as shared:
3530d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks    shared.write('\n#define RSTEST_COMPAT\n')
3540d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
3550d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
3560d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksdef CopyUnitTestToSupportLibTest(test, test_dir):
3570d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  """Copies all files corresponding to a unit test to support lib dir."""
3580d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  CopyUnitTestJavaFileToSupportLibTest(JavaFileForUnitTest(test), test_dir)
3590d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  for rs in RSFilesForUnitTest(test):
3600d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks    CopyUnitTestRSToSupportLibTest(rs, test_dir)
3610d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
3620d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
3630d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksdef GenerateSupportLibUnitTests():
3640d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  """Generates all support lib unit tests."""
3657c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  if os.path.exists(SupportLibGenTestDir()):
3667c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks    shutil.rmtree(SupportLibGenTestDir())
3677c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  os.makedirs(SupportLibGenTestDir())
3680d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
3690d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  CopySharedRshToSupportLibTest()
3700d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  CopyUnitTestJavaFileToSupportLibTest('UnitTest.java', UnitTestDir())
3710d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
3720d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  for test in AllUnitTestsExceptSupportLibOnly() - SUPPORT_LIB_IGNORE_TESTS:
3730d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks    CopyUnitTestToSupportLibTest(test, UnitTestDir())
3740d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
3750d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  for test in SUPPORT_LIB_ONLY_UNIT_TESTS:
3767c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks    CopyUnitTestToSupportLibTest(test, SupportLibOnlyTestDir())
3770d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
3780d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  print ('Generated support lib tests at {}'
3797c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks         .format(SupportLibGenTestDir()))
3800d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
3810d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks
3827c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks# ---------- RSTest_Compat19 ----------
3837c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
3847c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
3857c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanksdef WriteSupportLib19Makefile(gen_file):
3867c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  """Writes the Makefile for support lib 19 testing."""
3877c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  WriteMakeCopyright(gen_file)
388092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  gen_file.write(
3897c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      '# This file is auto-generated by frameworks/rs/tests/java_api/RSUnitTests/RSUnitTests.py.\n'
3907c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      '# To change unit tests version, please run the Python script above.\n\n'
3917c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      'LOCAL_PATH := $(call my-dir)\n'
3927c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      'include $(CLEAR_VARS)\n\n'
3937c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      'LOCAL_PACKAGE_NAME := RSTest_Compat19\n'
3947c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      'LOCAL_MODULE_TAGS := tests\n\n'
3957c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      'LOCAL_STATIC_JAVA_LIBRARIES := \\\n'
3967c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      '    android-support-test \\\n'
3977c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      '    android-support-v8-renderscript \\\n\n'
3987c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      'LOCAL_RENDERSCRIPT_TARGET_API := 19\n'
3997c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      'LOCAL_RENDERSCRIPT_COMPATIBILITY := true\n'
4007c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      'LOCAL_RENDERSCRIPT_FLAGS := -rs-package-name=android.support.v8.renderscript\n'
4017c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      'LOCAL_MIN_SDK_VERSION := 8\n\n'
4027c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      'my_rs_unit_tests_path := ../RSUnitTests/supportlibsrc_gen/com/android/rs/unittest\n'
4037c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  )
4047c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  WriteMakeSrcFiles(gen_file, 19)
4057c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  gen_file.write(
4067c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      '\n'
4077c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      'include $(BUILD_PACKAGE)\n\n'
4087c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      'my_rs_unit_tests_path :=\n\n'
409092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  )
410092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
411092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
4127c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanksdef SupportLib19MakefileLocation():
4137c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  """Returns the location of Makefile for backward compatibility 19 testing."""
4147c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  return os.path.join(ThisScriptDir(), '..', 'RSTest_CompatLib19', 'Android.mk')
41506af00c4009025b8e652a503c0a47340a239debaArthur Eubanks
41606af00c4009025b8e652a503c0a47340a239debaArthur Eubanks
4177c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanksdef GenerateSupportLib19():
4183020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks  """Generates the necessary file for Support Library tests (19)."""
4197c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  with open(SupportLib19MakefileLocation(), 'w') as gen_file:
4207c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks    WriteSupportLib19Makefile(gen_file)
4217c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  print ('Generated support lib (19) Makefile at {}'
4227c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks         .format(SupportLib19MakefileLocation()))
42306af00c4009025b8e652a503c0a47340a239debaArthur Eubanks
42406af00c4009025b8e652a503c0a47340a239debaArthur Eubanks
4257c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks# ---------- RSTestForward ----------
4267c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
42706af00c4009025b8e652a503c0a47340a239debaArthur Eubanks
4283020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanksdef ForwardTargetName(build_tool_version_name):
4293020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks  """Returns the target name for a forward compatibility build tool name."""
4303020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks  make_target_name = 'RSTestForward_{}'.format(build_tool_version_name)
4313020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks  make_target_name = make_target_name.replace('.', '_')
4323020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks  return make_target_name
4333020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks
4343020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks
435ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanksdef ForwardDirLocation(build_tool_version_name):
436ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks  """Returns location of directory for forward compatibility testing."""
437ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks  return os.path.join(ThisScriptDir(), '..', 'RSTestForward',
438ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks                      build_tool_version_name)
439ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks
440ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks
441adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanksdef ForwardJavaSrcLocation(build_tool_version_name):
442adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks  """Returns location of src directory for forward compatibility testing."""
443adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks  return os.path.join(ForwardDirLocation(build_tool_version_name), 'src')
444adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks
445adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks
446ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanksdef ForwardMakefileLocation(build_tool_version_name):
447092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  """Returns the location of the Makefile for forward compatibility testing."""
448ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks  return os.path.join(ForwardDirLocation(build_tool_version_name),
449ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks                      'Android.mk')
450ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks
451ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks
452ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanksdef ForwardAndroidManifestLocation(build_tool_version_name):
453ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks  """Returns AndroidManifest.xml location for forward compatibility testing."""
454ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks  return os.path.join(ForwardDirLocation(build_tool_version_name),
455ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks                      'AndroidManifest.xml')
456ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks
457ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks
458adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanksdef ForwardJavaApiVersionLocation(build_tool_version_name):
459adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks  """Returns Java version file location for forward compatibility testing."""
460adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks  return os.path.join(ForwardJavaSrcLocation(build_tool_version_name),
461adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks                      'RSForwardVersion.java')
462adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks
463adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks
464ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanksdef WriteForwardAndroidManifest(gen_file, package):
465adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks  """Writes forward compatibility AndroidManifest.xml to gen_file."""
466ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks  gen_file.write(
467ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '<?xml version="1.0" encoding="utf-8"?>\n'
468ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '<!-- Copyright (C) 2017 The Android Open Source Project\n'
469ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '\n'
470ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '     Licensed under the Apache License, Version 2.0 (the "License");\n'
471ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '     you may not use this file except in compliance with the License.\n'
472ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '     You may obtain a copy of the License at\n'
473ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '\n'
474ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '          http://www.apache.org/licenses/LICENSE-2.0\n'
475ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '\n'
476ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '     Unless required by applicable law or agreed to in writing, software\n'
477ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '     distributed under the License is distributed on an "AS IS" BASIS,\n'
478ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n'
479ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '     See the License for the specific language governing permissions and\n'
480ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '     limitations under the License.\n'
481ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '\n'
482ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '     This file is automatically generated by\n'
483ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '     frameworks/rs/tests/java_api/RSUnitTests/RSUnitTests.py.\n'
484ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '-->\n'
485ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '<manifest xmlns:android="http://schemas.android.com/apk/res/android"\n'
486ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '    package="{}">\n'
487ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '    <uses-sdk\n'
488ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '        android:minSdkVersion="21"\n'
489ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '        android:targetSdkVersion="26" />\n'
490ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '\n'
491ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '    <application\n'
492ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '        android:label="RSTestForward">\n'
493ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '        <uses-library android:name="android.test.runner" />\n'
494ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '    </application>\n'
495ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '\n'
496ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '    <instrumentation\n'
497ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '        android:name="android.support.test.runner.AndroidJUnitRunner"\n'
498ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '        android:targetPackage="{}"\n'
499ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '        android:label="RenderScript Forward Compatibility Tests" />\n'
500ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '</manifest>\n'.format(package, package)
501ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks  )
502092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
503092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
504adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanksdef WriteForwardToolsVersion(gen_file, version):
505adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks  """Writes forward compatibility Java class with tools version as String."""
506adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks  WriteJavaCopyright(gen_file)
507adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks  gen_file.write(
508adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks      'package com.android.rs.testforward;\n\n'
509adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks      'public class RSForwardVersion {{\n'
510adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks      '    public static final String VERSION = "{}";\n'
511adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks      '}}\n'.format(version)
512adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks  )
513adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks
514adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks
515ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanksdef WriteForwardMakefile(gen_file, build_tool_version, build_tool_version_name):
516092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  """Writes the Makefile for forward compatibility testing.
517092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
518092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  Makefile contains a build target per build tool version
519092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  for forward compatibility testing based on the unit test list at the
520092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  top of this file."""
521092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  WriteMakeCopyright(gen_file)
522092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  gen_file.write(
523092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks      '# This file is auto-generated by frameworks/rs/tests/java_api/RSUnitTests/RSUnitTests.py.\n'
524092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks      '# To change unit tests version, please run the Python script above.\n\n'
5253020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks      'ifneq ($(ENABLE_RSTESTS),)\n\n'
526092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks      'LOCAL_PATH := $(call my-dir)\n'
527ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      'my_rs_unit_tests_path := ../../RSUnitTests/src/com/android/rs/unittest\n'
528092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  )
529ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks  make_target_name = ForwardTargetName(build_tool_version_name)
530092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  gen_file.write(
531092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks      '\n'
532ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '# RSTestForward for build tool version {}\n\n'
533ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      'include $(CLEAR_VARS)\n\n'
534ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      'LOCAL_MODULE_TAGS := tests\n'
535ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      'LOCAL_STATIC_JAVA_LIBRARIES := android-support-test\n'
536ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      'LOCAL_COMPATIBILITY_SUITE := device-tests\n'
537ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      'LOCAL_RENDERSCRIPT_TARGET_API := 0\n'
538ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      'LOCAL_PACKAGE_NAME := {}\n'
539ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      'my_rs_path := $(TOP)/prebuilts/renderscript/host/linux-x86/{}\n'
540ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      'LOCAL_RENDERSCRIPT_CC := $(my_rs_path)/bin/llvm-rs-cc\n'
541ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      'LOCAL_RENDERSCRIPT_INCLUDES_OVERRIDE := $(my_rs_path)/include $(my_rs_path)/clang-include\n'
542ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      'my_rs_path :=\n'.format(
543ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks          build_tool_version_name, make_target_name, build_tool_version_name
544ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      )
545ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks  )
546adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks  WriteMakeSrcFiles(gen_file, build_tool_version, ['../src', 'src'], True)
547ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks  gen_file.write(
548ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      '\n'
549ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      'include $(BUILD_PACKAGE)\n\n'
5503020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks      'my_rs_unit_tests_path :=\n\n'
551ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      'endif\n'
552092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  )
553092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
554092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
5553020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanksdef ForwardMakeTargetsLocation():
5563020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks  """Returns the location of the file with all forward compatibility targets."""
5573020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks  return os.path.join(ThisScriptDir(), '..', 'RSTestForward', 'Targets.mk')
5583020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks
5593020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks
5603020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanksdef WriteForwardMakeTargets(gen_file):
5613020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks  """Writes forward compatibility make target names to gen_file."""
5623020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks  gen_file.write('RSTESTFORWARD_TARGETS := \\\n')
5633020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks  for build_tool_version_name in sorted(BUILD_TOOL_VERSIONS.values()):
5643020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks    make_target_name = ForwardTargetName(build_tool_version_name)
5653020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks    gen_file.write('    {} \\\n'.format(make_target_name))
5663020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks
5673020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks
568092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanksdef GenerateForward():
569092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  """Generates the necessary file for forward compatibility testing."""
570ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks  for build_tool_version in sorted(BUILD_TOOL_VERSIONS.keys()):
571ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks    build_tool_version_name = BUILD_TOOL_VERSIONS[build_tool_version]
572ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks    if not os.path.exists(ForwardDirLocation(build_tool_version_name)):
573ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      os.mkdir(ForwardDirLocation(build_tool_version_name))
574adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks      os.mkdir(ForwardJavaSrcLocation(build_tool_version_name))
575ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks    with open(ForwardMakefileLocation(build_tool_version_name), 'w') as gen_file:
576ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      WriteForwardMakefile(gen_file, build_tool_version, build_tool_version_name)
577ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks    print ('Generated forward compatibility Makefile at {}'
578ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks           .format(ForwardMakefileLocation(build_tool_version_name)))
579ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks    with open(ForwardAndroidManifestLocation(build_tool_version_name), 'w') as gen_file:
580ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      package = 'com.android.rs.testforward{}'.format(build_tool_version)
581ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks      WriteForwardAndroidManifest(gen_file, package)
582ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks    print ('Generated forward compatibility AndroidManifest.xml at {}'
583ac9211a90779aaf785a3f752a80837f01f0f00aeArthur Eubanks           .format(ForwardAndroidManifestLocation(build_tool_version_name)))
584adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks    with open(ForwardJavaApiVersionLocation(build_tool_version_name), 'w') as gen_file:
585adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks      WriteForwardToolsVersion(gen_file, build_tool_version)
586adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks    print ('Generated forward compatibility RSForwardVersion.java at {}'
587adcb677e23bc0ee61f482e599a5091b0804b6e33Arthur Eubanks           .format(ForwardJavaApiVersionLocation(build_tool_version_name)))
5883020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks  with open(ForwardMakeTargetsLocation(), 'w') as gen_file:
5893020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks    WriteForwardMakeTargets(gen_file)
5903020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks  print ('Generated forward compatibility targets at {}'
5913020398bb0296c065b6224a9dfca09c203973fdbArthur Eubanks         .format(ForwardMakeTargetsLocation()))
592092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
593092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
5947c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks# ---------- RSTestBackward ----------
5957c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
5967c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
597092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanksdef BackwardJavaFileLocation():
598092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  """Returns the location of Java file for backward compatibility testing."""
599092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  return os.path.join(ThisScriptDir(), '..', 'RSTestBackward', 'src', 'com',
600092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks                      'android', 'rs', 'testbackward', 'RSTests.java')
601092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
602092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
60306af00c4009025b8e652a503c0a47340a239debaArthur Eubanksdef Backward19JavaFileLocation():
60406af00c4009025b8e652a503c0a47340a239debaArthur Eubanks  """Returns the location of Java file for backward compatibility 19 testing."""
60506af00c4009025b8e652a503c0a47340a239debaArthur Eubanks  return os.path.join(ThisScriptDir(), '..', 'RSTestBackward19', 'src', 'com',
60606af00c4009025b8e652a503c0a47340a239debaArthur Eubanks                      'android', 'rs', 'testbackward19', 'RSTests.java')
60706af00c4009025b8e652a503c0a47340a239debaArthur Eubanks
60806af00c4009025b8e652a503c0a47340a239debaArthur Eubanks
60906af00c4009025b8e652a503c0a47340a239debaArthur Eubanksdef Backward19MakefileLocation():
61006af00c4009025b8e652a503c0a47340a239debaArthur Eubanks  """Returns the location of Makefile for backward compatibility 19 testing."""
61106af00c4009025b8e652a503c0a47340a239debaArthur Eubanks  return os.path.join(ThisScriptDir(), '..', 'RSTestBackward19', 'Android.mk')
61206af00c4009025b8e652a503c0a47340a239debaArthur Eubanks
61306af00c4009025b8e652a503c0a47340a239debaArthur Eubanks
61406af00c4009025b8e652a503c0a47340a239debaArthur Eubanksdef WriteBackwardJavaFile(gen_file, package, max_api_version=None):
615092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  """Writes the Java file for backward compatibility testing to gen_file.
616092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
617092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  Java file determines unit tests for backward compatibility
618092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  testing based on the unit test list at the top of this file."""
619092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  WriteJavaCopyright(gen_file)
620092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  gen_file.write(
62106af00c4009025b8e652a503c0a47340a239debaArthur Eubanks      'package {};\n'
622092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks      '\n'
623092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks      'import com.android.rs.unittest.*;\n'
624092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks      '\n'
625092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks      'import java.util.ArrayList;\n'
626092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks      '\n'
627092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks      '/**\n'
628092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks      ' * This class is auto-generated by frameworks/rs/tests/java_api/RSUnitTests/RSUnitTests.py.\n'
629092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks      ' * To change unit tests version, please run the Python script above.\n'
630092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks      ' */\n'
63106af00c4009025b8e652a503c0a47340a239debaArthur Eubanks      'public class RSTests {{\n'
63206af00c4009025b8e652a503c0a47340a239debaArthur Eubanks      '    public static Iterable<Class<? extends UnitTest>> getTestClassesForCurrentAPIVersion() {{\n'
633092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks      '        int thisApiVersion = android.os.Build.VERSION.SDK_INT;\n'
634092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks      '\n'
63506af00c4009025b8e652a503c0a47340a239debaArthur Eubanks      '        ArrayList<Class<? extends UnitTest>> validClasses = new ArrayList<>();'.format(
63606af00c4009025b8e652a503c0a47340a239debaArthur Eubanks          package
63706af00c4009025b8e652a503c0a47340a239debaArthur Eubanks      )
638092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  )
639c07967f88c517044df738a984a26946d9657d20dArthur Eubanks  for version in sorted(UNIT_TEST_PLATFORM_VERSIONS.keys()):
64006af00c4009025b8e652a503c0a47340a239debaArthur Eubanks    if max_api_version is None or version <= max_api_version:
641c07967f88c517044df738a984a26946d9657d20dArthur Eubanks      tests = sorted(UNIT_TEST_PLATFORM_VERSIONS[version])
642092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks      gen_file.write(
64306af00c4009025b8e652a503c0a47340a239debaArthur Eubanks          '\n\n        if (thisApiVersion >= {}) {{\n'.format(version)
644092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks      )
64506af00c4009025b8e652a503c0a47340a239debaArthur Eubanks      for test in tests:
64606af00c4009025b8e652a503c0a47340a239debaArthur Eubanks        gen_file.write(
64706af00c4009025b8e652a503c0a47340a239debaArthur Eubanks            '            validClasses.add(UT_{}.class);\n'.format(test)
64806af00c4009025b8e652a503c0a47340a239debaArthur Eubanks        )
64906af00c4009025b8e652a503c0a47340a239debaArthur Eubanks      gen_file.write('        }')
650092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  gen_file.write('\n\n        return validClasses;\n    }\n}\n')
651092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
652092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
65306af00c4009025b8e652a503c0a47340a239debaArthur Eubanksdef WriteBackward19Makefile(gen_file):
65406af00c4009025b8e652a503c0a47340a239debaArthur Eubanks  """Writes the Makefile for backward compatibility 19 testing."""
65506af00c4009025b8e652a503c0a47340a239debaArthur Eubanks  WriteMakeCopyright(gen_file)
65606af00c4009025b8e652a503c0a47340a239debaArthur Eubanks  gen_file.write(
65706af00c4009025b8e652a503c0a47340a239debaArthur Eubanks      '# This file is auto-generated by frameworks/rs/tests/java_api/RSUnitTests/RSUnitTests.py.\n'
65806af00c4009025b8e652a503c0a47340a239debaArthur Eubanks      '# To change unit tests version, please run the Python script above.\n\n'
65906af00c4009025b8e652a503c0a47340a239debaArthur Eubanks      'LOCAL_PATH := $(call my-dir)\n'
66006af00c4009025b8e652a503c0a47340a239debaArthur Eubanks      'include $(CLEAR_VARS)\n\n'
66106af00c4009025b8e652a503c0a47340a239debaArthur Eubanks      'LOCAL_MODULE_TAGS := tests\n'
66206af00c4009025b8e652a503c0a47340a239debaArthur Eubanks      'LOCAL_STATIC_JAVA_LIBRARIES := android-support-test\n'
66306af00c4009025b8e652a503c0a47340a239debaArthur Eubanks      'LOCAL_COMPATIBILITY_SUITE := device-tests\n'
66406af00c4009025b8e652a503c0a47340a239debaArthur Eubanks      'LOCAL_RENDERSCRIPT_TARGET_API := 19\n'
66506af00c4009025b8e652a503c0a47340a239debaArthur Eubanks      'LOCAL_MIN_SDK_VERSION := 17\n'
66606af00c4009025b8e652a503c0a47340a239debaArthur Eubanks      'LOCAL_PACKAGE_NAME := RSTestBackward19\n'
66706af00c4009025b8e652a503c0a47340a239debaArthur Eubanks      'my_rs_unit_tests_path := ../RSUnitTests/src/com/android/rs/unittest\n'
66806af00c4009025b8e652a503c0a47340a239debaArthur Eubanks  )
66906af00c4009025b8e652a503c0a47340a239debaArthur Eubanks  WriteMakeSrcFiles(gen_file, 19)
67006af00c4009025b8e652a503c0a47340a239debaArthur Eubanks  gen_file.write(
67106af00c4009025b8e652a503c0a47340a239debaArthur Eubanks      '\n'
67206af00c4009025b8e652a503c0a47340a239debaArthur Eubanks      'include $(BUILD_PACKAGE)\n\n'
67306af00c4009025b8e652a503c0a47340a239debaArthur Eubanks      'my_rs_unit_tests_path :=\n\n'
67406af00c4009025b8e652a503c0a47340a239debaArthur Eubanks  )
67506af00c4009025b8e652a503c0a47340a239debaArthur Eubanks
67606af00c4009025b8e652a503c0a47340a239debaArthur Eubanks
677092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanksdef GenerateBackward():
67806af00c4009025b8e652a503c0a47340a239debaArthur Eubanks  """Generates Java file for backward compatibility testing."""
679092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  with open(BackwardJavaFileLocation(), 'w') as gen_file:
68006af00c4009025b8e652a503c0a47340a239debaArthur Eubanks    WriteBackwardJavaFile(gen_file, 'com.android.rs.testbackward')
681092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  print ('Generated backward compatibility Java file at {}'
682092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks         .format(BackwardJavaFileLocation()))
683092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
684092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
68506af00c4009025b8e652a503c0a47340a239debaArthur Eubanksdef GenerateBackward19():
68606af00c4009025b8e652a503c0a47340a239debaArthur Eubanks  """Generates files for backward compatibility testing for API 19."""
68706af00c4009025b8e652a503c0a47340a239debaArthur Eubanks  with open(Backward19JavaFileLocation(), 'w') as gen_file:
68806af00c4009025b8e652a503c0a47340a239debaArthur Eubanks    WriteBackwardJavaFile(gen_file, 'com.android.rs.testbackward19', 19)
68906af00c4009025b8e652a503c0a47340a239debaArthur Eubanks  print ('Generated backward compatibility (19) Java file at {}'
69006af00c4009025b8e652a503c0a47340a239debaArthur Eubanks         .format(Backward19JavaFileLocation()))
69106af00c4009025b8e652a503c0a47340a239debaArthur Eubanks
69206af00c4009025b8e652a503c0a47340a239debaArthur Eubanks  with open(Backward19MakefileLocation(), 'w') as gen_file:
69306af00c4009025b8e652a503c0a47340a239debaArthur Eubanks    WriteBackward19Makefile(gen_file)
69406af00c4009025b8e652a503c0a47340a239debaArthur Eubanks  print ('Generated backward compatibility (19) Makefile at {}'
69506af00c4009025b8e652a503c0a47340a239debaArthur Eubanks         .format(Backward19MakefileLocation()))
69606af00c4009025b8e652a503c0a47340a239debaArthur Eubanks
69706af00c4009025b8e652a503c0a47340a239debaArthur Eubanks
6987c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks# ---------- Main ----------
6997c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
7007c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
701092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanksdef DisplayHelp():
702092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  """Prints help message."""
70306af00c4009025b8e652a503c0a47340a239debaArthur Eubanks  print >> sys.stderr, ('Usage: {} [forward] [backward] [backward19] [help|-h|--help]\n'
704092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks                        .format(sys.argv[0]))
70506af00c4009025b8e652a503c0a47340a239debaArthur Eubanks  print >> sys.stderr, ('[forward]: write forward compatibility Makefile to\n    {}\n'
706092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks                        .format(ForwardMakefileLocation()))
70706af00c4009025b8e652a503c0a47340a239debaArthur Eubanks  print >> sys.stderr, ('[backward]: write backward compatibility Java file to\n    {}\n'
708092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks                        .format(BackwardJavaFileLocation()))
70906af00c4009025b8e652a503c0a47340a239debaArthur Eubanks  print >> sys.stderr, ('[backward19]: write backward compatibility Java file (19) to\n    {}\n'
71006af00c4009025b8e652a503c0a47340a239debaArthur Eubanks                        .format(Backward19JavaFileLocation()))
71106af00c4009025b8e652a503c0a47340a239debaArthur Eubanks  print >> sys.stderr, ('[backward19]: write backward compatibility Makefile (19) to\n    {}\n'
71206af00c4009025b8e652a503c0a47340a239debaArthur Eubanks                        .format(Backward19MakefileLocation()))
7130d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks  print >> sys.stderr, ('[supportlib]: generate support lib unit tests to\n    {}\n'
7147c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks                        .format(SupportLibGenTestDir()))
7157c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks  print >> sys.stderr, ('[supportlib19]: generate support lib Makefile (19) to\n    {}\n'
7167c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks                        .format(SupportLib19MakefileLocation()))
71706af00c4009025b8e652a503c0a47340a239debaArthur Eubanks  print >> sys.stderr, 'if no options are chosen, then all files are generated'
718092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
719092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
720092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanksdef main():
721092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  """Parses sys.argv and does stuff."""
722092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  display_help = False
723092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  error = False
724092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  actions = []
725092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
726092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  for arg in sys.argv[1:]:
727092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    if arg in ('help', '-h', '--help'):
728092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks      display_help = True
729092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    elif arg == 'backward':
730092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks      actions.append(GenerateBackward)
73106af00c4009025b8e652a503c0a47340a239debaArthur Eubanks    elif arg == 'backward19':
73206af00c4009025b8e652a503c0a47340a239debaArthur Eubanks      actions.append(GenerateBackward19)
733092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    elif arg == 'forward':
734092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks      actions.append(GenerateForward)
7350d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks    elif arg == 'supportlib':
7360d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks      actions.append(GenerateSupportLibUnitTests)
7377c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks    elif arg == 'supportlib19':
7387c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks      actions.append(GenerateSupportLib19)
739092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    else:
740092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks      print >> sys.stderr, 'unrecognized arg: {}'.format(arg)
741092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks      error = True
742092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
743092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  if display_help or error:
744092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    DisplayHelp()
745092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  elif actions:
746092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    for action in actions:
747092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks      action()
748092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  else:
749092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    # No args - do default action.
750092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    GenerateBackward()
75106af00c4009025b8e652a503c0a47340a239debaArthur Eubanks    GenerateBackward19()
752092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks    GenerateForward()
7530d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks    GenerateSupportLibUnitTests()
7547c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks    GenerateSupportLib19()
7557c7c00b95e45df7a571922fa40a019fd384fc106Arthur Eubanks
756092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks
757092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanksif __name__ == '__main__':
758092aff8b365f1fdc9912cc7d41bf4c5e8016d8fdArthur Eubanks  main()
759