diff options
author | Chris Parsons <cparsons@google.com> | 2015-09-01 16:12:41 +0000 |
---|---|---|
committer | John Field <jfield@google.com> | 2015-09-02 00:58:15 +0000 |
commit | 7ba1731ad47eb86b8c14247b05240404d258175f (patch) | |
tree | 9e187d44df00c3927e4be58b7a016eb76daf4db3 /src/main/java/com/google/devtools | |
parent | c3a8d2f3ae8c8f763f27636efa2b1dc3bc175dbe (diff) |
Change ios_test to reflect experimental_ios_test functionality on mac.
--
MOS_MIGRATED_REVID=102046532
Diffstat (limited to 'src/main/java/com/google/devtools')
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; } |