package querqy.rewrite.commonrules.model;
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
import org.junit.Test;
import querqy.CharSequenceUtil;
import querqy.ComparableCharSequence;
import querqy.SimpleComparableCharSequence;
public class TermTest {
@Test
public void testParseNoPlaceHolders() {
char[] chars = "abc".toCharArray();
Term term = new Term(chars, 0, chars.length, null);
assertEquals(-1, term.getMaxPlaceHolderRef());
assertNull(term.getPlaceHolders());
term = new Term(chars, 1, chars.length -1, null);
assertEquals(-1, term.getMaxPlaceHolderRef());
assertNull(term.getPlaceHolders());
term = new Term(chars, 1, chars.length -2, null);
assertEquals(-1, term.getMaxPlaceHolderRef());
assertNull(term.getPlaceHolders());
}
@Test
public void testPlaceHolderOnly() throws Exception {
char[] chars = "$3".toCharArray();
Term term = new Term(chars, 0, chars.length, null);
assertEquals(3, term.getMaxPlaceHolderRef());
assertThat(term.getPlaceHolders(), contains(new PlaceHolder(0, 2, 3)));
}
@Test
public void testPlaceHolderInTerm() throws Exception {
char[] chars = "a$33b".toCharArray();
Term term = new Term(chars, 0, chars.length, null);
assertEquals(33, term.getMaxPlaceHolderRef());
assertThat(term.getPlaceHolders(), contains(new PlaceHolder(1, 3, 33)));
term = new Term(chars, 1, chars.length - 1, null);
assertEquals(33, term.getMaxPlaceHolderRef());
assertThat(term.getPlaceHolders(), contains(new PlaceHolder(1, 3, 33)));
term = new Term(chars, 1, chars.length - 2, null);
assertEquals(33, term.getMaxPlaceHolderRef());
assertThat(term.getPlaceHolders(), contains(new PlaceHolder(1, 3, 33)));
}
@Test
public void testReplacePlaceHoldersInMiddle() throws Exception {
char[] chars = "a$1b".toCharArray();
Term outputTerm = new Term(chars, 0, chars.length, null);
ComparableCharSequence filledPlaceholders = outputTerm.fillPlaceholders(new TermMatches(new TermMatch(new querqy.model.Term(null, "klxyz"), true,
new SimpleComparableCharSequence("xyz".toCharArray(), 0, 3) )));
assertTrue(CharSequenceUtil.equals("axyzb", filledPlaceholders));
}
@Test
public void testReplacePlaceHolderOnly() throws Exception {
char[] chars = "$1".toCharArray();
Term term = new Term(chars, 0, chars.length, null);
ComparableCharSequence filledPlaceholders = term.fillPlaceholders(new TermMatches(new TermMatch(new querqy.model.Term(null, "klxyz"), true,
new SimpleComparableCharSequence("xyz".toCharArray(), 0, 3) )));
assertTrue(CharSequenceUtil.equals("xyz", filledPlaceholders));
}
@Test
public void testReplacePlaceHolderAtBeginning() throws Exception {
char[] chars = "$1a".toCharArray();
Term outputTerm = new Term(chars, 0, chars.length, null);
ComparableCharSequence filledPlaceholders = outputTerm.fillPlaceholders(new TermMatches(new TermMatch(new querqy.model.Term(null, "klxyz"), true,
new SimpleComparableCharSequence("xyz".toCharArray(), 0, 3) )));
assertTrue(CharSequenceUtil.equals("xyza", filledPlaceholders));
}
@Test
public void testReplacePlaceHolderAtEnd() throws Exception {
char[] chars = "a$1".toCharArray();
Term outputTerm = new Term(chars, 0, chars.length, null);
ComparableCharSequence filledPlaceholders = outputTerm.fillPlaceholders(new TermMatches(new TermMatch(new querqy.model.Term(null, "klxyz"), true,
new SimpleComparableCharSequence("xyz".toCharArray(), 0, 3) )));
assertTrue(CharSequenceUtil.equals("axyz", filledPlaceholders));
}
@Test
public void testRepeatedPlaceHolders() throws Exception {
char[] chars = "a$1$1b".toCharArray();
Term outputTerm = new Term(chars, 0, chars.length, null);
ComparableCharSequence filledPlaceholders = outputTerm.fillPlaceholders(new TermMatches(new TermMatch(new querqy.model.Term(null, "klxyz"), true,
new SimpleComparableCharSequence("xyz".toCharArray(), 0, 3) )));
assertTrue(CharSequenceUtil.equals("axyzxyzb", filledPlaceholders));
}
@Test
public void testRepeatedPlaceHoldersAtEnd() throws Exception {
char[] chars = "a$1$1".toCharArray();
Term outputTerm = new Term(chars, 0, chars.length, null);
ComparableCharSequence filledPlaceholders = outputTerm.fillPlaceholders(new TermMatches(new TermMatch(new querqy.model.Term(null, "klxyz"), true,
new SimpleComparableCharSequence("xyz".toCharArray(), 0, 3) )));
assertTrue(CharSequenceUtil.equals("axyzxyz", filledPlaceholders));
}
@Test
public void testRepeatedPlaceHoldersAtBeginning() throws Exception {
char[] chars = "$1$1a".toCharArray();
Term outputTerm = new Term(chars, 0, chars.length, null);
ComparableCharSequence filledPlaceholders = outputTerm.fillPlaceholders(new TermMatches(new TermMatch(new querqy.model.Term(null, "klxyz"), true,
new SimpleComparableCharSequence("xyz".toCharArray(), 0, 3) )));
assertTrue(CharSequenceUtil.equals("xyzxyza", filledPlaceholders));
}
@Test
public void testRepeatedPlaceHoldersOnly() throws Exception {
char[] chars = "$1$1".toCharArray();
Term outputTerm = new Term(chars, 0, chars.length, null);
ComparableCharSequence filledPlaceholders = outputTerm.fillPlaceholders(new TermMatches(new TermMatch(new querqy.model.Term(null, "klxyz"), true,
new SimpleComparableCharSequence("xyz".toCharArray(), 0, 3) )));
assertTrue(CharSequenceUtil.equals("xyzxyz", filledPlaceholders));
}
@Test
public void testSamePlaceHolderWithOtherInMiddle() throws Exception {
char[] chars = "a$1b$1c".toCharArray();
Term outputTerm = new Term(chars, 0, chars.length, null);
ComparableCharSequence filledPlaceholders = outputTerm.fillPlaceholders(new TermMatches(new TermMatch(new querqy.model.Term(null, "klxyz"), true,
new SimpleComparableCharSequence("xyz".toCharArray(), 0, 3) )));
assertTrue(CharSequenceUtil.equals("axyzbxyzc", filledPlaceholders));
}
@Test
public void testSamePlaceHolderAtBordersWithOtherInMiddle() throws Exception {
char[] chars = "$1b$1".toCharArray();
Term outputTerm = new Term(chars, 0, chars.length, null);
ComparableCharSequence filledPlaceholders = outputTerm.fillPlaceholders(new TermMatches(new TermMatch(new querqy.model.Term(null, "klxyz"), true,
new SimpleComparableCharSequence("xyz".toCharArray(), 0, 3) )));
assertTrue(CharSequenceUtil.equals("xyzbxyz", filledPlaceholders));
}
@Test
public void testMultiplePlaceHolders() throws Exception {
char[] chars = "a$3$$5b$1".toCharArray();
Term term = new Term(chars, 0, chars.length, null);
assertEquals(5, term.getMaxPlaceHolderRef());
assertThat(term.getPlaceHolders(),
contains(
new PlaceHolder(4, 2, 5),
new PlaceHolder(1, 2, 3),
new PlaceHolder(7, 2, 1)
));
}
}