Fix art cache for art tests that match on file paths relative to repo root
Change-Id: Id514a144d549edbd7f22e50fa5be6361f241eb3d
diff --git a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
index 1c8634c..6c31a91 100644
--- a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
@@ -1174,6 +1174,11 @@
"958-methodhandle-stackframe",
"1338-gc-no-los");
+ // These tests match on paths relative to the execution directory (normally the repo root).
+ // Cached stdout might be from a different directory.
+ private static List<String> noArtCommandCaching =
+ ImmutableList.of("068-classloader", "086-null-superTest", "087-gc-after-linkTest");
+
private static final String NO_CLASS_ACCESS_MODIFICATION_RULE =
"-keep,allowobfuscation,allowoptimization,allowshrinking class *";
private static final String NO_MEMBER_ACCESS_MODIFICATION_RULE =
@@ -1299,6 +1304,8 @@
private final boolean hasMissingClasses;
// Explicitly disable desugaring.
private final boolean disableDesugaring;
+ // Don't cache art invocations, used for tests that match on path outputs.
+ private final boolean noCaching;
// Extra keep rules to use when running with R8.
private final List<String> keepRules;
private final Consumer<InternalOptions> configuration;
@@ -1320,6 +1327,7 @@
boolean disableClassInlining,
boolean hasMissingClasses,
boolean disableDesugaring,
+ boolean noCaching,
List<String> keepRules,
Consumer<InternalOptions> configuration) {
this.name = name;
@@ -1338,6 +1346,7 @@
this.disableClassInlining = disableClassInlining;
this.hasMissingClasses = hasMissingClasses;
this.disableDesugaring = disableDesugaring;
+ this.noCaching = noCaching;
this.keepRules = keepRules;
this.configuration = configuration;
}
@@ -1507,6 +1516,7 @@
requireClassInliningToBeDisabled.contains(name),
hasMissingClasses.contains(name),
false,
+ noArtCommandCaching.contains(name),
keepRules.getOrDefault(name, ImmutableList.of()),
configurations.get(name)));
}
@@ -1549,6 +1559,9 @@
File dexFile, TestSpecification specification, DexVm artVersion) {
ArtCommandBuilder builder = new ArtCommandBuilder(artVersion);
builder.appendClasspath(dexFile.toString());
+ if (specification.noCaching) {
+ builder.setNoCaching(true);
+ }
// All Art tests have the main class Main.
builder.setMainClass("Main");
if (specification.nativeLibrary != null) {
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index 59b00db..3db86ba 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -557,6 +557,7 @@
private DexVm version;
private boolean withArtFrameworks;
private ArtResultCacheLookupKey artResultCacheLookupKey;
+ private boolean noCaching = false;
public ArtCommandBuilder() {
this.version = getDexVm();
@@ -574,6 +575,10 @@
return isMac();
}
+ public void setNoCaching(boolean noCaching) {
+ this.noCaching = noCaching;
+ }
+
@Override
protected String getExecutable() {
if (withArtFrameworks && version.isNewerThan(DexVm.ART_4_4_4_HOST)) {
@@ -606,7 +611,7 @@
}
private boolean useCache() {
- return CommandResultCache.getInstance() != null;
+ return !noCaching && CommandResultCache.getInstance() != null;
}
public void cacheResult(ProcessResult result) {