/*
* 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;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.emfjson.jackson.junit.model.*;
import org.emfjson.jackson.support.StandardFixture;
import org.junit.Assert;
import org.junit.ClassRule;
import org.junit.Test;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import static org.emfjson.jackson.module.EMFModule.Feature.OPTION_SERIALIZE_DEFAULT_VALUE;
import static org.junit.Assert.assertEquals;
public class EnumTest {
@ClassRule
public static StandardFixture fixture = new StandardFixture();
private ObjectMapper mapper = fixture.mapper();
private ResourceSet resourceSet = fixture.getResourceSet();
@Test
public void testEnums() throws IOException {
JsonNode expected = mapper.createArrayNode()
.add(mapper.createObjectNode()
.put("eClass", "http://www.emfjson.org/jackson/model#//User"))
.add(mapper.createObjectNode()
.put("eClass", "http://www.emfjson.org/jackson/model#//User")
.put("sex", "FEMALE"));
Resource resource = resourceSet.createResource(URI.createURI("tests/test.json"));
User u1 = ModelFactory.eINSTANCE.createUser();
u1.setSex(Sex.MALE);
User u2 = ModelFactory.eINSTANCE.createUser();
u2.setSex(Sex.FEMALE);
resource.getContents().add(u1);
resource.getContents().add(u2);
Assert.assertEquals(expected, mapper.valueToTree(resource));
}
@Test
public void testLoadEnums() throws IOException {
JsonNode data = mapper.createArrayNode()
.add(mapper.createObjectNode()
.put("eClass", "http://www.emfjson.org/jackson/model#//User")
.put("name", "A")
.put("sex", "MALE"))
.add(mapper.createObjectNode()
.put("eClass", "http://www.emfjson.org/jackson/model#//User")
.put("name", "B")
.put("sex", "FEMALE"));
Resource resource = resourceSet.createResource(URI.createURI("tests/test.json"));
resource.load(new ByteArrayInputStream(mapper.writeValueAsBytes(data)), null);
assertEquals(2, resource.getContents().size());
assertEquals(ModelPackage.Literals.USER, resource.getContents().get(0).eClass());
assertEquals(ModelPackage.Literals.USER, resource.getContents().get(1).eClass());
User u1 = (User) resource.getContents().get(0);
User u2 = (User) resource.getContents().get(1);
assertEquals("A", u1.getName());
assertEquals(Sex.MALE, u1.getSex());
assertEquals("B", u2.getName());
assertEquals(Sex.FEMALE, u2.getSex());
}
@Test
public void testSaveEnumDifferentCases() throws IOException {
JsonNode expected = mapper.createArrayNode()
.add(mapper.createObjectNode()
.put("eClass", "http://www.emfjson.org/jackson/model#//PrimaryObject")
.put("unsettableAttributeWithNonNullDefault", "junit")
.put("kind", "one"))
.add(mapper.createObjectNode()
.put("eClass", "http://www.emfjson.org/jackson/model#//PrimaryObject")
.put("unsettableAttributeWithNonNullDefault", "junit")
.put("kind", "two"))
.add(mapper.createObjectNode()
.put("eClass", "http://www.emfjson.org/jackson/model#//PrimaryObject")
.put("unsettableAttributeWithNonNullDefault", "junit")
.put("kind", "Three-is-Three"));
Resource resource = resourceSet.createResource(URI.createURI("tests/test.json"));
{
PrimaryObject p = ModelFactory.eINSTANCE.createPrimaryObject();
p.setKind(SomeKind.ONE);
resource.getContents().add(p);
}
{
PrimaryObject p = ModelFactory.eINSTANCE.createPrimaryObject();
p.setKind(SomeKind.TWO);
resource.getContents().add(p);
}
{
PrimaryObject p = ModelFactory.eINSTANCE.createPrimaryObject();
p.setKind(SomeKind.THREE);
resource.getContents().add(p);
}
Assert.assertEquals(expected, fixture.mapper(OPTION_SERIALIZE_DEFAULT_VALUE, true)
.valueToTree(resource));
}
@Test
public void testLoadEnumDifferentCases() throws IOException {
JsonNode data = mapper.createArrayNode()
.add(mapper.createObjectNode()
.put("eClass", "http://www.emfjson.org/jackson/model#//PrimaryObject")
.put("kind", "one"))
.add(mapper.createObjectNode()
.put("eClass", "http://www.emfjson.org/jackson/model#//PrimaryObject")
.put("kind", "two"))
.add(mapper.createObjectNode()
.put("eClass", "http://www.emfjson.org/jackson/model#//PrimaryObject")
.put("kind", "Three-is-Three"));
Resource resource = resourceSet.createResource(URI.createURI("tests/test.json"));
resource.load(new ByteArrayInputStream(mapper.writeValueAsBytes(data)), null);
assertEquals(3, resource.getContents().size());
EObject one = resource.getContents().get(0);
EObject two = resource.getContents().get(1);
EObject three = resource.getContents().get(2);
assertEquals(ModelPackage.Literals.PRIMARY_OBJECT, one.eClass());
assertEquals(ModelPackage.Literals.PRIMARY_OBJECT, two.eClass());
assertEquals(ModelPackage.Literals.PRIMARY_OBJECT, three.eClass());
assertEquals(SomeKind.ONE, ((PrimaryObject) one).getKind());
assertEquals(SomeKind.TWO, ((PrimaryObject) two).getKind());
assertEquals(SomeKind.THREE, ((PrimaryObject) three).getKind());
}
}