diff options
author | 2017-12-01 16:28:28 -0800 | |
---|---|---|
committer | 2017-12-01 16:30:32 -0800 | |
commit | 72f3a10e258764f0e6ed1fa645bf3c72bb6986e3 (patch) | |
tree | 4bef50fa4e55db38dd4141d070c8e537eb1acd2c /src/test/java/com/google | |
parent | 26bc282dab0cee2c42836e202fcd6643c95e370c (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.java | 7 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/packages/RuleClassBuilderTest.java | 51 |
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); + } } |