package org.simpleframework.xml.transform;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementArray;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;
import org.simpleframework.xml.ValidationTestCase;
import org.simpleframework.xml.core.Persister;
import org.simpleframework.xml.strategy.CycleStrategy;
public class PrimitiveArrayTransformTest extends ValidationTestCase {
@Root
public static class IntegerArrayExample {
@Attribute(required=false)
private int[] attribute;
@Element(required=false)
private int[] element;
@ElementList
private List<int[]> list;
@ElementArray
private int[][] array;
@Element
private NonPrimitive test;
@ElementList
private List<NonPrimitive> testList;
@ElementArray
private NonPrimitive[] testArray;
public IntegerArrayExample() {
super();
}
public IntegerArrayExample(int[] list) {
this.attribute = list;
this.element = list;
this.list = new ArrayList<int[]>();
this.list.add(list);
this.list.add(list);
this.array = new int[1][];
this.array[0] = list;
this.testList = new ArrayList<NonPrimitive>();
this.testList.add(null);
this.testList.add(null);
this.test = new NonPrimitive();
this.testArray = new NonPrimitive[1];
}
}
@Root
private static class NonPrimitive {
@Attribute
private String value = "text";
}
public void testRead() throws Exception {
ArrayTransform transform = new ArrayTransform(new IntegerTransform(), int.class);
int[] list = (int[])transform.read("1,2,3,4");
assertEquals(1, list[0]);
assertEquals(2, list[1]);
assertEquals(3, list[2]);
assertEquals(4, list[3]);
list = (int[])transform.read(" 123 ,\t\n "+
"1\n\r," +
"100, 23, \t32,\t 0\n,\n"+
"3\n\t");
assertEquals(123, list[0]);
assertEquals(1, list[1]);
assertEquals(100, list[2]);
assertEquals(23, list[3]);
assertEquals(32, list[4]);
assertEquals(0, list[5]);
assertEquals(3, list[6]);
}
public void testWrite() throws Exception {
ArrayTransform transform = new ArrayTransform(new IntegerTransform(), int.class);
String value = transform.write(new int[] { 1, 2, 3, 4});
assertEquals(value, "1, 2, 3, 4");
value = transform.write(new int[] {1, 0, 3, 4});
assertEquals(value, "1, 0, 3, 4");
}
public void testPersistence() throws Exception {
int[] list = new int[] { 1, 2, 3, 4 };
Persister persister = new Persister();
IntegerArrayExample example = new IntegerArrayExample(list);
StringWriter out = new StringWriter();
assertEquals(example.attribute[0], 1);
assertEquals(example.attribute[1], 2);
assertEquals(example.attribute[2], 3);
assertEquals(example.attribute[3], 4);
assertEquals(example.element[0], 1);
assertEquals(example.element[1], 2);
assertEquals(example.element[2], 3);
assertEquals(example.element[3], 4);
assertEquals(example.list.get(0)[0], 1);
assertEquals(example.list.get(0)[1], 2);
assertEquals(example.list.get(0)[2], 3);
assertEquals(example.list.get(0)[3], 4);
assertEquals(example.array[0][0], 1);
assertEquals(example.array[0][1], 2);
assertEquals(example.array[0][2], 3);
assertEquals(example.array[0][3], 4);
persister.write(example, out);
String text = out.toString();
System.out.println(text);
example = persister.read(IntegerArrayExample.class, text);
assertEquals(example.attribute[0], 1);
assertEquals(example.attribute[1], 2);
assertEquals(example.attribute[2], 3);
assertEquals(example.attribute[3], 4);
assertEquals(example.element[0], 1);
assertEquals(example.element[1], 2);
assertEquals(example.element[2], 3);
assertEquals(example.element[3], 4);
assertEquals(example.list.get(0)[0], 1);
assertEquals(example.list.get(0)[1], 2);
assertEquals(example.list.get(0)[2], 3);
assertEquals(example.list.get(0)[3], 4);
assertEquals(example.array[0][0], 1);
assertEquals(example.array[0][1], 2);
assertEquals(example.array[0][2], 3);
assertEquals(example.array[0][3], 4);
validate(example, persister);
example = new IntegerArrayExample(null);
out = new StringWriter();
persister.write(example, out);
text = out.toString();
validate(example, persister);
example = persister.read(IntegerArrayExample.class, text);
assertEquals(example.attribute, null);
assertEquals(example.element, null);
assertEquals(example.list.size(), 0);
assertEquals(example.array[0], null);
}
public void testCyclicPersistence() throws Exception {
int[] list = new int[] { 1, 2, 3, 4 };
CycleStrategy strategy = new CycleStrategy();
Persister persister = new Persister(strategy);
IntegerArrayExample example = new IntegerArrayExample(list);
StringWriter out = new StringWriter();
assertEquals(example.attribute[0], 1);
assertEquals(example.attribute[1], 2);
assertEquals(example.attribute[2], 3);
assertEquals(example.attribute[3], 4);
assertEquals(example.element[0], 1);
assertEquals(example.element[1], 2);
assertEquals(example.element[2], 3);
assertEquals(example.element[3], 4);
assertEquals(example.list.get(0)[0], 1);
assertEquals(example.list.get(0)[1], 2);
assertEquals(example.list.get(0)[2], 3);
assertEquals(example.list.get(0)[3], 4);
assertEquals(example.array[0][0], 1);
assertEquals(example.array[0][1], 2);
assertEquals(example.array[0][2], 3);
assertEquals(example.array[0][3], 4);
persister.write(example, out);
String text = out.toString();
assertElementHasAttribute(text, "/integerArrayExample", "id", "0");
assertElementHasAttribute(text, "/integerArrayExample/element", "id", "1");
assertElementHasAttribute(text, "/integerArrayExample/list", "id", "2");
assertElementHasAttribute(text, "/integerArrayExample/array", "id", "3");
assertElementHasAttribute(text, "/integerArrayExample/list/int", "reference", "1");
assertElementHasAttribute(text, "/integerArrayExample/array/int", "reference", "1");
assertElementHasValue(text, "/integerArrayExample/element", "1, 2, 3, 4");
validate(example, persister);
example = new IntegerArrayExample(null);
out = new StringWriter();
persister.write(example, out);
text = out.toString();
validate(example, persister);
example = persister.read(IntegerArrayExample.class, text);
assertEquals(example.attribute, null);
assertEquals(example.element, null);
assertEquals(example.list.size(), 0);
assertEquals(example.array[0], null);
assertElementHasAttribute(text, "/integerArrayExample", "id", "0");
assertElementHasAttribute(text, "/integerArrayExample/list", "id", "1");
assertElementHasAttribute(text, "/integerArrayExample/array", "id", "2");
}
}