blob: 780bf087f9300be5c701acdf857d5f121f406479 [file] [log] [blame]
/*******************************************************************************
* Copyright (C) 2021 the Eclipse BaSyx Authors
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
******************************************************************************/
package org.eclipse.basyx.testsuite.regression.vab.modelprovider;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.eclipse.basyx.vab.exception.provider.ResourceNotFoundException;
import org.eclipse.basyx.vab.manager.VABConnectionManager;
import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
/**
* Tests a IModelProvider's capability to handle collections
*
* @author schnicke, espen
*/
public class TestCollectionProperty {
@SuppressWarnings("unchecked")
public static void testRead(VABConnectionManager connManager) {
// Connect to VAB element with ID "urn:fhg:es.iese:vab:1:1:simplevabelement"
VABElementProxy connVABElement = connManager.connectToVABElement("urn:fhg:es.iese:vab:1:1:simplevabelement");
// Adding elements to tested list
connVABElement.createValue("/structure/list/", 5);
connVABElement.createValue("/structure/list/", 12);
// Test reading whole lists
Collection<Object> collection = (Collection<Object>) connVABElement.getModelPropertyValue("/structure/list/");
Iterator<Object> iterator = collection.iterator();
assertEquals(5, iterator.next());
assertEquals(12, iterator.next());
assertEquals(2, collection.size());
// Test invalid list access - single list elements cannot be accessed directly
try {
connVABElement.getModelPropertyValue("/structure/list/0");
fail();
} catch (ResourceNotFoundException e) {}
// Delete remaining entries
connVABElement.deleteValue("/structure/list", 5);
connVABElement.deleteValue("/structure/list", 12);
}
@SuppressWarnings("unchecked")
public static void testUpdate(VABConnectionManager connManager) {
// Connect to VAB element with ID "urn:fhg:es.iese:vab:1:1:simplevabelement"
VABElementProxy connVABElement = connManager.connectToVABElement("urn:fhg:es.iese:vab:1:1:simplevabelement");
// Read original collection
Collection<Object> original = (Collection<Object>) connVABElement.getModelPropertyValue("/structure/list/");
// Replace complete value of the collection property
Collection<Object> replacement = new ArrayList<>();
replacement.add(100);
replacement.add(200);
replacement.add(300);
connVABElement.setModelPropertyValue("/structure/list/", replacement);
// Read values back
Collection<Object> collection = (Collection<Object>) connVABElement.getModelPropertyValue("/structure/list/");
// Check test case results
assertEquals(3, collection.size());
assertEquals(replacement, collection);
// Test invalid list access - single list elements cannot be accessed directly
try {
connVABElement.setModelPropertyValue("/structure/list/0", 3);
fail();
} catch (ResourceNotFoundException e) {
}
// Write original back
connVABElement.setModelPropertyValue("/structure/list/", original);
}
public static void testCreateDelete(VABConnectionManager connManager) {
// Connect to VAB element with ID "urn:fhg:es.iese:vab:1:1:simplevabelement"
VABElementProxy connVABElement = connManager.connectToVABElement("urn:fhg:es.iese:vab:1:1:simplevabelement");
// Create element in Set (no key provided)
connVABElement.createValue("/structure/set/", true);
Object toTest = connVABElement.getModelPropertyValue("/structure/set/");
assertTrue(((Collection<?>) toTest).contains(true));
// Delete at Set
// - by index - should not work in sets, as they do not have an ordering
try {
connVABElement.deleteValue("/structure/set/0/");
fail();
} catch (ResourceNotFoundException e) {}
toTest = connVABElement.getModelPropertyValue("/structure/set/");
assertEquals(1, ((Collection<?>) toTest).size());
// - by object
connVABElement.deleteValue("/structure/set/", true);
toTest = connVABElement.getModelPropertyValue("/structure/set/");
assertEquals(0, ((Collection<?>) toTest).size());
// Create elements in List (no key provided)
connVABElement.createValue("/structure/list/", 56);
toTest = connVABElement.getModelPropertyValue("/structure/list/");
assertTrue(((List<?>) toTest).contains(56));
// Delete at List
// by object
connVABElement.deleteValue("/structure/list/", 56);
toTest = connVABElement.getModelPropertyValue("/structure/list/");
assertEquals(0, ((List<?>) toTest).size());
// Create a list element
connVABElement.createValue("listInRoot", Arrays.asList(1, 1, 2, 3, 5));
// Test whole list
toTest = connVABElement.getModelPropertyValue("listInRoot");
assertTrue(toTest instanceof List);
assertEquals(5, ((List<?>) toTest).size());
assertEquals(2, ((List<?>) toTest).get(2));
// Delete whole list
connVABElement.deleteValue("listInRoot");
try {
connVABElement.getModelPropertyValue("listInRoot");
fail();
} catch (ResourceNotFoundException e) {}
// Delete at List
// - referring to new list: [10, 20, 40, 80]
connVABElement.createValue("/structure/list/", 10);
connVABElement.createValue("/structure/list/", 20);
connVABElement.createValue("/structure/list/", 40);
connVABElement.createValue("/structure/list/", 80);
// - by index - is not possible, as list access is only allowed using references
// - in contrast to indices, references always point to the same object in the list
try {
connVABElement.deleteValue("/structure/list/3");
fail();
} catch (ResourceNotFoundException e) {}
toTest = connVABElement.getModelPropertyValue("/structure/list/");
assertEquals(4, ((List<?>) toTest).size());
// Delete half of the elements
connVABElement.deleteValue("/structure/list/", 10);
connVABElement.deleteValue("/structure/list/", 40);
toTest = connVABElement.getModelPropertyValue("/structure/list/");
assertEquals(2, ((List<?>) toTest).size());
// Delete remaining elements
connVABElement.deleteValue("/structure/list/", 20);
connVABElement.deleteValue("/structure/list/", 80);
toTest = connVABElement.getModelPropertyValue("/structure/list/");
assertEquals(0, ((List<?>) toTest).size());
}
}