You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by re...@apache.org on 2021/09/13 13:36:08 UTC
[uima-uimaj] 01/01: [UIMA-6374] Create CAS (de)serialization test
suite
This is an automated email from the ASF dual-hosted git repository.
rec pushed a commit to branch feature/UIMA-6374-Create-CAS-de-serialization-test-suite
in repository https://gitbox.apache.org/repos/asf/uima-uimaj.git
commit 85ced9ae6026b04eb957ae19d69fa023f4e7af1d
Author: Richard Eckart de Castilho <re...@apache.org>
AuthorDate: Mon Sep 13 15:35:55 2021 +0200
[UIMA-6374] Create CAS (de)serialization test suite
- Fix representation of primitive arrays in CasToComparableText output
---
.../uima/cas/serdes/CasToComparableText.java | 7 +-
.../uima/cas/serdes/CasToComparableTextTest.java | 202 +++++++++++++++++++++
2 files changed, 204 insertions(+), 5 deletions(-)
diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasToComparableText.java b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasToComparableText.java
index f478432..39b2181 100644
--- a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasToComparableText.java
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasToComparableText.java
@@ -535,11 +535,6 @@ public class CasToComparableText {
continue nextItem;
}
- if (item.getClass().isPrimitive()) {
- items.add(escape(String.valueOf(item)));
- continue nextItem;
- }
-
if (item instanceof FeatureStructure) {
FeatureStructure fsItem = (FeatureStructure) item;
if (isMultiValued(fsItem)) {
@@ -553,6 +548,8 @@ public class CasToComparableText {
}
continue nextItem;
}
+
+ items.add(escape(String.valueOf(item)));
}
return items.stream().collect(joining(",", "[", "]"));
diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasToComparableTextTest.java b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasToComparableTextTest.java
new file mode 100644
index 0000000..fd4ee2f
--- /dev/null
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasToComparableTextTest.java
@@ -0,0 +1,202 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.uima.cas.serdes;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.apache.uima.UIMAFramework;
+import org.apache.uima.cas.ArrayFS;
+import org.apache.uima.cas.BooleanArrayFS;
+import org.apache.uima.cas.ByteArrayFS;
+import org.apache.uima.cas.CAS;
+import org.apache.uima.cas.DoubleArrayFS;
+import org.apache.uima.cas.FeatureStructure;
+import org.apache.uima.cas.FloatArrayFS;
+import org.apache.uima.cas.IntArrayFS;
+import org.apache.uima.cas.LongArrayFS;
+import org.apache.uima.cas.ShortArrayFS;
+import org.apache.uima.cas.StringArrayFS;
+import org.apache.uima.cas.Type;
+import org.apache.uima.resource.metadata.TypeDescription;
+import org.apache.uima.resource.metadata.TypeSystemDescription;
+import org.apache.uima.util.CasCreationUtils;
+import org.junit.jupiter.api.Test;
+
+public class CasToComparableTextTest {
+ private static final String TYPE_NAME_AKOF = "akof";
+ private static final String FEATURE_BASE_NAME_AKOF_INT = "akofInt";
+ private static final String FEATURE_BASE_NAME_AKOF_FS = "akofFs";
+ private static final String FEATURE_BASE_NAME_AKOF_FLOAT = "akofFloat";
+ private static final String FEATURE_BASE_NAME_AKOF_DOUBLE = "akofDouble";
+ private static final String FEATURE_BASE_NAME_AKOF_LONG = "akofLong";
+ private static final String FEATURE_BASE_NAME_AKOF_SHORT = "akofShort";
+ private static final String FEATURE_BASE_NAME_AKOF_BYTE = "akofByte";
+ private static final String FEATURE_BASE_NAME_AKOF_BOOLEAN = "akofBoolean";
+ private static final String FEATURE_BASE_NAME_AKOF_STRING = "akofStr";
+ private static final String FEATURE_BASE_NAME_AKOF_INT_ARRAY = "akofAInt";
+ private static final String FEATURE_BASE_NAME_AKOF_FS_ARRAY = "akofAFs";
+ private static final String FEATURE_BASE_NAME_AKOF_FLOAT_ARRAY = "akofAFloat";
+ private static final String FEATURE_BASE_NAME_AKOF_DOUBLE_ARRAY = "akofADouble";
+ private static final String FEATURE_BASE_NAME_AKOF_LONG_ARRAY = "akofALong";
+ private static final String FEATURE_BASE_NAME_AKOF_SHORT_ARRAY = "akofAShort";
+ private static final String FEATURE_BASE_NAME_AKOF_BYTE_ARRAY = "akofAByte";
+ private static final String FEATURE_BASE_NAME_AKOF_BOOLEAN_ARRAY = "akofABoolean";
+ private static final String FEATURE_BASE_NAME_AKOF_STRING_ARRAY = "akofAStr";
+
+ @Test
+ public void thatPrimitiveValuesWork() throws Exception {
+ TypeSystemDescription tsd = UIMAFramework.getResourceSpecifierFactory()
+ .createTypeSystemDescription();
+
+ TypeDescription akofTD = tsd.addType(TYPE_NAME_AKOF, null, CAS.TYPE_NAME_TOP);
+
+ akofTD.addFeature(FEATURE_BASE_NAME_AKOF_INT, null, CAS.TYPE_NAME_INTEGER);
+ akofTD.addFeature(FEATURE_BASE_NAME_AKOF_FLOAT, null, CAS.TYPE_NAME_FLOAT);
+ akofTD.addFeature(FEATURE_BASE_NAME_AKOF_DOUBLE, null, CAS.TYPE_NAME_DOUBLE);
+ akofTD.addFeature(FEATURE_BASE_NAME_AKOF_LONG, null, CAS.TYPE_NAME_LONG);
+ akofTD.addFeature(FEATURE_BASE_NAME_AKOF_SHORT, null, CAS.TYPE_NAME_SHORT);
+ akofTD.addFeature(FEATURE_BASE_NAME_AKOF_BYTE, null, CAS.TYPE_NAME_BYTE);
+ akofTD.addFeature(FEATURE_BASE_NAME_AKOF_BOOLEAN, null, CAS.TYPE_NAME_BOOLEAN);
+ akofTD.addFeature(FEATURE_BASE_NAME_AKOF_STRING, null, CAS.TYPE_NAME_STRING);
+
+ // akofTD.addFeature(FEATURE_BASE_NAME_AKOF_FS, null, CAS.TYPE_NAME_TOP);
+ // akofTD.addFeature(FEATURE_BASE_NAME_AKOF_FS_ARRAY, null, CAS.TYPE_NAME_FS_ARRAY);
+
+ CAS cas = CasCreationUtils.createCas(tsd, null, null, null);
+
+ Type t = cas.getTypeSystem().getType(TYPE_NAME_AKOF);
+ FeatureStructure fs = cas.createFS(t);
+
+ fs.setIntValue(t.getFeatureByBaseName(FEATURE_BASE_NAME_AKOF_INT), 1);
+ fs.setFloatValue(t.getFeatureByBaseName(FEATURE_BASE_NAME_AKOF_FLOAT), 10.2321321f);
+ fs.setDoubleValue(t.getFeatureByBaseName(FEATURE_BASE_NAME_AKOF_DOUBLE), 10.2321321);
+ fs.setLongValue(t.getFeatureByBaseName(FEATURE_BASE_NAME_AKOF_LONG), 10_000_000);
+ fs.setShortValue(t.getFeatureByBaseName(FEATURE_BASE_NAME_AKOF_SHORT), (short) 31000);
+ fs.setByteValue(t.getFeatureByBaseName(FEATURE_BASE_NAME_AKOF_BYTE), (byte) 64);
+ fs.setBooleanValue(t.getFeatureByBaseName(FEATURE_BASE_NAME_AKOF_BOOLEAN), true);
+ fs.setStringValue(t.getFeatureByBaseName(FEATURE_BASE_NAME_AKOF_STRING), "dummy");
+
+ cas.addFsToIndexes(fs);
+
+ String result = CasToComparableText.toComparableString(cas);
+
+ assertThat(result).contains("akof*,true,64,10.2321321,10.232132,1,10000000,31000,dummy");
+ }
+
+ @Test
+ public void thatPrimitiveWork() throws Exception {
+ TypeSystemDescription tsd = UIMAFramework.getResourceSpecifierFactory()
+ .createTypeSystemDescription();
+
+ TypeDescription akofTD = tsd.addType(TYPE_NAME_AKOF, null, CAS.TYPE_NAME_TOP);
+
+ // akofTD.addFeature(FEATURE_BASE_NAME_AKOF_INT, null, CAS.TYPE_NAME_INTEGER);
+ // akofTD.addFeature(FEATURE_BASE_NAME_AKOF_FS, null, CAS.TYPE_NAME_TOP);
+ // akofTD.addFeature(FEATURE_BASE_NAME_AKOF_FLOAT, null, CAS.TYPE_NAME_FLOAT);
+ // akofTD.addFeature(FEATURE_BASE_NAME_AKOF_DOUBLE, null, CAS.TYPE_NAME_DOUBLE);
+ // akofTD.addFeature(FEATURE_BASE_NAME_AKOF_LONG, null, CAS.TYPE_NAME_LONG);
+ // akofTD.addFeature(FEATURE_BASE_NAME_AKOF_SHORT, null, CAS.TYPE_NAME_SHORT);
+ // akofTD.addFeature(FEATURE_BASE_NAME_AKOF_BYTE, null, CAS.TYPE_NAME_BYTE);
+ // akofTD.addFeature(FEATURE_BASE_NAME_AKOF_BOOLEAN, null, CAS.TYPE_NAME_BOOLEAN);
+ // akofTD.addFeature(FEATURE_BASE_NAME_AKOF_STRING, null, CAS.TYPE_NAME_STRING);
+ // akofTD.addFeature(FEATURE_BASE_NAME_AKOF_FS_ARRAY, null, CAS.TYPE_NAME_FS_ARRAY);
+
+ akofTD.addFeature(FEATURE_BASE_NAME_AKOF_INT_ARRAY, null, CAS.TYPE_NAME_INTEGER_ARRAY);
+ akofTD.addFeature(FEATURE_BASE_NAME_AKOF_FLOAT_ARRAY, null, CAS.TYPE_NAME_FLOAT_ARRAY);
+ akofTD.addFeature(FEATURE_BASE_NAME_AKOF_DOUBLE_ARRAY, null, CAS.TYPE_NAME_DOUBLE_ARRAY);
+ akofTD.addFeature(FEATURE_BASE_NAME_AKOF_LONG_ARRAY, null, CAS.TYPE_NAME_LONG_ARRAY);
+ akofTD.addFeature(FEATURE_BASE_NAME_AKOF_SHORT_ARRAY, null, CAS.TYPE_NAME_SHORT_ARRAY);
+ akofTD.addFeature(FEATURE_BASE_NAME_AKOF_BYTE_ARRAY, null, CAS.TYPE_NAME_BYTE_ARRAY);
+ akofTD.addFeature(FEATURE_BASE_NAME_AKOF_BOOLEAN_ARRAY, null, CAS.TYPE_NAME_BOOLEAN_ARRAY);
+ akofTD.addFeature(FEATURE_BASE_NAME_AKOF_STRING_ARRAY, null, CAS.TYPE_NAME_STRING_ARRAY);
+
+ CAS cas = CasCreationUtils.createCas(tsd, null, null, null);
+
+ Type t = cas.getTypeSystem().getType(TYPE_NAME_AKOF);
+ FeatureStructure fs = cas.createFS(t);
+
+ IntArrayFS intArrayFs = cas.createIntArrayFS(1);
+ intArrayFs.set(0, 1);
+ fs.setFeatureValue(t.getFeatureByBaseName(FEATURE_BASE_NAME_AKOF_INT_ARRAY), intArrayFs);
+
+ FloatArrayFS floatArrayFs = cas.createFloatArrayFS(1);
+ floatArrayFs.set(0, 10.2321321f);
+ fs.setFeatureValue(t.getFeatureByBaseName(FEATURE_BASE_NAME_AKOF_FLOAT_ARRAY), floatArrayFs);
+
+ DoubleArrayFS doubleArrayFs = cas.createDoubleArrayFS(1);
+ doubleArrayFs.set(0, 10.2321321);
+ fs.setFeatureValue(t.getFeatureByBaseName(FEATURE_BASE_NAME_AKOF_DOUBLE_ARRAY), doubleArrayFs);
+
+ LongArrayFS longArrayFs = cas.createLongArrayFS(1);
+ longArrayFs.set(0, 10_000_000);
+ fs.setFeatureValue(t.getFeatureByBaseName(FEATURE_BASE_NAME_AKOF_LONG_ARRAY), longArrayFs);
+
+ ShortArrayFS shortArrayFs = cas.createShortArrayFS(1);
+ shortArrayFs.set(0, (short) 31000);
+ fs.setFeatureValue(t.getFeatureByBaseName(FEATURE_BASE_NAME_AKOF_SHORT_ARRAY), shortArrayFs);
+
+ ByteArrayFS byteArrayFs = cas.createByteArrayFS(1);
+ byteArrayFs.set(0, (byte) 64);
+ fs.setFeatureValue(t.getFeatureByBaseName(FEATURE_BASE_NAME_AKOF_BYTE_ARRAY), byteArrayFs);
+
+ BooleanArrayFS booleanArrayFs = cas.createBooleanArrayFS(1);
+ booleanArrayFs.set(0, true);
+ fs.setFeatureValue(t.getFeatureByBaseName(FEATURE_BASE_NAME_AKOF_BOOLEAN_ARRAY),
+ booleanArrayFs);
+
+ StringArrayFS stringArrayFs = cas.createStringArrayFS(1);
+ stringArrayFs.set(0, "dummy");
+ fs.setFeatureValue(t.getFeatureByBaseName(FEATURE_BASE_NAME_AKOF_STRING_ARRAY), stringArrayFs);
+
+ cas.addFsToIndexes(fs);
+
+ String result = CasToComparableText.toComparableString(cas);
+
+ assertThat(result)
+ .contains("akof*,[true],[64],[10.2321321],[10.232132],[1],[10000000],[31000],[dummy]");
+ }
+
+ @Test
+ public void thatReferenceValuesAndArraysWork() throws Exception {
+ TypeSystemDescription tsd = UIMAFramework.getResourceSpecifierFactory()
+ .createTypeSystemDescription();
+
+ TypeDescription akofTD = tsd.addType(TYPE_NAME_AKOF, null, CAS.TYPE_NAME_TOP);
+
+ akofTD.addFeature(FEATURE_BASE_NAME_AKOF_FS, null, CAS.TYPE_NAME_TOP);
+ akofTD.addFeature(FEATURE_BASE_NAME_AKOF_FS_ARRAY, null, CAS.TYPE_NAME_FS_ARRAY);
+
+ CAS cas = CasCreationUtils.createCas(tsd, null, null, null);
+
+ Type t = cas.getTypeSystem().getType(TYPE_NAME_AKOF);
+ FeatureStructure fs = cas.createFS(t);
+
+ fs.setFeatureValue(t.getFeatureByBaseName(FEATURE_BASE_NAME_AKOF_FS), fs);
+
+ ArrayFS<FeatureStructure> arrayFs = cas.createArrayFS(1);
+ arrayFs.set(0, fs);
+ fs.setFeatureValue(t.getFeatureByBaseName(FEATURE_BASE_NAME_AKOF_FS_ARRAY), arrayFs);
+
+ cas.addFsToIndexes(fs);
+
+ String result = CasToComparableText.toComparableString(cas);
+
+ assertThat(result).contains("akof*,[akof*],akof*");
+ }
+}