(no commit message)
[utils] / support / general / src / test / java / org / wamblee / persistence / PersistentFactoryTest.java
1 package org.wamblee.persistence;
2
3 import static junit.framework.Assert.*;
4
5 import javax.persistence.Id;
6 import javax.persistence.Version;
7
8 import org.junit.Test;
9 import org.wamblee.persistence.PersistentFactory.Accessor;
10 import org.wamblee.persistence.PersistentFactory.EntityAccessor;
11 import org.wamblee.persistence.PersistentFactory.FieldAccessor;
12 import org.wamblee.persistence.PersistentFactory.PropertyAccessor;
13
14 public class PersistentFactoryTest {
15
16     public static class X1 {
17         @Id
18         private int pk;
19
20         public int getPk() {
21             return pk;
22         }
23
24         public void setPk(int aPk) {
25             pk = aPk;
26         }
27         
28         private void privateSetter(int aPk) { 
29             pk = aPk;
30         }
31         
32         private int privateGetter() { 
33             return pk; 
34         }
35     }
36
37     public static class X2 {
38         private int pk;
39
40         @Id
41         public int getPk() {
42             return pk;
43         }
44
45         public void setPk(int aPk) {
46             pk = aPk;
47         }
48     }
49     
50     public static class X3 {
51         private int pk;
52
53         @Id
54         private int getPk() {
55             return pk;
56         }
57
58         private void setPk(int aPk) {
59             pk = aPk;
60         }
61     }
62
63     public static class X4 {
64         @Version
65         private int version;
66
67         public int getVersion() {
68             return version;
69         }
70
71         public void setVersion(int aVersion) {
72             version = aVersion;
73         }
74         
75         private void privateSetter(int aVersion) { 
76             version = aVersion;
77         }
78         
79         private int privateGetter() { 
80             return version; 
81         }
82     }
83
84     public static class X5 {
85         private int version;
86
87         @Version
88         public int getVersion() {
89             return version;
90         }
91
92         public void setVersion(int aVersion) {
93             version = aVersion;
94         }
95     }
96     
97     public static class X6 {
98         private int version;
99
100         @Version
101         private int getVersion() {
102             return version;
103         }
104
105         private void setVersion(int aVersion) {
106             version = aVersion;
107         }
108     }
109     
110     public static class X7 { 
111         @Id
112         public int id; 
113         
114         @Version
115         public int version; 
116     }
117
118     // FieldAccessor test
119
120     @Test
121     public void testFieldAccessorSet() throws Exception {
122         Accessor<Integer> accessor = new FieldAccessor<Integer>(X1.class
123             .getDeclaredField("pk"));
124         X1 x1 = new X1();
125         assertEquals(0, x1.getPk());
126         accessor.set(x1, 10);
127         assertEquals(10, x1.getPk());
128     }
129
130     // PropertyAccessor test
131     @Test
132     public void testPropertyAccessorSet() throws Exception {
133         Accessor<Integer> accessor = new PropertyAccessor<Integer>(X1.class
134             .getDeclaredMethod("getPk"), X1.class.getDeclaredMethod("setPk",
135             int.class));
136         X1 x1 = new X1();
137         assertEquals(0, x1.getPk());
138         accessor.set(x1, 10);
139         assertEquals(10, x1.getPk());
140     }
141     
142     @Test
143     public void testPropertyAccessorPrivate() throws Exception { 
144         Accessor<Integer> accessor = new PropertyAccessor<Integer>(X1.class
145             .getDeclaredMethod("privateGetter"), X1.class.getDeclaredMethod("privateSetter",
146             int.class));
147         X1 x1 = new X1();
148         assertEquals(0, x1.getPk());
149         accessor.set(x1, 10);
150         assertEquals((Integer)10, accessor.get(x1));
151         
152     }
153
154     // EntityAccessor test
155
156     @Test
157     public void testEntityAccessorPkField() {
158         EntityAccessor accessor = PersistentFactory.createEntityAccessor(X1.class);
159         assertNotNull(accessor);
160         assertTrue(accessor.getPk() instanceof FieldAccessor);
161         assertNull(accessor.getVersion());
162         assertEquals("pk", ((FieldAccessor) accessor.getPk()).getField()
163             .getName());
164     }
165
166     @Test
167     public void testEntityAccessorPkProperty() {
168         EntityAccessor accessor = PersistentFactory.createEntityAccessor(X2.class);
169         assertNotNull(accessor);
170         assertNotNull(accessor.getPk());
171         assertTrue(accessor.getPk() instanceof PropertyAccessor);
172         assertNull(accessor.getVersion());
173         PropertyAccessor property = (PropertyAccessor) accessor.getPk();
174         assertEquals("getPk", property.getGetter().getName());
175         assertEquals("setPk", property.getSetter().getName());
176     }
177     
178     @Test
179     public void testEntityAccessorPkPropertyPrivate() {
180         EntityAccessor accessor = PersistentFactory.createEntityAccessor(X3.class);
181         assertNotNull(accessor);
182         assertNotNull(accessor.getPk());
183         assertTrue(accessor.getPk() instanceof PropertyAccessor);
184         assertNull(accessor.getVersion());
185         PropertyAccessor property = (PropertyAccessor) accessor.getPk();
186         assertEquals("getPk", property.getGetter().getName());
187         assertEquals("setPk", property.getSetter().getName());
188     }
189
190     @Test
191     public void testEntityAccessorVersionField() {
192         EntityAccessor accessor = PersistentFactory.createEntityAccessor(X4.class);
193         assertNotNull(accessor);
194         assertTrue(accessor.getVersion() instanceof FieldAccessor);
195         assertNull(accessor.getPk());
196         assertEquals("version", ((FieldAccessor) accessor.getVersion()).getField()
197             .getName());
198     }
199
200     @Test
201     public void testEntityAccessorVersionProperty() {
202         EntityAccessor accessor = PersistentFactory.createEntityAccessor(X5.class);
203         assertNotNull(accessor);
204         assertNotNull(accessor.getVersion());
205         assertTrue(accessor.getVersion() instanceof PropertyAccessor);
206         assertNull(accessor.getPk());
207         PropertyAccessor property = (PropertyAccessor) accessor.getVersion();
208         assertEquals("getVersion", property.getGetter().getName());
209         assertEquals("setVersion", property.getSetter().getName());
210     }
211     
212     @Test
213     public void testEntityAccessorVersionPropertyPrivate() {
214         EntityAccessor accessor = PersistentFactory.createEntityAccessor(X6.class);
215         assertNotNull(accessor);
216         assertNotNull(accessor.getVersion());
217         assertTrue(accessor.getVersion() instanceof PropertyAccessor);
218         assertNull(accessor.getPk());
219         PropertyAccessor property = (PropertyAccessor) accessor.getVersion();
220         assertEquals("getVersion", property.getGetter().getName());
221         assertEquals("setVersion", property.getSetter().getName());
222     }
223     
224     @Test
225     public void testNoVersionAndNoPk() { 
226         EntityAccessor accessor = PersistentFactory.createEntityAccessor(String.class);
227         assertNull(accessor);
228     }
229
230     @Test
231     public void testPkAndVersion() { 
232         EntityAccessor accessor = PersistentFactory.createEntityAccessor(X7.class);
233         assertNotNull(accessor.getPk());
234         assertNotNull(accessor.getVersion());
235         
236         X7 x = new X7();
237         assertEquals(0, x.id);
238         assertEquals(0, x.version);
239         
240         accessor.getPk().set(x, 10); 
241         accessor.getVersion().set(x, 20);
242         
243         assertEquals(10, x.id);
244         assertEquals(20, x.version);
245     }
246     
247     @Test 
248     public void testEntityAccessorCache() { 
249         EntityAccessor accessor = PersistentFactory.createEntityAccessor(X1.class);
250         EntityAccessor accessor2 = PersistentFactory.createEntityAccessor(X1.class);
251         
252         assertSame(accessor, accessor2);
253     }
254 }