blob: 0c59ae9c85b7b7d495576520c9ad38c7d94e5f57 [file] [log] [blame] [edit]
#!/usr/bin/env python3
# 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 = [
("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 com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.ToolHelper.DexVm;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
/**
* 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!
*/
@RunWith(Parameterized.class)
public class $testClassName extends R8RunArtTestsTest {
@Parameters(name = "{0}")
public static TestParametersCollection data() {
return TestBase.getTestParameters().withDexRuntimes().build();
}
private final TestParameters parameters;
public $testClassName(TestParameters parameters) {
super("$name", $testGeneratingToolchainEnum);
this.parameters = parameters;
}
@Test
public void test() throws Throwable {
runArtTest(parameters.getRuntime().asDex().getVm(), 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()