Add new assertion failure messages
Change-Id: I00b7ac5ef60019e4c337e522325ad61b842db8ed
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/customconversion/GenerateCustomConversion.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/customconversion/GenerateCustomConversion.java
index c266f7f..8fad352 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/customconversion/GenerateCustomConversion.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/customconversion/GenerateCustomConversion.java
@@ -20,7 +20,10 @@
import java.nio.file.OpenOption;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.Enumeration;
+import java.util.List;
import java.util.Map;
import java.util.zip.CRC32;
import java.util.zip.ZipEntry;
@@ -37,16 +40,19 @@
private final Map<String, String> wrapConvertOwnerMap =
CustomConversionAsmRewriteDescription.getWrapConvertOwnerMap();
- public static void generateJars(Path jar, Path outputDirectory) throws IOException {
+ public static Collection<Path> generateJars(Path jar, Path outputDirectory) throws IOException {
+ List<Path> generatedJars = new ArrayList<>();
for (CustomConversionVersion version : CustomConversionVersion.values()) {
- new GenerateCustomConversion(version).convert(jar, outputDirectory);
+ generatedJars.add(new GenerateCustomConversion(version).convert(jar, outputDirectory));
}
+ return generatedJars;
}
- private void convert(Path jar, Path outputDirectory) throws IOException {
+ private Path convert(Path jar, Path outputDirectory) throws IOException {
Path convertedJar = outputDirectory.resolve(version.getFileName());
internalConvert(jar, convertedJar);
assert Files.exists(convertedJar) : "Custom conversion generation did not generate anything.";
+ return convertedJar;
}
private void internalConvert(Path jar, Path convertedJar) throws IOException {
@@ -55,33 +61,30 @@
try (ZipOutputStream out =
new ZipOutputStream(
new BufferedOutputStream(Files.newOutputStream(convertedJar, options)))) {
- new GenerateCustomConversion(version).convert(jar, out, version);
+ new GenerateCustomConversion(version).convert(jar, out);
}
}
- private void convert(
- Path desugaredLibraryFiles, ZipOutputStream out, CustomConversionVersion legacy)
- throws IOException {
+ private void convert(Path desugaredLibraryFiles, ZipOutputStream out) throws IOException {
boolean fileGotWritten = false;
try (ZipFile zipFile = new ZipFile(desugaredLibraryFiles.toFile(), StandardCharsets.UTF_8)) {
final Enumeration<? extends ZipEntry> entries = zipFile.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = entries.nextElement();
try (InputStream entryStream = zipFile.getInputStream(entry)) {
- fileGotWritten |= handleFile(entry, entryStream, out, legacy);
+ fileGotWritten |= handleFile(entry, entryStream, out);
}
}
}
assert fileGotWritten : "No files were written when converting custom conversions.";
}
- private boolean handleFile(
- ZipEntry entry, InputStream input, ZipOutputStream out, CustomConversionVersion legacy)
+ private boolean handleFile(ZipEntry entry, InputStream input, ZipOutputStream out)
throws IOException {
if (!entry.getName().endsWith(".class")) {
return false;
}
- if (legacy == CustomConversionVersion.LEGACY
+ if (version == CustomConversionVersion.LEGACY
&& (entry.getName().contains("java/nio/file")
|| entry.getName().contains("ApiFlips")
|| entry.getName().contains("java/adapter"))) {
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/customconversion/GenerateCustomConversionTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/customconversion/GenerateCustomConversionTest.java
index 0f203a8..fc8552b 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/customconversion/GenerateCustomConversionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/customconversion/GenerateCustomConversionTest.java
@@ -17,11 +17,15 @@
import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.CustomConversionVersion;
+import com.google.common.collect.Sets;
+import com.google.common.collect.Sets.SetView;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.Collection;
import java.util.Enumeration;
+import java.util.Set;
import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
@@ -47,21 +51,55 @@
}
@Test
- public void testCustomConversionIsUpToDate() throws IOException {
+ public void testCustomConversionIsUpToDate() throws Exception {
Assume.assumeFalse("JDK8 not present on windows", ToolHelper.isWindows());
// Regenerate the files in a temp directory.
Path customConversionDir = temp.newFolder("custom_conversion").toPath();
- generateCustomConversions(temp, customConversionDir);
+ Collection<Path> generatedJars = generateCustomConversions(temp, customConversionDir);
for (CustomConversionVersion version : CustomConversionVersion.values()) {
// Assert the file is generated.
Path newFile = customConversionDir.resolve(version.getFileName());
- assertTrue(Files.exists(newFile));
+ String message =
+ "File " + newFile + " was not generated, but " + generatedJars + " were generated.";
+ assertTrue(message, generatedJars.contains(newFile));
+ assertTrue(message, Files.exists(newFile));
// Assert the file matches the one in third_party.
Path thirdPartyFile = ToolHelper.getDesugarLibConversions(version);
- assertTrue(filesAreEqual(newFile, thirdPartyFile));
+ uploadJarsToCloudStorageIfTestFails(
+ (file1, file2) -> {
+ verifySameFilesInJar(file1, file2);
+ assertProgramsEqual(file1, file2);
+ return filesAreEqual(file1, file2);
+ },
+ newFile,
+ thirdPartyFile);
+ }
+ }
+
+ private static void verifySameFilesInJar(Path file1, Path file2) throws IOException {
+ try (ZipFile zipFile1 = new ZipFile(file1.toFile())) {
+ try (ZipFile zipFile2 = new ZipFile(file2.toFile())) {
+ Enumeration<? extends ZipEntry> entries1 = zipFile1.entries();
+ Enumeration<? extends ZipEntry> entries2 = zipFile2.entries();
+ Set<String> s1 = Sets.newHashSet();
+ while (entries1.hasMoreElements()) {
+ ZipEntry entry = entries1.nextElement();
+ s1.add(entry.getName());
+ }
+ Set<String> s2 = Sets.newHashSet();
+ while (entries2.hasMoreElements()) {
+ ZipEntry entry = entries2.nextElement();
+ s2.add(entry.getName());
+ }
+ SetView<String> intersection = Sets.intersection(s1, s2);
+ Set<String> inter = Sets.newHashSet(intersection);
+ s1.removeAll(inter);
+ s2.removeAll(inter);
+ assert s1.isEmpty() && s2.isEmpty() : "Extra files in " + s1 + " or " + s2;
+ }
}
}
@@ -75,8 +113,8 @@
}
}
- private static void generateCustomConversions(TemporaryFolder temp, Path destinationDir)
- throws IOException {
+ private static Collection<Path> generateCustomConversions(
+ TemporaryFolder temp, Path destinationDir) throws IOException {
temp.create();
Files.createDirectories(destinationDir);
@@ -103,10 +141,12 @@
assert verifyRawOutput(raw);
// Asm rewrite the jar.
- GenerateCustomConversion.generateJars(raw, destinationDir);
+ Collection<Path> generateJars = GenerateCustomConversion.generateJars(raw, destinationDir);
// No need to keep the raw jar.
Files.delete(raw);
+
+ return generateJars;
}
private static boolean verifyRawOutput(Path output) throws IOException {