//Dstl (c) Crown Copyright 2017 package uk.gov.dstl.baleen.annotators.cleaners; import static org.junit.Assert.assertEquals; import java.util.ArrayList; import java.util.List; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.fit.factory.ExternalResourceFactory; import org.apache.uima.fit.util.JCasUtil; import org.apache.uima.resource.ResourceInitializationException; import org.junit.Before; import org.junit.Test; import uk.gov.dstl.baleen.annotators.cleaners.RelationTypeFilter; import uk.gov.dstl.baleen.annotators.testing.AbstractAnnotatorTest; import uk.gov.dstl.baleen.resources.SharedFongoResource; import uk.gov.dstl.baleen.types.common.Person; import uk.gov.dstl.baleen.types.semantic.Location; import uk.gov.dstl.baleen.types.semantic.Relation; public class RelationTypeFilterTest extends AbstractAnnotatorTest { private Object fongoErd; public RelationTypeFilterTest() { super(RelationTypeFilter.class); } @Before public void before() { fongoErd = ExternalResourceFactory.createExternalResourceDescription("mongo", SharedFongoResource.class, "fongo.collection", "relationTypes", "fongo.data", "[ { \"source\": \"uk.gov.dstl.baleen.types.common.Person\", \"target\": \"uk.gov.dstl.baleen.types.semantic.Location\", \"type\": \"went\", \"subType\": \"past\", \"pos\": \"VBG\", \"value\":[ \"went\" ] } ]"); } @Test public void test() throws AnalysisEngineProcessException, ResourceInitializationException { final Person p = new Person(jCas); p.addToIndexes(); final Location l = new Location(jCas); p.addToIndexes(); final Relation p2l = new Relation(jCas); p2l.setSource(p); p2l.setTarget(l); p2l.setRelationshipType("went"); p2l.setRelationSubType("past"); p2l.addToIndexes(); final Relation p2p = new Relation(jCas); p2p.setSource(p); p2p.setTarget(p); p2p.setRelationshipType("knew"); p2p.addToIndexes(); processJCas("mongo", fongoErd); final List<Relation> select = new ArrayList<>(JCasUtil.select(jCas, Relation.class)); assertEquals(2, select.size()); } @Test public void testStrict() throws AnalysisEngineProcessException, ResourceInitializationException { final Person p = new Person(jCas); p.addToIndexes(); final Location l = new Location(jCas); p.addToIndexes(); final Relation p2l = new Relation(jCas); p2l.setSource(p); p2l.setTarget(l); p2l.setRelationshipType("went"); p2l.setRelationSubType("past"); p2l.addToIndexes(); final Relation p2p = new Relation(jCas); p2p.setSource(p); p2p.setTarget(p); p2p.setRelationshipType("went"); p2l.setRelationSubType("past"); p2p.addToIndexes(); processJCas("mongo", fongoErd, "strict", true); final List<Relation> select = new ArrayList<>(JCasUtil.select(jCas, Relation.class)); assertEquals(1, select.size()); } @Test public void testAsymmetric() throws AnalysisEngineProcessException, ResourceInitializationException { final Person p = new Person(jCas); p.addToIndexes(); final Location l = new Location(jCas); p.addToIndexes(); final Relation p2l = new Relation(jCas); p2l.setSource(p); p2l.setTarget(l); p2l.setRelationshipType("went"); p2l.setRelationSubType("past"); p2l.addToIndexes(); final Relation l2p = new Relation(jCas); l2p.setSource(l); l2p.setTarget(p); l2p.setRelationshipType("went"); p2l.setRelationSubType("past"); l2p.addToIndexes(); processJCas("mongo", fongoErd, "symmetric", false); final List<Relation> select = new ArrayList<>(JCasUtil.select(jCas, Relation.class)); assertEquals(1, select.size()); } }