package org.emfjson.jackson.tests.dynamic; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.emfjson.jackson.support.DynamicFixture; import org.emfjson.jackson.support.StandardFixture; import org.junit.ClassRule; import org.junit.Test; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class DynamicPolymorphicTest { @ClassRule public static StandardFixture fixture = new DynamicFixture(); private ResourceSet resourceSet = fixture.getResourceSet(); @Test public void testContainmentWithHierarchyOfTypes() { Resource resource = resourceSet.getResource(URI.createURI("src/test/resources/tests/test-types-dynamic-1.json"), true); assertEquals(1, resource.getContents().size()); EObject root = resource.getContents().get(0); assertEquals("A", root.eClass().getName()); EClass a = root.eClass(); assertTrue(root.eIsSet(a.getEStructuralFeature("containB"))); assertTrue(root.eIsSet(a.getEStructuralFeature("containBs"))); EObject root_c1 = (EObject) root.eGet(a.getEStructuralFeature("containB")); List<EObject> root_c2 = (List<EObject>) root.eGet(a.getEStructuralFeature("containBs")); assertEquals("C", root_c1.eClass().getName()); assertEquals(2, root_c2.size()); assertEquals("C", root_c2.get(0).eClass().getName()); EObject c2 = root_c2.get(0); assertEquals("Hello", c2.eGet(c2.eClass().getEStructuralFeature("stringValue"))); assertEquals("D", root_c2.get(1).eClass().getName()); } }