2 * Copyright 2005-2010 the original author or authors.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org.wamblee.persistence;
18 import static junit.framework.Assert.*;
20 import javax.persistence.Id;
21 import javax.persistence.Version;
23 import org.junit.Test;
24 import org.wamblee.persistence.PersistentFactory.Accessor;
25 import org.wamblee.persistence.PersistentFactory.EntityAccessor;
26 import org.wamblee.persistence.PersistentFactory.EntityObjectAccessor;
27 import org.wamblee.persistence.PersistentFactory.FieldAccessor;
28 import org.wamblee.persistence.PersistentFactory.PropertyAccessor;
30 public class PersistentFactoryTest {
32 public static class X1 {
40 public void setPk(int aPk) {
44 private void privateSetter(int aPk) {
48 private int privateGetter() {
53 public static class X2 {
61 public void setPk(int aPk) {
66 public static class X3 {
74 private void setPk(int aPk) {
79 public static class X4 {
83 public int getVersion() {
87 public void setVersion(int aVersion) {
91 private void privateSetter(int aVersion) {
95 private int privateGetter() {
100 public static class X5 {
104 public int getVersion() {
108 public void setVersion(int aVersion) {
113 public static class X6 {
117 private int getVersion() {
121 private void setVersion(int aVersion) {
126 public static class X7 {
134 // FieldAccessor test
137 public void testFieldAccessorSet() throws Exception {
138 Accessor<Integer> accessor = new FieldAccessor<Integer>(X1.class
139 .getDeclaredField("pk"));
141 assertEquals(0, x1.getPk());
142 accessor.set(x1, 10);
143 assertEquals(10, x1.getPk());
146 // PropertyAccessor test
148 public void testPropertyAccessorSet() throws Exception {
149 Accessor<Integer> accessor = new PropertyAccessor<Integer>(X1.class
150 .getDeclaredMethod("getPk"), X1.class.getDeclaredMethod("setPk",
153 assertEquals(0, x1.getPk());
154 accessor.set(x1, 10);
155 assertEquals(10, x1.getPk());
159 public void testPropertyAccessorPrivate() throws Exception {
160 Accessor<Integer> accessor = new PropertyAccessor<Integer>(X1.class
161 .getDeclaredMethod("privateGetter"), X1.class.getDeclaredMethod("privateSetter",
164 assertEquals(0, x1.getPk());
165 accessor.set(x1, 10);
166 assertEquals((Integer)10, accessor.get(x1));
170 // EntityAccessor test
173 public void testEntityAccessorPkField() {
174 EntityAccessor accessor = PersistentFactory.createEntityAccessor(X1.class);
175 assertNotNull(accessor);
176 assertTrue(accessor.getPk() instanceof FieldAccessor);
177 assertNull(accessor.getVersion());
178 assertEquals("pk", ((FieldAccessor) accessor.getPk()).getField()
183 public void testEntityAccessorPkProperty() {
184 EntityAccessor accessor = PersistentFactory.createEntityAccessor(X2.class);
185 assertNotNull(accessor);
186 assertNotNull(accessor.getPk());
187 assertTrue(accessor.getPk() instanceof PropertyAccessor);
188 assertNull(accessor.getVersion());
189 PropertyAccessor property = (PropertyAccessor) accessor.getPk();
190 assertEquals("getPk", property.getGetter().getName());
191 assertEquals("setPk", property.getSetter().getName());
195 public void testEntityAccessorPkPropertyPrivate() {
196 EntityAccessor accessor = PersistentFactory.createEntityAccessor(X3.class);
197 assertNotNull(accessor);
198 assertNotNull(accessor.getPk());
199 assertTrue(accessor.getPk() instanceof PropertyAccessor);
200 assertNull(accessor.getVersion());
201 PropertyAccessor property = (PropertyAccessor) accessor.getPk();
202 assertEquals("getPk", property.getGetter().getName());
203 assertEquals("setPk", property.getSetter().getName());
207 public void testEntityAccessorVersionField() {
208 EntityAccessor accessor = PersistentFactory.createEntityAccessor(X4.class);
209 assertNotNull(accessor);
210 assertTrue(accessor.getVersion() instanceof FieldAccessor);
211 assertNull(accessor.getPk());
212 assertEquals("version", ((FieldAccessor) accessor.getVersion()).getField()
217 public void testEntityAccessorVersionProperty() {
218 EntityAccessor accessor = PersistentFactory.createEntityAccessor(X5.class);
219 assertNotNull(accessor);
220 assertNotNull(accessor.getVersion());
221 assertTrue(accessor.getVersion() instanceof PropertyAccessor);
222 assertNull(accessor.getPk());
223 PropertyAccessor property = (PropertyAccessor) accessor.getVersion();
224 assertEquals("getVersion", property.getGetter().getName());
225 assertEquals("setVersion", property.getSetter().getName());
229 public void testEntityAccessorVersionPropertyPrivate() {
230 EntityAccessor accessor = PersistentFactory.createEntityAccessor(X6.class);
231 assertNotNull(accessor);
232 assertNotNull(accessor.getVersion());
233 assertTrue(accessor.getVersion() instanceof PropertyAccessor);
234 assertNull(accessor.getPk());
235 PropertyAccessor property = (PropertyAccessor) accessor.getVersion();
236 assertEquals("getVersion", property.getGetter().getName());
237 assertEquals("setVersion", property.getSetter().getName());
241 public void testNoVersionAndNoPk() {
242 EntityAccessor accessor = PersistentFactory.createEntityAccessor(String.class);
243 assertNull(accessor);
247 public void testPkAndVersion() {
248 EntityAccessor accessor = PersistentFactory.createEntityAccessor(X7.class);
249 assertNotNull(accessor.getPk());
250 assertNotNull(accessor.getVersion());
253 assertEquals(0, x.id);
254 assertEquals(0, x.version);
256 accessor.getPk().set(x, 10);
257 accessor.getVersion().set(x, 20);
259 assertEquals(10, x.id);
260 assertEquals(20, x.version);
264 public void testEntityAccessorCache() {
265 EntityAccessor accessor = PersistentFactory.createEntityAccessor(X1.class);
266 EntityAccessor accessor2 = PersistentFactory.createEntityAccessor(X1.class);
268 assertSame(accessor, accessor2);
271 // EntityObjectAccessor test for undefined pk and/or version.
273 public void testEntityObjectAccessorRobustness() {
274 EntityObjectAccessor accessor = new EntityObjectAccessor("hello world",
275 new EntityAccessor(null, null));
276 assertNull(accessor.getPrimaryKey());
277 assertNull(accessor.getPersistedVersion());
278 accessor.setPrimaryKey("bla");
279 accessor.setPersistedVersion(100);