aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
authorGravatar Dmitry Shevchenko <dmishe@google.com>2016-03-18 19:12:39 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2016-03-21 09:35:13 +0000
commitee4be22415300fa354862648893023c257638983 (patch)
tree931bc40b3c05b16f382b8604d85b644a529500e9 /src/main/java/com
parent27ec632c88ef228f4dee32b41ec7269ac749da28 (diff)
Adds mcov tool label to IosTest.
Adds source files to IosTest runfiles so that mcov/clang has access to them during coverage run. -- MOS_MIGRATED_REVID=117572134
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosTestRule.java24
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java10
3 files changed, 35 insertions, 9 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
index b9ad57bbd4..76b72b07ca 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
@@ -63,6 +63,7 @@ public final class IosTest implements RuleConfiguredTargetFactory {
static final String TEST_TARGET_DEVICE_ATTR = "ios_test_target_device";
static final String TEST_TEMPLATE_ATTR = "$test_template";
static final String XCTEST_APP_ATTR = "xctest_app";
+ static final String MCOV_TOOL_ATTR = ":mcov";
@VisibleForTesting
public static final String REQUIRES_SOURCE_ERROR =
@@ -168,10 +169,13 @@ public final class IosTest implements RuleConfiguredTargetFactory {
NestedSetBuilder<Artifact> filesToBuildBuilder =
NestedSetBuilder.<Artifact>stableOrder().addTransitive(filesToBuildSet);
+ InstrumentedFilesProvider instrumentedFilesProvider =
+ new CompilationSupport(ruleContext).getInstrumentedFilesProvider(common);
+
TestSupport testSupport =
new TestSupport(ruleContext)
.registerTestRunnerActions()
- .addRunfiles(runfilesBuilder)
+ .addRunfiles(runfilesBuilder, instrumentedFilesProvider)
.addFilesToBuild(filesToBuildBuilder);
Artifact executable = testSupport.generatedTestScript();
@@ -187,9 +191,7 @@ public final class IosTest implements RuleConfiguredTargetFactory {
.add(
ExecutionInfoProvider.class,
new ExecutionInfoProvider(ImmutableMap.of(ExecutionRequirements.REQUIRES_DARWIN, "")))
- .addProvider(
- InstrumentedFilesProvider.class,
- new CompilationSupport(ruleContext).getInstrumentedFilesProvider(common))
+ .addProvider(InstrumentedFilesProvider.class, instrumentedFilesProvider)
.addProviders(testSupport.getExtraProviders())
.setRunfilesSupport(runfilesSupport, executable)
.build();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTestRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTestRule.java
index b758e525b7..448c4be9ba 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTestRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTestRule.java
@@ -29,6 +29,7 @@ import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.Attribute.ComputedDefault;
+import com.google.devtools.build.lib.packages.Attribute.LateBoundLabel;
import com.google.devtools.build.lib.packages.Attribute.LateBoundLabelList;
import com.google.devtools.build.lib.packages.AttributeMap;
import com.google.devtools.build.lib.packages.ImplicitOutputsFunction;
@@ -50,6 +51,7 @@ public class IosTestRule implements RuleDefinition {
public RuleClass build(RuleClass.Builder builder, final RuleDefinitionEnvironment env) {
final ImmutableList<Label> gcov =
ImmutableList.of(env.getToolsLabel("//tools/objc:gcov"));
+ final Label mcov = env.getToolsLabel("//tools/objc:mcov");
return builder
.requiresConfigurationFragments(
ObjcConfiguration.class, J2ObjcConfiguration.class, AppleConfiguration.class)
@@ -70,8 +72,7 @@ public class IosTestRule implements RuleDefinition {
attr(IosTest.TARGET_DEVICE, LABEL)
.allowedFileTypes()
.allowedRuleClasses("ios_device")
- .value(
- env.getToolsLabel("//tools/objc/sim_devices:default")))
+ .value(env.getToolsLabel("//tools/objc/sim_devices:default")))
/* <!-- #BLAZE_RULE(ios_test).ATTRIBUTE(xctest) -->
Whether this target contains tests using the XCTest testing framework.
<!-- #END_BLAZE_RULE.ATTRIBUTE -->*/
@@ -147,14 +148,29 @@ public class IosTestRule implements RuleDefinition {
.value(
new LateBoundLabelList<BuildConfiguration>(gcov) {
@Override
- public List<Label> getDefault(Rule rule, AttributeMap attributes,
- BuildConfiguration configuration) {
+ public List<Label> getDefault(
+ Rule rule, AttributeMap attributes, BuildConfiguration configuration) {
if (!configuration.isCodeCoverageEnabled()) {
return ImmutableList.of();
}
return gcov;
}
}))
+ .add(
+ attr(IosTest.MCOV_TOOL_ATTR, LABEL)
+ .cfg(HOST)
+ .value(
+ new LateBoundLabel<BuildConfiguration>(mcov) {
+ @Override
+ public Label getDefault(
+ Rule rule, AttributeMap attributes, BuildConfiguration configuration) {
+ if (!configuration.isCodeCoverageEnabled()) {
+ return null;
+ }
+
+ return mcov;
+ }
+ }))
.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 265c637b5e..b1c5050b64 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
@@ -34,6 +34,7 @@ import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction.Su
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.apple.AppleConfiguration;
+import com.google.devtools.build.lib.rules.test.InstrumentedFilesProvider;
import com.google.devtools.build.lib.rules.test.TestEnvironmentProvider;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.FileType;
@@ -219,7 +220,9 @@ public class TestSupport {
/**
* Adds all files needed to run this test to the passed Runfiles builder.
*/
- public TestSupport addRunfiles(Builder runfilesBuilder) throws InterruptedException {
+ public TestSupport addRunfiles(
+ Builder runfilesBuilder, InstrumentedFilesProvider instrumentedFilesProvider)
+ throws InterruptedException {
runfilesBuilder
.addArtifact(testBundleIpa())
.addArtifacts(testHarnessIpa().asSet())
@@ -235,6 +238,11 @@ public class TestSupport {
runfilesBuilder.addTransitiveArtifacts(labDeviceRunfiles());
}
+ if (ruleContext.getConfiguration().isCodeCoverageEnabled()) {
+ runfilesBuilder.addArtifact(ruleContext.getHostPrerequisiteArtifact(IosTest.MCOV_TOOL_ATTR));
+ runfilesBuilder.addTransitiveArtifacts(instrumentedFilesProvider.getInstrumentedFiles());
+ }
+
return this;
}