aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java')
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java b/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java
index b6107f4915..3b6221ad82 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java
@@ -46,6 +46,7 @@ import com.google.devtools.build.lib.packages.BuildType;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.pkgcache.LoadingFailureEvent;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
+import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.testutil.Suite;
import com.google.devtools.build.lib.testutil.TestConstants;
import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
@@ -1321,6 +1322,43 @@ public class BuildViewTest extends BuildViewTestBase {
}
@Test
+ public void errorInImplicitDeps() throws Exception {
+ setRulesAvailableInTests(
+ (MockRule)
+ () -> {
+ try {
+ return MockRule.define(
+ "custom_rule",
+ attr("$implicit1", BuildType.LABEL_LIST)
+ .defaultValue(
+ ImmutableList.of(
+ Label.parseAbsoluteUnchecked("//bad2:label"),
+ Label.parseAbsoluteUnchecked("//foo:dep"))),
+ attr("$implicit2", BuildType.LABEL)
+ .defaultValue(Label.parseAbsoluteUnchecked("//bad:label")));
+ } catch (Type.ConversionException e) {
+ throw new IllegalStateException(e);
+ }
+ });
+ scratch.file("foo/BUILD", "custom_rule(name = 'foo')", "sh_library(name = 'dep')");
+ scratch.file(
+ "bad/BUILD",
+ "sh_library(name = 'other_label', nonexistent_attribute = 'blah')",
+ "sh_library(name = 'label')");
+ // bad2/BUILD is completely missing.
+ reporter.removeHandler(failFastHandler);
+ update(defaultFlags().with(Flag.KEEP_GOING), "//foo:foo");
+ assertContainsEvent(
+ "every rule of type custom_rule implicitly depends upon the target '//bad2:label', but this"
+ + " target could not be found because of: no such package 'bad2': BUILD file not found "
+ + "on package path");
+ assertContainsEvent(
+ "every rule of type custom_rule implicitly depends upon the target '//bad:label', but this "
+ + "target could not be found because of: Target '//bad:label' contains an error and its"
+ + " package is in error");
+ }
+
+ @Test
public void onlyAllowedRuleClassesWithWarning() throws Exception {
setRulesAvailableInTests(
(MockRule) () -> MockRule.define(