/*
* TestQueryParser.java
*
* Copyright (c) 2007-2011, The University of Sheffield.
*
* This file is part of GATE Mímir (see http://gate.ac.uk/family/mimir.html),
* and is free software, licenced under the GNU Lesser General Public License,
* Version 3, June 2007 (also included with this distribution as file
* LICENCE-LGPL3.html).
*
* $Id$
*/
package gate.mimir.test;
import static org.junit.Assert.fail;
import org.apache.log4j.Logger;
import org.junit.BeforeClass;
import org.junit.Test;
import gate.Gate;
import gate.mimir.search.query.parser.QueryParser;
import gate.util.GateException;
import java.io.File;
/**
* A JUnit test class for testing the query parser.
*
* @author niraj
*/
public class TestQueryParser {
private static final Logger logger = Logger.getLogger(TestQueryParser.class);
@BeforeClass
public static void init() {
logger.debug("Initializing gate for query tests");
try {
Gate.init();
Gate.getCreoleRegister().registerDirectories(new File(Gate.getPluginsHome(), "ANNIE").toURI().toURL());
} catch(Exception e) {
fail("Gate initialization failed!");
}
}
@Test
public void testMesurementQuery() {
String query = "{Measurement normalisedUnit=\"m\" normalisedValue<=30}";
executeParsing(query);
}
@Test
public void testStringQuery() {
String query = "\"A AND OR B\"";
executeParsing(query);
}
@Test
public void testStringQueryWithEscapedCharacters() {
String query = "A \"AND\" \\+ \"OR\" B";
executeParsing(query);
}
@Test
public void testAndQuery() {
String query = "A AND B";
executeParsing(query);
}
@Test
public void testBareTokens() {
String query = "15 September 2007";
executeParsing(query);
}
@Test
public void testNonAsciiTokens() {
String query = "Thîs ís à teßt €12 and 23¢";
executeParsing(query);
}
@Test
public void testOrQuery() {
String query = "A OR B";
executeParsing(query);
}
@Test
public void testAnnotationQuery() {
String query = "{A}";
executeParsing(query);
}
@Test
public void testAnnotationQueryWithFeatures() {
String query = "{A f1Key.REGEX(\"f1Value\", \"flasgs\") f2Key=\"f2Value IN Quotes\" f3Key>= 5.4 unit=\"1©\" }";
executeParsing(query);
}
@Test
public void testContainsQuery() {
String query = "{A} OVER {B}";
executeParsing(query);
}
@Test
public void testWithinQuery() {
String query = "{A} IN {B}";
executeParsing(query);
}
@Test
public void testGapQuery() {
String query = "{A} [1..4] {B}";
executeParsing(query);
}
@Test
public void testRepeatsQuery() {
String query = "{A}+3..5";
executeParsing(query);
}
@Test
public void testRepeats1Query() {
String query = "{A}+3";
executeParsing(query);
}
@Test
public void testNamedIndexQuery() {
String query = "root:be";
executeParsing(query);
}
@Test
public void testSequenceQUery() {
String query = "{A} {B} ({A} | {B})";
executeParsing(query);
}
@Test
public void testComplexQuery() {
String query = "({A} | {B}) IN (\\\"Going for\\\" [1..4] (root:trade | root:sale))";
executeParsing(query);
}
private void executeParsing(String query) {
logger.debug("Parsing query: " + query);
try {
QueryParser.parse(query);
} catch(Exception e) {
e.printStackTrace();
fail();
}
}
}