diff options
author | Peter Schmitt <schmitt@google.com> | 2015-07-29 14:49:01 +0000 |
---|---|---|
committer | Lukacs Berki <lberki@google.com> | 2015-07-29 16:03:41 +0000 |
commit | 40deeff2fb1a0686be6276c1559ce051fe079a04 (patch) | |
tree | db1ce933aeeecafb401be94741427552659254a7 /src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalIosTestRule.java | |
parent | a0345bce94607a7096777d9013eed4c08cf12edc (diff) |
Support coverage in experimental_ios_test.
Coverage depends on quite a few moving parts, several of which were changed for this test:
- BuildConfiguration.getCoverageLabels() used to include gcov support, this is now replaced by the dedicated getGcovLabels() and a separate implicit attribute on TestBaseRule. This new attribute is then overridden in ExperimentalIosTest to use an xcode-compatible gcov.
- Objc's TestSupport now correctly registers instrumented files and sets the necessary runfiles for collecting coverage.
- ios_test's template exports gcda files for coverage computation after the test's execution.
--
MOS_MIGRATED_REVID=99374435
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalIosTestRule.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalIosTestRule.java | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalIosTestRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalIosTestRule.java index 2a866b720c..7bf6ec2993 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalIosTestRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalIosTestRule.java @@ -14,20 +14,28 @@ package com.google.devtools.build.lib.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.Constants; 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.syntax.Label; import com.google.devtools.build.lib.util.FileType; +import java.util.List; + /** * Rule definition for {@code experimental_ios_test} rule in Bazel. * @@ -78,6 +86,17 @@ public final class ExperimentalIosTestRule implements RuleDefinition { .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(); } |