aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/com')
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/constraints/ConstraintsTest.java46
1 files changed, 45 insertions, 1 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/constraints/ConstraintsTest.java b/src/test/java/com/google/devtools/build/lib/analysis/constraints/ConstraintsTest.java
index fac4f006b6..1bf3b0f27a 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/constraints/ConstraintsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/constraints/ConstraintsTest.java
@@ -1266,5 +1266,49 @@ public class ConstraintsTest extends AbstractConstraintsTest {
+ "\nenvironment group: //buildenv/bar:bar:\n"
+ " environment: //buildenv/bar:c removed by: //hello:lib (/workspace/hello/BUILD:9:1)");
}
-}
+ private void writeRulesForRefiningSubsetTests(String topLevelRestrictedTo) throws Exception {
+ new EnvironmentGroupMaker("buildenv/foo")
+ .setEnvironments("a", "b", "all")
+ .setFulfills("all", "a")
+ .setFulfills("all", "b")
+ .setDefaults()
+ .make();
+ scratch.file("hello/BUILD",
+ "cc_library(",
+ " name = 'lib',",
+ " srcs = [],",
+ " deps = [':dep1'],",
+ " restricted_to = ['//buildenv/foo:" + topLevelRestrictedTo + "'])",
+ "cc_library(",
+ " name = 'dep1',",
+ " srcs = [],",
+ // This is technically illegal because "dep1" declares support for both "a" and "b" but
+ // no dependency under the select can provide "b". This is known as "static select
+ // constraint checking" and is currently an unimplemented Bazel TODO.
+ " deps = select({",
+ " '//config:a': [':dep2'],",
+ " '//conditions:default': [':dep2'],",
+ " }),",
+ " restricted_to = ['//buildenv/foo:all'])",
+ "cc_library(",
+ " name = 'dep2',",
+ " srcs = [],",
+ " compatible_with = ['//buildenv/foo:a'])");
+ }
+
+ @Test
+ public void refiningReplacesRemovedEnvironmentWithValidFulfillingSubset() throws Exception {
+ writeRulesForRefiningSubsetTests("a");
+ assertThat(getConfiguredTarget("//hello:lib")).isNotNull();
+ }
+
+ @Test
+ public void refiningReplacesRemovedEnvironmentWithInvalidFulfillingSubset() throws Exception {
+ writeRulesForRefiningSubsetTests("b");
+ reporter.removeHandler(failFastHandler);
+ assertThat(getConfiguredTarget("//hello:lib")).isNull();
+ assertContainsEvent("//hello:lib: the current command-line flags disqualify all supported "
+ + "environments because of incompatible select() paths");
+ }
+}