Skip to content

Commit

Permalink
Add NoneMatcher.
Browse files Browse the repository at this point in the history
This CL adds support for Matcher.none() which is === to Matcher.of("")
  • Loading branch information
mattnathan committed Nov 21, 2014
1 parent a6354f5 commit 3b79430
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 0 deletions.
10 changes: 10 additions & 0 deletions matcher/src/main/java/com/pressassociation/pr/match/Matcher.java
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,13 @@ public static Matcher all() {
return AllMatcher.INSTANCE;
}

/**
* Return a Matcher that will <em>not</em> match any path. Equivalent to {@code Matchers.of("")}.
*/
public static Matcher none() {
return NoneMatcher.INSTANCE;
}

/**
* Get a new Matcher that will match against the given fields string. The string should be a valid fields string,
* something like {@code items/name(type,value)}.
Expand All @@ -66,6 +73,9 @@ public static Matcher of(CharSequence fields) {
if ("*".equals(fields)) {
return all();
}
if (fields.toString().isEmpty()) {
return none();
}
return new AstMatcher(new Parser().parse(checkNotNull(fields)));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2014 Press Association Limited
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

package com.pressassociation.pr.match;

/**
* Matcher implementation that doesn't match anything.
*
* @author Matt Nathan
*/
class NoneMatcher extends Matcher {

static final Matcher INSTANCE = new NoneMatcher();

@Override
public boolean matches(Leaf leaf) {
return false;
}

@Override
public boolean matchesAll() {
return false;
}

@Override
public boolean matchesParent(Leaf node) {
return false;
}

@Override
protected String patternString() {
return "";
}

@Override
public String toString() {
return "Matcher.none()";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -67,12 +67,29 @@ public void testReadmeExamples() {
assertFalse(matcher.matches("/spouse/children"));
}

@Test
public void testEmptyIsNone() {
assertSame(Matcher.none(), Matcher.of(""));
}

@Test
public void testMatchesAll() {
assertTrue(Matcher.of("*").matchesAll());
assertTrue(Matcher.all().matchesAll());
assertFalse(Matcher.of("all").matchesAll());
assertFalse(Matcher.of("all/*").matchesAll());
assertFalse(Matcher.of("").matchesAll());
assertFalse(Matcher.none().matchesAll());
}

@Test
@Parameters({
"a",
"a/b",
"foo/bar/baz"
})
public void testNoneMatchesNothing(CharSequence path) {
assertFalse(Matcher.none().matches(path));
}

@Test
Expand Down Expand Up @@ -122,6 +139,16 @@ public void testMatchesParentAll() {
assertTrue(Matcher.all().matchesParent("my/node/continues"));
}

@Test
@Parameters({
"a",
"a/b",
"foo/bar/baz"
})
public void testNoneMatchesNothingParent(CharSequence path) {
assertFalse(Matcher.none().matchesParent(path));
}

@Test
public void testTransform() {
assertEquals("*", Matcher.all().transform(Functions.constant("foo")).patternString());
Expand Down

0 comments on commit 3b79430

Please sign in to comment.