aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib')
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java53
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/util/MockRule.java6
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java15
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsWithDynamicConfigurationsTest.java2
4 files changed, 74 insertions, 2 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 4098a2b02f..6d107b3ee6 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
@@ -16,6 +16,7 @@ package com.google.devtools.build.lib.analysis;
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
+import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.testutil.MoreAsserts.assertEventCount;
import static com.google.devtools.build.lib.testutil.MoreAsserts.assertEventCountAtLeast;
import static org.junit.Assert.fail;
@@ -36,8 +37,10 @@ import com.google.devtools.build.lib.analysis.config.InvalidConfigurationExcepti
import com.google.devtools.build.lib.analysis.util.AnalysisMock;
import com.google.devtools.build.lib.analysis.util.BuildViewTestBase;
import com.google.devtools.build.lib.analysis.util.ExpectedDynamicConfigurationErrors;
+import com.google.devtools.build.lib.analysis.util.MockRule;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.Attribute;
+import com.google.devtools.build.lib.packages.BuildType;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.skyframe.SkyFunctions;
import com.google.devtools.build.lib.skyframe.TargetPatternValue.TargetPatternKey;
@@ -1340,6 +1343,56 @@ public class BuildViewTest extends BuildViewTestBase {
assertDoesNotContainEvent("implicitly depends upon");
}
+ @Test
+ public void allowedRuleClassesAndAllowedRuleClassesWithWarning() throws Exception {
+ setRulesAvailableInTests(
+ (MockRule) () -> MockRule.define(
+ "custom_rule",
+ attr("deps", BuildType.LABEL_LIST)
+ .allowedFileTypes()
+ .allowedRuleClasses("java_library", "java_binary")
+ .allowedRuleClassesWithWarning("genrule")));
+
+ scratch.file("foo/BUILD",
+ "genrule(",
+ " name = 'genlib',",
+ " srcs = [],",
+ " outs = ['genlib.out'],",
+ " cmd = 'echo hi > $@')",
+ "custom_rule(",
+ " name = 'foo',",
+ " deps = [':genlib'])");
+
+ update("//foo");
+ assertContainsEvent("WARNING /workspace/foo/BUILD:8:12: in deps attribute of custom_rule rule "
+ + "//foo:foo: genrule rule '//foo:genlib' is unexpected here (expected java_library or "
+ + "java_binary); continuing anyway");
+ }
+
+ @Test
+ public void onlyAllowedRuleClassesWithWarning() throws Exception {
+ setRulesAvailableInTests(
+ (MockRule) () -> MockRule.define(
+ "custom_rule",
+ attr("deps", BuildType.LABEL_LIST)
+ .allowedFileTypes()
+ .allowedRuleClassesWithWarning("genrule")));
+
+ scratch.file("foo/BUILD",
+ "genrule(",
+ " name = 'genlib',",
+ " srcs = [],",
+ " outs = ['genlib.out'],",
+ " cmd = 'echo hi > $@')",
+ "custom_rule(",
+ " name = 'foo',",
+ " deps = [':genlib'])");
+
+ update("//foo");
+ assertContainsEvent("WARNING /workspace/foo/BUILD:8:12: in deps attribute of custom_rule rule "
+ + "//foo:foo: genrule rule '//foo:genlib' is unexpected here; continuing anyway");
+ }
+
/** Runs the same test with the reduced loading phase. */
@TestSpec(size = Suite.SMALL_TESTS)
@RunWith(JUnit4.class)
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/MockRule.java b/src/test/java/com/google/devtools/build/lib/analysis/util/MockRule.java
index 9446a04ded..bba074bec4 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/MockRule.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/MockRule.java
@@ -102,6 +102,11 @@ public interface MockRule extends RuleDefinition {
}
/**
+ * Default <code>"deps"</code> attribute for rule classes that don't need special behavior.
+ */
+ Attribute.Builder<?> DEPS_ATTRIBUTE = attr("deps", BuildType.LABEL_LIST).allowedFileTypes();
+
+ /**
* Builds out this rule with default attributes Blaze expects of all rules plus the custom
* attributes defined by this implementation's {@link State}.
*
@@ -110,7 +115,6 @@ public interface MockRule extends RuleDefinition {
@Override
default RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment environment) {
builder
- .add(attr("deps", BuildType.LABEL_LIST).allowedFileTypes())
.add(attr("testonly", BOOLEAN).nonconfigurable("test").value(false))
.add(attr("deprecation", STRING).nonconfigurable("test").value((String) null))
.add(attr("tags", STRING_LIST))
diff --git a/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java b/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java
index 1f507b57f2..b5d74d7852 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java
@@ -310,4 +310,19 @@ public class AttributeTest {
return new TestSplitTransition();
}
}
+
+ @Test
+ public void allowedRuleClassesAndAllowedRuleClassesWithWarningsCannotOverlap() throws Exception {
+ try {
+ attr("x", LABEL_LIST)
+ .allowedRuleClasses("foo", "bar", "baz")
+ .allowedRuleClassesWithWarning("bar")
+ .allowedFileTypes()
+ .build();
+ fail("Expected illegal state exception because rule classes and rule classes with warning "
+ + "overlap");
+ } catch (IllegalStateException e) {
+ assertThat(e).hasMessageThat().contains("may not contain the same rule classes");
+ }
+ }
}
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsWithDynamicConfigurationsTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsWithDynamicConfigurationsTest.java
index b30124244a..ba5a07cb3c 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsWithDynamicConfigurationsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsWithDynamicConfigurationsTest.java
@@ -431,7 +431,7 @@ public class ConfigurationsForTargetsWithDynamicConfigurationsTest
private static final class RuleWithOutgoingTransition implements MockRule {
@Override
public State define() {
- return MockRule.define("change_deps");
+ return MockRule.define("change_deps", MockRule.DEPS_ATTRIBUTE);
}
@Override