//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.annotators.templates;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import java.util.Optional;
import java.util.Set;
import org.apache.uima.UIMAException;
import org.apache.uima.jcas.JCas;
import org.junit.Before;
import org.junit.Test;
import uk.gov.dstl.baleen.exceptions.InvalidParameterException;
import uk.gov.dstl.baleen.types.structure.Paragraph;
import uk.gov.dstl.baleen.types.structure.Section;
import uk.gov.dstl.baleen.types.structure.Structure;
import uk.gov.dstl.baleen.uima.testing.JCasSingleton;
import uk.gov.dstl.baleen.uima.utils.StructureHierarchy;
import uk.gov.dstl.baleen.uima.utils.StructureUtil;
public class SelectRecordStructureManagerTest {
protected static final String TEXT = "The quick brown fox jumped over the lazy dog's back.";
private JCas jCas;
private Set<Class<? extends Structure>> structuralClasses;
@Before
public void setUp() throws Exception {
jCas = JCasSingleton.getJCasInstance();
jCas.setDocumentText(TEXT);
structuralClasses = StructureUtil.getStructureClasses();
}
@Test
public void testSelectSimple() throws UIMAException, InvalidParameterException {
Paragraph paragraph = new Paragraph(jCas);
paragraph.setBegin(0);
paragraph.setDepth(1);
paragraph.setEnd(TEXT.length());
paragraph.addToIndexes();
RecordStructureManager manager = new RecordStructureManager(StructureHierarchy.build(jCas, structuralClasses));
Optional<Structure> select = manager.select("Paragraph");
assertTrue(select.isPresent());
assertEquals(paragraph, select.get());
}
@Test
public void testSelectNthTwo() throws InvalidParameterException {
Paragraph paragraph1 = new Paragraph(jCas);
paragraph1.setBegin(0);
paragraph1.setDepth(1);
paragraph1.setEnd(20);
paragraph1.addToIndexes();
Paragraph paragraph2 = new Paragraph(jCas);
paragraph2.setBegin(20);
paragraph2.setDepth(1);
paragraph2.setEnd(TEXT.length());
paragraph2.addToIndexes();
RecordStructureManager manager = new RecordStructureManager(StructureHierarchy.build(jCas, structuralClasses));
Optional<Structure> select1 = manager.select("Paragraph:nth-of-type(1)");
assertTrue(select1.isPresent());
assertEquals(paragraph1, select1.get());
assertNotEquals(paragraph2, select1.get());
Optional<Structure> select2 = manager.select("Paragraph:nth-of-type(2)");
assertTrue(select2.isPresent());
assertEquals(paragraph2, select2.get());
assertNotEquals(paragraph1, select2.get());
Optional<Structure> select3 = manager.select("Paragraph:nth-of-type(3)");
assertFalse(select3.isPresent());
}
@Test
public void testSelectNested() throws InvalidParameterException {
Section section = new Section(jCas);
section.setBegin(0);
section.setDepth(1);
section.setEnd(TEXT.length());
section.addToIndexes();
Paragraph paragraph = new Paragraph(jCas);
paragraph.setBegin(0);
paragraph.setDepth(2);
paragraph.setEnd(TEXT.length());
paragraph.addToIndexes();
RecordStructureManager manager = new RecordStructureManager(StructureHierarchy.build(jCas, structuralClasses));
Optional<Structure> selectNest1 = manager.select("Section > Paragraph:nth-of-type(1)");
assertTrue(selectNest1.isPresent());
assertEquals(paragraph, selectNest1.get());
Optional<Structure> selectNest2 = manager.select("Section > Paragraph");
assertTrue(selectNest2.isPresent());
assertEquals(paragraph, selectNest2.get());
Optional<Structure> selectNest3 = manager.select("Section:nth-of-type(1) > Paragraph");
assertTrue(selectNest3.isPresent());
assertEquals(paragraph, selectNest3.get());
Optional<Structure> selectRoot = manager.select("Section");
assertTrue(selectRoot.isPresent());
assertEquals(section, selectRoot.get());
}
}