blob: 0c59ae9c85b7b7d495576520c9ad38c7d94e5f57 [file] [log] [blame]
Ian Zernydcb172e2022-02-22 15:36:45 +01001#!/usr/bin/env python3
Mads Ager7e5bd722017-05-24 07:17:27 +02002# 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 Henaffce162f32017-10-04 10:39:27 +02006import os
Mathias Rav6d1a71c2018-04-24 13:35:41 +02007import shutil
8from string import Template
Mads Ager7e5bd722017-05-24 07:17:27 +02009
Jean-Marie Henaffce162f32017-10-04 10:39:27 +020010OUTPUT_DIR = os.path.join('build', 'generated', 'test', 'java', 'com',
11 'android', 'tools', 'r8', 'art')
mikaelpeltierc2aa6652017-10-06 12:53:37 +020012TEST_DIR = os.path.join('tests', '2017-10-04', 'art')
Mathias Rav6d1a71c2018-04-24 13:35:41 +020013TOOLCHAINS = [
Mathias Rav6d1a71c2018-04-24 13:35:41 +020014 ("none", os.path.join(TEST_DIR, "dx")),
15]
Mathias Rav88ac49e2018-03-09 13:11:02 +010016TOOLS = ["r8", "d8", "r8cf"]
Mads Ager7e5bd722017-05-24 07:17:27 +020017TEMPLATE = 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.
21package com.android.tools.r8.art.$testGeneratingToolchain.$compilerUnderTest;
22
23import static com.android.tools.r8.R8RunArtTestsTest.DexTool.$testGeneratingToolchainEnum;
24
25import com.android.tools.r8.R8RunArtTestsTest;
Ian Zerny5b878ac2020-09-23 20:48:05 +020026import com.android.tools.r8.TestBase;
27import com.android.tools.r8.TestParameters;
28import com.android.tools.r8.TestParametersCollection;
29import com.android.tools.r8.ToolHelper.DexVm;
Mads Ager7e5bd722017-05-24 07:17:27 +020030import org.junit.Test;
Ian Zerny5b878ac2020-09-23 20:48:05 +020031import org.junit.runner.RunWith;
32import org.junit.runners.Parameterized;
33import org.junit.runners.Parameterized.Parameters;
Mads Ager7e5bd722017-05-24 07:17:27 +020034
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 Zerny5b878ac2020-09-23 20:48:05 +020040@RunWith(Parameterized.class)
Mads Ager7e5bd722017-05-24 07:17:27 +020041public class $testClassName extends R8RunArtTestsTest {
42
Ian Zerny5b878ac2020-09-23 20:48:05 +020043 @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 Ager7e5bd722017-05-24 07:17:27 +020051 super("$name", $testGeneratingToolchainEnum);
Ian Zerny5b878ac2020-09-23 20:48:05 +020052 this.parameters = parameters;
Mads Ager7e5bd722017-05-24 07:17:27 +020053 }
54
55 @Test
Ian Zerny5b878ac2020-09-23 20:48:05 +020056 public void test() throws Throwable {
57 runArtTest(parameters.getRuntime().asDex().getVm(), CompilerUnderTest.$compilerUnderTestEnum);
Mads Ager7e5bd722017-05-24 07:17:27 +020058 }
59}
60""")
61
Mads Ager7e5bd722017-05-24 07:17:27 +020062
Mathias Rav6d1a71c2018-04-24 13:35:41 +020063def get_test_configurations():
64 for toolchain, source_dir in TOOLCHAINS:
Mads Ager7e5bd722017-05-24 07:17:27 +020065 for tool in TOOLS:
Tamas Kenezc41d3042017-06-01 17:26:08 +020066 if tool == "d8" and toolchain == "none":
Tamas Kenez070843c2017-06-02 11:52:59 +020067 tool_enum = 'R8_AFTER_D8'
Tamas Kenezc41d3042017-06-01 17:26:08 +020068 else:
Mathias Rav6d1a71c2018-04-24 13:35:41 +020069 tool_enum = tool.upper()
Mathias Rav88ac49e2018-03-09 13:11:02 +010070 if tool == "r8cf":
71 if toolchain != "none":
72 continue
73 tool_enum = 'D8_AFTER_R8CF'
Mathias Rav6d1a71c2018-04-24 13:35:41 +020074 output_dir = os.path.join(OUTPUT_DIR, toolchain, tool)
75 yield (tool_enum, tool, toolchain, source_dir, output_dir)
76
77
78def 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 Ager7e5bd722017-05-24 07:17:27 +020087 contents = TEMPLATE.substitute(
Mathias Rav6d1a71c2018-04-24 13:35:41 +020088 name=test_case,
Tamas Kenezc41d3042017-06-01 17:26:08 +020089 compilerUnderTestEnum=tool_enum,
Mads Ager7e5bd722017-05-24 07:17:27 +020090 compilerUnderTest=tool,
91 testGeneratingToolchain=toolchain,
Mathias Rav6d1a71c2018-04-24 13:35:41 +020092 testGeneratingToolchainEnum=toolchain.upper(),
Mads Ager7e5bd722017-05-24 07:17:27 +020093 testClassName=class_name)
Mathias Rav6d1a71c2018-04-24 13:35:41 +020094 with open(os.path.join(output_dir, class_name + ".java"), "w") as fp:
95 fp.write(contents)
Mads Ager7e5bd722017-05-24 07:17:27 +020096
97
98def main():
Mathias Rav6d1a71c2018-04-24 13:35:41 +020099 create_tests()
100
Mads Ager7e5bd722017-05-24 07:17:27 +0200101
102if __name__ == "__main__":
Mathias Rav6d1a71c2018-04-24 13:35:41 +0200103 main()