aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com
diff options
context:
space:
mode:
authorGravatar Adam Michael <ajmichael@google.com>2016-10-10 15:37:10 +0000
committerGravatar Yue Gan <yueg@google.com>2016-10-11 08:43:32 +0000
commit2fcf0e4cfb97af7cc8b8a090c5144c87b759bc13 (patch)
tree5956650202941ecdc176682cb38e46cf45afb381 /src/test/java/com
parent87366aae2f9608eae5692fa2b69f86d8ef10072b (diff)
Generate aar_import and java_import rules for local maven repositories in <sdk>/extras for sdk in android_sdk_repository.
Addresses https://github.com/bazelbuild/bazel/issues/1745. -- MOS_MIGRATED_REVID=135679008
Diffstat (limited to 'src/test/java/com')
-rw-r--r--src/test/java/com/google/devtools/build/lib/BUILD4
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java9
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisMock.java5
-rw-r--r--src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java79
-rw-r--r--src/test/java/com/google/devtools/build/lib/bazel/rules/android/SdkMavenRepositoryTest.java148
5 files changed, 243 insertions, 2 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD
index 137bfe8638..f15be52f78 100644
--- a/src/test/java/com/google/devtools/build/lib/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/BUILD
@@ -956,13 +956,17 @@ java_test(
":analysis_testutil",
":foundations_testutil",
":test_runner",
+ ":testutil",
"//src/main/java/com/google/devtools/build/lib:bazel-main",
"//src/main/java/com/google/devtools/build/lib:bazel-rules",
"//src/main/java/com/google/devtools/build/lib:build-base",
"//src/main/java/com/google/devtools/build/lib:events",
+ "//src/main/java/com/google/devtools/build/lib:packages-internal",
+ "//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib:util",
"//src/main/java/com/google/devtools/build/lib:vfs",
"//src/main/java/com/google/devtools/build/lib/actions",
+ "//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/protobuf:crosstool_config_java_proto",
"//third_party:guava",
"//third_party:junit4",
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
index f3a7d258c8..b741e073f4 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
@@ -111,6 +111,11 @@ public final class BazelAnalysisMock extends AnalysisMock {
config.create(
"/bazel_tools_workspace/tools/android/BUILD",
androidBuildContents.toArray(new String[androidBuildContents.size()]));
+ config.create(
+ "/bazel_tools_workspace/tools/android/android_sdk_repository_template.bzl",
+ "def create_android_sdk_rules("
+ + "name, build_tools_version, build_tools_directory, api_level):",
+ " pass");
config.create(
"/bazel_tools_workspace/tools/genrule/BUILD", "exports_files(['genrule-setup.sh'])");
@@ -139,7 +144,9 @@ public final class BazelAnalysisMock extends AnalysisMock {
"/bazel_tools_workspace/tools/zip/BUILD",
"package(default_visibility=['//visibility:public'])",
"exports_files(['precompile.py'])",
- "cc_binary(name='zipper', srcs=['zip_main.cc'])");
+ "cc_binary(name='zipper', srcs=['zip_main.cc'])",
+ "sh_binary(name='zip_manifest_creator', srcs=['zip_manifest_creator.sh'])",
+ "py_binary(name = 'embedded_jar_extractor', srcs=['embedded_jar_extractor.py'])");
ccSupport().setup(config);
}
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisMock.java b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisMock.java
index d01db4f360..c1c8a55fbb 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisMock.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisMock.java
@@ -18,6 +18,8 @@ import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.analysis.ConfigurationCollectionFactory;
import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
import com.google.devtools.build.lib.analysis.config.ConfigurationFactory;
+import com.google.devtools.build.lib.bazel.rules.android.AndroidSdkRepositoryFunction;
+import com.google.devtools.build.lib.bazel.rules.android.AndroidSdkRepositoryRule;
import com.google.devtools.build.lib.flags.InvocationPolicyEnforcer;
import com.google.devtools.build.lib.packages.PackageFactory;
import com.google.devtools.build.lib.packages.util.LoadingMock;
@@ -110,7 +112,8 @@ public abstract class AnalysisMock extends LoadingMock {
// Some tests require the local_repository rule so we need the appropriate SkyFunctions.
RepositoryFunction localRepositoryFunction = new LocalRepositoryFunction();
ImmutableMap<String, RepositoryFunction> repositoryHandlers = ImmutableMap.of(
- LocalRepositoryRule.NAME, localRepositoryFunction);
+ LocalRepositoryRule.NAME, localRepositoryFunction,
+ AndroidSdkRepositoryRule.NAME, new AndroidSdkRepositoryFunction());
return ImmutableMap.of(
SkyFunctions.REPOSITORY_DIRECTORY,
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java
new file mode 100644
index 0000000000..265981b3c6
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java
@@ -0,0 +1,79 @@
+// Copyright 2016 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.lib.bazel.rules.android;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
+import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
+import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
+import com.google.devtools.build.lib.vfs.FileSystemUtils;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/** Tests for {@link AndroidNdkRepositoryFunction}. */
+@RunWith(JUnit4.class)
+public class AndroidSdkRepositoryTest extends BuildViewTestCase {
+
+ @Override
+ protected ConfiguredRuleClassProvider getRuleClassProvider() {
+ ConfiguredRuleClassProvider.Builder builder = new ConfiguredRuleClassProvider.Builder();
+ TestRuleClassProvider.addStandardRules(builder);
+ return builder
+ .addRuleDefinition(new AarImportRule())
+ .addRuleDefinition(new AndroidSdkRepositoryRule())
+ .build();
+ }
+
+ @Before
+ public void setup() throws Exception {
+ scratch.setWorkingDir("/sdk");
+ scratch.file("extras/google/m2repository/com/google/android/foo/1.0.0/foo.pom",
+ "<project>",
+ " <groupId>com.google.android</groupId>",
+ " <artifactId>foo</artifactId>",
+ " <version>1.0.0</version>",
+ " <packaging>aar</packaging>",
+ "</project>");
+
+ scratch.setWorkingDir("/workspace");
+ FileSystemUtils.appendIsoLatin1(scratch.resolve("WORKSPACE"),
+ "android_sdk_repository(",
+ " name = 'mysdk',",
+ " path = '/sdk',",
+ " build_tools_version = '24.0.0',",
+ " api_level = 24,",
+ ")");
+ }
+
+ @Test
+ public void testGeneratedAarImport() throws Exception {
+ invalidatePackages();
+ ConfiguredTarget aarImportTarget = getConfiguredTarget("@mysdk//com.google.android:foo-1.0.0");
+ assertThat(aarImportTarget.getTarget().getAssociatedRule().getRuleClass())
+ .isEqualTo("aar_import");
+ }
+
+ @Test
+ public void testExportsFiles() throws Exception {
+ invalidatePackages();
+ ConfiguredTarget aarTarget = getConfiguredTarget(
+ "@mysdk//:extras/google/m2repository/com/google/android/foo/1.0.0/foo.aar");
+ assertThat(aarTarget).isNotNull();
+ }
+}
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/SdkMavenRepositoryTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/SdkMavenRepositoryTest.java
new file mode 100644
index 0000000000..7d9bdb28c6
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/SdkMavenRepositoryTest.java
@@ -0,0 +1,148 @@
+// Copyright 2016 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.lib.bazel.rules.android;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
+import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
+import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.packages.AttributeMap;
+import com.google.devtools.build.lib.packages.BuildType;
+import com.google.devtools.build.lib.packages.RawAttributeMapper;
+import com.google.devtools.build.lib.packages.Rule;
+import com.google.devtools.build.lib.syntax.Type;
+import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
+import com.google.devtools.build.lib.vfs.Path;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/** Tests for {@link SdkMavenRepository}. */
+@RunWith(JUnit4.class)
+public class SdkMavenRepositoryTest extends BuildViewTestCase {
+ Path workspaceDir;
+ Path repoPath;
+ SdkMavenRepository sdkMavenRepository;
+
+ @Override
+ protected ConfiguredRuleClassProvider getRuleClassProvider() {
+ ConfiguredRuleClassProvider.Builder builder = new ConfiguredRuleClassProvider.Builder();
+ TestRuleClassProvider.addStandardRules(builder);
+ return builder.addRuleDefinition(new AarImportRule()).build();
+ }
+
+ @Before
+ public void setup() throws Exception {
+ repoPath = scratch.dir("repo");
+ workspaceDir = scratch.dir("");
+
+ scratch.file("repo/com/google/android/foo/1.0.0/foo.pom",
+ "<project>",
+ " <groupId>com.google.android</groupId>",
+ " <artifactId>foo</artifactId>",
+ " <version>1.0.0</version>",
+ "</project>");
+ scratch.file("repo/com/google/android/bar/1.0.0/bar.pom",
+ "<project>",
+ " <groupId>com.google.android</groupId>",
+ " <artifactId>bar</artifactId>",
+ " <version>1.0.0</version>",
+ " <packaging>aar</packaging>",
+ " <dependencies>",
+ " <dependency>",
+ " <groupId>com.google.android</groupId>",
+ " <artifactId>foo</artifactId>",
+ " <version>1.0.0</version>",
+ " </dependency>",
+ " <dependency>",
+ " <groupId>com.google.android</groupId>",
+ " <artifactId>baz</artifactId>",
+ " <version>1.0.0</version>",
+ " </dependency>",
+ " </dependencies>",
+ "</project>");
+ scratch.file("repo/com/google/android/baz/1.0.0/baz.pom",
+ "<project>",
+ " <groupId>com.google.android</groupId>",
+ " <artifactId>baz</artifactId>",
+ " <version>1.0.0</version>",
+ " <packaging>par</packaging>",
+ "</project>");
+ sdkMavenRepository = SdkMavenRepository.create(ImmutableList.of(repoPath));
+ scratch.file("BUILD",
+ "exports_files([",
+ sdkMavenRepository.getExportsFiles(workspaceDir),
+ "])");
+ }
+
+ @Test
+ public void testExportsFiles() throws Exception {
+ assertThat(sdkMavenRepository.getExportsFiles(workspaceDir)).isEqualTo(
+ " 'repo/com/google/android/bar/1.0.0/bar.aar',\n"
+ + " 'repo/com/google/android/baz/1.0.0/baz.par',\n"
+ + " 'repo/com/google/android/foo/1.0.0/foo.jar',\n"
+ );
+ }
+
+ @Test
+ public void testBuildFilesWritten() throws Exception {
+ sdkMavenRepository.writeBuildFiles(workspaceDir);
+
+ Path groupIdPath = scratch.resolve("com.google.android");
+ assertThat(workspaceDir.getDirectoryEntries()).containsAllOf(repoPath, groupIdPath);
+
+ Path buildFilePath = groupIdPath.getRelative("BUILD");
+ assertThat(groupIdPath.getDirectoryEntries()).containsExactly(buildFilePath);
+ }
+
+ @Test
+ public void testGeneratedAarImport() throws Exception {
+ sdkMavenRepository.writeBuildFiles(workspaceDir);
+ Rule aarImport =
+ getConfiguredTarget("//com.google.android:bar-1.0.0").getTarget().getAssociatedRule();
+ assertThat(aarImport.getRuleClass()).isEqualTo("aar_import");
+ AttributeMap attributes = RawAttributeMapper.of(aarImport);
+ assertThat(attributes.get("aar", BuildType.LABEL))
+ .isEqualTo(Label.parseAbsoluteUnchecked("//:repo/com/google/android/bar/1.0.0/bar.aar"));
+ assertThat(attributes.get("exports", BuildType.LABEL_LIST))
+ .containsExactly(Label.parseAbsoluteUnchecked("//com.google.android:foo-1.0.0"));
+ }
+
+ @Test
+ public void testGeneratedJavaImport() throws Exception {
+ sdkMavenRepository.writeBuildFiles(workspaceDir);
+ Rule javaImport =
+ getConfiguredTarget("//com.google.android:foo-1.0.0").getTarget().getAssociatedRule();
+ assertThat(javaImport.getRuleClass()).isEqualTo("java_import");
+ AttributeMap attributes = RawAttributeMapper.of(javaImport);
+ assertThat(attributes.get("jars", BuildType.LABEL_LIST)).containsExactly(
+ Label.parseAbsoluteUnchecked("//:repo/com/google/android/foo/1.0.0/foo.jar"));
+ assertThat(attributes.get("exports", BuildType.LABEL_LIST)).isEmpty();
+ }
+
+ @Test
+ public void testGeneratedRuleForInvalidPackaging() throws Exception {
+ sdkMavenRepository.writeBuildFiles(workspaceDir);
+ Rule invalidPackagingGenrule =
+ getConfiguredTarget("//com.google.android:baz-1.0.0").getTarget().getAssociatedRule();
+ assertThat(invalidPackagingGenrule.getRuleClass()).isEqualTo("genrule");
+ assertThat(RawAttributeMapper.of(invalidPackagingGenrule).get("cmd", Type.STRING))
+ .isEqualTo("echo Bazel does not recognize the Maven packaging type for: "
+ + "\"//:repo/com/google/android/baz/1.0.0/baz.par\"; exit 1");
+ }
+}