Java tutorial
/* * 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.EcorePackage; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.util.EcoreUtil; import org.emfjson.jackson.junit.model.*; import org.emfjson.jackson.support.StandardFixture; import org.junit.ClassRule; import org.junit.Test; import java.io.ByteArrayInputStream; import java.io.IOException; import java.math.BigDecimal; import java.math.BigInteger; import java.util.Calendar; import java.util.Date; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; import static org.emfjson.jackson.module.EMFModule.Feature.OPTION_SERIALIZE_DEFAULT_VALUE; import static org.junit.Assert.*; public class ValueTest { @ClassRule public static StandardFixture fixture = new StandardFixture(); private ObjectMapper mapper = fixture.mapper(); private ResourceSet resourceSet = fixture.getResourceSet(); @Test public void testOptionSaveDefaultValues() throws IOException { { JsonNode expected = mapper.createObjectNode() .put("eClass", "http://www.emfjson.org/jackson/model#//User").put("name", "u1"); User u = ModelFactory.eINSTANCE.createUser(); u.setName("u1"); assertEquals(expected, mapper.valueToTree(u)); } { JsonNode expected = mapper.createObjectNode() .put("eClass", "http://www.emfjson.org/jackson/model#//User").put("name", "u1") .put("sex", "FEMALE"); User u = ModelFactory.eINSTANCE.createUser(); u.setName("u1"); u.setSex(Sex.FEMALE); assertEquals(expected, mapper.valueToTree(u)); } { JsonNode expected = mapper.createObjectNode() .put("eClass", "http://www.emfjson.org/jackson/model#//User").put("name", "u1") .put("sex", "MALE"); User u = ModelFactory.eINSTANCE.createUser(); u.setName("u1"); assertEquals(expected, fixture.mapper(OPTION_SERIALIZE_DEFAULT_VALUE, true).valueToTree(u)); } { JsonNode expected = mapper.createObjectNode() .put("eClass", "http://www.emfjson.org/jackson/model#//User").put("name", "u1") .put("sex", "FEMALE"); User u = ModelFactory.eINSTANCE.createUser(); u.setName("u1"); u.setSex(Sex.FEMALE); assertEquals(expected, fixture.mapper(OPTION_SERIALIZE_DEFAULT_VALUE, true).valueToTree(u)); } } @Test public void testStringValues() throws IOException { JsonNode expected = mapper.createObjectNode().put("eClass", "http://www.emfjson.org/jackson/model#//ETypes") .put("eString", "Hello") .set("eStrings", mapper.createArrayNode().add("Hello").add("The").add("World")); Resource resource = resourceSet.createResource(URI.createURI("tests/test.json")); ETypes valueObject = ModelFactory.eINSTANCE.createETypes(); valueObject.setEString("Hello"); valueObject.getEStrings().add("Hello"); valueObject.getEStrings().add("The"); valueObject.getEStrings().add("World"); resource.getContents().add(valueObject); assertEquals(expected, mapper.valueToTree(resource)); } @Test public void testLoadStringValues() throws IOException { JsonNode data = mapper.createObjectNode().put("eClass", "http://www.emfjson.org/jackson/model#//ETypes") .put("eString", "Hello") .set("eStrings", mapper.createArrayNode().add("Hello").add("The").add("World")); Resource resource = resourceSet.createResource(URI.createURI("tests/test.json")); resource.load(new ByteArrayInputStream(mapper.writeValueAsBytes(data)), null); EObject root = resource.getContents().get(0); assertEquals(ModelPackage.Literals.ETYPES, root.eClass()); assertEquals("Hello", ((ETypes) root).getEString()); assertThat(((ETypes) root).getEStrings()).containsExactly("Hello", "The", "World"); } @Test public void testLoadNullValue() throws IOException { JsonNode data = mapper.createObjectNode().put("eClass", "http://www.emfjson.org/jackson/model#//ETypes") .putNull("eString"); Resource resource = resourceSet.createResource(URI.createURI("tests/test.json")); resource.load(new ByteArrayInputStream(mapper.writeValueAsBytes(data)), null); EObject root = resource.getContents().get(0); assertEquals(ModelPackage.Literals.ETYPES, root.eClass()); assertThat(((ETypes) root).getEString()).isNull(); } @Test public void testIntValues() throws IOException { JsonNode expected = mapper.createObjectNode().put("eClass", "http://www.emfjson.org/jackson/model#//ETypes") .put("eInt", 2).set("eInts", mapper.createArrayNode().add(2).add(4).add(7)); Resource resource = resourceSet.createResource(URI.createURI("tests/test.json")); ETypes valueObject = ModelFactory.eINSTANCE.createETypes(); valueObject.setEInt(2); valueObject.getEInts().add(2); valueObject.getEInts().add(4); valueObject.getEInts().add(7); resource.getContents().add(valueObject); assertEquals(expected, mapper.valueToTree(resource)); } @Test public void testLoadIntValues() throws IOException { JsonNode data = mapper.createObjectNode().put("eClass", "http://www.emfjson.org/jackson/model#//ETypes") .put("eInt", 2).set("eInts", mapper.createArrayNode().add(2).add(4).add(7)); Resource resource = resourceSet.createResource(URI.createURI("tests/test.json")); resource.load(new ByteArrayInputStream(mapper.writeValueAsBytes(data)), null); assertEquals(1, resource.getContents().size()); EObject root = resource.getContents().get(0); assertEquals(ModelPackage.Literals.ETYPES, root.eClass()); assertEquals(2, ((ETypes) root).getEInt()); List<Integer> ints = ((ETypes) root).getEInts(); assertEquals(3, ints.size()); assertTrue(2 == ints.get(0)); assertTrue(4 == ints.get(1)); assertTrue(7 == ints.get(2)); } @Test public void testBooleanValues() throws IOException { JsonNode expected = mapper.createObjectNode().put("eClass", "http://www.emfjson.org/jackson/model#//ETypes") .put("eBoolean", true).set("eBooleans", mapper.createArrayNode().add(false).add(true)); Resource resource = resourceSet.createResource(URI.createURI("tests/test.json")); ETypes valueObject = ModelFactory.eINSTANCE.createETypes(); valueObject.setEBoolean(true); valueObject.getEBooleans().add(false); valueObject.getEBooleans().add(true); resource.getContents().add(valueObject); assertEquals(expected, mapper.valueToTree(resource)); } @Test public void testDateValue() throws IOException { Calendar calendar = Calendar.getInstance(); calendar.set(2020, Calendar.OCTOBER, 10); assertNotNull(mapper.getDateFormat()); JsonNode expected = mapper.createObjectNode().put("eClass", "http://www.emfjson.org/jackson/model#//ETypes") .put("eDate", mapper.getDateFormat().format(calendar.getTime())); Resource resource = resourceSet.createResource(URI.createURI("tests/test.json")); ETypes valueObject = ModelFactory.eINSTANCE.createETypes(); Date value = calendar.getTime(); valueObject.setEDate(value); resource.getContents().add(valueObject); assertEquals(expected, mapper.valueToTree(resource)); } @Test public void testLoadDateValue() throws IOException { JsonNode data = mapper.createObjectNode().put("eClass", "http://www.emfjson.org/jackson/model#//ETypes") .put("eDate", "2011-10-10T00:00:00"); Date value = (Date) EcoreUtil.createFromString(EcorePackage.eINSTANCE.getEDate(), "2011-10-10T00:00:00"); Resource resource = resourceSet.createResource(URI.createURI("tests/test.json")); resource.load(new ByteArrayInputStream(mapper.writeValueAsBytes(data)), null); assertEquals(1, resource.getContents().size()); ETypes root = (ETypes) resource.getContents().get(0); assertEquals(value, root.getEDate()); } @Test public void testBigIntegerValue() throws IOException { Resource resource = resourceSet.createResource(URI.createURI("tests/test.json")); ETypes valueObject = ModelFactory.eINSTANCE.createETypes(); valueObject.setEBigInteger(new BigInteger("15")); resource.getContents().add(valueObject); JsonNode result = mapper.valueToTree(resource); assertEquals(new BigInteger("15"), result.get("eBigInteger").bigIntegerValue()); } @Test public void testLoadBigIntegerValue() throws IOException { JsonNode data = mapper.createObjectNode().put("eClass", "http://www.emfjson.org/jackson/model#//ETypes") .put("eBigInteger", 15); Resource resource = resourceSet.createResource(URI.createURI("tests/test.json")); resource.load(new ByteArrayInputStream(mapper.writeValueAsBytes(data)), null); assertEquals(1, resource.getContents().size()); EObject root = resource.getContents().get(0); assertEquals(ModelPackage.Literals.ETYPES, root.eClass()); BigInteger value = ((ETypes) root).getEBigInteger(); assertEquals(new BigInteger("15"), value); } @Test public void testByteValue() throws IOException { JsonNode expected = mapper.createObjectNode().put("eClass", "http://www.emfjson.org/jackson/model#//ETypes") .put("eByte", 101); Resource resource = resourceSet.createResource(URI.createURI("tests/test.json")); ETypes valueObject = ModelFactory.eINSTANCE.createETypes(); byte b = 101; valueObject.setEByte(b); resource.getContents().add(valueObject); assertEquals(expected, mapper.valueToTree(resource)); } @Test public void testBigDecimalValue() throws IOException { Resource resource = resourceSet.createResource(URI.createURI("tests/test.json")); ETypes valueObject = ModelFactory.eINSTANCE.createETypes(); valueObject.setEBigDecimal(new BigDecimal(1.5)); resource.getContents().add(valueObject); JsonNode result = mapper.valueToTree(resource); assertEquals(new BigDecimal(1.5), result.get("eBigDecimal").decimalValue()); } @Test public void testLoadBigDecimalValue() throws IOException { JsonNode data = mapper.createObjectNode().put("eClass", "http://www.emfjson.org/jackson/model#//ETypes") .put("eBigDecimal", 1.5); Resource resource = resourceSet.createResource(URI.createURI("tests/test.json")); resource.load(new ByteArrayInputStream(mapper.writeValueAsBytes(data)), null); assertEquals(1, resource.getContents().size()); EObject root = resource.getContents().get(0); assertEquals(ModelPackage.Literals.ETYPES, root.eClass()); BigDecimal value = ((ETypes) root).getEBigDecimal(); assertEquals(new BigDecimal(1.5), value); } }