diff options
author | 2016-03-18 19:12:39 +0000 | |
---|---|---|
committer | 2016-03-21 09:35:13 +0000 | |
commit | ee4be22415300fa354862648893023c257638983 (patch) | |
tree | 931bc40b3c05b16f382b8604d85b644a529500e9 /src/main/java/com | |
parent | 27ec632c88ef228f4dee32b41ec7269ac749da28 (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')
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; } |