/* * Copyright (C) 2005, 2006 Joe Walnes. * Copyright (C) 2006, 2007 XStream Committers. * All rights reserved. * * The software in this package is published under the terms of the BSD * style license a copy of which has been included with this distribution in * the LICENSE.txt file. * * Created on 31. January 2005 by Joe Walnes */ package com.thoughtworks.acceptance; public class InnerClassesTest extends AbstractAcceptanceTest { public void testSerializedInnerClassMaintainsReferenceToOuterClass() { Outer outer = new Outer("THE-OUTER-NAME", "THE-INNER-NAME"); Outer.Inner inner = outer.getInner(); assertEquals("Hello from THE-INNER-NAME (inside THE-OUTER-NAME)", inner.getMessage()); String xml = xstream.toXML(inner); String expectedXml = "" + "<com.thoughtworks.acceptance.Outer_-Inner>\n" + " <innerName>THE-INNER-NAME</innerName>\n" + " <outer-class>\n" + " <inner reference=\"../..\"/>\n" + " <outerName>THE-OUTER-NAME</outerName>\n" + " </outer-class>\n" + "</com.thoughtworks.acceptance.Outer_-Inner>"; assertEquals(expectedXml, xml); Outer.Inner newInner = (Outer.Inner) xstream.fromXML(xml); assertEquals("Hello from THE-INNER-NAME (inside THE-OUTER-NAME)", newInner.getMessage()); } } class Outer { private Inner inner; private String outerName; public Outer(String outerName, String innerName) { inner = new Inner(innerName); this.outerName = outerName; } public Inner getInner() { return inner; } public class Inner { private String innerName; public Inner(String innerName) { this.innerName = innerName; } public String getMessage() { return "Hello from " + innerName + " (inside " + outerName + ")"; } } }