package org.simpleframework.xml.convert;
import java.io.StringWriter;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Namespace;
import org.simpleframework.xml.Root;
import org.simpleframework.xml.ValidationTestCase;
import org.simpleframework.xml.convert.ExampleConverters.Cat;
import org.simpleframework.xml.convert.ExampleConverters.CatConverter;
import org.simpleframework.xml.convert.ExampleConverters.Dog;
import org.simpleframework.xml.convert.ExampleConverters.DogConverter;
import org.simpleframework.xml.convert.ExampleConverters.Pet;
import org.simpleframework.xml.core.Persister;
import org.simpleframework.xml.strategy.Strategy;
import org.simpleframework.xml.util.Dictionary;
public class RegistryStrategyTest extends ValidationTestCase {
@Root
@Namespace(prefix="a", reference="http://domain/a")
private static class PetShop {
@ElementList
@Namespace(prefix="b", reference="http://domain/b")
private Dictionary<Pet> pets;
public PetShop(){
this.pets = new Dictionary<Pet>();
}
public void addPet(Pet pet) {
pets.add(pet);
}
public Pet getPet(String name){
return pets.get(name);
}
}
public void testConverter() throws Exception {
Registry registry = new Registry();
Strategy interceptor = new RegistryStrategy(registry);
Persister persister = new Persister(interceptor);
StringWriter writer = new StringWriter();
PetShop shop = new PetShop();
registry.bind(Dog.class, DogConverter.class)
.bind(Cat.class, CatConverter.class);
shop.addPet(new Dog("Lassie", 10));
shop.addPet(new Cat("Kitty", 2));
persister.write(shop, writer);
persister.write(shop, System.out);
String text = writer.toString();
PetShop newShop = persister.read(PetShop.class, text);
assertEquals("Lassie", newShop.getPet("Lassie").getName());
assertEquals(10, newShop.getPet("Lassie").getAge());
assertEquals("Kitty", newShop.getPet("Kitty").getName());
assertEquals(2, newShop.getPet("Kitty").getAge());
assertElementExists(text, "/petShop");
assertElementExists(text, "/petShop/pets");
assertElementExists(text, "/petShop/pets/pet[1]");
assertElementExists(text, "/petShop/pets/pet[2]");
assertElementDoesNotExist(text, "/petShop/pets/pet[3]");
assertElementHasNamespace(text, "/petShop", "http://domain/a");
assertElementHasNamespace(text, "/petShop/pets", "http://domain/b");
assertElementHasNamespace(text, "/petShop/pets/pet[1]", null);
assertElementHasAttribute(text, "/petShop/pets/pet[1]", "name", "Lassie");
assertElementHasAttribute(text, "/petShop/pets/pet[1]", "age", "10");
assertElementHasValue(text, "/petShop/pets/pet[2]/name", "Kitty");
assertElementHasValue(text, "/petShop/pets/pet[2]/age", "2");
}
}