| // Copyright (c) 2020, 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.missingclasses; |
| |
| import com.android.tools.r8.CompilationFailedException; |
| import com.android.tools.r8.R8TestCompileResult; |
| import com.android.tools.r8.TestBase; |
| import com.android.tools.r8.TestCompilerBuilder.DiagnosticsConsumer; |
| import com.android.tools.r8.TestParameters; |
| import com.android.tools.r8.utils.InternalOptions.TestingOptions; |
| import java.util.List; |
| import org.junit.runner.RunWith; |
| import org.junit.runners.Parameterized; |
| import org.junit.runners.Parameterized.Parameters; |
| |
| @RunWith(Parameterized.class) |
| public abstract class MissingClassesTestBase extends TestBase { |
| |
| enum DontWarnConfiguration { |
| DONT_WARN_MAIN_CLASS, |
| DONT_WARN_MISSING_CLASS, |
| NONE; |
| |
| public boolean isDontWarnMainClass() { |
| return this == DONT_WARN_MAIN_CLASS; |
| } |
| |
| public boolean isDontWarnMissingClass() { |
| return this == DONT_WARN_MISSING_CLASS; |
| } |
| } |
| |
| private final DontWarnConfiguration dontWarnConfiguration; |
| private final TestParameters parameters; |
| |
| @Parameters(name = "{1}, {0}") |
| public static List<Object[]> data() { |
| return buildParameters( |
| DontWarnConfiguration.values(), getTestParameters().withAllRuntimesAndApiLevels().build()); |
| } |
| |
| public MissingClassesTestBase( |
| DontWarnConfiguration dontWarnConfiguration, TestParameters parameters) { |
| this.dontWarnConfiguration = dontWarnConfiguration; |
| this.parameters = parameters; |
| } |
| |
| public R8TestCompileResult compileWithExpectedDiagnostics( |
| Class<?> mainClass, Class<?> missingClass, DiagnosticsConsumer diagnosticsConsumer) |
| throws CompilationFailedException { |
| return testForR8(parameters.getBackend()) |
| .addProgramClasses(mainClass) |
| .addKeepMainRule(mainClass) |
| .applyIf( |
| dontWarnConfiguration.isDontWarnMainClass(), |
| testBuilder -> testBuilder.addDontWarn(mainClass)) |
| .applyIf( |
| dontWarnConfiguration.isDontWarnMissingClass(), |
| testBuilder -> testBuilder.addDontWarn(missingClass)) |
| .addOptionsModification(TestingOptions::enableExperimentalMissingClassesReporting) |
| .setMinApi(parameters.getApiLevel()) |
| .compileWithExpectedDiagnostics(diagnosticsConsumer); |
| } |
| |
| public DontWarnConfiguration getDontWarnConfiguration() { |
| return dontWarnConfiguration; |
| } |
| } |