/******************************************************************************* * Copyright (c) 2011 The University of York. * 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: * Louis Rose - initial API and implementation ******************************************************************************/ package simulator.persistence; import static org.junit.Assert.*; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EcoreFactory; import org.eclipse.emf.ecore.EcorePackage; import org.junit.Test; public class SerializableEObjectTests { private final EClass clazz = createEClass(); @Test public void objectCanBeSerialisedAndDeserialised() throws Exception { final SerializableEObject<EClass> reconstituted = serializeAndDeserialize(new SerializableEObject<EClass>(clazz)); assertEquals("Foo", reconstituted.getEObject(EcorePackage.eINSTANCE).getName()); } @Test public void changesToObjectAreSerialised() throws Exception { final SerializableEObject<EClass> serializableClass = new SerializableEObject<EClass>(clazz); serializableClass.getEObject(EcorePackage.eINSTANCE).setName("Bar"); final SerializableEObject<EClass> reconstituted = serializeAndDeserialize(serializableClass); assertEquals("Bar", reconstituted.getEObject(EcorePackage.eINSTANCE).getName()); } private static EClass createEClass() { final EClass clazz = EcoreFactory.eINSTANCE.createEClass(); clazz.setName("Foo"); return clazz; } @SuppressWarnings("unchecked") private static <T extends Serializable> T serializeAndDeserialize(T object) throws IOException, ClassNotFoundException { return (T)deserialize(serialize(object)); } private static <T> byte[] serialize(T object) throws IOException { final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); new ObjectOutputStream(byteArrayOutputStream).writeObject(object); return byteArrayOutputStream.toByteArray(); } private static Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException { return new ObjectInputStream(new ByteArrayInputStream(bytes)).readObject(); } }