summaryrefslogtreecommitdiff
path: root/test/java/com/google/devtools/build/android/desugar/io/IndexedInputsTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'test/java/com/google/devtools/build/android/desugar/io/IndexedInputsTest.java')
-rw-r--r--test/java/com/google/devtools/build/android/desugar/io/IndexedInputsTest.java136
1 files changed, 136 insertions, 0 deletions
diff --git a/test/java/com/google/devtools/build/android/desugar/io/IndexedInputsTest.java b/test/java/com/google/devtools/build/android/desugar/io/IndexedInputsTest.java
new file mode 100644
index 0000000..81a4b31
--- /dev/null
+++ b/test/java/com/google/devtools/build/android/desugar/io/IndexedInputsTest.java
@@ -0,0 +1,136 @@
+// Copyright 2017 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package com.google.devtools.build.android.desugar.io;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.common.collect.ImmutableList;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/**
+ * Test that exercises the behavior of the IndexedInputs class.
+ */
+@RunWith(JUnit4.class)
+public final class IndexedInputsTest {
+
+ private static File lib1;
+
+ private static String lib1Name;
+
+ private static File lib2;
+
+ private static String lib2Name;
+
+ private static InputFileProvider lib1InputFileProvider;
+
+ private static InputFileProvider lib2InputFileProvider;
+
+ @BeforeClass
+ public static void setUpClass() throws Exception {
+ lib1 = File.createTempFile("lib1", ".jar");
+ lib1Name = lib1.getName();
+ try (ZipOutputStream zos1 = new ZipOutputStream(new FileOutputStream(lib1))) {
+ zos1.putNextEntry(new ZipEntry("a/b/C.class"));
+ zos1.putNextEntry(new ZipEntry("a/b/D.class"));
+ zos1.closeEntry();
+ }
+
+ lib2 = File.createTempFile("lib2", ".jar");
+ lib2Name = lib2.getName();
+ try (ZipOutputStream zos2 = new ZipOutputStream(new FileOutputStream(lib2))) {
+ zos2.putNextEntry(new ZipEntry("a/b/C.class"));
+ zos2.putNextEntry(new ZipEntry("a/b/E.class"));
+ zos2.closeEntry();
+ }
+ }
+
+ @Before
+ public void createProviders() throws Exception {
+ lib1InputFileProvider = new ZipInputFileProvider(lib1.toPath());
+ lib2InputFileProvider = new ZipInputFileProvider(lib2.toPath());
+ }
+
+ @After
+ public void closeProviders() throws Exception {
+ lib1InputFileProvider.close();
+ lib2InputFileProvider.close();
+ }
+
+ @AfterClass
+ public static void tearDownClass() throws Exception {
+ lib1.delete();
+ lib2.delete();
+ }
+
+ @Test
+ public void testClassFoundWithParentLibrary() throws Exception {
+ IndexedInputs indexedLib2 = new IndexedInputs(ImmutableList.of(lib2InputFileProvider));
+ IndexedInputs indexedLib1 = new IndexedInputs(ImmutableList.of(lib1InputFileProvider));
+ IndexedInputs indexedLib2AndLib1 = indexedLib1.withParent(indexedLib2);
+ assertThat(indexedLib2AndLib1.getInputFileProvider("a/b/C.class").toString())
+ .isEqualTo(lib2Name);
+ assertThat(indexedLib2AndLib1.getInputFileProvider("a/b/D.class").toString())
+ .isEqualTo(lib1Name);
+ assertThat(indexedLib2AndLib1.getInputFileProvider("a/b/E.class").toString())
+ .isEqualTo(lib2Name);
+
+ indexedLib2 = new IndexedInputs(ImmutableList.of(lib2InputFileProvider));
+ indexedLib1 = new IndexedInputs(ImmutableList.of(lib1InputFileProvider));
+ IndexedInputs indexedLib1AndLib2 = indexedLib2.withParent(indexedLib1);
+ assertThat(indexedLib1AndLib2.getInputFileProvider("a/b/C.class").toString())
+ .isEqualTo(lib1Name);
+ assertThat(indexedLib1AndLib2.getInputFileProvider("a/b/D.class").toString())
+ .isEqualTo(lib1Name);
+ assertThat(indexedLib1AndLib2.getInputFileProvider("a/b/E.class").toString())
+ .isEqualTo(lib2Name);
+ }
+
+ @Test
+ public void testClassFoundWithoutParentLibrary() throws Exception {
+ IndexedInputs ijLib1Lib2 =
+ new IndexedInputs(ImmutableList.of(lib1InputFileProvider, lib2InputFileProvider));
+ assertThat(ijLib1Lib2.getInputFileProvider("a/b/C.class").toString())
+ .isEqualTo(lib1Name);
+ assertThat(ijLib1Lib2.getInputFileProvider("a/b/D.class").toString())
+ .isEqualTo(lib1Name);
+ assertThat(ijLib1Lib2.getInputFileProvider("a/b/E.class").toString())
+ .isEqualTo(lib2Name);
+
+ IndexedInputs ijLib2Lib1 =
+ new IndexedInputs(ImmutableList.of(lib2InputFileProvider, lib1InputFileProvider));
+ assertThat(ijLib2Lib1.getInputFileProvider("a/b/C.class").toString())
+ .isEqualTo(lib2Name);
+ assertThat(ijLib2Lib1.getInputFileProvider("a/b/D.class").toString())
+ .isEqualTo(lib1Name);
+ assertThat(ijLib2Lib1.getInputFileProvider("a/b/E.class").toString())
+ .isEqualTo(lib2Name);
+ }
+
+ @Test
+ public void testClassNotFound() throws Exception {
+ IndexedInputs ijLib1Lib2 =
+ new IndexedInputs(ImmutableList.of(lib1InputFileProvider, lib2InputFileProvider));
+ assertThat(ijLib1Lib2.getInputFileProvider("a/b/F.class")).isNull();
+ }
+}