1 package org.wamblee.persistence;
3 import static junit.framework.Assert.*;
5 import javax.persistence.Id;
6 import javax.persistence.Version;
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;
14 public class PersistentFactoryTest {
16 public static class X1 {
24 public void setPk(int aPk) {
28 private void privateSetter(int aPk) {
32 private int privateGetter() {
37 public static class X2 {
45 public void setPk(int aPk) {
50 public static class X3 {
58 private void setPk(int aPk) {
63 public static class X4 {
67 public int getVersion() {
71 public void setVersion(int aVersion) {
75 private void privateSetter(int aVersion) {
79 private int privateGetter() {
84 public static class X5 {
88 public int getVersion() {
92 public void setVersion(int aVersion) {
97 public static class X6 {
101 private int getVersion() {
105 private void setVersion(int aVersion) {
110 public static class X7 {
118 // FieldAccessor test
121 public void testFieldAccessorSet() throws Exception {
122 Accessor<Integer> accessor = new FieldAccessor<Integer>(X1.class
123 .getDeclaredField("pk"));
125 assertEquals(0, x1.getPk());
126 accessor.set(x1, 10);
127 assertEquals(10, x1.getPk());
130 // PropertyAccessor test
132 public void testPropertyAccessorSet() throws Exception {
133 Accessor<Integer> accessor = new PropertyAccessor<Integer>(X1.class
134 .getDeclaredMethod("getPk"), X1.class.getDeclaredMethod("setPk",
137 assertEquals(0, x1.getPk());
138 accessor.set(x1, 10);
139 assertEquals(10, x1.getPk());
143 public void testPropertyAccessorPrivate() throws Exception {
144 Accessor<Integer> accessor = new PropertyAccessor<Integer>(X1.class
145 .getDeclaredMethod("privateGetter"), X1.class.getDeclaredMethod("privateSetter",
148 assertEquals(0, x1.getPk());
149 accessor.set(x1, 10);
150 assertEquals((Integer)10, accessor.get(x1));
154 // EntityAccessor 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()
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());
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());
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()
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());
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());
225 public void testNoVersionAndNoPk() {
226 EntityAccessor accessor = PersistentFactory.createEntityAccessor(String.class);
227 assertNull(accessor);
231 public void testPkAndVersion() {
232 EntityAccessor accessor = PersistentFactory.createEntityAccessor(X7.class);
233 assertNotNull(accessor.getPk());
234 assertNotNull(accessor.getVersion());
237 assertEquals(0, x.id);
238 assertEquals(0, x.version);
240 accessor.getPk().set(x, 10);
241 accessor.getVersion().set(x, 20);
243 assertEquals(10, x.id);
244 assertEquals(20, x.version);
248 public void testEntityAccessorCache() {
249 EntityAccessor accessor = PersistentFactory.createEntityAccessor(X1.class);
250 EntityAccessor accessor2 = PersistentFactory.createEntityAccessor(X1.class);
252 assertSame(accessor, accessor2);