aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/android/idlclass
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2015-09-26 20:35:57 +0000
committerGravatar Han-Wen Nienhuys <hanwen@google.com>2015-09-28 11:39:56 +0000
commit22616ae8ea53df3909fd16b74e0d9210138dc2c2 (patch)
tree42740e6f6eba481ff858d7e48cc1605ece0ddb92 /src/test/java/com/google/devtools/build/android/idlclass
parenta72be0f1d68ec449d463f825afa0aaabc4f05246 (diff)
Add Android IDL jar outputs.
These outputs are a jar and source jar for the results of aidl processing. This is used to add aidl output to IDEs separate from the source code, similar to annotation output (gen jars). -- MOS_MIGRATED_REVID=104024453
Diffstat (limited to 'src/test/java/com/google/devtools/build/android/idlclass')
-rw-r--r--src/test/java/com/google/devtools/build/android/idlclass/BUILD12
-rw-r--r--src/test/java/com/google/devtools/build/android/idlclass/IdlClassTest.java170
2 files changed, 182 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/android/idlclass/BUILD b/src/test/java/com/google/devtools/build/android/idlclass/BUILD
new file mode 100644
index 0000000000..f9255e4083
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/android/idlclass/BUILD
@@ -0,0 +1,12 @@
+java_test(
+ name = "IdlClassTest",
+ size = "medium",
+ srcs = glob(["*.java"]),
+ deps = [
+ "//src/main/protobuf:proto_java_compilation",
+ "//src/tools/android/java/com/google/devtools/build/android/idlclass:idlclass_lib",
+ "//third_party:guava",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
diff --git a/src/test/java/com/google/devtools/build/android/idlclass/IdlClassTest.java b/src/test/java/com/google/devtools/build/android/idlclass/IdlClassTest.java
new file mode 100644
index 0000000000..740f753b49
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/android/idlclass/IdlClassTest.java
@@ -0,0 +1,170 @@
+// Copyright 2015 Google Inc. 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.idlclass;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.common.collect.Sets;
+import com.google.devtools.build.buildjar.proto.JavaCompilation.CompilationUnit;
+import com.google.devtools.build.buildjar.proto.JavaCompilation.Manifest;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Set;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipOutputStream;
+
+/** {@link IdlClass} test */
+@RunWith(JUnit4.class)
+public class IdlClassTest {
+
+ static final Manifest MANIFEST =
+ Manifest.newBuilder()
+ .addCompilationUnit(
+ CompilationUnit.newBuilder()
+ .setPath("c/g/Foo.java")
+ .setPkg("c.g")
+ .addTopLevel("Foo")
+ .addTopLevel("Bar"))
+ .addCompilationUnit(
+ CompilationUnit.newBuilder()
+ .setPath("c/g/Bar.java")
+ .setPkg("c.g")
+ .addTopLevel("Bar")
+ .addTopLevel("Bar2"))
+ .addCompilationUnit(
+ CompilationUnit.newBuilder()
+ // default package
+ .setPath("wrong/source/dir/Baz.java")
+ .addTopLevel("Baz"))
+ .build();
+
+ @Rule public TemporaryFolder tempFolder = new TemporaryFolder();
+
+ @Test
+ public void generatedPrefixes() {
+ Set<String> idlSources = Sets.newHashSet(
+ "c/g/Bar.java",
+ "wrong/source/dir/Baz.java"
+ );
+ assertThat(IdlClass.getIdlPrefixes(MANIFEST, idlSources))
+ .containsExactly("c/g/Bar", "c/g/Bar2", "Baz");
+ }
+
+ @Test
+ public void idlClass() throws IOException {
+ File classJar = tempFolder.newFile("lib.jar");
+ File manifestProto = tempFolder.newFile("lib.manifest");
+ File tempDir = tempFolder.newFolder("temp_files");
+ File outputClassJar = tempFolder.newFile("lib-idl.jar");
+ File outputSourceJar = tempFolder.newFile("lib-idl-src.jar");
+
+ List<String> classes =
+ Arrays.asList(
+ "Baz.class",
+ "Baz$0.class",
+ "Baz$1.class",
+ "c/g/Foo.class",
+ "c/g/Foo$0.class",
+ "c/g/Foo$Inner.class",
+ "c/g/Foo$Inner$InnerMost.class",
+ "c/g/Bar.class",
+ "c/g/Bar2.class",
+ "c/g/Bar$Inner.class",
+ "c/g/Bar2$Inner.class");
+
+ try (OutputStream os = new FileOutputStream(classJar);
+ ZipOutputStream zos = new ZipOutputStream(os)) {
+ for (String path : classes) {
+ zos.putNextEntry(new ZipEntry(path));
+ }
+ }
+
+ tempFolder.newFolder("c");
+ tempFolder.newFolder("c/g");
+ tempFolder.newFolder("wrong");
+ tempFolder.newFolder("wrong/source");
+ tempFolder.newFolder("wrong/source/dir");
+ for (String file : Arrays.asList("c/g/Foo.java", "c/g/Bar.java", "wrong/source/dir/Baz.java")) {
+ tempFolder.newFile(file);
+ }
+
+ try (OutputStream os = new FileOutputStream(manifestProto)) {
+ MANIFEST.writeTo(os);
+ }
+
+ IdlClass.main(
+ new String[]{
+ "--manifest_proto",
+ manifestProto.toString(),
+ "--class_jar",
+ classJar.toString(),
+ "--output_class_jar",
+ outputClassJar.toString(),
+ "--output_source_jar",
+ outputSourceJar.toString(),
+ "--temp_dir",
+ tempDir.toString(),
+ "--idl_source_base_dir",
+ tempFolder.getRoot().getPath(),
+ "c/g/Bar.java",
+ "wrong/source/dir/Baz.java"
+ });
+
+ List<String> classJarEntries = getJarEntries(outputClassJar);
+ assertThat(classJarEntries)
+ .containsExactly(
+ "c/g/Bar.class",
+ "c/g/Bar$Inner.class",
+ "c/g/Bar2.class",
+ "c/g/Bar2$Inner.class",
+ "Baz.class",
+ "Baz$0.class",
+ "Baz$1.class");
+
+ List<String> sourceJarEntries = getJarEntries(outputSourceJar);
+ assertThat(sourceJarEntries)
+ .containsExactly(
+ "c/g/Bar.java",
+ "Baz.java");
+ }
+
+ private List<String> getJarEntries(File outputJar) throws IOException {
+ List<String> jarEntries = new ArrayList<>();
+ try (ZipFile zf = new ZipFile(outputJar)) {
+ Enumeration<? extends ZipEntry> entries = zf.entries();
+ while (entries.hasMoreElements()) {
+ String name = entries.nextElement().getName();
+ if (name.endsWith("/") || name.equals("META-INF/MANIFEST.MF")) {
+ continue;
+ }
+ jarEntries.add(name);
+ }
+ }
+ return jarEntries;
+ }
+}