//Dstl (c) Crown Copyright 2017 package uk.gov.dstl.baleen.uima.data; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import org.apache.uima.UIMAException; import org.apache.uima.jcas.JCas; import org.junit.Before; import org.junit.Test; import uk.gov.dstl.baleen.types.common.Buzzword; import uk.gov.dstl.baleen.types.common.Person; import uk.gov.dstl.baleen.types.language.Text; import uk.gov.dstl.baleen.types.semantic.Entity; import uk.gov.dstl.baleen.uima.testing.JCasSingleton; public class TextBlockTest { private static final String DOC_TEXT = "The prefix. This is the text block. The postfix."; private static final String TEXT_TEXT = "This is the text block."; private JCas jCas; private Text text; @Before public void before() throws UIMAException { jCas = JCasSingleton.getJCasInstance(); jCas.setDocumentText(DOC_TEXT); text = new Text(jCas, 12, 12 + TEXT_TEXT.length()); final Buzzword b = new Buzzword(jCas, DOC_TEXT.indexOf("text"), DOC_TEXT.indexOf("text") + "text".length()); b.addToIndexes(); final Buzzword postfix = new Buzzword(jCas, DOC_TEXT.indexOf("prefix"), DOC_TEXT.indexOf("prefix") + "prefix".length()); postfix.addToIndexes(); final Buzzword prefix = new Buzzword(jCas, DOC_TEXT.indexOf("postfix"), DOC_TEXT.indexOf("postfix") + "postfix".length()); prefix.addToIndexes(); } @Test public void testIsolatedTextBlock() { final TextBlock block = new TextBlock(jCas, text); assertFalse(block.isWholeDocument()); assertEquals(12, block.getBegin()); assertEquals(TEXT_TEXT, block.getCoveredText()); assertEquals(DOC_TEXT, block.getDocumentText()); assertEquals(12 + TEXT_TEXT.length(), block.getEnd()); assertSame(jCas, block.getJCas()); assertSame(text, block.getText()); final Entity annotation = block.newAnnotation(Entity.class, 3, 7); assertNotNull(annotation); assertEquals(12 + 3, annotation.getBegin()); assertEquals(12 + 7, annotation.getEnd()); final Person p = new Person(jCas); block.setBeginAndEnd(p, 2, 10); assertEquals(12 + 2, p.getBegin()); assertEquals(12 + 10, p.getEnd()); assertEquals(13, block.toDocumentOffset(1)); assertEquals(1, block.toBlockOffset(13)); assertEquals(1, block.select(Buzzword.class).size()); assertEquals("text", block.select(Buzzword.class).iterator().next().getCoveredText()); try{ block.toBlockOffset(10); fail("Expected exception not thrown"); }catch(IllegalArgumentException e){} try{ block.toBlockOffset(block.getEnd() + 5); fail("Expected exception not thrown"); }catch(IllegalArgumentException e){} } @Test public void testWholeDocument() { final TextBlock block = new TextBlock(jCas); assertTrue(block.isWholeDocument()); assertEquals(0, block.getBegin()); assertEquals(DOC_TEXT, block.getCoveredText()); assertEquals(DOC_TEXT, block.getDocumentText()); assertEquals(DOC_TEXT.length(), block.getEnd()); assertSame(jCas, block.getJCas()); assertNull(block.getText()); final Entity annotation = block.newAnnotation(Entity.class, 3, 7); assertNotNull(annotation); assertEquals(3, annotation.getBegin()); assertEquals(7, annotation.getEnd()); final Person p = new Person(jCas); block.setBeginAndEnd(p, 2, 10); assertEquals(2, p.getBegin()); assertEquals(10, p.getEnd()); assertEquals(1, block.toDocumentOffset(1)); assertEquals(1, block.toBlockOffset(1)); assertEquals(3, block.select(Buzzword.class).size()); } }