//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.uima.utils;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.apache.uima.UIMAException;
import org.apache.uima.cas.FeatureStructure;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.cas.FSArray;
import org.apache.uima.jcas.cas.StringArray;
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 UimaTypesUtilsTest {
private static JCas jCas;
@BeforeClass
public static void beforeClass() throws UIMAException {
jCas = JCasSingleton.getJCasInstance();
}
@Before
public void beforeTest() {
jCas.reset();
}
@Test
public void testUimaToJava() {
StringArray sa = new StringArray(jCas, 3);
sa.set(0, "Foo");
sa.set(1, "Bar");
sa.set(2, "Baz");
String[] s = UimaTypesUtils.toArray(sa);
assertEquals(3, s.length);
assertEquals("Foo", s[0]);
assertEquals("Bar", s[1]);
assertEquals("Baz", s[2]);
}
@Test
public void testJavaToUima() {
StringArray sa = UimaTypesUtils.toArray(jCas, Arrays.asList("Foo", "Bar", "Baz"));
assertEquals(3, sa.size());
assertEquals("Foo", sa.get(0));
assertEquals("Bar", sa.get(1));
assertEquals("Baz", sa.get(2));
}
@Test
public void testNulls() {
String[] javaSa = UimaTypesUtils.toArray(null);
assertEquals(0, javaSa.length);
StringArray uimaSa = UimaTypesUtils.toArray(jCas, null);
assertEquals(0, uimaSa.size());
uimaSa = UimaTypesUtils.toArray(jCas, Collections.emptyList());
assertEquals(0, uimaSa.size());
}
@Test
public void testToFSArrayCollection() {
FSArray nullArray = UimaTypesUtils.toFSArray(jCas, (Collection<FeatureStructure>) null);
assertNotNull(nullArray);
assertEquals(0, nullArray.size());
FSArray emptyArray = UimaTypesUtils.toFSArray(jCas, new ArrayList<>());
assertNotNull(emptyArray);
assertEquals(0, emptyArray.size());
Entity e = new Entity(jCas);
FSArray fullArray = UimaTypesUtils.toFSArray(jCas, Arrays.asList(e));
assertNotNull(fullArray);
assertEquals(1, fullArray.size());
assertSame(e, fullArray.get(0));
}
@Test
public void testToFSArrayFeatureStructure() {
FSArray nullArray = UimaTypesUtils.toFSArray(jCas, (FeatureStructure) null);
assertNotNull(nullArray);
assertEquals(1, nullArray.size());
FSArray emptyArray = UimaTypesUtils.toFSArray(jCas);
assertNotNull(emptyArray);
assertEquals(0, emptyArray.size());
Entity e = new Entity(jCas);
FSArray fullArray = UimaTypesUtils.toFSArray(jCas, e);
assertNotNull(fullArray);
assertEquals(1, fullArray.size());
assertSame(e, fullArray.get(0));
}
@Test
public void testToList() {
assertTrue(UimaTypesUtils.toList((StringArray)null).isEmpty());
assertTrue(UimaTypesUtils.toList((FSArray)null).isEmpty());
// Empty list
FSArray array = new FSArray(jCas, 2);
assertEquals(2, UimaTypesUtils.toList(array).size());
// Populate
array.set(0, new Entity(jCas));
array.set(1, new Entity(jCas));
List<Entity> list = UimaTypesUtils.toList(array);
assertEquals(2, list.size());
assertSame(array.get(0), list.get(0));
assertSame(array.get(0), list.get(0));
}
}