package org.infinispan.objectfilter.impl.predicateindex;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
/**
* @author anistor@redhat.com
* @since 9.0
*/
public class LikeConditionTest {
@Test
public void testDegeneratedEquals() throws Exception {
LikeCondition likeCondition = new LikeCondition("ab");
assertTrue(likeCondition.match("ab"));
assertFalse(likeCondition.match("ac"));
assertFalse(likeCondition.match("XabY"));
}
@Test
public void testDegeneratedContains() throws Exception {
LikeCondition likeCondition = new LikeCondition("%ab%");
assertTrue(likeCondition.match("ab"));
assertTrue(likeCondition.match("xabxx"));
assertFalse(likeCondition.match("axb"));
}
@Test
public void testDegeneratedStartsWith() throws Exception {
assertTrue(new LikeCondition("ab%").match("ab"));
assertTrue(new LikeCondition("ab%").match("abx"));
assertTrue(new LikeCondition("ab%").match("abxx"));
assertFalse(new LikeCondition("ab%").match("xab"));
assertFalse(new LikeCondition("ab%").match("axb"));
assertTrue(new LikeCondition("ab_").match("abc"));
assertFalse(new LikeCondition("ab_").match("ab"));
assertFalse(new LikeCondition("ab_").match("abxx"));
assertFalse(new LikeCondition("ab_").match("xab"));
assertFalse(new LikeCondition("ab_").match("xaby"));
}
@Test
public void testDegeneratedEndsWith() throws Exception {
assertTrue(new LikeCondition("%ab").match("ab"));
assertTrue(new LikeCondition("%ab").match("xab"));
assertTrue(new LikeCondition("%ab").match("xxab"));
assertFalse(new LikeCondition("%ab").match("abx"));
assertFalse(new LikeCondition("%ab").match("axb"));
assertTrue(new LikeCondition("_ab").match("cab"));
assertFalse(new LikeCondition("_ab").match("ab"));
assertFalse(new LikeCondition("_ab").match("xxab"));
assertFalse(new LikeCondition("_ab").match("abc"));
assertFalse(new LikeCondition("_ab").match("xabc"));
}
@Test
public void testSingleCharWildcard() throws Exception {
LikeCondition likeCondition = new LikeCondition("a_b_c");
assertTrue(likeCondition.match("aXbYc"));
assertTrue(likeCondition.match("a_b_c"));
assertTrue(likeCondition.match("a%b%c"));
assertFalse(likeCondition.match("abc"));
assertFalse(likeCondition.match("aXXbYYc"));
}
@Test
public void testMultipleCharWildcard() throws Exception {
LikeCondition likeCondition = new LikeCondition("a%b%c");
assertTrue(likeCondition.match("abc"));
assertTrue(likeCondition.match("aXbc"));
assertTrue(likeCondition.match("aXYbZc"));
assertTrue(likeCondition.match("a_b_c"));
assertTrue(likeCondition.match("a%b%c"));
assertFalse(likeCondition.match("a"));
assertFalse(likeCondition.match("aX"));
assertFalse(likeCondition.match("a%"));
}
@Test
public void testEscapeChar() {
assertTrue(new LikeCondition("a\\%b").match("a%b"));
assertFalse(new LikeCondition("a\\%b").match("aXb"));
assertFalse(new LikeCondition("a\\%b").match("ab"));
assertTrue(new LikeCondition("a\\\\b").match("a\\b"));
assertTrue(new LikeCondition("a~%b", '~').match("a%b"));
assertFalse(new LikeCondition("a~%b", '~').match("aXb"));
assertFalse(new LikeCondition("a~%b", '~').match("ab"));
assertTrue(new LikeCondition("a~~b", '~').match("a~b"));
}
@Test
public void testPlusEscaping() throws Exception {
LikeCondition likeCondition = new LikeCondition("a%aZ+");
assertTrue(likeCondition.match("aaaZ+"));
assertFalse(likeCondition.match("aaa"));
assertFalse(likeCondition.match("aaaZ"));
assertFalse(likeCondition.match("aaaZZ"));
assertFalse(likeCondition.match("aaaZZZ"));
}
@Test
public void testAsteriskEscaping() throws Exception {
LikeCondition likeCondition = new LikeCondition("a%aZ*");
assertTrue(likeCondition.match("aaaZ*"));
assertFalse(likeCondition.match("aaa"));
assertFalse(likeCondition.match("aaaZ"));
assertFalse(likeCondition.match("aaaZZ"));
assertFalse(likeCondition.match("aaaZZZ"));
}
@Test
public void testGeneralMetacharEscaping() {
assertTrue(new LikeCondition("a%(b").match("aaa(b"));
assertTrue(new LikeCondition("a%)b").match("aaa)b"));
assertTrue(new LikeCondition("a%[b").match("aaa[b"));
assertTrue(new LikeCondition("a%]b").match("aaa]b"));
assertTrue(new LikeCondition("a%{b").match("aaa{b"));
assertTrue(new LikeCondition("a%}b").match("aaa}b"));
assertTrue(new LikeCondition("a%$b").match("aaa$b"));
assertTrue(new LikeCondition("a%^b").match("aaa^b"));
assertTrue(new LikeCondition("a%.b").match("aaa.b"));
assertTrue(new LikeCondition("a%|b").match("aaa|b"));
assertTrue(new LikeCondition("a%\\b").match("aaa\\b"));
}
}