//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.annotators.cleaners;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import org.apache.uima.fit.util.JCasUtil;
import org.junit.Test;
import uk.gov.dstl.baleen.annotators.cleaners.MergeAdjacentQuantities;
import uk.gov.dstl.baleen.annotators.testing.AbstractAnnotatorTest;
import uk.gov.dstl.baleen.annotators.testing.Annotations;
import uk.gov.dstl.baleen.types.common.Quantity;
/**
*
*/
public class MergeAdjacentQuantitiesTest extends AbstractAnnotatorTest {
public MergeAdjacentQuantitiesTest() {
super(MergeAdjacentQuantities.class);
}
@Test
public void testSingleType() throws Exception{
jCas.setDocumentText("The package weighed 4st 7oz. There was an additional 3lbs found lying near by.");
Annotations.createWeightQuantity(jCas, 20, 23, "4st", 4, "st", 25.4012);
Annotations.createWeightQuantity(jCas, 24, 27, "7oz", 7, "oz", 0.198447);
Quantity q3 = Annotations.createWeightQuantity(jCas, 53, 57, "3lbs", 3, "lb", 1.36078);
processJCas();
assertEquals(2, JCasUtil.select(jCas, Quantity.class).size());
Quantity q = JCasUtil.selectByIndex(jCas, Quantity.class, 0);
assertEquals("4st 7oz", q.getCoveredText());
assertEquals("4st 7oz", q.getValue());
assertNull(q.getUnit());
assertEquals(0.0, q.getQuantity(), 0.0);
assertEquals("kg", q.getNormalizedUnit());
assertEquals(25.599647, q.getNormalizedQuantity(), 0.0);
assertEquals("weight", q.getSubType());
assertEquals(q3, JCasUtil.selectByIndex(jCas, Quantity.class, 1));
}
@Test
public void testMixedType() throws Exception{
jCas.setDocumentText("The following unit makes no sense; 4st 8km");
Annotations.createWeightQuantity(jCas, 35, 38, "4st", 4, "st", 25.4012);
Annotations.createDistanceQuantity(jCas, 39, 42, "8km", 8, "km", 8000);
processJCas();
assertEquals(2, JCasUtil.select(jCas, Quantity.class).size());
}
@Test
public void testDecreasingSizes() throws Exception{
jCas.setDocumentText("The following unit makes no sense; 2ft 8yd");
Annotations.createDistanceQuantity(jCas,35, 38, "4ft", 4, "ft", 1.3);
Annotations.createDistanceQuantity(jCas,39, 42, "8yd", 8, "yd", 8);
processJCas();
assertEquals(2, JCasUtil.select(jCas, Quantity.class).size());
}
@Test
public void testSameUnit() throws Exception{
jCas.setDocumentText("The packages weighed: 4kg 2.5kg 14.2kg");
Annotations.createWeightQuantity(jCas,22, 25, "4kg", 4, "kg", 4);
Annotations.createWeightQuantity(jCas,26, 31, "2.5kg", 2.5, "kg", 2.5);
Annotations.createWeightQuantity(jCas,32, 38, "14.2kg", 14.2, "kg", 14.2);
processJCas();
assertEquals(3, JCasUtil.select(jCas, Quantity.class).size());
}
@Test
public void testList() throws Exception{
jCas.setDocumentText("The packages weighed: 4kg, 2.5kg, 14.2kg");
Annotations.createWeightQuantity(jCas,22, 25, "4kg", 4, "kg", 4);
Annotations.createWeightQuantity(jCas,27, 32, "2.5kg", 2.5, "kg", 2.5);
Annotations.createWeightQuantity(jCas,34, 40, "14.2kg", 14.2, "kg", 14.2);
processJCas();
assertEquals(3, JCasUtil.select(jCas, Quantity.class).size());
}
@Test
public void testMissingNormalizedUnit() throws Exception{
jCas.setDocumentText("The package was 4st 8oz");
Quantity q = Annotations.createWeightQuantity(jCas, 16, 19, "4st", 4, "st", 25.4012);
q.setNormalizedUnit(null);
Annotations.createWeightQuantity(jCas, 20, 23, "80z", 8, "oz", 0.2268);
processJCas();
assertEquals(2, JCasUtil.select(jCas, Quantity.class).size());
}
}