/*
* Copyright (c) 2015 Guillaume Hillairet.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Guillaume Hillairet - initial API and implementation
*/
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.ecore.*;
import org.emfjson.jackson.module.EMFModule;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
public class DynamicPackageTest {
private ObjectMapper mapper = new ObjectMapper();
@Before
public void setUp() {
EPackage.Registry.INSTANCE.put(EcorePackage.eNS_URI, EcorePackage.eINSTANCE);
mapper.registerModule(new EMFModule());
}
@After
public void tearDown() {
EPackage.Registry.INSTANCE.clear();
}
@Test
public void testSavePackageWithTwoClasses() {
JsonNode expected = mapper.createObjectNode()
.put("eClass", "http://www.eclipse.org/emf/2002/Ecore#//EPackage")
.put("name", "p")
.put("nsURI", "http://foo.org/p")
.set("eClassifiers", mapper.createArrayNode()
.add(mapper.createObjectNode()
.put("eClass", "http://www.eclipse.org/emf/2002/Ecore#//EClass")
.put("name", "A"))
.add(mapper.createObjectNode()
.put("eClass", "http://www.eclipse.org/emf/2002/Ecore#//EClass")
.put("name", "B")));
EPackage p = EcoreFactory.eINSTANCE.createEPackage();
p.setNsURI("http://foo.org/p");
p.setName("p");
EClass a = EcoreFactory.eINSTANCE.createEClass();
a.setName("A");
EClass b = EcoreFactory.eINSTANCE.createEClass();
b.setName("B");
p.getEClassifiers().add(a);
p.getEClassifiers().add(b);
assertEquals(expected, mapper.valueToTree(p));
}
@Test
public void testLoadPackageWithTwoClasses() throws JsonProcessingException {
JsonNode data = mapper.createObjectNode()
.put("eClass", "http://www.eclipse.org/emf/2002/Ecore#//EPackage")
.put("name", "p")
.put("nsURI", "http://foo.org/p")
.set("eClassifiers", mapper.createArrayNode()
.add(mapper.createObjectNode()
.put("eClass", "http://www.eclipse.org/emf/2002/Ecore#//EClass")
.put("name", "A"))
.add(mapper.createObjectNode()
.put("eClass", "http://www.eclipse.org/emf/2002/Ecore#//EClass")
.put("name", "B")));
EPackage p = (EPackage) mapper.treeToValue(data, EObject.class);
assertNotNull(p);
assertEquals("p", p.getName());
assertEquals("http://foo.org/p", p.getNsURI());
assertEquals(2, p.getEClassifiers().size());
assertEquals("A", p.getEClassifiers().get(0).getName());
assertEquals("B", p.getEClassifiers().get(1).getName());
}
}