1 package com.thoughtworks.xstream.objecttree.reflection;
2
3 import com.thoughtworks.someobjects.FunnyConstructor;
4 import com.thoughtworks.someobjects.X;
5 import com.thoughtworks.someobjects.Y;
6 import com.thoughtworks.xstream.objecttree.ObjectTree;
7 import junit.framework.TestCase;
8
9 import java.util.Arrays;
10
11 public class ReflectionObjectGraphTest extends TestCase {
12
13 private ObjectFactory objectFactory = new SunReflectionObjectFactory();
14
15 public void testGraphStartsOffEmpty() {
16 ObjectTree writer = new ReflectionObjectGraph(X.class, objectFactory);
17 assertEquals(X.class, writer.type());
18 assertNull(writer.get());
19 }
20
21 public void testRootItemCanBeCreated() {
22 ObjectTree writer = new ReflectionObjectGraph(X.class, objectFactory);
23 writer.create(X.class);
24 assertEquals(X.class, writer.type());
25 assertEquals(X.class, writer.get().getClass());
26 }
27
28 class X2 extends X {
29 }
30
31 public void testRootItemCanBeCreatedWithCustomType() {
32 ObjectTree writer = new ReflectionObjectGraph(X.class, objectFactory);
33 writer.create(X2.class);
34 assertEquals(X.class, writer.type());
35 assertEquals(X2.class, writer.get().getClass());
36 }
37
38
39 public void testCreateSingleObjectAndSetSimpleFields() {
40 X expected = new X();
41 expected.aStr = "hello";
42 expected.anInt = 22;
43
44 ObjectTree writer = new ReflectionObjectGraph(X.class, objectFactory);
45 writer.create(X.class);
46
47 writer.push("aStr");
48 assertEquals(String.class, writer.type());
49 writer.set("hello");
50 assertEquals(String.class, writer.type());
51 writer.pop();
52
53 writer.push("anInt");
54 assertEquals(int.class, writer.type());
55 writer.set(new Integer(22));
56 assertEquals(int.class, writer.type());
57 writer.pop();
58
59 assertEquals(expected, writer.get());
60 }
61
62 public void testCreateObjectInsideAnotherObject() {
63 X expected = new X();
64 expected.aStr = "hello";
65 expected.innerObj = new Y();
66 expected.innerObj.yField = "world";
67 expected.anInt = 3;
68
69 ObjectTree writer = new ReflectionObjectGraph(X.class, objectFactory);
70 writer.create(X.class);
71
72 writer.push("aStr");
73 writer.set("hello");
74 writer.pop();
75
76 writer.push("innerObj");
77 writer.create(Y.class);
78 writer.push("yField");
79 writer.set("world");
80 writer.pop();
81 writer.pop();
82
83 writer.push("anInt");
84 writer.set(new Integer(3));
85 writer.pop();
86
87 assertEquals(expected, writer.get());
88 }
89
90 public void testObjectCanBeInstantiatedWithoutDefaultConstructor() {
91 FunnyConstructor expected = new FunnyConstructor(33);
92
93 ObjectTree writer = new ReflectionObjectGraph(FunnyConstructor.class, objectFactory);
94 writer.create(FunnyConstructor.class);
95
96 writer.push("i");
97 writer.set(new Integer(33));
98 writer.pop();
99
100 assertEquals(expected, writer.get());
101 }
102
103 public void testIteratesOverFieldsOfCurrentObject() {
104 ObjectTree writer = new ReflectionObjectGraph(X.class, objectFactory);
105 writer.create(X.class);
106
107 String[] result = writer.fieldNames();
108
109 Arrays.sort(result);
110
111 assertEquals(3, result.length);
112 assertEquals("aStr", result[0]);
113 assertEquals("anInt", result[1]);
114 assertEquals("innerObj", result[2]);
115
116 writer.push("innerObj");
117 writer.create(Y.class);
118 result = writer.fieldNames();
119
120 assertEquals(1, result.length);
121 assertEquals("yField", result[0]);
122
123 writer.pop();
124 result = writer.fieldNames();
125
126 assertEquals(3, result.length);
127 }
128
129 class Z {
130 boolean a;
131 }
132
133 class Z2 extends Z {
134 int b;
135 }
136
137 public void testInheritance() {
138 ObjectTree writer = new ReflectionObjectGraph(Z.class, objectFactory);
139 writer.create(Z2.class);
140
141 String[] result = writer.fieldNames();
142 assertEquals(2, result.length);
143 assertEquals("b", result[0]);
144 assertEquals("a", result[1]);
145 }
146 }
147
This page was automatically generated by Maven