/* * Created on Jun 6, 2006 */ package com.thoughtworks.xstream.converters.reflection; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.io.StringReader; import java.io.StringWriter; import com.thoughtworks.acceptance.AbstractAcceptanceTest; public class SerializableConverterTest extends AbstractAcceptanceTest { public static class Child implements Serializable { private int i = 3; public Child(int i) { this.i = i; } public int getI() { return i; } private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); } private void writeObject(ObjectOutputStream out) throws IOException { out.defaultWriteObject(); } } public static class Parent implements Serializable { private String name; private transient Child child; public Parent(String name, Child child) { this.name = name; this.child = child; } public Child getChild() { return child; } public String getName() { return name; } private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException { this.child = (Child) in.readObject(); in.defaultReadObject(); } private void writeObject(ObjectOutputStream out) throws IOException { out.writeObject(this.child); out.defaultWriteObject(); } } public void testObjectInputStream() throws Exception { xstream.alias("parent", Parent.class); xstream.alias("child", Child.class); String sourceXml = "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " 1\n" + " \n" + " \n" + " \n" + " \n" + " ze-name\n" + " \n" + " \n" + " \n" + ""; ObjectInputStream objectInputStream = xstream.createObjectInputStream(new StringReader( sourceXml)); Parent parent = (Parent) objectInputStream.readObject(); assertEquals("ze-name", parent.getName()); assertEquals(1, parent.getChild().getI()); } public void testObjectOutputStream() throws Exception { xstream.alias("parent", Parent.class); xstream.alias("child", Child.class); String expectedXml = "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " 1\n" + " \n" + " \n" + " \n" + " \n" + " ze-name\n" + " \n" + " \n" + " \n" + ""; Parent parent = new Parent("ze-name", new Child(1)); StringWriter stringWriter = new StringWriter(); ObjectOutputStream os = xstream.createObjectOutputStream(stringWriter); os.writeObject(parent); os.close(); String actualXml = stringWriter.getBuffer().toString(); assertEquals(expectedXml, actualXml); xstream.createObjectInputStream(new StringReader(actualXml)); } public void testToXML() { xstream.alias("parent", Parent.class); xstream.alias("child", Child.class); String expected = "\n" + " \n" + " \n" + " \n" + " \n" + " 1\n" + " \n" + " \n" + " \n" + " \n" + " ze-name\n" + " \n" + " \n" + ""; Parent parent = new Parent("ze-name", new Child(1)); assertBothWays(parent, expected); } }