aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/com')
-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
-rw-r--r--src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java34
3 files changed, 216 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;
+ }
+}
diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java
index 2383b6497b..aff6d9251b 100644
--- a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java
+++ b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java
@@ -520,6 +520,40 @@ public class AndroidStudioInfoAspectTest extends BuildViewTestCase {
assertThat(lRuleInfo.getAndroidRuleIdeInfo().getJavaPackage()).isEqualTo("com.google.example");
}
+ public void testAndroidLibraryWithoutAidlHasNoIdlJars() throws Exception {
+ scratch.file(
+ "java/com/google/example/BUILD",
+ "android_library(",
+ " name = 'no_idl',",
+ " srcs = ['Test.java'],",
+ ")"
+ );
+ String noIdlTarget = "//java/com/google/example:no_idl";
+ Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo(noIdlTarget);
+ RuleIdeInfo noIdlRuleInfo = getRuleInfoAndVerifyLabel(noIdlTarget, ruleIdeInfos);
+
+ assertThat(noIdlRuleInfo.getAndroidRuleIdeInfo().getHasIdlSources()).isFalse();
+ }
+
+ public void testAndroidLibraryWithAidlHasIdlJars() throws Exception {
+ scratch.file(
+ "java/com/google/example/BUILD",
+ "android_library(",
+ " name = 'has_idl',",
+ " idl_srcs = ['a.aidl'],",
+ ")"
+ );
+ String idlTarget = "//java/com/google/example:has_idl";
+ Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo(idlTarget);
+ RuleIdeInfo idlRuleInfo = getRuleInfoAndVerifyLabel(idlTarget, ruleIdeInfos);
+
+ assertThat(idlRuleInfo.getAndroidRuleIdeInfo().getHasIdlSources()).isTrue();
+ assertThat(LIBRARY_ARTIFACT_TO_STRING.apply(idlRuleInfo.getAndroidRuleIdeInfo().getIdlJar()))
+ .isEqualTo(
+ "<jar:java/com/google/example/libhas_idl-idl.jar>"
+ + "<source:java/com/google/example/libhas_idl-idl.srcjar>");
+ }
+
private Map<String, RuleIdeInfo> buildRuleIdeInfo(String target) throws Exception {
AnalysisResult analysisResult =
update(