/* * Copyright (C) 2004 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 03. April 2004 by Joe Walnes */ package com.thoughtworks.xstream.core; import com.thoughtworks.acceptance.AbstractAcceptanceTest; import com.thoughtworks.acceptance.objects.StandardObject; import com.thoughtworks.xstream.XStream; import java.util.ArrayList; import java.util.List; public class ReferenceByXPathMarshallingStrategyTest extends AbstractAcceptanceTest { protected void setUp() throws Exception { super.setUp(); xstream.alias("thing", Thing.class); } public static class Thing extends StandardObject { private String name; public Thing() { } public Thing(String name) { this.name = name; } } public void testStoresReferencesUsingRelativeXPath() { xstream.setMode(XStream.XPATH_RELATIVE_REFERENCES); Thing a = new Thing("a"); Thing b = new Thing("b"); Thing c = b; List list = new ArrayList(); list.add(a); list.add(b); list.add(c); String expected = "" + "<list>\n" + " <thing>\n" + " <name>a</name>\n" + " </thing>\n" + " <thing>\n" + " <name>b</name>\n" + " </thing>\n" + " <thing reference=\"../thing[2]\"/>\n" + // xpath "</list>"; assertBothWays(list, expected); } public void testStoresReferencesUsingAbsoluteXPath() { xstream.setMode(XStream.XPATH_ABSOLUTE_REFERENCES); Thing a = new Thing("a"); Thing b = new Thing("b"); Thing c = b; List list = new ArrayList(); list.add(a); list.add(b); list.add(c); String expected = "" + "<list>\n" + " <thing>\n" + " <name>a</name>\n" + " </thing>\n" + " <thing>\n" + " <name>b</name>\n" + " </thing>\n" + " <thing reference=\"/list/thing[2]\"/>\n" + // xpath "</list>"; assertBothWays(list, expected); } }