//Dstl (c) Crown Copyright 2017 package uk.gov.dstl.baleen.uima.utils; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.util.Collections; import java.util.List; import org.apache.uima.UIMAException; import org.apache.uima.cas.Feature; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.cas.StringArray; import org.apache.uima.jcas.tcas.DocumentAnnotation; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import uk.gov.dstl.baleen.types.semantic.Entity; import uk.gov.dstl.baleen.uima.testing.JCasSingleton; public class FeatureUtilsTest { private static final String DOCUMENT_RELEASABILITY = "documentReleasability"; private static JCas jCas; @BeforeClass public static void setUp() throws UIMAException{ jCas = JCasSingleton.getJCasInstance(); } @Before public void beforeTest(){ jCas.reset(); } @Test public void testString(){ Entity e = new Entity(jCas); e.setValue("Test Value"); e.addToIndexes(); Feature f = e.getType().getFeatureByBaseName("value"); Object o = FeatureUtils.featureToObject(f, e); assertTrue(o instanceof String); assertEquals("Test Value", (String) o); } @Test public void testInteger(){ Entity e = new Entity(jCas); e.setBegin(5); e.addToIndexes(); Feature f = e.getType().getFeatureByBaseName("begin"); Object o = FeatureUtils.featureToObject(f, e); assertTrue(o instanceof Integer); assertEquals(new Integer(5), (Integer) o); } @Test public void testDouble(){ Entity e = new Entity(jCas); e.setConfidence(0.5); e.addToIndexes(); Feature f = e.getType().getFeatureByBaseName("confidence"); Object o = FeatureUtils.featureToObject(f, e); assertTrue(o instanceof Double); assertEquals(new Double(0.5), (Double) o); } @Test public void testLong(){ Entity e = new Entity(jCas); e.setInternalId(123456789); e.addToIndexes(); Feature f = e.getType().getFeatureByBaseName("internalId"); Object o = FeatureUtils.featureToObject(f, e); assertTrue(o instanceof Long); assertEquals(new Long(123456789), (Long) o); } @Test public void testNull(){ DocumentAnnotation da = (DocumentAnnotation) jCas.getDocumentAnnotationFs(); StringArray rel = new StringArray(jCas, 3); rel.set(0, "ENG"); rel.set(1, "WAL"); rel.set(2, "SCO"); da.setDocumentReleasability(rel); Feature f = da.getType().getFeatureByBaseName(DOCUMENT_RELEASABILITY); Object o = FeatureUtils.featureToObject(f, da); assertNull(o); } @Test public void testNullArrayValue(){ DocumentAnnotation da = (DocumentAnnotation) jCas.getDocumentAnnotationFs(); da.setDocumentReleasability(null); Feature f = da.getType().getFeatureByBaseName(DOCUMENT_RELEASABILITY); Object[] o = FeatureUtils.featureToArray(f, da); assertEquals(0, o.length); } @Test public void testStringArray(){ DocumentAnnotation da = (DocumentAnnotation) jCas.getDocumentAnnotationFs(); StringArray rel = new StringArray(jCas, 3); rel.set(0, "ENG"); rel.set(1, "WAL"); rel.set(2, "SCO"); da.setDocumentReleasability(rel); Feature f = da.getType().getFeatureByBaseName(DOCUMENT_RELEASABILITY); Object[] o = FeatureUtils.featureToArray(f, da); assertEquals(3, o.length); assertTrue(o[0] instanceof String); assertEquals("ENG", (String)o[0]); assertTrue(o[1] instanceof String); assertEquals("WAL", (String)o[1]); assertTrue(o[2] instanceof String); assertEquals("SCO", (String)o[2]); } @Test public void testStringArrayToObject(){ DocumentAnnotation da = (DocumentAnnotation) jCas.getDocumentAnnotationFs(); StringArray rel = new StringArray(jCas, 3); rel.set(0, "true"); rel.set(1, "2"); rel.set(2, "0.45"); da.setDocumentReleasability(rel); Feature f = da.getType().getFeatureByBaseName(DOCUMENT_RELEASABILITY); Object[] o = FeatureUtils.featureToArray(f, da); assertEquals(3, o.length); assertTrue(o[0] instanceof Boolean); assertTrue((Boolean)o[0]); assertTrue(o[1] instanceof Integer); assertEquals(new Integer(2), (Integer)o[1]); assertTrue(o[2] instanceof Double); assertEquals(new Double(0.45), (Double)o[2]); } @Test public void testStringArrayToList(){ DocumentAnnotation da = (DocumentAnnotation) jCas.getDocumentAnnotationFs(); StringArray rel = new StringArray(jCas, 3); rel.set(0, "ENG"); rel.set(1, "WAL"); rel.set(2, "SCO"); da.setDocumentReleasability(rel); Feature f = da.getType().getFeatureByBaseName(DOCUMENT_RELEASABILITY); List<Object> o = FeatureUtils.featureToList(f, da); assertEquals(3, o.size()); assertTrue(o.get(0) instanceof String); assertEquals("ENG", (String)o.get(0)); assertTrue(o.get(1) instanceof String); assertEquals("WAL", (String)o.get(1)); assertTrue(o.get(2) instanceof String); assertEquals("SCO", (String)o.get(2)); } @Test public void testEmptyToList(){ DocumentAnnotation da = (DocumentAnnotation) jCas.getDocumentAnnotationFs(); Feature f = da.getType().getFeatureByBaseName(DOCUMENT_RELEASABILITY); List<Object> o = FeatureUtils.featureToList(f, da); assertEquals(Collections.emptyList(), o); } }