1
package org.simpleframework.xml.convert;
3
import java.io.StringWriter;
4
import java.util.ArrayList;
7
import org.simpleframework.xml.ElementList;
8
import org.simpleframework.xml.Root;
9
import org.simpleframework.xml.ValidationTestCase;
10
import org.simpleframework.xml.convert.ExampleConverters.Cat;
11
import org.simpleframework.xml.convert.ExampleConverters.CatConverter;
12
import org.simpleframework.xml.convert.ExampleConverters.Dog;
13
import org.simpleframework.xml.convert.ExampleConverters.DogConverter;
14
import org.simpleframework.xml.convert.ExampleConverters.Pet;
15
import org.simpleframework.xml.core.Persister;
16
import org.simpleframework.xml.strategy.CycleStrategy;
18
public class RegistryCycleStrategyTest extends ValidationTestCase {
21
public static class PetBucket {
22
@ElementList(inline=true)
23
private List<Pet> list = new ArrayList<Pet>();
24
public void addPet(Pet pet){
27
public List<Pet> getPets(){
32
public void testCycle() throws Exception {
33
Registry registry = new Registry();
34
CycleStrategy inner = new CycleStrategy();
35
RegistryStrategy strategy = new RegistryStrategy(registry, inner);
36
Persister persister = new Persister(strategy);
37
PetBucket bucket = new PetBucket();
38
StringWriter writer = new StringWriter();
40
registry.bind(Cat.class, CatConverter.class);
41
registry.bind(Dog.class, DogConverter.class);
43
Pet kitty = new Cat("Kitty", 10);
44
Pet lassie = new Dog("Lassie", 7);
45
Pet ben = new Dog("Ben", 8);
48
bucket.addPet(lassie);
50
bucket.addPet(lassie);
53
persister.write(bucket, writer);
54
persister.write(bucket, System.out);
56
String text = writer.toString();
57
PetBucket copy = persister.read(PetBucket.class, text);
59
assertEquals(copy.getPets().get(0), bucket.getPets().get(0));
60
assertEquals(copy.getPets().get(1), bucket.getPets().get(1));
61
assertEquals(copy.getPets().get(2), bucket.getPets().get(2));
62
assertEquals(copy.getPets().get(3), bucket.getPets().get(3));
63
assertEquals(copy.getPets().get(4), bucket.getPets().get(4));
65
assertTrue(copy.getPets().get(0) == copy.getPets().get(4)); // cycle
66
assertTrue(copy.getPets().get(1) == copy.getPets().get(3)); // cycle
68
assertElementExists(text, "/petBucket");
69
assertElementExists(text, "/petBucket/pet");
70
assertElementHasAttribute(text, "/petBucket", "id", "0");
71
assertElementHasAttribute(text, "/petBucket/pet[0]", "id", "1");
72
assertElementHasAttribute(text, "/petBucket/pet[1]", "id", "2");
73
assertElementHasAttribute(text, "/petBucket/pet[2]", "id", "3");
74
assertElementHasAttribute(text, "/petBucket/pet[3]", "reference", "2");
75
assertElementHasAttribute(text, "/petBucket/pet[4]", "reference", "1");
76
assertElementHasValue(text, "/petBucket/pet[0]/name", "Kitty");
77
assertElementHasValue(text, "/petBucket/pet[0]/age", "10");
78
assertElementHasAttribute(text, "/petBucket/pet[0]", "class", Cat.class.getName());
79
assertElementHasAttribute(text, "/petBucket/pet[1]", "class", Dog.class.getName());