package com.thoughtworks.acceptance;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.AttributeConverter;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
/**
* @author Paul Hammant and Ian Cartwright
*/
public class AttributeAliasTest extends AbstractAcceptanceTest {
public void testSerializationOfAttributePossibleWithAliasAndConverter() {
One one = new One();
one.two = new Two();
one.id = new ID("hullo");
xstream.attributeAlias("id", ID.class, new MyAttributeConverter());
assertEquals(
"\n" +
" \n" +
"",
xstream.toXML(one));
}
public void testDeSerializationOfAttributePossibleWithAliasAndConverter() {
xstream.attributeAlias("id", ID.class, new MyAttributeConverter());
One one = (One) xstream.fromXML(
"\n" +
" \n" +
"");
assertEquals(one.id.value, "hullo");
assertNotNull(one.two);
}
public static class One implements HasID {
public ID id;
public Two two;
public void setID(ID id) {
this.id = id;
}
}
public static interface HasID {
void setID(ID id);
}
public static class Two {}
public static class ID {
public ID(String value) {
this.value = value;
}
public String value;
}
private static class MyAttributeConverter implements AttributeConverter {
public boolean canConvert(Class type) {
return type.equals(ID.class);
}
public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
writer.addAttribute("id", ((ID) source).value);
}
public void unmarshal(Object instance, HierarchicalStreamReader reader) {
((AttributeAliasTest.HasID) instance).setID(new ID(reader.getAttribute("id")));
}
}
}