aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalIosTestRule.java
diff options
context:
space:
mode:
authorGravatar Peter Schmitt <schmitt@google.com>2015-07-29 14:49:01 +0000
committerGravatar Lukacs Berki <lberki@google.com>2015-07-29 16:03:41 +0000
commit40deeff2fb1a0686be6276c1559ce051fe079a04 (patch)
treedb1ce933aeeecafb401be94741427552659254a7 /src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalIosTestRule.java
parenta0345bce94607a7096777d9013eed4c08cf12edc (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.java19
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();
}