//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.annotators.regex;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import org.apache.uima.fit.util.JCasUtil;
import org.junit.Test;
import uk.gov.dstl.baleen.annotators.regex.Time;
import uk.gov.dstl.baleen.annotators.testing.AbstractAnnotatorTest;
import uk.gov.dstl.baleen.types.semantic.Temporal;
/** Tests {@link TimeRegex}.
*
*
*/
public class TimeTest extends AbstractAnnotatorTest{
public TimeTest() {
super(Time.class);
}
// Handles frequent testing method calls
public void timeRegexCountAndValueCheck(Double expectedCount, String... expectedValues) throws Exception{
// Check the correct number of references is extracted
assertEquals(expectedCount, Double.valueOf(JCasUtil.select(jCas, Temporal.class).size()));
// Loop the matches and check their values
for (int i = 0; i < expectedValues.length; i++) {
String expectedVal = expectedValues[i];
// Get the value
Temporal t1 = JCasUtil.selectByIndex(jCas, Temporal.class, i);
assertNotNull(t1);
// Check that the covered text is what we're expecting
assertEquals(expectedVal, t1.getCoveredText());
// Check that the value and the covered text are the same
assertEquals(t1.getValue(), t1.getCoveredText());
}
}
//Catch a single reference in 12hr clock format - morning
@Test
public void testSingleTime12hrClockMorning() throws Exception{
jCas.setDocumentText("It is currently 07:00.");
processJCas();
timeRegexCountAndValueCheck(1d, "07:00");
}
//Catch a single reference in 12hr clock format - evening
@Test
public void testSingleTime12hrClockEvening() throws Exception{
jCas.setDocumentText("It is currently 20:00.");
processJCas();
timeRegexCountAndValueCheck(1d, "20:00");
}
// Catch the am/pm qualifier
@Test
public void testSingleTimeWithAMQualifier() throws Exception{
jCas.setDocumentText("It is currently 12:22pm");
processJCas();
timeRegexCountAndValueCheck(1d, "12:22pm");
}
//Catch informal time references: midnight, noon, midday.
@Test
public void testSingleTimeInformal() throws Exception{
jCas.setDocumentText("I don't know whether its midnight, noon or midday today.");
processJCas();
timeRegexCountAndValueCheck(3d, "midnight", "noon", "midday");
}
//Catch a single time with a timezone qualifier
@Test
public void testSingleGmtTimeZone() throws Exception{
jCas.setDocumentText("It is currently 11:00 GMT");
processJCas();
timeRegexCountAndValueCheck(1d, "11:00 GMT");
}
//Catch Central Europe Time zone
@Test
public void testSingleGmtOtherTimeZone() throws Exception{
jCas.setDocumentText("It is currently 11:00 CET");
processJCas();
timeRegexCountAndValueCheck(1d, "11:00 CET");
}
//Ensure we catch multiple time references in 1 document
@Test
public void testMultipleTimeReferences() throws Exception{
jCas.setDocumentText("It was close to noon, about 12:03pm, 8 hours before 20:00.");
processJCas();
timeRegexCountAndValueCheck(3d, "noon", "12:03pm", "20:00");
}
//Catch a single reference in 24hr clock
@Test
public void testSingleTime24hrClock() throws Exception{
jCas.setDocumentText("It is currently 1700hrs.");
processJCas();
timeRegexCountAndValueCheck(1d, "1700hrs");
}
//Catch a single reference in 24hr clock
@Test
public void testSingleTime24hrClockTimeZone() throws Exception{
jCas.setDocumentText("It is currently 1700hrs CET.");
processJCas();
timeRegexCountAndValueCheck(1d, "1700hrs CET");
}
//Catch a reference containing a colon
@Test
public void testYearAndTimeColon() throws Exception{
jCas.setDocumentText("The year was 2016, the time was 20:16");
processJCas();
timeRegexCountAndValueCheck(1d, "20:16");
}
//Catch a reference suffixed with hrs
@Test
public void testYearAndTimeHrs() throws Exception{
jCas.setDocumentText("The year was 2016, the time was 2016hrs");
processJCas();
timeRegexCountAndValueCheck(1d, "2016hrs");
}
//Test requireAlpha = false
@Test
public void testAlphaOnlyFalse() throws Exception{
jCas.setDocumentText("The year was 2016, the time was 2016hrs");
processJCas(Time.PARAM_REQUIRE_ALPHA, false);
timeRegexCountAndValueCheck(2d, "2016", "2016hrs");
}
}