//Dstl (c) Crown Copyright 2017 package uk.gov.dstl.baleen.uima.utils; import java.util.Collection; import java.util.List; import java.util.Optional; import org.apache.uima.fit.util.JCasUtil; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.tcas.Annotation; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import uk.gov.dstl.baleen.types.language.WordToken; import uk.gov.dstl.baleen.uima.testing.JCasSingleton; public class AnnotationUtilsTest { private JCas jCas; @Before public void setUp() throws Exception { jCas = JCasSingleton.getJCasInstance(); jCas.setDocumentText("0123456789abcdefghij"); addAnnotation(0, 3); addAnnotation(0, 5); addAnnotation(0, 10); addAnnotation(10, 15); addAnnotation(15, 20); } private void addAnnotation(final int start, final int end) { final Annotation a = new WordToken(jCas); a.setBegin(start); a.setEnd(end); a.addToIndexes(); } @Test public void testGetSingleCovered() { final Annotation a = new Annotation(jCas); a.setBegin(0); a.setEnd(4); final Optional<Annotation> single = AnnotationUtils.getSingleCovered(Annotation.class, a); Assert.assertEquals("012", single.get().getCoveredText()); } @Test public void testGetSingleCoveredMissing() { final Annotation a = new Annotation(jCas); a.setBegin(1); a.setEnd(12); final Optional<Annotation> missing = AnnotationUtils.getSingleCovered(Annotation.class, a); Assert.assertFalse(missing.isPresent()); } @Test public void testFilterToTopLevelAnnotations() { final Collection<WordToken> select = JCasUtil.select(jCas, WordToken.class); final List<WordToken> topLevel = AnnotationUtils.filterToTopLevelAnnotations(select); Assert.assertEquals(3, topLevel.size()); Assert.assertEquals("0123456789", topLevel.get(0).getCoveredText()); Assert.assertEquals("abcde", topLevel.get(1).getCoveredText()); Assert.assertEquals("fghij", topLevel.get(2).getCoveredText()); } @Test public void testIsInBetween() { final Annotation left = new Annotation(jCas, 0, 3); final Annotation mid = new Annotation(jCas, 5, 6); final Annotation right = new Annotation(jCas, 8, 10); Assert.assertTrue(AnnotationUtils.isInBetween(mid, left, right)); Assert.assertTrue(AnnotationUtils.isInBetween(mid, right, left)); Assert.assertFalse(AnnotationUtils.isInBetween(left, mid, right)); Assert.assertFalse(AnnotationUtils.isInBetween(right, mid, left)); // Overlap both final Annotation mid2 = new Annotation(jCas, 2, 9); Assert.assertFalse(AnnotationUtils.isInBetween(mid2, right, left)); Assert.assertFalse(AnnotationUtils.isInBetween(mid2, left, right)); // Overlap one final Annotation mid3 = new Annotation(jCas, 5, 9); Assert.assertFalse(AnnotationUtils.isInBetween(mid3, right, left)); Assert.assertFalse(AnnotationUtils.isInBetween(mid3, left, right)); } }