package cyrille.xstream;
import java.util.Arrays;
import java.util.List;
import javax.xml.parsers.DocumentBuilderFactory;
import junit.framework.TestCase;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.w3c.dom.Document;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.xml.DomReader;
import com.thoughtworks.xstream.io.xml.DomWriter;
public class DomWriterTest extends TestCase {
public static class Person {
String firstName;
public Person() {
super();
}
public Person(String firstName) {
super();
this.firstName = firstName;
}
public String getFirstName() {
return this.firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@Override
public int hashCode() {
return new HashCodeBuilder().append(this.firstName).toHashCode();
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
Person other = (Person) obj;
return new EqualsBuilder().append(this.firstName, other.firstName).isEquals();
}
@Override
public String toString() {
return new ToStringBuilder(this).append("firstName", this.firstName).toString();
}
}
public void testMarshal() throws Exception {
List<Person> sourcePersons = Arrays.asList(new Person[] { new Person("peter"), new Person("John") });
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
HierarchicalStreamWriter writer = new DomWriter(document);
XStream xstream = new XStream();
xstream.marshal(sourcePersons, writer);
HierarchicalStreamReader reader = new DomReader(document);
List<Person> actualPersons = (List) xstream.unmarshal(reader);
assertEquals(2, actualPersons.size());
assertEquals(sourcePersons.get(0), actualPersons.get(0));
assertEquals(sourcePersons.get(1), actualPersons.get(1));
}
}