diff --git a/pom.xml b/pom.xml
index 41dc180198aa8d056c1dc20bdf837abc8627bc83..8d72ee07c8ca3abdb6ce6f163558e375d22018d5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,7 @@
org.opengroup.osdu
os-core-common
- 0.11.0-SNAPSHOT
+ 0.12.0-SNAPSHOT
jar
diff --git a/src/main/java/org/opengroup/osdu/core/common/crs/UnitConversionImpl.java b/src/main/java/org/opengroup/osdu/core/common/crs/UnitConversionImpl.java
index 78de924cf6f91f5dfc30f8041541c6b33a5329fb..5be18963cfe9967a7f4949fc1a0566f68dc35bb7 100644
--- a/src/main/java/org/opengroup/osdu/core/common/crs/UnitConversionImpl.java
+++ b/src/main/java/org/opengroup/osdu/core/common/crs/UnitConversionImpl.java
@@ -197,13 +197,15 @@ public class UnitConversionImpl {
}
private String constructPropertyName(String name, int index) {
- if (!name.contains("[")) {
- return name;
- } else {
+ String[] nestedNames = splitJsonPropertiesByDots(name);
+
+ if (name.contains("[") && isNestedArrayElementHomogeneous(nestedNames[0])) {
String target = name.substring(name.indexOf("["), name.indexOf("]") + 1);
String position = "[" + index + "]";
String result = name.replace(target, position);
return result;
+ } else {
+ return name;
}
}
}
diff --git a/src/main/java/org/opengroup/osdu/core/common/util/JsonUtils.java b/src/main/java/org/opengroup/osdu/core/common/util/JsonUtils.java
index 4633382c03bf8fc6f5217240f0612f43afc855c4..7d82c920b3143397a2a76b44810e6d4497e2ef89 100644
--- a/src/main/java/org/opengroup/osdu/core/common/util/JsonUtils.java
+++ b/src/main/java/org/opengroup/osdu/core/common/util/JsonUtils.java
@@ -48,24 +48,40 @@ public class JsonUtils {
* @return JsonElement list with property, if it found and null if not
*/
public static List getJsonPropertyValueFromJsonObject(String propertyName, JsonObject jsonObject) {
- List result = new ArrayList<>();
String[] propertiesHierarchy = splitJsonPropertiesByDots(propertyName);
- if (propertiesHierarchy[0].endsWith(PN_END)) {
+ if (propertiesHierarchy[0].endsWith(PN_END) && isNestedArrayElementHomogeneous(propertiesHierarchy[0])) {
return getNestedJsonPropertyValueFromJsonObject(propertiesHierarchy, jsonObject);
+ } else if (propertiesHierarchy[0].endsWith(PN_END)) {
+ return getOneNestedJsonProperyValueFromJsonObject(propertiesHierarchy, jsonObject);
}
+ List result = new ArrayList<>();
result.add(getNestedJsonElement(propertiesHierarchy, jsonObject));
return result;
}
- private static List getNestedJsonPropertyValueFromJsonObject(String[] propertyNestedNames, JsonObject jsonObject) {
+ private static List getOneNestedJsonProperyValueFromJsonObject(String[] propertyNestedNames, JsonObject jsonObject) {
List result = new ArrayList<>();
+ String[] innerNestedNames = getInnerNestedPropertyNames(propertyNestedNames);
+ JsonArray elementArray = jsonObject.getAsJsonArray(getNestedJsonArrayName(propertyNestedNames[0])) ;
+ int elementIndex = getNestedArrayElementIndex(propertyNestedNames[0]);
+
+ if (elementIndex < 0 || elementIndex >= elementArray.size()) {
+ result.add(null);
+ } else {
+ JsonElement element = getNestedJsonElement(innerNestedNames, elementArray.get(elementIndex).getAsJsonObject());
+ result.add(element);
+ }
- String[] innerNestedNames = new String[propertyNestedNames.length - 1];
- System.arraycopy(propertyNestedNames, 1, innerNestedNames, 0, propertyNestedNames.length - 1);
+ return result;
+ }
- JsonArray elementArray = jsonObject.getAsJsonArray(propertyNestedNames[0].substring(0, propertyNestedNames[0].length() - 2 )) ;
+ private static List getNestedJsonPropertyValueFromJsonObject(String[] propertyNestedNames, JsonObject jsonObject) {
+ List result = new ArrayList<>();
+
+ String[] innerNestedNames = getInnerNestedPropertyNames(propertyNestedNames);
+ JsonArray elementArray = jsonObject.getAsJsonArray(getNestedJsonArrayName(propertyNestedNames[0])) ;
for (int i = 0; i < elementArray.size(); i++) {
JsonObject element = elementArray.get(i).getAsJsonObject();
@@ -122,9 +138,12 @@ public class JsonUtils {
public static void overrideNumberPropertyOfJsonObject(String propertyName, List value, JsonObject jsonObject) {
String[] nestedNames = splitJsonPropertiesByDots(propertyName);
- if (nestedNames[0].endsWith(PN_END)) {
+ if (nestedNames[0].endsWith(PN_END) && isNestedArrayElementHomogeneous(nestedNames[0])) {
overrideNestedNumberPropertyOfJsonObject(nestedNames, value, jsonObject);
return;
+ } else if (nestedNames[0].endsWith(PN_END)) {
+ overrideOneNestedNumberPorpertyOfJsonObject(nestedNames, value, jsonObject);
+ return;
}
JsonObject targetJsonObject = buildNewJsonObject(nestedNames, jsonObject);
@@ -133,10 +152,26 @@ public class JsonUtils {
.ifPresent(json -> json.addProperty(nestedNames[nestedNames.length - 1], value.get(0)));
}
+ private static void overrideOneNestedNumberPorpertyOfJsonObject(String[] nestedNames, List values, JsonObject jsonObject) {
+ String[] innerNestedNames = getInnerNestedPropertyNames(nestedNames);
+ JsonArray elementArray = jsonObject.getAsJsonArray(getNestedJsonArrayName(nestedNames[0])) ;
+ int elementIndex = getNestedArrayElementIndex(nestedNames[0]);
+
+ if (elementIndex < 0 || elementIndex >= elementArray.size()) {
+ return;
+ }
+
+ JsonObject element = elementArray.get(elementIndex).getAsJsonObject();
+ JsonObject targetJsonObject = buildNewJsonObject(innerNestedNames, element);
+
+ if (targetJsonObject != null) {
+ targetJsonObject.addProperty(innerNestedNames[innerNestedNames.length - 1], values.get(0));
+ }
+ }
+
private static void overrideNestedNumberPropertyOfJsonObject(String[] nestedNames, List values, JsonObject jsonObject) {
- JsonArray elementArray = jsonObject.getAsJsonArray(nestedNames[0].substring(0, nestedNames[0].length() - 2 )) ;
- String[] innerNestedNames = new String[nestedNames.length - 1];
- System.arraycopy(nestedNames, 1, innerNestedNames, 0, nestedNames.length - 1);
+ JsonArray elementArray = jsonObject.getAsJsonArray(getNestedJsonArrayName(nestedNames[0])) ;
+ String[] innerNestedNames = getInnerNestedPropertyNames(nestedNames);
for (int i = 0; i < elementArray.size(); i++) {
JsonObject element = elementArray.get(i).getAsJsonObject();
@@ -186,4 +221,36 @@ public class JsonUtils {
if(name == null) return null;
return name.split("\\.");
}
+
+ public static boolean isNestedArrayElementHomogeneous(String nestedArrayName) {
+ int openIndex = nestedArrayName.indexOf("[");
+ return openIndex == nestedArrayName.length() - 2;
+ }
+
+ public static String[] getInnerNestedPropertyNames(String[] nestedPropertyNames) {
+ String[] innerNestedNames = new String[nestedPropertyNames.length - 1];
+ System.arraycopy(nestedPropertyNames, 1, innerNestedNames, 0, nestedPropertyNames.length - 1);
+
+ return innerNestedNames;
+ }
+
+ public static String getNestedJsonArrayName(String nestedArrayName) {
+ int openIndex = nestedArrayName.indexOf("[");
+ return nestedArrayName.substring(0, openIndex);
+ }
+
+ public static int getNestedArrayElementIndex(String itemNameWithIndex) {
+ int openIndex = itemNameWithIndex.indexOf("[") + 1;
+ int closeIndex = itemNameWithIndex.indexOf("]");
+ String indexString = itemNameWithIndex.substring(openIndex, closeIndex);
+
+ int index;
+ try {
+ index = Integer.parseInt(indexString);
+ } catch (Exception e) {
+ index = -1;
+ }
+
+ return index;
+ }
}
\ No newline at end of file
diff --git a/src/test/java/org/opengroup/osdu/core/common/crs/UnitConversionTests.java b/src/test/java/org/opengroup/osdu/core/common/crs/UnitConversionTests.java
index 86f1e588e21f2b3984887399eb4f0729e927cb6d..17eb3f79109115c6f4a485666f52e9a675e7359a 100644
--- a/src/test/java/org/opengroup/osdu/core/common/crs/UnitConversionTests.java
+++ b/src/test/java/org/opengroup/osdu/core/common/crs/UnitConversionTests.java
@@ -404,6 +404,76 @@ public class UnitConversionTests {
Assert.assertEquals(record, resultRecord);
}
+ @Test
+ public void shouldReturnUpdatedRecordWhenDataContainsValidInhomogeneousNestedArrayProperties() {
+ JsonObject record = testData.getAsJsonObject("inhomogeneousNestedArrayPropertyIsValid");
+ JsonArray metaArray = record.getAsJsonArray("meta");
+ Assert.assertEquals(1, metaArray.size());
+ JsonObject meta = (JsonObject) metaArray.get(0);
+ String persistableReference = meta.get("persistableReference").getAsString();
+ List conversionRecords = new ArrayList<>();
+ ConversionRecord conversionRecord = new ConversionRecord();
+ conversionRecord.setRecordJsonObject(record);
+ conversionRecords.add(conversionRecord);
+ this.unitConversion.convertUnitsToSI(conversionRecords);
+ Assert.assertEquals(1, conversionRecords.size());
+ Assert.assertTrue(conversionRecords.get(0).getConversionMessages().size() == 0);
+ JsonObject resultRecord = conversionRecords.get(0).getRecordJsonObject();
+ JsonElement data = resultRecord.get("data");
+ JsonArray markers = data.getAsJsonObject().getAsJsonArray("markers");
+ JsonObject item1 = markers.get(0).getAsJsonObject();
+ double actualConvertedMeasuredDepthValue1 = item1.get("measuredDepth").getAsDouble();
+ Assert.assertEquals(10.0, actualConvertedMeasuredDepthValue1, 0.00001);
+ JsonObject item2 = markers.get(1).getAsJsonObject();
+ double actualConvertedMeasuredDepthValue2 = item2.get("measuredDepth").getAsDouble();
+ Assert.assertEquals(6.096, actualConvertedMeasuredDepthValue2, 0.00001);
+ JsonArray resultMetaArray = resultRecord.getAsJsonArray("meta");
+ Assert.assertEquals(1, resultMetaArray.size());
+ JsonObject resultMeta = (JsonObject) resultMetaArray.get(0);
+ String resultPersistableReference = resultMeta.get("persistableReference").getAsString();
+ Assert.assertTrue(persistableReference != resultPersistableReference);
+ String resultName = resultMeta.get("name").getAsString();
+ Assert.assertEquals("m", resultName);
+ }
+
+ @Test
+ public void shouldReturnOriginalRecordWhenInhomogeneousNestedArrayPropertyValueTypeIsInvalidInDataAndNested() {
+ JsonObject record = testData.getAsJsonObject("inhomogeneousNestedArrayPropertyWithInvalidDataType");
+ JsonArray metaArray = record.getAsJsonArray("meta");
+ Assert.assertEquals(1, metaArray.size());
+ List conversionRecords = new ArrayList<>();
+ ConversionRecord conversionRecord = new ConversionRecord();
+ conversionRecord.setRecordJsonObject(record);
+ conversionRecord.setConvertStatus(ConvertStatus.SUCCESS);
+ conversionRecords.add(conversionRecord);
+ this.unitConversion.convertUnitsToSI(conversionRecords);
+ Assert.assertEquals(1, conversionRecords.size());
+ Assert.assertTrue(conversionRecords.get(0).getConvertStatus() == ConvertStatus.ERROR);
+ String message = String.format(UnitConversionImpl.ILLEGAL_PROPERTY_VALUE, "markers[2].measuredDepth");
+ Assert.assertEquals(message, conversionRecords.get(0).getConversionMessages().get(0));
+ JsonObject resultRecord = conversionRecords.get(0).getRecordJsonObject();
+ Assert.assertEquals(record, resultRecord);
+ }
+
+ @Test
+ public void shouldReturnOriginalRecordWhenInhomogeneousNestedArrayPropertyValueIndexOutOfBoundary() {
+ JsonObject record = testData.getAsJsonObject("inhomogeneousPropertyIndexOutOfBoundary");
+ JsonArray metaArray = record.getAsJsonArray("meta");
+ Assert.assertEquals(1, metaArray.size());
+ List conversionRecords = new ArrayList<>();
+ ConversionRecord conversionRecord = new ConversionRecord();
+ conversionRecord.setRecordJsonObject(record);
+ conversionRecord.setConvertStatus(ConvertStatus.SUCCESS);
+ conversionRecords.add(conversionRecord);
+ this.unitConversion.convertUnitsToSI(conversionRecords);
+ Assert.assertEquals(1, conversionRecords.size());
+ Assert.assertTrue(conversionRecords.get(0).getConvertStatus() == ConvertStatus.SUCCESS);
+ String message = String.format(UnitConversionImpl.MISSING_PROPERTY, "markers[2].measuredDepth");
+ Assert.assertEquals(message, conversionRecords.get(0).getConversionMessages().get(0));
+ JsonObject resultRecord = conversionRecords.get(0).getRecordJsonObject();
+ Assert.assertEquals(record, resultRecord);
+ }
+
private JsonObject getTestData() {
InputStream inStream = this.getClass().getResourceAsStream("/testdata/nested-data.json");
BufferedReader br = new BufferedReader(new InputStreamReader(inStream));
diff --git a/src/test/java/org/opengroup/osdu/core/common/model/units/JsonUtilsTest.java b/src/test/java/org/opengroup/osdu/core/common/model/units/JsonUtilsTest.java
index 7fdaa157ffbedb9b3fab6c9d14343d9d56edcd5e..37647d618fdb3407775b2c3a5e72c37dc915b9ec 100644
--- a/src/test/java/org/opengroup/osdu/core/common/model/units/JsonUtilsTest.java
+++ b/src/test/java/org/opengroup/osdu/core/common/model/units/JsonUtilsTest.java
@@ -181,6 +181,50 @@ public class JsonUtilsTest {
assertNull(result.get(2));
}
+ @Test
+ public void getJsonPropertyValueFromJsonObject_shouldReturnListOfProperty_whenOneOfNestedArrayItemsPropertyPresented() {
+ String propertyName = "markers[1].value";
+
+ setupJsonArrayMock(3);
+ when(mockJsonObject.getAsJsonArray("markers")).thenReturn(mockJsonArray);
+ when(mockJsonObject.get("value")).thenReturn(mockJsonPrimitive);
+
+ List result = getJsonPropertyValueFromJsonObject(propertyName, mockJsonObject);
+
+ assertEquals(1, result.size());
+ verify(mockJsonObject, times(1)).get("value");
+ assertSame(mockJsonPrimitive, result.get(0));
+ }
+
+ @Test
+ public void getJsonPropertyValueFromJsonObject_shouldReturnListOfNull_whenOneOfNestedArrayItemsPropertyNotPresented() {
+ String propertyName = "markers[1].value";
+
+ setupJsonArrayMock(3);
+ when(mockJsonObject.getAsJsonArray("markers")).thenReturn(mockJsonArray);
+
+ List result = getJsonPropertyValueFromJsonObject(propertyName, mockJsonObject);
+
+ assertEquals(1, result.size());
+ verify(mockJsonObject, times(1)).get("value");
+ assertNull(result.get(0));
+ }
+
+ @Test
+ public void getJsonPropertyValueFromJsonObject_shouldReturnListOfNull_whenNextedArrayItemIndexExceedsBoundary() {
+ String propertyName = "markers[2].value";
+
+ setupJsonArrayMock(1);
+ when(mockJsonObject.getAsJsonArray("markers")).thenReturn(mockJsonArray);
+ when(mockJsonObject.get("value")).thenReturn(mockJsonPrimitive);
+
+ List result = getJsonPropertyValueFromJsonObject(propertyName, mockJsonObject);
+
+ assertEquals(1, result.size());
+ verify(mockJsonObject, times(0)).get("value");
+ assertNull(result.get(0));
+ }
+
// ---- JsonUtils.isJsonPropertyPresentedInJsonObject tests ----
@Test
@@ -281,6 +325,34 @@ public class JsonUtilsTest {
verify(mockJsonObject, times(1)).addProperty("value", 32);
}
+ @Test
+ public void overrideOneNumberPropertyOfJsonObject_succeed_whenJsonObjectPresentedInNestedArray() {
+ String propertyName = "markers[1].value";
+ Integer value1 = 12;
+ List values = new ArrayList<>();
+ values.add(value1);
+
+ setupJsonArrayMock(3);
+ when(mockJsonObject.getAsJsonArray("markers")).thenReturn(mockJsonArray);
+
+ overrideNumberPropertyOfJsonObject(propertyName, values, mockJsonObject);
+ verify(mockJsonObject, times(1)).addProperty("value", 12);
+ }
+
+ @Test
+ public void overrideNumberPropertyOfJsonObject_notHappened_whenJsonObjectIndexOutOfBoundary() {
+ String propertyName = "markers[1].value";
+ Integer value1 = 12;
+ List values = new ArrayList<>();
+ values.add(value1);
+
+ setupJsonArrayMock(1);
+ when(mockJsonObject.getAsJsonArray("markers")).thenReturn(mockJsonArray);
+
+ overrideNumberPropertyOfJsonObject(propertyName, values, mockJsonObject);
+ verify(mockJsonObject, never()).addProperty(anyString(), any(Number.class));
+ }
+
// ---- JsonUtils.overrideStringPropertyOfJsonObject tests ----
@Test
diff --git a/src/test/resources/testdata/nested-data.json b/src/test/resources/testdata/nested-data.json
index 65661be6113e8d862eca53c59ce54b8d9b163b22..12111cd19257551e7fc4ccd96d56a5c98a1a5624 100644
--- a/src/test/resources/testdata/nested-data.json
+++ b/src/test/resources/testdata/nested-data.json
@@ -17,7 +17,7 @@
{
"path": "",
"kind": "UNIT",
- "persistableReference": "%7B%22ScaleOffset%22%3A%7B%22Scale%22%3A0.3048%2C%22Offset%22%3A0.0%7D%2C%22Symbol%22%3A%22ft%22%2C%22BaseMeasurement%22%3A%22%257B%2522Ancestry%2522%253A%2522Length%2522%257D%22%7D",
+ "persistableReference": "{\"abcd\":{\"a\":0.0,\"b\":0.3048,\"c\":1.0,\"d\":0.0},\"symbol\":\"ft\",\"baseMeasurement\":{\"ancestry\":\"L\",\"type\":\"UM\"},\"type\":\"UAD\"}",
"propertyNames": [
"markers[].measuredDepth"
],
@@ -44,7 +44,7 @@
{
"path": "",
"kind": "UNIT",
- "persistableReference": "%7B%22ScaleOffset%22%3A%7B%22Scale%22%3A0.3048%2C%22Offset%22%3A0.0%7D%2C%22Symbol%22%3A%22ft%22%2C%22BaseMeasurement%22%3A%22%257B%2522Ancestry%2522%253A%2522Length%2522%257D%22%7D",
+ "persistableReference": "{\"abcd\":{\"a\":0.0,\"b\":0.3048,\"c\":1.0,\"d\":0.0},\"symbol\":\"ft\",\"baseMeasurement\":{\"ancestry\":\"L\",\"type\":\"UM\"},\"type\":\"UAD\"}",
"propertyNames": [
"markers[].measuredDepth"
],
@@ -71,7 +71,7 @@
{
"path": "",
"kind": "UNIT",
- "persistableReference": "%7B%22ScaleOffset%22%3A%7B%22Scale%22%3A0.3048%2C%22Offset%22%3A0.0%7D%2C%22Symbol%22%3A%22ft%22%2C%22BaseMeasurement%22%3A%22%257B%2522Ancestry%2522%253A%2522Length%2522%257D%22%7D",
+ "persistableReference": "{\"abcd\":{\"a\":0.0,\"b\":0.3048,\"c\":1.0,\"d\":0.0},\"symbol\":\"ft\",\"baseMeasurement\":{\"ancestry\":\"L\",\"type\":\"UM\"},\"type\":\"UAD\"}",
"propertyNames": [
"markers[].measuredDepth"
],
@@ -94,7 +94,7 @@
{
"path": "",
"kind": "UNIT",
- "persistableReference": "%7B%22ScaleOffset%22%3A%7B%22Scale%22%3A0.3048%2C%22Offset%22%3A0.0%7D%2C%22Symbol%22%3A%22ft%22%2C%22BaseMeasurement%22%3A%22%257B%2522Ancestry%2522%253A%2522Length%2522%257D%22%7D",
+ "persistableReference": "{\"abcd\":{\"a\":0.0,\"b\":0.3048,\"c\":1.0,\"d\":0.0},\"symbol\":\"ft\",\"baseMeasurement\":{\"ancestry\":\"L\",\"type\":\"UM\"},\"type\":\"UAD\"}",
"propertyNames": [
"depth.inner.value"
],
@@ -143,7 +143,7 @@
{
"path": "",
"kind": "UNIT",
- "persistableReference": "%7B%22ScaleOffset%22%3A%7B%22Scale%22%3A0.3048%2C%22Offset%22%3A0.0%7D%2C%22Symbol%22%3A%22ft%22%2C%22BaseMeasurement%22%3A%22%257B%2522Ancestry%2522%253A%2522Length%2522%257D%22%7D",
+ "persistableReference": "{\"abcd\":{\"a\":0.0,\"b\":0.3048,\"c\":1.0,\"d\":0.0},\"symbol\":\"ft\",\"baseMeasurement\":{\"ancestry\":\"L\",\"type\":\"UM\"},\"type\":\"UAD\"}",
"propertyNames": [
"MD.value"
],
@@ -163,7 +163,7 @@
{
"path": "",
"kind": "UNIT",
- "persistableReference": "%7B%22ScaleOffset%22%3A%7B%22Scale%22%3A0.3048%2C%22Offset%22%3A0.0%7D%2C%22Symbol%22%3A%22ft%22%2C%22BaseMeasurement%22%3A%22%257B%2522Ancestry%2522%253A%2522Length%2522%257D%22%7D",
+ "persistableReference": "{\"abcd\":{\"a\":0.0,\"b\":0.3048,\"c\":1.0,\"d\":0.0},\"symbol\":\"ft\",\"baseMeasurement\":{\"ancestry\":\"L\",\"type\":\"UM\"},\"type\":\"UAD\"}",
"propertyNames": [
"MD.value"
],
@@ -181,7 +181,7 @@
{
"path": "",
"kind": "UNIT",
- "persistableReference": "%7B%22ScaleOffset%22%3A%7B%22Scale%22%3A0.3048%2C%22Offset%22%3A0.0%7D%2C%22Symbol%22%3A%22ft%22%2C%22BaseMeasurement%22%3A%22%257B%2522Ancestry%2522%253A%2522Length%2522%257D%22%7D",
+ "persistableReference": "{\"abcd\":{\"a\":0.0,\"b\":0.3048,\"c\":1.0,\"d\":0.0},\"symbol\":\"ft\",\"baseMeasurement\":{\"ancestry\":\"L\",\"type\":\"UM\"},\"type\":\"UAD\"}",
"propertyNames": [
"MD"
],
@@ -199,7 +199,7 @@
{
"path": "",
"kind": "UNIT",
- "persistableReference": "%7B%22ScaleOffset%22%3A%7B%22Scale%22%3A0.3048%2C%22Offset%22%3A0.0%7D%2C%22Symbol%22%3A%22ft%22%2C%22BaseMeasurement%22%3A%22%257B%2522Ancestry%2522%253A%2522Length%2522%257D%22%7D",
+ "persistableReference": "{\"abcd\":{\"a\":0.0,\"b\":0.3048,\"c\":1.0,\"d\":0.0},\"symbol\":\"ft\",\"baseMeasurement\":{\"ancestry\":\"L\",\"type\":\"UM\"},\"type\":\"UAD\"}",
"propertyNames": [
"MD"
],
@@ -217,7 +217,7 @@
{
"path": "",
"kind": "UNIT",
- "persistableReference": "%7B%22ScaleOffset%22%3A%7B%22Scale%22%3A0.3048%2C%22Offset%22%3A0.0%7D%2C%22Symbol%22%3A%22ft%22%2C%22BaseMeasurement%22%3A%22%257B%2522Ancestry%2522%253A%2522Length%2522%257D%22%7D",
+ "persistableReference": "{\"abcd\":{\"a\":0.0,\"b\":0.3048,\"c\":1.0,\"d\":0.0},\"symbol\":\"ft\",\"baseMeasurement\":{\"ancestry\":\"L\",\"type\":\"UM\"},\"type\":\"UAD\"}",
"propertyNames": [
"MD"
],
@@ -235,7 +235,7 @@
{
"path": "",
"kind": "UNIT",
- "persistableReference": "%7B%22ScaleOffset%22%3A%7B%22Scale%22%3A0.3048%2C%22Offset%22%3A0.0%7D%2C%22Symbol%22%3A%22ft%22%2C%22BaseMeasurement%22%3A%22%257B%2522Ancestry%2522%253A%2522Length%2522%257D%22%7D",
+ "persistableReference": "{\"abcd\":{\"a\":0.0,\"b\":0.3048,\"c\":1.0,\"d\":0.0},\"symbol\":\"ft\",\"baseMeasurement\":{\"ancestry\":\"L\",\"type\":\"UM\"},\"type\":\"UAD\"}",
"propertyNames": [
"MD"
],
@@ -253,7 +253,7 @@
{
"path": "",
"kind": "UNIT",
- "persistableReference": "%7B%22ScaleOffset%22%3A%7B%22Scale%22%3A0.3048%2C%22Offset%22%3A0.0%7D%2C%22Symbol%22%3A%22ft%22%2C%22BaseMeasurement%22%3A%22%257B%2522Ancestry%2522%253A%2522Length%2522%257D%22%7D",
+ "persistableReference": "{\"abcd\":{\"a\":0.0,\"b\":0.3048,\"c\":1.0,\"d\":0.0},\"symbol\":\"ft\",\"baseMeasurement\":{\"ancestry\":\"L\",\"type\":\"UM\"},\"type\":\"UAD\"}",
"propertyNames": "MD",
"name": "ft"
}
@@ -268,7 +268,7 @@
"meta": [
{
"path": "",
- "persistableReference": "%7B%22ScaleOffset%22%3A%7B%22Scale%22%3A0.3048%2C%22Offset%22%3A0.0%7D%2C%22Symbol%22%3A%22ft%22%2C%22BaseMeasurement%22%3A%22%257B%2522Ancestry%2522%253A%2522Length%2522%257D%22%7D",
+ "persistableReference": "{\"abcd\":{\"a\":0.0,\"b\":0.3048,\"c\":1.0,\"d\":0.0},\"symbol\":\"ft\",\"baseMeasurement\":{\"ancestry\":\"L\",\"type\":\"UM\"},\"type\":\"UAD\"}",
"propertyNames": [
"MD"
],
@@ -286,7 +286,7 @@
{
"path": "",
"kind": "UNIT",
- "persistableReference": "%7B%22ScaleOffset%22%3A%7B%22Scale%22%3A0.3048%2C%22Offset%22%3A0.0%7D%2C%22Symbol%22%3A%22ft%22%2C%22BaseMeasurement%22%3A%22%257B%2522Ancestry%2522%253A%2522Length%2522%257D%22%7D",
+ "persistableReference": "{\"abcd\":{\"a\":0.0,\"b\":0.3048,\"c\":1.0,\"d\":0.0},\"symbol\":\"ft\",\"baseMeasurement\":{\"ancestry\":\"L\",\"type\":\"UM\"},\"type\":\"UAD\"}",
"name": "ft"
}
]
@@ -390,5 +390,90 @@
"Y": 10.00,
"Z": 0
}
+ },
+ "inhomogeneousNestedArrayPropertyIsValid": {
+ "id": "unit-test-1",
+ "kind": "unit:test:1.0.0",
+ "data": {
+ "markers": [
+ {
+ "measuredDepth": 10.0,
+ "testField": "test"
+ },
+ {
+ "measuredDepth": 20.0,
+ "testField": "test"
+ }
+ ]
+ },
+ "meta": [
+ {
+ "path": "",
+ "kind": "UNIT",
+ "persistableReference": "{\"abcd\":{\"a\":0.0,\"b\":0.3048,\"c\":1.0,\"d\":0.0},\"symbol\":\"ft\",\"baseMeasurement\":{\"ancestry\":\"L\",\"type\":\"UM\"},\"type\":\"UAD\"}",
+ "propertyNames": [
+ "markers[1].measuredDepth"
+ ],
+ "name": "ft"
+ }
+ ]
+ },
+ "inhomogeneousNestedArrayPropertyWithInvalidDataType": {
+ "id": "unit-test-1",
+ "kind": "unit:test:1.0.0",
+ "data": {
+ "markers": [
+ {
+ "measuredDepth": 10.0,
+ "testField": "test"
+ },
+ {
+ "measuredDepth": 20.0,
+ "testField": "test"
+ },
+ {
+ "measuredDepth": "invalidType",
+ "testField": "test"
+ }
+ ]
+ },
+ "meta": [
+ {
+ "path": "",
+ "kind": "UNIT",
+ "persistableReference": "{\"abcd\":{\"a\":0.0,\"b\":0.3048,\"c\":1.0,\"d\":0.0},\"symbol\":\"ft\",\"baseMeasurement\":{\"ancestry\":\"L\",\"type\":\"UM\"},\"type\":\"UAD\"}",
+ "propertyNames": [
+ "markers[2].measuredDepth"
+ ],
+ "name": "ft"
+ }
+ ]
+ },
+ "inhomogeneousPropertyIndexOutOfBoundary": {
+ "id": "unit-test-1",
+ "kind": "unit:test:1.0.0",
+ "data": {
+ "markers": [
+ {
+ "measuredDepth": 10.0,
+ "testField": "test"
+ },
+ {
+ "measuredDepth": 20.0,
+ "testField": "test"
+ }
+ ]
+ },
+ "meta": [
+ {
+ "path": "",
+ "kind": "UNIT",
+ "persistableReference": "{\"abcd\":{\"a\":0.0,\"b\":0.3048,\"c\":1.0,\"d\":0.0},\"symbol\":\"ft\",\"baseMeasurement\":{\"ancestry\":\"L\",\"type\":\"UM\"},\"type\":\"UAD\"}",
+ "propertyNames": [
+ "markers[2].measuredDepth"
+ ],
+ "name": "ft"
+ }
+ ]
}
}
\ No newline at end of file