Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 1 | #!/usr/bin/env python |
| 2 | # Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file |
| 3 | # for details. All rights reserved. Use of this source code is governed by a |
| 4 | # BSD-style license that can be found in the LICENSE file. |
| 5 | |
Jean-Marie Henaff | ce162f3 | 2017-10-04 10:39:27 +0200 | [diff] [blame] | 6 | import os |
Mathias Rav | 6d1a71c | 2018-04-24 13:35:41 +0200 | [diff] [blame] | 7 | import shutil |
| 8 | from string import Template |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 9 | |
Jean-Marie Henaff | ce162f3 | 2017-10-04 10:39:27 +0200 | [diff] [blame] | 10 | OUTPUT_DIR = os.path.join('build', 'generated', 'test', 'java', 'com', |
| 11 | 'android', 'tools', 'r8', 'art') |
mikaelpeltier | c2aa665 | 2017-10-06 12:53:37 +0200 | [diff] [blame] | 12 | TEST_DIR = os.path.join('tests', '2017-10-04', 'art') |
Mathias Rav | 6d1a71c | 2018-04-24 13:35:41 +0200 | [diff] [blame] | 13 | TOOLCHAINS = [ |
| 14 | ("dx", os.path.join(TEST_DIR, "dx")), |
Mathias Rav | 6d1a71c | 2018-04-24 13:35:41 +0200 | [diff] [blame] | 15 | ("none", os.path.join(TEST_DIR, "dx")), |
| 16 | ] |
Mathias Rav | 88ac49e | 2018-03-09 13:11:02 +0100 | [diff] [blame] | 17 | TOOLS = ["r8", "d8", "r8cf"] |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 18 | TEMPLATE = Template( |
| 19 | """// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file |
| 20 | // for details. All rights reserved. Use of this source code is governed by a |
| 21 | // BSD-style license that can be found in the LICENSE file. |
| 22 | package com.android.tools.r8.art.$testGeneratingToolchain.$compilerUnderTest; |
| 23 | |
| 24 | import static com.android.tools.r8.R8RunArtTestsTest.DexTool.$testGeneratingToolchainEnum; |
| 25 | |
| 26 | import com.android.tools.r8.R8RunArtTestsTest; |
| 27 | import org.junit.Test; |
| 28 | |
| 29 | /** |
| 30 | * Auto-generated test for the art $name test using the $testGeneratingToolchain toolchain. |
| 31 | * |
| 32 | * DO NOT EDIT THIS FILE. EDIT THE HERE DOCUMENT TEMPLATE IN tools/create_art_tests.py INSTEAD! |
| 33 | */ |
| 34 | public class $testClassName extends R8RunArtTestsTest { |
| 35 | |
| 36 | public $testClassName() { |
| 37 | super("$name", $testGeneratingToolchainEnum); |
| 38 | } |
| 39 | |
| 40 | @Test |
| 41 | public void run$testClassName() throws Throwable { |
| 42 | // For testing with other Art VMs than the default pass the VM version as a argument to |
Søren Gjesse | 8b7cca4 | 2018-01-17 11:58:13 +0100 | [diff] [blame] | 43 | // runArtTest, e.g. runArtTest(DexVm.ART_4_4_4_HOST, CompilerUnderTest.$compilerUnderTestEnum). |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 44 | runArtTest(CompilerUnderTest.$compilerUnderTestEnum); |
| 45 | } |
| 46 | } |
| 47 | """) |
| 48 | |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 49 | |
Mathias Rav | 6d1a71c | 2018-04-24 13:35:41 +0200 | [diff] [blame] | 50 | def get_test_configurations(): |
| 51 | for toolchain, source_dir in TOOLCHAINS: |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 52 | for tool in TOOLS: |
Tamas Kenez | c41d304 | 2017-06-01 17:26:08 +0200 | [diff] [blame] | 53 | if tool == "d8" and toolchain == "none": |
Tamas Kenez | 070843c | 2017-06-02 11:52:59 +0200 | [diff] [blame] | 54 | tool_enum = 'R8_AFTER_D8' |
Tamas Kenez | c41d304 | 2017-06-01 17:26:08 +0200 | [diff] [blame] | 55 | else: |
Mathias Rav | 6d1a71c | 2018-04-24 13:35:41 +0200 | [diff] [blame] | 56 | tool_enum = tool.upper() |
Mathias Rav | 88ac49e | 2018-03-09 13:11:02 +0100 | [diff] [blame] | 57 | if tool == "r8cf": |
| 58 | if toolchain != "none": |
| 59 | continue |
| 60 | tool_enum = 'D8_AFTER_R8CF' |
Mathias Rav | 6d1a71c | 2018-04-24 13:35:41 +0200 | [diff] [blame] | 61 | output_dir = os.path.join(OUTPUT_DIR, toolchain, tool) |
| 62 | yield (tool_enum, tool, toolchain, source_dir, output_dir) |
| 63 | |
| 64 | |
| 65 | def create_tests(): |
| 66 | for tool_enum, tool, toolchain, source_dir, output_dir in get_test_configurations(): |
| 67 | test_cases = [d for d in os.listdir(source_dir) |
| 68 | if os.path.isdir(os.path.join(source_dir, d))] |
| 69 | if os.path.exists(output_dir): |
| 70 | shutil.rmtree(output_dir) |
| 71 | os.makedirs(output_dir) |
| 72 | for test_case in test_cases: |
| 73 | class_name = "Art" + test_case.replace("-", "_") + "Test" |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 74 | contents = TEMPLATE.substitute( |
Mathias Rav | 6d1a71c | 2018-04-24 13:35:41 +0200 | [diff] [blame] | 75 | name=test_case, |
Tamas Kenez | c41d304 | 2017-06-01 17:26:08 +0200 | [diff] [blame] | 76 | compilerUnderTestEnum=tool_enum, |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 77 | compilerUnderTest=tool, |
| 78 | testGeneratingToolchain=toolchain, |
Mathias Rav | 6d1a71c | 2018-04-24 13:35:41 +0200 | [diff] [blame] | 79 | testGeneratingToolchainEnum=toolchain.upper(), |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 80 | testClassName=class_name) |
Mathias Rav | 6d1a71c | 2018-04-24 13:35:41 +0200 | [diff] [blame] | 81 | with open(os.path.join(output_dir, class_name + ".java"), "w") as fp: |
| 82 | fp.write(contents) |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 83 | |
| 84 | |
| 85 | def main(): |
Mathias Rav | 6d1a71c | 2018-04-24 13:35:41 +0200 | [diff] [blame] | 86 | create_tests() |
| 87 | |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 88 | |
| 89 | if __name__ == "__main__": |
Mathias Rav | 6d1a71c | 2018-04-24 13:35:41 +0200 | [diff] [blame] | 90 | main() |