package org.emfjson.jackson.tests.dynamic;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EDataType;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.emfjson.jackson.support.DynamicFixture;
import org.emfjson.jackson.support.StandardFixture;
import org.junit.ClassRule;
import org.junit.Test;
import static org.emfjson.jackson.databind.EMFContext.Attributes.RESOURCE_SET;
import static org.junit.Assert.assertEquals;
public class DynamicValueTest {
@ClassRule
public static StandardFixture fixture = new DynamicFixture();
private ObjectMapper mapper = fixture.mapper();
private ResourceSet resourceSet = fixture.getResourceSet();
@Test
public void testSaveEJavaObjectValue() {
EClass classA = (EClass) resourceSet.getEObject(URI.createURI("http://emfjson/dynamic/model#//A"), true);
EDataType type = (EDataType) classA.getEStructuralFeature("javaType").getEType();
final Object value = "Hello";
final EObject obj = EcoreUtil.create(classA);
obj.eSet(classA.getEStructuralFeature("javaType"), value);
String stringValue = EcorePackage.eINSTANCE.getEFactoryInstance().convertToString(type, value);
JsonNode result = mapper.valueToTree(obj);
assertEquals(stringValue, result.get("javaType").asText());
}
@Test
public void testLoadEJavaObjectValue() throws JsonProcessingException {
EClass classA = (EClass) resourceSet.getEObject(URI.createURI("http://emfjson/dynamic/model#//A"), true);
EDataType type = (EDataType) classA.getEStructuralFeature("javaType").getEType();
final Object value = "Hello";
String stringValue = EcorePackage.eINSTANCE.getEFactoryInstance().convertToString(type, value);
JsonNode node = mapper.createObjectNode()
.put("eClass", "http://emfjson/dynamic/model#//A")
.put("javaType", stringValue);
EObject obj = mapper
.reader()
.withAttribute(RESOURCE_SET, resourceSet)
.treeToValue(node, EObject.class);
assertEquals(value, obj.eGet(classA.getEStructuralFeature("javaType")));
}
@Test
public void testSaveEJavaClassValue() {
EClass classA = (EClass) resourceSet.getEObject(URI.createURI("http://emfjson/dynamic/model#//A"), true);
EDataType type = (EDataType) classA.getEStructuralFeature("javaClass").getEType();
final Object value = this.getClass();
final EObject obj = EcoreUtil.create(classA);
obj.eSet(classA.getEStructuralFeature("javaClass"), value);
String stringValue = EcorePackage.eINSTANCE.getEFactoryInstance().convertToString(type, value);
JsonNode result = mapper.valueToTree(obj);
assertEquals(stringValue, result.get("javaClass").asText());
}
@Test
public void testLoadEJavaClassValue() throws JsonProcessingException {
EClass classA = (EClass) resourceSet.getEObject(URI.createURI("http://emfjson/dynamic/model#//A"), true);
EDataType type = (EDataType) classA.getEStructuralFeature("javaClass").getEType();
final Object value = this.getClass();
String stringValue = EcorePackage.eINSTANCE.getEFactoryInstance().convertToString(type, value);
JsonNode node = mapper.createObjectNode()
.put("eClass", "http://emfjson/dynamic/model#//A")
.put("javaClass", stringValue);
EObject obj = mapper
.reader()
.withAttribute(RESOURCE_SET, resourceSet)
.treeToValue(node, EObject.class);
assertEquals(value, obj.eGet(classA.getEStructuralFeature("javaClass")));
}
}