/*
* Copyright (C) 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 01. April 2006 by Joerg Schaible
*/
package com.thoughtworks.acceptance;
import com.thoughtworks.acceptance.objects.OpenSourceSoftware;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.XStreamer;
import com.thoughtworks.xstream.converters.ConversionException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.ObjectStreamException;
import java.io.StringReader;
import java.io.StringWriter;
import java.net.URL;
/**
* @author Jörg Schaible
*/
public class XStreamerTest extends AbstractAcceptanceTest {
private Transformer transformer;
protected void setUp() throws Exception {
super.setUp();
final TransformerFactory transformerFactory = TransformerFactory.newInstance();
final URL url = getClass().getResource("XStreamer.xsl");
transformer = transformerFactory.newTransformer(new StreamSource(url.openStream()));
}
final static class ImplicitXStreamContainer {
private XStream myXStream;
}
public void testDetectsSelfMarshalling() {
ImplicitXStreamContainer c = new ImplicitXStreamContainer();
c.myXStream = xstream;
try {
xstream.toXML(c);
fail("Thrown " + ConversionException.class.getName() + " expected");
} catch (final ConversionException e) {
}
}
public void testCanConvertAnotherInstance() throws TransformerException {
XStream x = createXStream();
final String xml = normalizedXStreamXML(xstream.toXML(x));
final XStream serialized = (XStream)xstream.fromXML(xml);
final String xmlSerialized = normalizedXStreamXML(xstream.toXML(serialized));
assertEquals(xml, xmlSerialized);
}
public void testCanBeUsedAfterSerialization() throws TransformerException {
xstream = (XStream)xstream.fromXML(xstream.toXML(createXStream()));
testCanConvertAnotherInstance();
}
public void testCanSerializeSelfContained() throws ClassNotFoundException, ObjectStreamException {
final OpenSourceSoftware oos = new OpenSourceSoftware("Walnes", "XStream", "BSD");
xstream.alias("software", OpenSourceSoftware.class);
String xml = new XStreamer().toXML(xstream, oos);
assertEquals(oos, new XStreamer().fromXML(xml));
}
private String normalizedXStreamXML(String xml) throws TransformerException {
final StringWriter writer = new StringWriter();
transformer.transform(new StreamSource(new StringReader(xml)), new StreamResult(writer));
return writer.toString();
}
}