package org.simpleframework.xml.strategy; import java.io.StringWriter; import org.simpleframework.xml.Element; import org.simpleframework.xml.Root; import org.simpleframework.xml.core.Persister; import org.simpleframework.xml.strategy.CycleStrategy; import org.simpleframework.xml.ValidationTestCase; public class PrimitiveCycleTest extends ValidationTestCase { private static final String SOURCE = "<?xml version=\"1.0\"?>\n"+ "<test>\n"+ " <primitive>\n"+ " <boolean>true</boolean>\r\n"+ " <byte>16</byte> \n\r"+ " <short>120</short> \n\r"+ " <int>1234</int>\n"+ " <float>1234.56</float> \n\r"+ " <long>1234567</long>\n"+ " <double>1234567.89</double> \n\r"+ " </primitive>\n"+ " <object>\n"+ " <Boolean>true</Boolean>\r\n"+ " <Byte>16</Byte> \n\r"+ " <Short>120</Short> \n\r"+ " <Integer>1234</Integer>\n"+ " <Float>1234.56</Float> \n\r"+ " <Long>1234567</Long>\n"+ " <Double>1234567.89</Double> \n\r"+ " <String>text value</String>\n\r"+ " <Enum>TWO</Enum>\n"+ " </object>\n\r"+ "</test>"; @Root(name="test") private static class PrimitiveCycleEntry { @Element(name="primitive") private PrimitiveEntry primitive; @Element(name="object") private ObjectEntry object; } private static class PrimitiveEntry { @Element(name="boolean") private boolean booleanValue; @Element(name="byte") private byte byteValue; @Element(name="short") private short shortValue; @Element(name="int") private int intValue; @Element(name="float") private float floatValue; @Element(name="long") private long longValue; @Element(name="double") private double doubleValue; } private static class ObjectEntry { @Element(name="Boolean") private Boolean booleanValue; @Element(name="Byte") private Byte byteValue; @Element(name="Short") private Short shortValue; @Element(name="Integer") private Integer intValue; @Element(name="Float") private Float floatValue; @Element(name="Long") private Long longValue; @Element(name="Double") private Double doubleValue; @Element(name="String") private String stringValue; @Element(name="Enum") private TestEnum enumValue; } private static enum TestEnum { ONE, TWO, THREE } @Root private static class StringReferenceExample { @Element private String a; @Element private String b; @Element private String c; public StringReferenceExample() { super(); } public StringReferenceExample(String a, String b, String c) { this.a = a; this.b = b; this.c = c; } } @Root private static class IntegerReferenceExample { @Element private Integer a; @Element private Integer b; @Element private Integer c; public IntegerReferenceExample() { super(); } public IntegerReferenceExample(Integer a, Integer b, Integer c) { this.a = a; this.b = b; this.c = c; } } private Persister persister; public void setUp() throws Exception { persister = new Persister(new CycleStrategy()); } public void testPrimitive() throws Exception { PrimitiveCycleEntry entry = persister.read(PrimitiveCycleEntry.class, SOURCE); assertEquals(entry.primitive.booleanValue, true); assertEquals(entry.primitive.byteValue, 16); assertEquals(entry.primitive.shortValue, 120); assertEquals(entry.primitive.intValue, 1234); assertEquals(entry.primitive.floatValue, 1234.56f); assertEquals(entry.primitive.longValue, 1234567l); assertEquals(entry.primitive.doubleValue, 1234567.89d); assertEquals(entry.object.booleanValue, Boolean.TRUE); assertEquals(entry.object.byteValue, new Byte("16")); assertEquals(entry.object.shortValue, new Short("120")); assertEquals(entry.object.intValue, new Integer(1234)); assertEquals(entry.object.floatValue, new Float(1234.56)); assertEquals(entry.object.longValue, new Long(1234567)); assertEquals(entry.object.doubleValue, new Double(1234567.89)); assertEquals(entry.object.stringValue, "text value"); assertEquals(entry.object.enumValue, TestEnum.TWO); StringWriter out = new StringWriter(); persister.write(entry, out); String text = out.toString(); assertElementHasAttribute(text, "/test", "id", "0"); assertElementHasAttribute(text, "/test/primitive", "id", "1"); assertElementHasAttribute(text, "/test/primitive/boolean", "id", "2"); assertElementHasAttribute(text, "/test/primitive/byte", "id", "3"); assertElementHasAttribute(text, "/test/primitive/short", "id", "4"); assertElementHasAttribute(text, "/test/primitive/int", "id", "5"); assertElementHasAttribute(text, "/test/primitive/float", "id", "6"); assertElementHasAttribute(text, "/test/primitive/long", "id", "7"); assertElementHasAttribute(text, "/test/primitive/double", "id", "8"); assertElementHasValue(text, "/test/primitive/boolean", "true"); assertElementHasValue(text, "/test/primitive/byte", "16"); assertElementHasValue(text, "/test/primitive/short", "120"); assertElementHasValue(text, "/test/primitive/int", "1234"); assertElementHasValue(text, "/test/primitive/float", "1234.56"); assertElementHasValue(text, "/test/primitive/long", "1234567"); assertElementHasValue(text, "/test/primitive/double", "1234567.89"); assertElementHasValue(text, "/test/object/Boolean", "true"); assertElementHasValue(text, "/test/object/Byte", "16"); assertElementHasValue(text, "/test/object/Short", "120"); assertElementHasValue(text, "/test/object/Integer", "1234"); assertElementHasValue(text, "/test/object/Float", "1234.56"); assertElementHasValue(text, "/test/object/Long", "1234567"); assertElementHasValue(text, "/test/object/Double", "1234567.89"); assertElementHasValue(text, "/test/object/String", "text value"); assertElementHasValue(text, "/test/object/Enum", "TWO"); validate(entry, persister); } public void testPrimitiveReference() throws Exception { StringReferenceExample example = new StringReferenceExample("a", "a", "a"); StringWriter out = new StringWriter(); persister.write(example, out); String text = out.toString(); assertElementHasAttribute(text, "/stringReferenceExample", "id", "0"); assertElementHasAttribute(text, "/stringReferenceExample/a", "id", "1"); assertElementHasAttribute(text, "/stringReferenceExample/b", "reference", "1"); assertElementHasAttribute(text, "/stringReferenceExample/c", "reference", "1"); validate(example, persister); example = new StringReferenceExample("a", "b", "a"); out = new StringWriter(); persister.write(example, out); text = out.toString(); assertElementHasAttribute(text, "/stringReferenceExample", "id", "0"); assertElementHasAttribute(text, "/stringReferenceExample/a", "id", "1"); assertElementHasAttribute(text, "/stringReferenceExample/b", "id", "2"); assertElementHasAttribute(text, "/stringReferenceExample/c", "reference", "1"); validate(example, persister); Integer one = new Integer(1); Integer two = new Integer(1); Integer three = new Integer(1); IntegerReferenceExample integers = new IntegerReferenceExample(one, two, three); out = new StringWriter(); persister.write(integers, out); text = out.toString(); assertElementHasAttribute(text, "/integerReferenceExample", "id", "0"); assertElementHasAttribute(text, "/integerReferenceExample/a", "id", "1"); assertElementHasAttribute(text, "/integerReferenceExample/b", "id", "2"); assertElementHasAttribute(text, "/integerReferenceExample/c", "id", "3"); validate(integers, persister); integers = new IntegerReferenceExample(one, one, two); out = new StringWriter(); persister.write(integers, out); text = out.toString(); assertElementHasAttribute(text, "/integerReferenceExample", "id", "0"); assertElementHasAttribute(text, "/integerReferenceExample/a", "id", "1"); assertElementHasAttribute(text, "/integerReferenceExample/b", "reference", "1"); assertElementHasAttribute(text, "/integerReferenceExample/c", "id", "2"); validate(integers, persister); } }