package org.basex.io;
import static org.junit.Assert.*;
import org.junit.*;
/**
* Test class for glob patterns.
*
* @author BaseX Team 2005-17, BSD License
* @author Christian Gruen
*/
public final class GlobTest {
/** Input strings. */
private static final String[] STRINGS = {
"ab", "ab.cd", "ef.cd", "ab.ef.cd"
};
/** Tests. */
enum TEST {
/** Test. */ FILE1("a", true, true, false, true),
/** Test. */ FILE2("ab", true, true, false, true),
/** Test. */ FULL("ab.cd", false, true, false, false),
/** Test. */ SUFFIX("*.cd", false, true, true, true),
/** Test. */ ALL("*", true, true, true, true),
/** Test. */ ABC("ab.c", false, false, false, false),
/** Test. */ ABCDE("ab.cde", false, false, false, false),
/** Test. */ MULTIPLE("ab,ef", true, true, true, true),
/** Test. */ SPACES1("ab ,ef", true, true, true, true),
/** Test. */ SPACES2("ab, ef", true, true, true, true),
/** Test. */ AST2("a*.cd", false, true, false, true),
/** Test. */ QUESTION("?", false, false, false, false),
/** Test. */ QUESTIONS("??", true, false, false, false),
/** Test. */ NOSUFFIX("*.", true, false, false, false),
/** Test. */ NOSUFFIX2("*..", false, false, false, false),
/** Test. */ BACK("\\", false, false, false, false);
/** Glob syntax. */
final String glob;
/** Results. */
final boolean[] results;
/**
* Constructor.
* @param g glob syntax
* @param r results
*/
TEST(final String g, final boolean... r) {
glob = g;
results = r;
}
}
/**
* Glob test.
*/
@Test
public void test() {
for(final TEST g : TEST.values()) {
final String regex = IOFile.regex(g.glob);
final int sl = STRINGS.length;
for(int s = 0; s < sl; s++) {
final boolean exp = g.results[s];
final boolean res = STRINGS[s].matches(regex);
if(exp != res) fail(g + " #" + s + " failed.\n" +
"Query: \"" + g.glob + "\" matches \"" + STRINGS[s] +
"\" \u2192 " + res + "\nExpected: " + exp +
"\nRegex: " + regex);
}
}
}
}