package org.simpleframework.xml.strategy; import java.io.StringReader; import java.lang.annotation.Annotation; import java.util.HashMap; import java.util.Map; import junit.framework.TestCase; import org.simpleframework.xml.stream.InputNode; import org.simpleframework.xml.stream.NodeBuilder; import org.simpleframework.xml.stream.NodeMap; public class CycleStrategyTest extends TestCase { private static final String ARRAY = "<array id='1' length='12' class='java.lang.String'/>"; private static final String OBJECT = "<array id='1' class='java.lang.String'/>"; private static final String REFERENCE = "<array reference='1' class='java.lang.String'/>"; private static class Entry implements Type { private final Class type; public Entry(Class type) { this.type = type; } public <T extends Annotation> T getAnnotation(Class<T> type) { return null; } public Class getType() { return type; } } public void testArray() throws Exception { Map map = new HashMap(); StringReader reader = new StringReader(ARRAY); CycleStrategy strategy = new CycleStrategy(); InputNode event = NodeBuilder.read(reader); NodeMap attributes = event.getAttributes(); Value value = strategy.read(new Entry(String[].class), attributes, map); assertEquals(12, value.getLength()); assertEquals(null, value.getValue()); assertEquals(String.class, value.getType()); assertEquals(false, value.isReference()); } public void testObject() throws Exception { Map map = new HashMap(); StringReader reader = new StringReader(OBJECT); CycleStrategy strategy = new CycleStrategy(); InputNode event = NodeBuilder.read(reader); NodeMap attributes = event.getAttributes(); Value value = strategy.read(new Entry(String.class), attributes, map); assertEquals(0, value.getLength()); assertEquals(null, value.getValue()); assertEquals(String.class, value.getType()); assertEquals(false, value.isReference()); } public void testReference() throws Exception { StringReader reader = new StringReader(REFERENCE); Contract contract = new Contract("id", "reference", "class", "length"); ReadGraph graph = new ReadGraph(contract, new Loader()); InputNode event = NodeBuilder.read(reader); NodeMap attributes = event.getAttributes(); graph.put("1", "first text"); graph.put("2", "second text"); graph.put("3", "third text"); Value value = graph.read(new Entry(String.class), attributes); assertEquals(0, value.getLength()); assertEquals("first text", value.getValue()); assertEquals(String.class, value.getType()); assertEquals(true, value.isReference()); } }