| #!/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() |