aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Chris Parsons <cparsons@google.com>2015-09-01 16:12:41 +0000
committerGravatar John Field <jfield@google.com>2015-09-02 00:58:15 +0000
commit7ba1731ad47eb86b8c14247b05240404d258175f (patch)
tree9e187d44df00c3927e4be58b7a016eb76daf4db3 /src
parentc3a8d2f3ae8c8f763f27636efa2b1dc3bc175dbe (diff)
Change ios_test to reflect experimental_ios_test functionality on mac.
-- MOS_MIGRATED_REVID=102046532
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTest.java45
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTestRule.java70
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java12
3 files changed, 87 insertions, 40 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTest.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTest.java
index 2950b151b5..150041b880 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTest.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTest.java
@@ -14,58 +14,55 @@
package com.google.devtools.build.lib.bazel.rules.objc;
-import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
-import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.Runfiles;
import com.google.devtools.build.lib.analysis.RunfilesProvider;
import com.google.devtools.build.lib.analysis.RunfilesSupport;
-import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
+import com.google.devtools.build.lib.rules.objc.ExecutionRequirements;
import com.google.devtools.build.lib.rules.objc.IosTest;
import com.google.devtools.build.lib.rules.objc.ObjcCommon;
-import com.google.devtools.build.lib.rules.objc.ObjcRuleClasses;
+import com.google.devtools.build.lib.rules.objc.TestSupport;
import com.google.devtools.build.lib.rules.objc.XcodeProvider;
+import com.google.devtools.build.lib.rules.test.ExecutionInfoProvider;
/**
* Implementation for ios_test rule in Bazel.
*/
public final class BazelIosTest extends IosTest {
- static final String IOS_TEST_ON_BAZEL_ATTR = "$ios_test_on_bazel";
-
@Override
public ConfiguredTarget create(RuleContext ruleContext, ObjcCommon common,
XcodeProvider xcodeProvider, NestedSet<Artifact> filesToBuild) throws InterruptedException {
- Artifact testRunner = ruleContext.getPrerequisiteArtifact(IOS_TEST_ON_BAZEL_ATTR, Mode.TARGET);
- Artifact testScript =
- ObjcRuleClasses.artifactByAppendingToBaseName(ruleContext, "_test_script");
+ Runfiles.Builder runfilesBuilder = new Runfiles.Builder(ruleContext.getWorkspaceName())
+ .addRunfiles(ruleContext, RunfilesProvider.DEFAULT_RUNFILES);
+ NestedSetBuilder<Artifact> filesToBuildBuilder = NestedSetBuilder.<Artifact>stableOrder()
+ .addTransitive(filesToBuild);
+
+ TestSupport testSupport = new TestSupport(ruleContext)
+ .registerTestRunnerActions()
+ .addRunfiles(runfilesBuilder, common.getObjcProvider())
+ .addFilesToBuild(filesToBuildBuilder);
- ruleContext.registerAction(
- new TemplateExpansionAction(
- ruleContext.getActionOwner(),
- testRunner,
- testScript,
- ImmutableList.<TemplateExpansionAction.Substitution>of(),
- /*executable=*/ true));
+ Artifact executable = testSupport.generatedTestScript();
- Runfiles runfiles = new Runfiles.Builder(ruleContext.getWorkspaceName())
- .addArtifact(testScript).build();
+ Runfiles runfiles = runfilesBuilder.build();
RunfilesSupport runfilesSupport =
- RunfilesSupport.withExecutable(ruleContext, runfiles, testScript);
+ RunfilesSupport.withExecutable(ruleContext, runfiles, executable);
return new RuleConfiguredTargetBuilder(ruleContext)
- .setFilesToBuild(NestedSetBuilder.<Artifact>stableOrder()
- .addTransitive(filesToBuild)
- .add(testRunner)
- .build())
+ .setFilesToBuild(filesToBuildBuilder.build())
.add(XcodeProvider.class, xcodeProvider)
.add(RunfilesProvider.class, RunfilesProvider.simple(runfiles))
- .setRunfilesSupport(runfilesSupport, testRunner)
+ .add(ExecutionInfoProvider.class,
+ new ExecutionInfoProvider(ImmutableMap.of(ExecutionRequirements.REQUIRES_DARWIN, "")))
+ .addProviders(testSupport.getExtraProviders(common.getObjcProvider()))
+ .setRunfilesSupport(runfilesSupport, executable)
.build();
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTestRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTestRule.java
index 4b7c7c468d..49f711bd7e 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTestRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTestRule.java
@@ -14,20 +14,32 @@
package com.google.devtools.build.lib.bazel.rules.objc;
+import static com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition.HOST;
import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.Type.LABEL;
+import static com.google.devtools.build.lib.packages.Type.LABEL_LIST;
+import static com.google.devtools.build.lib.packages.Type.STRING_LIST;
+import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
+import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
+import com.google.devtools.build.lib.packages.Attribute.LateBoundLabelList;
import com.google.devtools.build.lib.packages.ImplicitOutputsFunction;
+import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
import com.google.devtools.build.lib.rules.java.J2ObjcConfiguration;
+import com.google.devtools.build.lib.rules.objc.IosTest;
import com.google.devtools.build.lib.rules.objc.ObjcConfiguration;
import com.google.devtools.build.lib.rules.objc.ObjcRuleClasses;
import com.google.devtools.build.lib.rules.objc.ReleaseBundlingSupport;
import com.google.devtools.build.lib.rules.objc.XcodeSupport;
+import com.google.devtools.build.lib.syntax.Label;
+import com.google.devtools.build.lib.util.FileType;
+
+import java.util.List;
/**
* Rule definition for the ios_test rule.
@@ -38,17 +50,55 @@ public final class BazelIosTestRule implements RuleDefinition {
return builder
.requiresConfigurationFragments(ObjcConfiguration.class, J2ObjcConfiguration.class)
/*<!-- #BLAZE_RULE(ios_test).IMPLICIT_OUTPUTS -->
- <ul>
- <li><code><var>name</var>.ipa</code>: the test bundle as an
- <code>.ipa</code> file
- <li><code><var>name</var>.xcodeproj/project.pbxproj: An Xcode project file which can be
- used to develop or build on a Mac.</li>
- </ul>
- <!-- #END_BLAZE_RULE.IMPLICIT_OUTPUTS -->*/
+ <ul>
+ <li><code><var>name</var>.ipa</code>: the test bundle as an
+ <code>.ipa</code> file
+ <li><code><var>name</var>.xcodeproj/project.pbxproj: An Xcode project file which can be
+ used to develop or build on a Mac.</li>
+ </ul>
+ <!-- #END_BLAZE_RULE.IMPLICIT_OUTPUTS -->*/
.setImplicitOutputsFunction(
ImplicitOutputsFunction.fromFunctions(ReleaseBundlingSupport.IPA, XcodeSupport.PBXPROJ))
- .add(attr(BazelIosTest.IOS_TEST_ON_BAZEL_ATTR, LABEL)
- .value(env.getLabel("//tools/objc:ios_test_on_bazel")).exec())
+ .override(
+ attr(IosTest.TARGET_DEVICE, LABEL)
+ .allowedFileTypes()
+ .allowedRuleClasses("ios_device")
+ .value(env.getLabel("//tools/objc/sim_devices:default")))
+ /* <!-- #BLAZE_RULE(ios_test).ATTRIBUTE(ios_test_target_device) -->
+ The device against how to run the test. If this attribute is defined, the test will run on
+ the lab device. Otherwise, the test will run on simulator.
+ ${SYNOPSIS}
+ <!-- #END_BLAZE_RULE.ATTRIBUTE -->*/
+ .add(
+ attr("ios_test_target_device", LABEL)
+ .allowedFileTypes()
+ .allowedRuleClasses("ios_lab_device"))
+ /* <!-- #BLAZE_RULE(ios_test).ATTRIBUTE(ios_device_arg) -->
+ Extra arguments to pass to the <code>ios_test_target_device</code>'s binary. They should be
+ in the form KEY=VALUE or simply KEY (check your device's documentation for allowed
+ parameters).
+ ${SYNOPSIS}
+ <!-- #END_BLAZE_RULE.ATTRIBUTE -->*/
+ .add(attr("ios_device_arg", STRING_LIST))
+ /* <!-- #BLAZE_RULE(ios_test).ATTRIBUTE(plugins) -->
+ Plugins to pass to the test runner.
+ ${SYNOPSIS}
+ <!-- #END_BLAZE_RULE.ATTRIBUTE -->*/
+ .add(attr("plugins", LABEL_LIST).allowedFileTypes(FileType.of("_deploy.jar")))
+ .add(attr("$test_template", LABEL)
+ .value(env.getLabel("//tools/objc:ios_test.sh.bazel_template")))
+ .add(attr("$test_runner", LABEL).value(env.getLabel("//tools/objc:testrunner")))
+ .override(attr(":gcov", LABEL_LIST).cfg(HOST)
+ .value(new LateBoundLabelList<BuildConfiguration>() {
+ @Override
+ public List<Label> getDefault(Rule rule, BuildConfiguration configuration) {
+ if (!configuration.isCodeCoverageEnabled()) {
+ return ImmutableList.of();
+ }
+ return ImmutableList.of(
+ configuration.getFragment(ObjcConfiguration.class).getGcovLabel());
+ }
+ }))
.build();
}
@@ -58,7 +108,7 @@ public final class BazelIosTestRule implements RuleDefinition {
.name("ios_test")
.type(RuleClassType.TEST)
.ancestors(BaseRuleClasses.BaseRule.class, BaseRuleClasses.TestBaseRule.class,
- ObjcRuleClasses.IosTestBaseRule.class)
+ ObjcRuleClasses.IosTestBaseRule.class, ObjcRuleClasses.SimulatorRule.class)
.factoryClass(BazelIosTest.class)
.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java
index 5506115905..cf00943c8f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java
@@ -46,17 +46,17 @@ import javax.annotation.Nullable;
/**
* Support for running XcTests.
*/
-class TestSupport {
+public class TestSupport {
private final RuleContext ruleContext;
- TestSupport(RuleContext ruleContext) {
+ public TestSupport(RuleContext ruleContext) {
this.ruleContext = ruleContext;
}
/**
* Registers actions to create all files needed in order to actually run the test.
*/
- TestSupport registerTestRunnerActions() {
+ public TestSupport registerTestRunnerActions() {
registerTestScriptSubstitutionAction();
return this;
}
@@ -64,7 +64,7 @@ class TestSupport {
/**
* Returns the script which should be run in order to actually run the tests.
*/
- Artifact generatedTestScript() {
+ public Artifact generatedTestScript() {
return ObjcRuleClasses.artifactByAppendingToBaseName(ruleContext, "_test_script");
}
@@ -193,7 +193,7 @@ class TestSupport {
*
* @param objcProvider common information about this rule's attributes and its dependencies
*/
- TestSupport addRunfiles(Builder runfilesBuilder, ObjcProvider objcProvider) {
+ public TestSupport addRunfiles(Builder runfilesBuilder, ObjcProvider objcProvider) {
runfilesBuilder
.addArtifact(testIpa())
.addArtifacts(xctestIpa().asSet())
@@ -298,7 +298,7 @@ class TestSupport {
/**
* Adds files which must be built in order to run this test to builder.
*/
- TestSupport addFilesToBuild(NestedSetBuilder<Artifact> builder) {
+ public TestSupport addFilesToBuild(NestedSetBuilder<Artifact> builder) {
builder.add(testIpa()).addAll(xctestIpa().asSet());
return this;
}