1 package org.sourceforge.jemm.client.types;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertFalse;
5 import static org.junit.Assert.assertNull;
6 import static org.junit.Assert.assertTrue;
7
8 import org.junit.After;
9 import org.junit.Before;
10 import org.junit.Test;
11 import org.sourceforge.jemm.JEMMInternalException;
12 import org.sourceforge.jemm.client.Entity;
13 import org.sourceforge.jemm.client.FieldKey;
14 import org.sourceforge.jemm.client.ObjectSource;
15 import org.sourceforge.jemm.client.classes.Shadowed;
16 import org.sourceforge.jemm.database.FieldType;
17 import org.sourceforge.jemm.types.ID;
18
19
20 public class JEMMObjectAccessorTest {
21 FieldKey objFKey = new FieldKey(Shadowed.class,"obj");
22
23 JEMMObjectAccessor accessor;
24 Entity entity;
25
26 Shadowed fieldValue;
27
28 @Before
29 public void setUp() {
30 Shadowed s = new Shadowed(new ID(1));
31 fieldValue = new Shadowed(new ID(2));
32
33 ObjectSource source = new ObjectSource() {
34 public Object getObject(ID fieldID) {
35 return fieldValue;
36 }
37 };
38
39 entity = new Entity(s);
40 accessor = new JEMMObjectAccessor(entity,source);
41 }
42
43 @After
44 public void tearDown() {
45
46 }
47
48
49
50
51 @Test
52 public void getFieldContainsValue() {
53 accessor.setField(objFKey, fieldValue);
54
55 Object value = accessor.getField(objFKey);
56 assertEquals(fieldValue,value);
57 }
58
59 @Test
60 public void getFieldNull() {
61 accessor.setField(objFKey, null);
62 Object value = accessor.getField(objFKey);
63 assertNull(value);
64 }
65
66 @Test(expected=RuntimeException.class)
67 public void getFieldNoValue() {
68 Object value = accessor.getField(objFKey);
69 assertNull(value);
70 }
71
72 @Test
73 public void getRawFieldExists() {
74 accessor.setField(objFKey, fieldValue);
75
76 Object value = accessor.getFieldRaw(objFKey);
77 assertEquals(new ID(2),value);
78 }
79
80 @Test
81 public void getRawFieldNullValue() {
82 accessor.setField(objFKey, null);
83
84 Object value = accessor.getFieldRaw(objFKey);
85 assertNull(value);
86 }
87
88 @Test(expected=RuntimeException.class)
89 public void getRawFieldNoValue() {
90 Object value = accessor.getFieldRaw(objFKey);
91 assertNull(value);
92 }
93
94 @Test
95 public void setFieldJEMMObject() {
96 accessor.setField(objFKey, fieldValue);
97 assertNull(entity.getField(objFKey));
98 assertEquals(new ID(2),entity.getShadowData().getField(Shadowed.class, FieldType.OBJECT, "obj"));
99 }
100
101 @Test
102 public void setFieldID() {
103 accessor.setField(objFKey, new ID(2));
104 assertNull(entity.getField(objFKey));
105 assertEquals(new ID(2),entity.getShadowData().getField(Shadowed.class, FieldType.OBJECT, "obj"));
106 }
107
108 @Test(expected=JEMMInternalException.class)
109 public void setFieldPrimtive() {
110 accessor.setField(objFKey, 'a');
111 }
112
113 @Test
114 public void setFieldNull() {
115 accessor.setField(objFKey, null);
116 assertNull(entity.getField(objFKey));
117 }
118
119
120
121
122 @Test
123 public void getFieldValueInitialised() {
124 accessor.setField(objFKey, fieldValue);
125 accessor.initialise(objFKey);
126
127 Object value = accessor.getField(objFKey);
128 assertEquals(fieldValue,value);
129 }
130
131 @Test
132 public void getFieldNullInitialised() {
133 accessor.setField(objFKey, null);
134 accessor.initialise(objFKey);
135
136 Object value = accessor.getField(objFKey);
137 assertNull(value);
138 }
139
140 @Test
141 public void getRawFieldInitialisedValue() {
142 accessor.setField(objFKey, fieldValue);
143 accessor.initialise(objFKey);
144
145 assertEquals(new ID(2),accessor.getFieldRaw(objFKey));
146 }
147
148 @Test
149 public void getRawFieldInitialisedNull() {
150 accessor.setField(objFKey, null);
151 accessor.initialise(objFKey);
152
153 assertEquals(null,accessor.getFieldRaw(objFKey));
154 }
155
156
157
158 @Test(expected=RuntimeException.class)
159 public void initialiseNotSet() {
160 accessor.initialise(objFKey);
161 }
162
163 @Test
164 public void initialiseWithID() {
165 accessor.setField(objFKey, fieldValue);
166 accessor.initialise(objFKey);
167
168 Object value = entity.getField(objFKey);
169 assertEquals(fieldValue,value);
170 assertTrue(entity.getShadowData().isFieldInitialised(Shadowed.class, FieldType.OBJECT, "obj"));
171 }
172
173 @Test
174 public void initialiseNullValue() {
175 accessor.setField(objFKey, null);
176 accessor.initialise(objFKey);
177
178 Object value = entity.getField(objFKey);
179 assertNull(value);
180 assertTrue(entity.getShadowData().isFieldInitialised(Shadowed.class, FieldType.OBJECT, "obj"));
181 }
182
183 @Test
184 public void initialiseTwice() {
185 accessor.setField(objFKey, null);
186 accessor.initialise(objFKey);
187 accessor.initialise(objFKey);
188
189 Object value = entity.getField(objFKey);
190 assertNull(value);
191
192 assertTrue(entity.getShadowData().isFieldInitialised(Shadowed.class, FieldType.OBJECT, "obj"));
193 }
194
195
196
197
198
199 @Test
200 public void finalizeWithObject() {
201 accessor.setField(objFKey, fieldValue);
202 accessor.initialise(objFKey);
203
204 entity.setField(objFKey, new Shadowed(new ID(3)));
205
206 accessor.finalize(objFKey);
207 assertEquals(new ID(3),accessor.getFieldRaw(objFKey));
208 assertNull(entity.getField(objFKey));
209 assertFalse(entity.getShadowData().isFieldInitialised(Shadowed.class, FieldType.OBJECT, "obj"));
210 }
211
212 @Test
213 public void finalizeNullValue() {
214 accessor.setField(objFKey, null);
215 accessor.initialise(objFKey);
216
217 accessor.finalize(objFKey);
218 assertNull(accessor.getFieldRaw(objFKey));
219 assertNull(entity.getField(objFKey));
220 assertFalse(entity.getShadowData().isFieldInitialised(Shadowed.class, FieldType.OBJECT, "obj"));
221 }
222
223 @Test
224 public void finalizeTwice() {
225 accessor.setField(objFKey, fieldValue);
226 accessor.initialise(objFKey);
227
228 accessor.finalize(objFKey);
229
230 entity.setField(objFKey, new Shadowed(new ID(3)));
231
232 accessor.finalize(objFKey);
233
234 assertEquals(new ID(2),accessor.getFieldRaw(objFKey));
235 assertFalse(entity.getShadowData().isFieldInitialised(Shadowed.class, FieldType.OBJECT, "obj"));
236 }
237 }