package org.basex.query; import static org.basex.util.Token.*; import static org.junit.Assert.*; import org.basex.query.expr.ft.*; import org.junit.*; /** * Wild-card parsing and matching tests. * * @author BaseX Team 2005-17, BSD License * @author Dimitar Popov */ public final class FTWildcardTest { /** Sample texts which should be matched. */ private static final String[][] TEXTS_GOOD = { { "well", "wall", "will", "w.ll", "w\u00fcll" }, { "site", "asite" }, { "improv", "improve", "improvement" }, { "wisdomness", "witches" }, { "site" }, { "Usability\\", "Usable\\" }, { "\u00fcbersch\u00fcsse", "\u00fcberschuss" } }; /** Sample texts which should NOT be matched. */ private static final String[][] TEXTS_BAD = { { "wll", "wel", "ell" }, { "bite", "abite", "sit", "asit" }, { "impro", "mprove" }, { "witch", "wiskey", "wisdomnetts" }, { "\\s\\i\\t\\e" }, { "Usability", "Usab\\", "usability\\" }, { "ueberschuss" } }; /** Valid wild-card expressions. */ private static final String[] VALIDWC = { "w.ll", ".?site", "improv.*", "wi.{4,7}s", "\\s\\i\\t\\e", "Usab.+\\\\", "\u00fcbersch.ss.?" }; /** Valid wild card expressions. */ private static final String[] INVALIDWC = { ".{5,7]", ".{2,1}", ".{,}", ".{0,}", ".{,0}", ".{-1,0}", "will\\" }; /** Test if wild-card expressions are correctly parsed. */ @Test public void testParse() { for(final String wc : VALIDWC) assertTrue(new FTWildcard(token(wc)).parse()); for(final String wc : INVALIDWC) assertFalse(new FTWildcard(token(wc)).parse()); } /** * Test wild-card matching. */ @Test public void testMatch() { final int vl = VALIDWC.length; for(int i = 0; i < vl; i++) { final String q = VALIDWC[i]; final FTWildcard wc = new FTWildcard(token(q)); assertTrue(wc.parse()); final String[] good = TEXTS_GOOD[i]; for(final String g : good) { assertTrue('"' + q + "\" did NOT match \"" + g + '"', wc.match(token(g))); } final String[] bad = TEXTS_BAD[i]; for(final String b : bad) { assertFalse('"' + q + "\" matched \"" + b + '"', wc.match(token(b))); } } } }