package org.simpleframework.xml.convert; import java.io.StringWriter; import java.util.ArrayList; import java.util.List; import org.simpleframework.xml.Element; import org.simpleframework.xml.ElementList; import org.simpleframework.xml.Root; import org.simpleframework.xml.ValidationTestCase; import org.simpleframework.xml.convert.ExampleConverters.Entry; import org.simpleframework.xml.convert.ExampleConverters.OtherEntryConverter; import org.simpleframework.xml.core.Persister; import org.simpleframework.xml.strategy.CycleStrategy; public class AnnotationCycleStrategyTest extends ValidationTestCase { @Root public static class EntryListExample { @ElementList(inline=true) private List<Entry> list = new ArrayList<Entry>(); @Element @Convert(OtherEntryConverter.class) private Entry primary; public Entry getPrimary() { return primary; } public void setPrimary(Entry primary) { this.primary = primary; } public void addEntry(Entry entry){ list.add(entry); } public List<Entry> getEntries(){ return list; } } public void testCycle() throws Exception { CycleStrategy inner = new CycleStrategy(); AnnotationStrategy strategy = new AnnotationStrategy(inner); Persister persister = new Persister(strategy); EntryListExample list = new EntryListExample(); StringWriter writer = new StringWriter(); Entry a = new Entry("A", "a"); Entry b = new Entry("B", "b"); Entry c = new Entry("C", "c"); Entry primary = new Entry("PRIMARY", "primary"); list.setPrimary(primary); list.addEntry(a); list.addEntry(b); list.addEntry(c); list.addEntry(b); list.addEntry(c); persister.write(list, writer); persister.write(list, System.out); String text = writer.toString(); EntryListExample copy = persister.read(EntryListExample.class, text); assertEquals(copy.getEntries().get(0), list.getEntries().get(0)); assertEquals(copy.getEntries().get(1), list.getEntries().get(1)); assertEquals(copy.getEntries().get(2), list.getEntries().get(2)); assertEquals(copy.getEntries().get(3), list.getEntries().get(3)); assertEquals(copy.getEntries().get(4), list.getEntries().get(4)); assertTrue(copy.getEntries().get(2) == copy.getEntries().get(4)); // cycle assertTrue(copy.getEntries().get(1) == copy.getEntries().get(3)); // cycle assertElementExists(text, "/entryListExample"); assertElementExists(text, "/entryListExample/entry[1]"); assertElementExists(text, "/entryListExample/entry[1]/name"); assertElementExists(text, "/entryListExample/entry[1]/value"); assertElementHasValue(text, "/entryListExample/entry[1]/name", "A"); assertElementHasValue(text, "/entryListExample/entry[1]/value", "a"); assertElementExists(text, "/entryListExample/entry[2]/name"); assertElementExists(text, "/entryListExample/entry[2]/value"); assertElementHasValue(text, "/entryListExample/entry[2]/name", "B"); assertElementHasValue(text, "/entryListExample/entry[2]/value", "b"); assertElementExists(text, "/entryListExample/entry[3]/name"); assertElementExists(text, "/entryListExample/entry[3]/value"); assertElementHasValue(text, "/entryListExample/entry[3]/name", "C"); assertElementHasValue(text, "/entryListExample/entry[3]/value", "c"); assertElementExists(text, "/entryListExample/entry[4]"); assertElementExists(text, "/entryListExample/entry[5]"); assertElementHasAttribute(text, "/entryListExample/entry[4]", "reference", "2"); // cycle assertElementHasAttribute(text, "/entryListExample/entry[5]", "reference", "3"); // cycle assertElementExists(text, "/entryListExample/primary"); assertElementHasAttribute(text, "/entryListExample/primary", "name", "PRIMARY"); // other converter assertElementHasAttribute(text, "/entryListExample/primary", "value", "primary"); // other converter } }