Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Cleanup the range predicate and add tests.
- Loading branch information
Showing
3 changed files
with
222 additions
and
46 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
213 changes: 213 additions & 0 deletions
213
petitparser-core/src/test/java/org/petitparser/parser/primitive/CharacterPredicateTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,213 @@ | ||
package org.petitparser.parser.primitive; | ||
|
||
import org.junit.Test; | ||
|
||
import static org.junit.Assert.assertFalse; | ||
import static org.junit.Assert.assertSame; | ||
import static org.junit.Assert.assertTrue; | ||
|
||
/** | ||
* Tests {@link CharacterPredicate}. | ||
*/ | ||
public class CharacterPredicateTest { | ||
|
||
@Test | ||
public void testAny() { | ||
CharacterPredicate predicate = CharacterPredicate.any(); | ||
assertTrue(predicate.test('a')); | ||
assertTrue(predicate.test('b')); | ||
} | ||
|
||
@Test | ||
public void testAnyOf() { | ||
CharacterPredicate predicate = CharacterPredicate.anyOf("uncopyrightable"); | ||
assertTrue(predicate.test('c')); | ||
assertTrue(predicate.test('g')); | ||
assertTrue(predicate.test('h')); | ||
assertTrue(predicate.test('i')); | ||
assertTrue(predicate.test('o')); | ||
assertTrue(predicate.test('p')); | ||
assertTrue(predicate.test('r')); | ||
assertTrue(predicate.test('t')); | ||
assertTrue(predicate.test('y')); | ||
assertFalse(predicate.test('x')); | ||
} | ||
|
||
@Test | ||
public void testAnyOfEmpty() { | ||
CharacterPredicate predicate = CharacterPredicate.anyOf(""); | ||
assertFalse(predicate.test('a')); | ||
assertFalse(predicate.test('b')); | ||
} | ||
|
||
@Test | ||
public void testNone() { | ||
CharacterPredicate predicate = CharacterPredicate.none(); | ||
assertFalse(predicate.test('a')); | ||
assertFalse(predicate.test('b')); | ||
} | ||
|
||
@Test | ||
public void testNoneOf() { | ||
CharacterPredicate predicate = CharacterPredicate.noneOf("uncopyrightable"); | ||
assertTrue(predicate.test('x')); | ||
assertFalse(predicate.test('c')); | ||
assertFalse(predicate.test('g')); | ||
assertFalse(predicate.test('h')); | ||
assertFalse(predicate.test('i')); | ||
assertFalse(predicate.test('o')); | ||
assertFalse(predicate.test('p')); | ||
assertFalse(predicate.test('r')); | ||
assertFalse(predicate.test('t')); | ||
assertFalse(predicate.test('y')); | ||
} | ||
|
||
@Test | ||
public void testNoneOfEmpty() { | ||
CharacterPredicate predicate = CharacterPredicate.noneOf(""); | ||
assertTrue(predicate.test('a')); | ||
assertTrue(predicate.test('b')); | ||
} | ||
|
||
@Test | ||
public void testOf() { | ||
CharacterPredicate predicate = CharacterPredicate.of('a'); | ||
assertTrue(predicate.test('a')); | ||
assertFalse(predicate.test('b')); | ||
} | ||
|
||
@Test | ||
public void testNot() { | ||
CharacterPredicate source = CharacterPredicate.of('a'); | ||
CharacterPredicate predicate = source.not(); | ||
assertFalse(predicate.test('a')); | ||
assertTrue(predicate.test('b')); | ||
assertSame(source, predicate.not()); | ||
} | ||
|
||
@Test(expected = IllegalArgumentException.class) | ||
public void testRangesInvalidSize() { | ||
CharacterPredicate.ranges(new char[] {}, new char[] {'a'}); | ||
} | ||
|
||
@Test(expected = IllegalArgumentException.class) | ||
public void testRangesInvalidOrder() { | ||
CharacterPredicate.ranges(new char[] {'b'}, new char[] {'a'}); | ||
} | ||
|
||
@Test(expected = IllegalArgumentException.class) | ||
public void testRangesInvalidSequence() { | ||
CharacterPredicate.ranges(new char[] {'a', 'c'}, new char[] {'c', 'f'}); | ||
} | ||
|
||
@Test | ||
public void testPatternWithSingle() { | ||
CharacterPredicate predicate = CharacterPredicate.pattern("abc"); | ||
assertTrue(predicate.test('a')); | ||
assertTrue(predicate.test('b')); | ||
assertTrue(predicate.test('c')); | ||
assertFalse(predicate.test('d')); | ||
} | ||
|
||
@Test | ||
public void testPatternWithRange() { | ||
CharacterPredicate predicate = CharacterPredicate.pattern("a-c"); | ||
assertTrue(predicate.test('a')); | ||
assertTrue(predicate.test('b')); | ||
assertTrue(predicate.test('c')); | ||
assertFalse(predicate.test('d')); | ||
} | ||
|
||
@Test | ||
public void testPatternWithOverlappingRange() { | ||
CharacterPredicate predicate = CharacterPredicate.pattern("b-da-c"); | ||
assertTrue(predicate.test('a')); | ||
assertTrue(predicate.test('b')); | ||
assertTrue(predicate.test('c')); | ||
assertTrue(predicate.test('d')); | ||
assertFalse(predicate.test('e')); | ||
} | ||
|
||
@Test | ||
public void testPatternWithAdjacentRange() { | ||
CharacterPredicate predicate = CharacterPredicate.pattern("c-ea-c"); | ||
assertTrue(predicate.test('a')); | ||
assertTrue(predicate.test('b')); | ||
assertTrue(predicate.test('c')); | ||
assertTrue(predicate.test('d')); | ||
assertTrue(predicate.test('e')); | ||
assertFalse(predicate.test('f')); | ||
} | ||
|
||
@Test | ||
public void testPatternWithPrefixRange() { | ||
CharacterPredicate predicate = CharacterPredicate.pattern("a-ea-c"); | ||
assertTrue(predicate.test('a')); | ||
assertTrue(predicate.test('b')); | ||
assertTrue(predicate.test('c')); | ||
assertTrue(predicate.test('d')); | ||
assertTrue(predicate.test('e')); | ||
assertFalse(predicate.test('f')); | ||
} | ||
|
||
@Test | ||
public void testPatternWithPostfixRange() { | ||
CharacterPredicate predicate = CharacterPredicate.pattern("a-ec-e"); | ||
assertTrue(predicate.test('a')); | ||
assertTrue(predicate.test('b')); | ||
assertTrue(predicate.test('c')); | ||
assertTrue(predicate.test('d')); | ||
assertTrue(predicate.test('e')); | ||
assertFalse(predicate.test('f')); | ||
} | ||
|
||
@Test | ||
public void testPatternWithRepeatedRange() { | ||
CharacterPredicate predicate = CharacterPredicate.pattern("a-ea-e"); | ||
assertTrue(predicate.test('a')); | ||
assertTrue(predicate.test('b')); | ||
assertTrue(predicate.test('c')); | ||
assertTrue(predicate.test('d')); | ||
assertTrue(predicate.test('e')); | ||
assertFalse(predicate.test('f')); | ||
} | ||
|
||
@Test | ||
public void testPatternWithComposed() { | ||
CharacterPredicate predicate = CharacterPredicate.pattern("ac-df-"); | ||
assertTrue(predicate.test('a')); | ||
assertTrue(predicate.test('c')); | ||
assertTrue(predicate.test('d')); | ||
assertTrue(predicate.test('f')); | ||
assertTrue(predicate.test('-')); | ||
assertFalse(predicate.test('b')); | ||
assertFalse(predicate.test('e')); | ||
assertFalse(predicate.test('g')); | ||
} | ||
|
||
@Test | ||
public void testPatternWithNegatedSingle() { | ||
CharacterPredicate predicate = CharacterPredicate.pattern("^a"); | ||
assertTrue(predicate.test('b')); | ||
assertFalse(predicate.test('a')); | ||
} | ||
|
||
@Test | ||
public void testPatternWithNegatedRange() { | ||
CharacterPredicate predicate = CharacterPredicate.pattern("^a-c"); | ||
assertTrue(predicate.test('d')); | ||
assertFalse(predicate.test('a')); | ||
assertFalse(predicate.test('b')); | ||
assertFalse(predicate.test('c')); | ||
} | ||
|
||
@Test | ||
public void testRange() { | ||
CharacterPredicate predicate = CharacterPredicate.range('e', 'o'); | ||
assertFalse(predicate.test('d')); | ||
assertTrue(predicate.test('e')); | ||
assertTrue(predicate.test('i')); | ||
assertTrue(predicate.test('o')); | ||
assertFalse(predicate.test('p')); | ||
} | ||
} |