aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-12-01 16:28:28 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-12-01 16:30:32 -0800
commit72f3a10e258764f0e6ed1fa645bf3c72bb6986e3 (patch)
tree4bef50fa4e55db38dd4141d070c8e537eb1acd2c /src/test/java/com/google
parent26bc282dab0cee2c42836e202fcd6643c95e370c (diff)
Make Predicate<String> obtainable from RuleClassNamePredicate
* Extend RuleClassNamePredicate to be both inclusive or exclusive * Attribute uses RuleClassNamePredicate instead of Predicate<RuleClass> PiperOrigin-RevId: 177656647
Diffstat (limited to 'src/test/java/com/google')
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java7
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/RuleClassBuilderTest.java51
2 files changed, 55 insertions, 3 deletions
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 8e6a6cd40f..96eb366e86 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
@@ -31,6 +31,7 @@ import com.google.devtools.build.lib.analysis.util.TestAspects;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.Attribute.SplitTransition;
import com.google.devtools.build.lib.packages.Attribute.SplitTransitionProvider;
+import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassNamePredicate;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.util.FileTypeSet;
@@ -205,8 +206,7 @@ public class AttributeTest {
@Test
public void testCloneBuilder() {
FileTypeSet txtFiles = FileTypeSet.of(FileType.of("txt"));
- RuleClass.Builder.RuleClassNamePredicate ruleClasses =
- new RuleClass.Builder.RuleClassNamePredicate("mock_rule");
+ RuleClassNamePredicate ruleClasses = RuleClassNamePredicate.only("mock_rule");
Attribute parentAttr =
attr("x", LABEL_LIST)
@@ -235,7 +235,8 @@ public class AttributeTest {
.build();
assertThat(childAttr2.getName()).isEqualTo("x");
assertThat(childAttr2.getAllowedFileTypesPredicate()).isEqualTo(txtFiles);
- assertThat(childAttr2.getAllowedRuleClassesPredicate()).isEqualTo(ruleClasses);
+ assertThat(childAttr2.getAllowedRuleClassesPredicate())
+ .isEqualTo(ruleClasses.asPredicateOfRuleClass());
assertThat(childAttr2.isMandatory()).isTrue();
assertThat(childAttr2.isNonEmpty()).isTrue();
assertThat(childAttr2.getAspects(null /* rule */)).hasSize(2);
diff --git a/src/test/java/com/google/devtools/build/lib/packages/RuleClassBuilderTest.java b/src/test/java/com/google/devtools/build/lib/packages/RuleClassBuilderTest.java
index 1545f5635f..b25436d77c 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/RuleClassBuilderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/RuleClassBuilderTest.java
@@ -21,8 +21,10 @@ import static com.google.devtools.build.lib.syntax.Type.STRING;
import static com.google.devtools.build.lib.syntax.Type.STRING_LIST;
import static org.junit.Assert.fail;
+import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassNamePredicate;
import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
import com.google.devtools.build.lib.packages.util.PackageLoadingTestCase;
import org.junit.Test;
@@ -206,4 +208,53 @@ public class RuleClassBuilderTest extends PackageLoadingTestCase {
.build();
assertThat(child.getRequiredToolchains()).contains(mockToolchainType);
}
+
+ @Test
+ public void testBasicRuleNamePredicates() throws Exception {
+ Predicate<String> abcdef = nothingBut("abc", "def").asPredicateOfRuleClassName();
+ assertThat(abcdef.test("abc")).isTrue();
+ assertThat(abcdef.test("def")).isTrue();
+ assertThat(abcdef.test("ghi")).isFalse();
+ }
+
+ @Test
+ public void testTwoRuleNamePredicateFactoriesEquivalent() throws Exception {
+ RuleClassNamePredicate a = nothingBut("abc", "def");
+ RuleClassNamePredicate b = RuleClassNamePredicate.only(ImmutableList.of("abc", "def"));
+ assertThat(a.asPredicateOfRuleClassName()).isEqualTo(b.asPredicateOfRuleClassName());
+ assertThat(a.asPredicateOfRuleClass()).isEqualTo(b.asPredicateOfRuleClass());
+ }
+
+ @Test
+ public void testEverythingButRuleNamePredicates() throws Exception {
+ Predicate<String> abcdef = allBut("abc", "def").asPredicateOfRuleClassName();
+ assertThat(abcdef.test("abc")).isFalse();
+ assertThat(abcdef.test("def")).isFalse();
+ assertThat(abcdef.test("ghi")).isTrue();
+ }
+
+ @Test
+ public void testRuleClassNamePredicateIntersection() {
+ // two positives intersect iff they contain any of the same items
+ assertThat(nothingBut("abc", "def").consideredOverlapping(nothingBut("abc"))).isTrue();
+ assertThat(nothingBut("abc", "def").consideredOverlapping(nothingBut("ghi"))).isFalse();
+
+ // negatives are never considered to overlap...
+ assertThat(allBut("abc", "def").consideredOverlapping(allBut("abc", "def"))).isFalse();
+ assertThat(allBut("abc", "def").consideredOverlapping(allBut("ghi", "jkl"))).isFalse();
+
+ assertThat(allBut("abc", "def").consideredOverlapping(nothingBut("abc", "def"))).isFalse();
+ assertThat(nothingBut("abc", "def").consideredOverlapping(allBut("abc", "def"))).isFalse();
+
+ assertThat(allBut("abc", "def").consideredOverlapping(nothingBut("abc"))).isFalse();
+ assertThat(allBut("abc").consideredOverlapping(nothingBut("abc", "def"))).isFalse();
+ }
+
+ private RuleClassNamePredicate nothingBut(String... excludedRuleClasses) {
+ return RuleClassNamePredicate.only(excludedRuleClasses);
+ }
+
+ private RuleClassNamePredicate allBut(String... excludedRuleClasses) {
+ return RuleClassNamePredicate.allExcept(excludedRuleClasses);
+ }
}