blob: 7c72273f22eda498286c9224f325d2b993671aff [file] [log] [blame]
// 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;
}
}