aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java25
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBaseRule.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestConfiguration.java98
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/robolectric_properties_template.txt3
5 files changed, 129 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
index 4d58a9b706..4cab2d11a8 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
@@ -61,6 +61,7 @@ import com.google.devtools.build.lib.rules.android.AndroidInstrumentationInfo;
import com.google.devtools.build.lib.rules.android.AndroidInstrumentationTestRule;
import com.google.devtools.build.lib.rules.android.AndroidLibraryBaseRule;
import com.google.devtools.build.lib.rules.android.AndroidLocalTestBaseRule;
+import com.google.devtools.build.lib.rules.android.AndroidLocalTestConfiguration;
import com.google.devtools.build.lib.rules.android.AndroidNativeLibsInfo;
import com.google.devtools.build.lib.rules.android.AndroidNeverlinkAspect;
import com.google.devtools.build.lib.rules.android.AndroidResourcesInfo;
@@ -189,6 +190,9 @@ public class BazelRuleClassProvider {
String toolsRepository = checkNotNull(builder.getToolsRepository());
builder.addConfig(AndroidConfiguration.Options.class, new AndroidConfiguration.Loader());
+ builder.addConfig(
+ AndroidLocalTestConfiguration.Options.class,
+ new AndroidLocalTestConfiguration.Loader());
AndroidNeverlinkAspect androidNeverlinkAspect = new AndroidNeverlinkAspect();
DexArchiveAspect dexArchiveAspect = new DexArchiveAspect(toolsRepository);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java
index c5245d13ba..11dc93ed06 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java
@@ -78,6 +78,9 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor
JavaSemantics javaSemantics = createJavaSemantics();
AndroidSemantics androidSemantics = createAndroidSemantics();
+ AndroidLocalTestConfiguration androidLocalTestConfiguration =
+ ruleContext.getFragment(AndroidLocalTestConfiguration.class);
+
final JavaCommon javaCommon = new JavaCommon(ruleContext, javaSemantics);
// Use the regular Java javacopts. Enforcing android-compatible Java
// (-source 7 -target 7 and no TWR) is unnecessary for robolectric tests
@@ -140,6 +143,14 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor
Substitution.of(
"%android_custom_package%", resourceApk.getPrimaryResource().getJavaPackage()));
+ boolean generateBinaryResources =
+ androidLocalTestConfiguration.useAndroidLocalTestBinaryResources();
+ if (generateBinaryResources) {
+ substitutions.add(
+ Substitution.of(
+ "%android_resource_apk%", resourceApk.getArtifact().getRunfilesPathString()));
+ }
+
ruleContext.registerAction(
new TemplateExpansionAction(
ruleContext.getActionOwner(),
@@ -283,7 +294,13 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor
Runfiles defaultRunfiles =
collectDefaultRunfiles(
- ruleContext, javaCommon, filesToBuild, manifest, resourcesClassJar, resourcesZip);
+ ruleContext,
+ javaCommon,
+ filesToBuild,
+ manifest,
+ resourcesClassJar,
+ resourcesZip,
+ generateBinaryResources ? resourceApk : null);
RunfilesSupport runfilesSupport =
RunfilesSupport.withExecutable(ruleContext, defaultRunfiles, executable);
@@ -418,7 +435,8 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor
NestedSet<Artifact> filesToBuild,
Artifact manifest,
Artifact resourcesClassJar,
- Artifact resourcesZip)
+ Artifact resourcesZip,
+ @Nullable ResourceApk resourceApk)
throws RuleErrorException {
Runfiles.Builder builder = new Runfiles.Builder(ruleContext.getWorkspaceName());
@@ -468,6 +486,9 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor
builder.addArtifact(manifest);
builder.addArtifact(resourcesClassJar);
builder.addArtifact(resourcesZip);
+ if (resourceApk != null) {
+ builder.addArtifact(resourceApk.getArtifact());
+ }
return builder.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBaseRule.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBaseRule.java
index 4527d7d11e..068b5de552 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBaseRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBaseRule.java
@@ -38,7 +38,8 @@ public class AndroidLocalTestBaseRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment environment) {
return builder
- .requiresConfigurationFragments(JavaConfiguration.class)
+ .requiresConfigurationFragments(
+ JavaConfiguration.class, AndroidLocalTestConfiguration.class)
// Update documentation for inherited attributes
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestConfiguration.java
new file mode 100644
index 0000000000..69e96e5d4c
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestConfiguration.java
@@ -0,0 +1,98 @@
+// Copyright 2018 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.rules.android;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
+import com.google.devtools.build.lib.analysis.config.BuildConfiguration.Fragment;
+import com.google.devtools.build.lib.analysis.config.BuildOptions;
+import com.google.devtools.build.lib.analysis.config.ConfigurationEnvironment;
+import com.google.devtools.build.lib.analysis.config.ConfigurationFragmentFactory;
+import com.google.devtools.build.lib.analysis.config.FragmentOptions;
+import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
+import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Strategy;
+import com.google.devtools.common.options.Option;
+import com.google.devtools.common.options.OptionDocumentationCategory;
+import com.google.devtools.common.options.OptionEffectTag;
+import javax.annotation.Nullable;
+
+/** Configuration fragment for android_local_test. */
+@AutoCodec
+@Immutable
+public class AndroidLocalTestConfiguration extends BuildConfiguration.Fragment {
+ public static final ObjectCodec<AndroidLocalTestConfiguration> CODEC =
+ new AndroidLocalTestConfiguration_AutoCodec();
+
+ /** android_local_test specific options */
+ @AutoCodec(strategy = Strategy.PUBLIC_FIELDS)
+ public static final class Options extends FragmentOptions {
+ public static final ObjectCodec<Options> CODEC =
+ new AndroidLocalTestConfiguration_Options_AutoCodec();
+
+ @Option(
+ name = "experimental_android_local_test_binary_resources",
+ defaultValue = "false",
+ documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+ effectTags = {OptionEffectTag.AFFECTS_OUTPUTS},
+ help =
+ "If true, provide Robolectric with binary resources instead of raw resources"
+ + " for android_local_test. This should only be used by Robolectric team members"
+ + " for testing purposes."
+ )
+ public boolean androidLocalTestBinaryResources;
+ }
+
+ /**
+ * Loader class for {@link
+ * com.google.devtools.build.lib.rules.android.AndroidLocalTestConfiguration}.
+ */
+ public static final class Loader implements ConfigurationFragmentFactory {
+
+ @Nullable
+ @Override
+ public Fragment create(ConfigurationEnvironment env, BuildOptions buildOptions)
+ throws InvalidConfigurationException, InterruptedException {
+ return new AndroidLocalTestConfiguration(buildOptions.get(Options.class));
+ }
+
+ @Override
+ public Class<? extends Fragment> creates() {
+ return AndroidLocalTestConfiguration.class;
+ }
+
+ @Override
+ public ImmutableSet<Class<? extends FragmentOptions>> requiredOptions() {
+ return ImmutableSet.of(Options.class);
+ }
+ }
+
+ private final boolean androidLocalTestBinaryResources;
+
+ AndroidLocalTestConfiguration(Options options) {
+ this.androidLocalTestBinaryResources = options.androidLocalTestBinaryResources;
+ }
+
+ @AutoCodec.Instantiator
+ AndroidLocalTestConfiguration(boolean androidLocalTestBinaryResources) {
+ this.androidLocalTestBinaryResources = androidLocalTestBinaryResources;
+ }
+
+ public boolean useAndroidLocalTestBinaryResources() {
+ return this.androidLocalTestBinaryResources;
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/robolectric_properties_template.txt b/src/main/java/com/google/devtools/build/lib/rules/android/robolectric_properties_template.txt
index dba03448b2..facc965941 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/robolectric_properties_template.txt
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/robolectric_properties_template.txt
@@ -1,4 +1,5 @@
android_merged_manifest=%android_merged_manifest%
android_merged_resources=%android_merged_resources%
android_merged_assets=%android_merged_assets%
-android_custom_package=%android_custom_package% \ No newline at end of file
+android_custom_package=%android_custom_package%
+android_resource_apk=%android_resource_apk% \ No newline at end of file