/* * 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 04. October 2004 by Joe Walnes */ package com.thoughtworks.acceptance; import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.DataHolder; import com.thoughtworks.xstream.converters.MarshallingContext; import com.thoughtworks.xstream.converters.UnmarshallingContext; import com.thoughtworks.xstream.io.HierarchicalStreamReader; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; import com.thoughtworks.xstream.io.xml.PrettyPrintWriter; import com.thoughtworks.xstream.io.xml.XppReader; import java.io.StringReader; import java.io.StringWriter; public class DataHolderTest extends AbstractAcceptanceTest { class StringWithPrefixConverter implements Converter { public boolean canConvert(Class type) { return type == String.class; } public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) { String prefix = (String) context.get("prefix"); if (prefix != null) { writer.addAttribute("prefix", prefix); } writer.setValue(source.toString()); } public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { context.put("saw-this", reader.getAttribute("can-you-see-me")); return reader.getValue(); } } public void testCanBePassedInToMarshallerExternally() { // setup xstream.registerConverter(new StringWithPrefixConverter()); StringWriter writer = new StringWriter(); DataHolder dataHolder = xstream.newDataHolder(); // execute dataHolder.put("prefix", "additional stuff"); xstream.marshal("something", new PrettyPrintWriter(writer), dataHolder); // verify String expected = "<string prefix=\"additional stuff\">something</string>"; assertEquals(expected, writer.toString()); } public void testCanBePassedInToUnmarshallerExternally() { // setup xstream.registerConverter(new StringWithPrefixConverter()); DataHolder dataHolder = xstream.newDataHolder(); // execute String xml = "<string can-you-see-me=\"yes\">something</string>"; Object result = xstream.unmarshal(new XppReader(new StringReader(xml)), null, dataHolder); // verify assertEquals("something", result); assertEquals("yes", dataHolder.get("saw-this")); } }