Ian Zerny | dcb172e | 2022-02-22 15:36:45 +0100 | [diff] [blame] | 1 | #!/usr/bin/env python3 |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 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 = [ |
Mathias Rav | 6d1a71c | 2018-04-24 13:35:41 +0200 | [diff] [blame] | 14 | ("none", os.path.join(TEST_DIR, "dx")), |
| 15 | ] |
Mathias Rav | 88ac49e | 2018-03-09 13:11:02 +0100 | [diff] [blame] | 16 | TOOLS = ["r8", "d8", "r8cf"] |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 17 | TEMPLATE = Template( |
| 18 | """// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file |
| 19 | // for details. All rights reserved. Use of this source code is governed by a |
| 20 | // BSD-style license that can be found in the LICENSE file. |
| 21 | package com.android.tools.r8.art.$testGeneratingToolchain.$compilerUnderTest; |
| 22 | |
| 23 | import static com.android.tools.r8.R8RunArtTestsTest.DexTool.$testGeneratingToolchainEnum; |
| 24 | |
| 25 | import com.android.tools.r8.R8RunArtTestsTest; |
Ian Zerny | 5b878ac | 2020-09-23 20:48:05 +0200 | [diff] [blame] | 26 | import com.android.tools.r8.TestBase; |
| 27 | import com.android.tools.r8.TestParameters; |
| 28 | import com.android.tools.r8.TestParametersCollection; |
| 29 | import com.android.tools.r8.ToolHelper.DexVm; |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 30 | import org.junit.Test; |
Ian Zerny | 5b878ac | 2020-09-23 20:48:05 +0200 | [diff] [blame] | 31 | import org.junit.runner.RunWith; |
| 32 | import org.junit.runners.Parameterized; |
| 33 | import org.junit.runners.Parameterized.Parameters; |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 34 | |
| 35 | /** |
| 36 | * Auto-generated test for the art $name test using the $testGeneratingToolchain toolchain. |
| 37 | * |
| 38 | * DO NOT EDIT THIS FILE. EDIT THE HERE DOCUMENT TEMPLATE IN tools/create_art_tests.py INSTEAD! |
| 39 | */ |
Ian Zerny | 5b878ac | 2020-09-23 20:48:05 +0200 | [diff] [blame] | 40 | @RunWith(Parameterized.class) |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 41 | public class $testClassName extends R8RunArtTestsTest { |
| 42 | |
Ian Zerny | 5b878ac | 2020-09-23 20:48:05 +0200 | [diff] [blame] | 43 | @Parameters(name = "{0}") |
| 44 | public static TestParametersCollection data() { |
| 45 | return TestBase.getTestParameters().withDexRuntimes().build(); |
| 46 | } |
| 47 | |
| 48 | private final TestParameters parameters; |
| 49 | |
| 50 | public $testClassName(TestParameters parameters) { |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 51 | super("$name", $testGeneratingToolchainEnum); |
Ian Zerny | 5b878ac | 2020-09-23 20:48:05 +0200 | [diff] [blame] | 52 | this.parameters = parameters; |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 53 | } |
| 54 | |
| 55 | @Test |
Ian Zerny | 5b878ac | 2020-09-23 20:48:05 +0200 | [diff] [blame] | 56 | public void test() throws Throwable { |
| 57 | runArtTest(parameters.getRuntime().asDex().getVm(), CompilerUnderTest.$compilerUnderTestEnum); |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 58 | } |
| 59 | } |
| 60 | """) |
| 61 | |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 62 | |
Mathias Rav | 6d1a71c | 2018-04-24 13:35:41 +0200 | [diff] [blame] | 63 | def get_test_configurations(): |
| 64 | for toolchain, source_dir in TOOLCHAINS: |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 65 | for tool in TOOLS: |
Tamas Kenez | c41d304 | 2017-06-01 17:26:08 +0200 | [diff] [blame] | 66 | if tool == "d8" and toolchain == "none": |
Tamas Kenez | 070843c | 2017-06-02 11:52:59 +0200 | [diff] [blame] | 67 | tool_enum = 'R8_AFTER_D8' |
Tamas Kenez | c41d304 | 2017-06-01 17:26:08 +0200 | [diff] [blame] | 68 | else: |
Mathias Rav | 6d1a71c | 2018-04-24 13:35:41 +0200 | [diff] [blame] | 69 | tool_enum = tool.upper() |
Mathias Rav | 88ac49e | 2018-03-09 13:11:02 +0100 | [diff] [blame] | 70 | if tool == "r8cf": |
| 71 | if toolchain != "none": |
| 72 | continue |
| 73 | tool_enum = 'D8_AFTER_R8CF' |
Mathias Rav | 6d1a71c | 2018-04-24 13:35:41 +0200 | [diff] [blame] | 74 | output_dir = os.path.join(OUTPUT_DIR, toolchain, tool) |
| 75 | yield (tool_enum, tool, toolchain, source_dir, output_dir) |
| 76 | |
| 77 | |
| 78 | def create_tests(): |
| 79 | for tool_enum, tool, toolchain, source_dir, output_dir in get_test_configurations(): |
| 80 | test_cases = [d for d in os.listdir(source_dir) |
| 81 | if os.path.isdir(os.path.join(source_dir, d))] |
| 82 | if os.path.exists(output_dir): |
| 83 | shutil.rmtree(output_dir) |
| 84 | os.makedirs(output_dir) |
| 85 | for test_case in test_cases: |
| 86 | class_name = "Art" + test_case.replace("-", "_") + "Test" |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 87 | contents = TEMPLATE.substitute( |
Mathias Rav | 6d1a71c | 2018-04-24 13:35:41 +0200 | [diff] [blame] | 88 | name=test_case, |
Tamas Kenez | c41d304 | 2017-06-01 17:26:08 +0200 | [diff] [blame] | 89 | compilerUnderTestEnum=tool_enum, |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 90 | compilerUnderTest=tool, |
| 91 | testGeneratingToolchain=toolchain, |
Mathias Rav | 6d1a71c | 2018-04-24 13:35:41 +0200 | [diff] [blame] | 92 | testGeneratingToolchainEnum=toolchain.upper(), |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 93 | testClassName=class_name) |
Mathias Rav | 6d1a71c | 2018-04-24 13:35:41 +0200 | [diff] [blame] | 94 | with open(os.path.join(output_dir, class_name + ".java"), "w") as fp: |
| 95 | fp.write(contents) |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 96 | |
| 97 | |
| 98 | def main(): |
Mathias Rav | 6d1a71c | 2018-04-24 13:35:41 +0200 | [diff] [blame] | 99 | create_tests() |
| 100 | |
Mads Ager | 7e5bd72 | 2017-05-24 07:17:27 +0200 | [diff] [blame] | 101 | |
| 102 | if __name__ == "__main__": |
Mathias Rav | 6d1a71c | 2018-04-24 13:35:41 +0200 | [diff] [blame] | 103 | main() |