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