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 java.util.ArrayList;
21 import java.util.HashMap;
22 import java.util.HashSet;
23 import java.util.List;
27 import javax.persistence.Id;
28 import javax.persistence.Version;
30 import org.junit.Test;
32 public class JpaMergeSupportTest {
34 private static class X1 {
47 public X1(String aValue) {
51 public String getValue() {
56 public boolean equals(Object aObj) {
60 if (!(aObj instanceof X1)) {
63 return value.equals(((X1) aObj).getValue());
67 public int hashCode() {
72 private static class X2 {
76 private List<X1> list;
79 list = new ArrayList<X1>();
82 public List<X1> getList() {
87 private static class X3 {
94 set = new HashSet<X1>();
97 public Set<X1> getSet() {
102 private static class X4 {
106 private Map<String, X1> map;
109 map = new HashMap<String, X1>();
112 public Map<String, X1> getMap() {
117 private static class X5 {
127 public void setArray(X1[] aArray) {
131 public X1[] getArray() {
136 private static class X6 {
140 public X1 getNotaGetter(String aMessage) {
144 public void getNotaGetter2() {
149 private static class X7 {
153 private void getX() {
154 fail("Private getters should not be used");
159 public void testSimple() {
166 JpaMergeSupport.merge(x, y);
168 assertEquals(x.id, y.id);
169 assertEquals(x.version, y.version);
172 @Test(expected = IllegalArgumentException.class)
173 public void testSimplePkMismatch() {
180 JpaMergeSupport.merge(x, y);
184 public void testTraverseList() {
198 y.getList().add(new X1());
199 y.getList().add(new X1());
201 JpaMergeSupport.merge(x, y);
203 assertEquals(x.id, y.id);
204 assertEquals(x.getList().get(0).id, y.getList().get(0).id);
205 assertEquals(x.getList().get(1).id, y.getList().get(1).id);
206 assertEquals(x.getList().get(0).version, y.getList().get(0).version);
207 assertEquals(x.getList().get(1).version, y.getList().get(1).version);
210 @Test(expected = IllegalArgumentException.class)
211 public void testTraverseListWrongSize() {
225 y.getList().add(new X1());
227 JpaMergeSupport.merge(x, y);
231 public void testTraverseSet() {
249 JpaMergeSupport.merge(x, y);
250 assertEquals(x.id, y.id);
251 assertEquals(a.id, ya.id);
252 assertEquals(a.version, ya.version);
253 assertEquals(b.version, yb.version);
256 @Test(expected = IllegalArgumentException.class)
257 public void testTraverseSetWrongSize() {
274 JpaMergeSupport.merge(x, y);
278 public void testTraverseMap() {
287 x.getMap().put("a", a);
288 x.getMap().put("b", b);
294 y.getMap().put("a", ya);
295 y.getMap().put("b", yb);
296 JpaMergeSupport.merge(x, y);
297 assertEquals(x.id, y.id);
298 assertEquals(a.id, ya.id);
299 assertEquals(a.version, ya.version);
300 assertEquals(b.version, yb.version);
304 @Test(expected = IllegalArgumentException.class)
305 public void testTraverseMapWrongKey() {
314 x.getMap().put("a", a);
315 x.getMap().put("b", b);
321 y.getMap().put("a", ya);
322 y.getMap().put("c", yb);
323 JpaMergeSupport.merge(x, y);
326 @Test(expected = IllegalArgumentException.class)
327 public void testTraverseMapWrongSize() {
336 x.getMap().put("a", a);
337 x.getMap().put("b", b);
343 y.getMap().put("a", ya);
344 JpaMergeSupport.merge(x, y);
348 public void testTraverseArray() {
357 x.setArray(new X1[] { a, b });
363 y.setArray(new X1[] { ya, yb });
364 JpaMergeSupport.merge(x, y);
365 assertEquals(x.id, y.id);
366 assertEquals(a.id, ya.id);
367 assertEquals(a.version, ya.version);
368 assertEquals(b.version, yb.version);
371 @Test(expected = IllegalArgumentException.class)
372 public void testTraverseArrayWrongSize() {
381 x.setArray(new X1[] { a, b });
386 y.setArray(new X1[] { ya });
387 JpaMergeSupport.merge(x, y);
391 public void testNotAGetter() {
396 JpaMergeSupport.merge(x, y);
397 assertEquals(x.id, y.id);
401 public void testPrivateGetter() {
405 JpaMergeSupport.merge(x, y);
406 assertEquals(x.id, y.id);