| #!/usr/bin/env python |
| # Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file |
| # for details. All rights reserved. Use of this source code is governed by a |
| # BSD-style license that can be found in the LICENSE file. |
| |
| import os |
| import shutil |
| from string import Template |
| |
| OUTPUT_DIR = os.path.join('build', 'generated', 'test', 'java', 'com', |
| 'android', 'tools', 'r8', 'art') |
| TEST_DIR = os.path.join('tests', '2017-10-04', 'art') |
| TOOLCHAINS = [ |
| ("dx", os.path.join(TEST_DIR, "dx")), |
| ("none", os.path.join(TEST_DIR, "dx")), |
| ] |
| TOOLS = ["r8", "d8", "r8cf"] |
| TEMPLATE = Template( |
| """// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| package com.android.tools.r8.art.$testGeneratingToolchain.$compilerUnderTest; |
| |
| import static com.android.tools.r8.R8RunArtTestsTest.DexTool.$testGeneratingToolchainEnum; |
| |
| import com.android.tools.r8.R8RunArtTestsTest; |
| import org.junit.Test; |
| |
| /** |
| * Auto-generated test for the art $name test using the $testGeneratingToolchain toolchain. |
| * |
| * DO NOT EDIT THIS FILE. EDIT THE HERE DOCUMENT TEMPLATE IN tools/create_art_tests.py INSTEAD! |
| */ |
| public class $testClassName extends R8RunArtTestsTest { |
| |
| public $testClassName() { |
| super("$name", $testGeneratingToolchainEnum); |
| } |
| |
| @Test |
| public void run$testClassName() throws Throwable { |
| // For testing with other Art VMs than the default pass the VM version as a argument to |
| // runArtTest, e.g. runArtTest(DexVm.ART_4_4_4_HOST, CompilerUnderTest.$compilerUnderTestEnum). |
| runArtTest(CompilerUnderTest.$compilerUnderTestEnum); |
| } |
| } |
| """) |
| |
| |
| def get_test_configurations(): |
| for toolchain, source_dir in TOOLCHAINS: |
| for tool in TOOLS: |
| if tool == "d8" and toolchain == "none": |
| tool_enum = 'R8_AFTER_D8' |
| else: |
| tool_enum = tool.upper() |
| if tool == "r8cf": |
| if toolchain != "none": |
| continue |
| tool_enum = 'D8_AFTER_R8CF' |
| output_dir = os.path.join(OUTPUT_DIR, toolchain, tool) |
| yield (tool_enum, tool, toolchain, source_dir, output_dir) |
| |
| |
| def create_tests(): |
| for tool_enum, tool, toolchain, source_dir, output_dir in get_test_configurations(): |
| test_cases = [d for d in os.listdir(source_dir) |
| if os.path.isdir(os.path.join(source_dir, d))] |
| if os.path.exists(output_dir): |
| shutil.rmtree(output_dir) |
| os.makedirs(output_dir) |
| for test_case in test_cases: |
| class_name = "Art" + test_case.replace("-", "_") + "Test" |
| contents = TEMPLATE.substitute( |
| name=test_case, |
| compilerUnderTestEnum=tool_enum, |
| compilerUnderTest=tool, |
| testGeneratingToolchain=toolchain, |
| testGeneratingToolchainEnum=toolchain.upper(), |
| testClassName=class_name) |
| with open(os.path.join(output_dir, class_name + ".java"), "w") as fp: |
| fp.write(contents) |
| |
| |
| def main(): |
| create_tests() |
| |
| |
| if __name__ == "__main__": |
| main() |