/* (c) 2017 Open Source Geospatial Foundation - all rights reserved
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.opensearch.eo.kvp;
import static org.geoserver.opensearch.eo.kvp.SearchRequestKvpReader.*;
import static org.junit.Assert.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.junit.Test;
public class RangePatternsTest {
@Test
public void testFullRangePattern() {
// check matches
assertFullRangeMatch("[10,20]", "[", "10", "20", "]");
assertFullRangeMatch("]10,20[", "]", "10", "20", "[");
assertFullRangeMatch("[2010-09-21,2010-09-22]", "[", "2010-09-21", "2010-09-22", "]");
// check failures
assertPatternNotMatch(FULL_RANGE_PATTERN, "abcd");
assertPatternNotMatch(FULL_RANGE_PATTERN, "10");
assertPatternNotMatch(FULL_RANGE_PATTERN, "10,20");
assertPatternNotMatch(FULL_RANGE_PATTERN, "2010-09-21");
assertPatternNotMatch(FULL_RANGE_PATTERN, "[10");
assertPatternNotMatch(FULL_RANGE_PATTERN, "10]");
assertPatternNotMatch(FULL_RANGE_PATTERN, "10,20,30");
}
private void assertFullRangeMatch(String testRange, String g1, String g2, String g3, String g4) {
Matcher matcher = FULL_RANGE_PATTERN.matcher(testRange);
assertTrue(matcher.matches());
assertEquals(g1, matcher.group(1));
assertEquals(g2, matcher.group(2));
assertEquals(g3, matcher.group(3));
assertEquals(g4, matcher.group(4));
}
private void assertPatternNotMatch(Pattern pattern, String testRange) {
Matcher matcher = pattern.matcher(testRange);
assertFalse(matcher.matches());
}
@Test
public void testLeftRangePattern() {
// check matches
assertLeftRangeMatch("[10", "[", "10");
assertLeftRangeMatch("]10", "]", "10");
assertLeftRangeMatch("[2010-09-21", "[", "2010-09-21");
// check failures
assertPatternNotMatch(LEFT_RANGE_PATTERN, "abcd");
assertPatternNotMatch(LEFT_RANGE_PATTERN, "10");
assertPatternNotMatch(LEFT_RANGE_PATTERN, "10,20");
assertPatternNotMatch(LEFT_RANGE_PATTERN, "2010-09-21");
assertPatternNotMatch(LEFT_RANGE_PATTERN, "[10,20]");
assertPatternNotMatch(LEFT_RANGE_PATTERN, "10]");
assertPatternNotMatch(LEFT_RANGE_PATTERN, "10,20,30");
}
private void assertLeftRangeMatch(String testRange, String g1, String g2) {
Matcher matcher = LEFT_RANGE_PATTERN.matcher(testRange);
assertTrue(matcher.matches());
assertEquals(g1, matcher.group(1));
assertEquals(g2, matcher.group(2));
}
@Test
public void testRightRangePattern() {
// check matches
assertRightRangeMatch("10]", "10", "]");
assertRightRangeMatch("10[", "10", "[");
assertRightRangeMatch("2010-09-21]", "2010-09-21", "]");
// check failures
assertPatternNotMatch(LEFT_RANGE_PATTERN, "abcd");
assertPatternNotMatch(LEFT_RANGE_PATTERN, "10");
assertPatternNotMatch(LEFT_RANGE_PATTERN, "10,20");
assertPatternNotMatch(LEFT_RANGE_PATTERN, "2010-09-21");
assertPatternNotMatch(LEFT_RANGE_PATTERN, "[10,20]");
assertPatternNotMatch(LEFT_RANGE_PATTERN, "10]");
assertPatternNotMatch(LEFT_RANGE_PATTERN, "10,20,30");
}
private void assertRightRangeMatch(String testRange, String g1, String g2) {
Matcher matcher = RIGHT_RANGE_PATTERN.matcher(testRange);
assertTrue(matcher.matches());
assertEquals(g1, matcher.group(1));
assertEquals(g2, matcher.group(2));
}
}