/*
* Copyright (C) 2004, 2005 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 07. May 2004 by Joe Walnes
*/
package com.thoughtworks.acceptance;
public abstract class AbstractCircularReferenceTest extends AbstractAcceptanceTest {
protected void setUp() throws Exception {
super.setUp();
xstream.alias("person", Person.class);
}
public static class Person {
public String firstname;
public Person likes;
public Person loathes;
public Person() {
}
public Person(String name) {
this.firstname = name;
}
}
public void testCircularReference() {
Person bob = new Person("bob");
Person jane = new Person("jane");
bob.likes = jane;
jane.likes = bob;
String xml = xstream.toXML(bob);
Person bobOut = (Person) xstream.fromXML(xml);
assertEquals("bob", bobOut.firstname);
Person janeOut = bobOut.likes;
assertEquals("jane", janeOut.firstname);
assertSame(bobOut.likes, janeOut);
assertSame(bobOut, janeOut.likes);
}
public void testCircularReferenceToSelf() {
Person bob = new Person("bob");
bob.likes = bob;
String xml = xstream.toXML(bob);
Person bobOut = (Person) xstream.fromXML(xml);
assertEquals("bob", bobOut.firstname);
assertSame(bobOut, bobOut.likes);
}
public void testDeepCircularReferences() {
Person bob = new Person("bob");
Person jane = new Person("jane");
Person ann = new Person("ann");
Person poo = new Person("poo");
bob.likes = jane;
bob.loathes = ann;
ann.likes = jane;
ann.loathes = poo;
poo.likes = jane;
poo.loathes = ann;
jane.likes = jane;
jane.loathes = bob;
String xml = xstream.toXML(bob);
Person bobOut = (Person) xstream.fromXML(xml);
Person janeOut = bobOut.likes;
Person annOut = bobOut.loathes;
Person pooOut = annOut.loathes;
assertEquals("bob", bobOut.firstname);
assertEquals("jane", janeOut.firstname);
assertEquals("ann", annOut.firstname);
assertEquals("poo", pooOut.firstname);
assertSame(janeOut, bobOut.likes);
assertSame(annOut, bobOut.loathes);
assertSame(janeOut, annOut.likes);
assertSame(pooOut, annOut.loathes);
assertSame(janeOut, pooOut.likes);
assertSame(annOut, pooOut.loathes);
assertSame(janeOut, janeOut.likes);
assertSame(bobOut, janeOut.loathes);
}
}