aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/android/RClassGeneratorActionTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/com/google/devtools/build/android/RClassGeneratorActionTest.java')
-rw-r--r--src/test/java/com/google/devtools/build/android/RClassGeneratorActionTest.java47
1 files changed, 40 insertions, 7 deletions
diff --git a/src/test/java/com/google/devtools/build/android/RClassGeneratorActionTest.java b/src/test/java/com/google/devtools/build/android/RClassGeneratorActionTest.java
index e03348cdaa..7e1d8741ca 100644
--- a/src/test/java/com/google/devtools/build/android/RClassGeneratorActionTest.java
+++ b/src/test/java/com/google/devtools/build/android/RClassGeneratorActionTest.java
@@ -23,11 +23,12 @@ import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
-import java.nio.file.attribute.FileTime;
+import java.time.Instant;
import java.util.Collections;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
+import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -123,7 +124,6 @@ public class RClassGeneratorActionTest {
.toArray(new String[0]));
assertThat(Files.exists(jarPath)).isTrue();
- assertThat(Files.getLastModifiedTime(jarPath)).isEqualTo(FileTime.fromMillis(0));
try (ZipFile zip = new ZipFile(jarPath.toFile())) {
List<? extends ZipEntry> zipEntries = Collections.list(zip.entries());
@@ -144,6 +144,7 @@ public class RClassGeneratorActionTest {
"com/google/app/R$string.class",
"com/google/app/R.class",
"META-INF/MANIFEST.MF");
+ ZipMtimeAsserter.assertEntries(zipEntries);
}
}
@@ -175,7 +176,6 @@ public class RClassGeneratorActionTest {
.toArray(new String[0]));
assertThat(Files.exists(jarPath)).isTrue();
- assertThat(Files.getLastModifiedTime(jarPath)).isEqualTo(FileTime.fromMillis(0));
try (ZipFile zip = new ZipFile(jarPath.toFile())) {
List<? extends ZipEntry> zipEntries = Collections.list(zip.entries());
@@ -190,6 +190,7 @@ public class RClassGeneratorActionTest {
"com/google/bar/R$drawable.class",
"com/google/bar/R.class",
"META-INF/MANIFEST.MF");
+ ZipMtimeAsserter.assertEntries(zipEntries);
}
}
@@ -219,7 +220,6 @@ public class RClassGeneratorActionTest {
).toArray(new String[0]));
assertThat(Files.exists(jarPath)).isTrue();
- assertThat(Files.getLastModifiedTime(jarPath)).isEqualTo(FileTime.fromMillis(0));
try (ZipFile zip = new ZipFile(jarPath.toFile())) {
List<? extends ZipEntry> zipEntries = Collections.list(zip.entries());
@@ -233,6 +233,7 @@ public class RClassGeneratorActionTest {
"com/google/app/R$string.class",
"com/google/app/R.class",
"META-INF/MANIFEST.MF");
+ ZipMtimeAsserter.assertEntries(zipEntries);
}
}
@@ -244,12 +245,12 @@ public class RClassGeneratorActionTest {
).toArray(new String[0]));
assertThat(Files.exists(jarPath)).isTrue();
- assertThat(Files.getLastModifiedTime(jarPath)).isEqualTo(FileTime.fromMillis(0));
try (ZipFile zip = new ZipFile(jarPath.toFile())) {
List<? extends ZipEntry> zipEntries = Collections.list(zip.entries());
Iterable<String> entries = getZipFilenames(zipEntries);
assertThat(entries).containsExactly("META-INF/MANIFEST.MF");
+ ZipMtimeAsserter.assertEntries(zipEntries);
}
}
@@ -285,7 +286,6 @@ public class RClassGeneratorActionTest {
.toArray(new String[0]));
assertThat(Files.exists(jarPath)).isTrue();
- assertThat(Files.getLastModifiedTime(jarPath)).isEqualTo(FileTime.fromMillis(0));
try (ZipFile zip = new ZipFile(jarPath.toFile())) {
List<? extends ZipEntry> zipEntries = Collections.list(zip.entries());
@@ -299,6 +299,7 @@ public class RClassGeneratorActionTest {
"com/custom/er/R$string.class",
"com/custom/er/R.class",
"META-INF/MANIFEST.MF");
+ ZipMtimeAsserter.assertEntries(zipEntries);
}
}
@@ -323,12 +324,12 @@ public class RClassGeneratorActionTest {
.toArray(new String[0]));
assertThat(Files.exists(jarPath)).isTrue();
- assertThat(Files.getLastModifiedTime(jarPath)).isEqualTo(FileTime.fromMillis(0));
try (ZipFile zip = new ZipFile(jarPath.toFile())) {
List<? extends ZipEntry> zipEntries = Collections.list(zip.entries());
Iterable<String> entries = getZipFilenames(zipEntries);
assertThat(entries).containsExactly("META-INF/MANIFEST.MF");
+ ZipMtimeAsserter.assertEntries(zipEntries);
}
}
@@ -349,4 +350,36 @@ public class RClassGeneratorActionTest {
}
});
}
+
+ private static final class ZipMtimeAsserter {
+ private static final long ZIP_EPOCH = Instant.parse("1980-01-01T00:00:00Z").getEpochSecond();
+ private static final long ZIP_EPOCH_PLUS_ONE_DAY =
+ Instant.parse("1980-01-02T00:00:00Z").getEpochSecond();
+
+ public static void assertEntry(ZipEntry e) {
+ // getLastModifiedTime().toMillis() returns milliseconds, Instant.getEpochSecond() returns
+ // seconds.
+ long mtime = e.getLastModifiedTime().toMillis() / 1000;
+ // The ZIP epoch is the same as the MS-DOS epoch, 1980-01-01T00:00:00Z.
+ // AndroidResourceOutputs.ZipBuilder sets this to most of its entries, except for .class files
+ // for which the ZipBuilder increments the timestamp by 2 seconds.
+ // We don't care about the details of this logic and asserting exact timestamps would couple
+ // the test to the code too tightly, so here we only assert that the timestamp is on
+ // 1980-01-01, ignoring the exact time.
+ // AndroidResourceOutputs.ZipBuilde sets the ZIP epoch (same as the MS-DOS epoch,
+ // 1980-01-01T00:00:00Z) as the timestamp for all of its entries (except .class files, for
+ // which it sets a timestamp 2 seconds later than the DOS epoch).
+ // We don't care about the exact timestamps though, only that they are stable, so let's just
+ // assert that they are all on the day of 1980-01-01.
+ if (mtime < ZIP_EPOCH || mtime > ZIP_EPOCH_PLUS_ONE_DAY) {
+ Assert.fail(String.format("e=(%s) mtime=(%s)", e.getName(), e.getLastModifiedTime()));
+ }
+ }
+
+ public static void assertEntries(Iterable<? extends ZipEntry> entries) throws Exception {
+ for (ZipEntry e : entries) {
+ assertEntry(e);
+ }
+ }
+ }
}