1 package org.pojomatic.internal;
2
3 import static org.testng.Assert.*;
4
5 import org.testng.annotations.Test;
6 import org.pojomatic.annotations.Property;
7 import org.pojomatic.Pojomator;
8 import org.pojomatic.Pojomatic;
9
10 public class EqualsInheritanceTest {
11 private static class Parent {
12 @Property int x = 3;
13
14 @Override
15 public int hashCode() {
16 return Pojomatic.hashCode(this);
17 }
18
19 @Override
20 public boolean equals(Object o) {
21 return Pojomatic.equals(this, o);
22 }
23 }
24
25 private static Pojomator<Parent> PARENT_POJOMATOR = PojomatorFactory.makePojomator(Parent.class);
26 private static Parent PARENT = new Parent();
27
28 @Test public void testChildWithNoNewProperties() {
29 class Child extends Parent {}
30 Child child = new Child();
31 Pojomator<Child> childPojomator = PojomatorFactory.makePojomator(Child.class);
32
33 assertTrue(PARENT_POJOMATOR.doEquals(PARENT, child));
34 assertTrue(PARENT_POJOMATOR.doEquals(child, PARENT));
35 assertTrue(childPojomator.doEquals(child, PARENT));
36 }
37
38 @Test public void testChildWithNewProperty() {
39 class Child extends Parent { @Property int y = 4; }
40 Child child = new Child();
41 Pojomator<Child> childPojomator = PojomatorFactory.makePojomator(Child.class);
42
43 assertFalse(PARENT.equals(child));
44 assertFalse(child.equals(PARENT));
45 assertFalse(PARENT_POJOMATOR.doEquals(PARENT, child));
46 assertFalse(childPojomator.doEquals(child, PARENT));
47
48
49 assertTrue(PARENT_POJOMATOR.doEquals(child, PARENT));
50 }
51
52 @Test public void testTwoChildrenWithNoNewProperties() {
53 class Child1 extends Parent {}
54 class Child2 extends Parent {}
55 Child1 child1 = new Child1();
56 Child2 child2 = new Child2();
57 Pojomator<Child1> childPojomator = PojomatorFactory.makePojomator(Child1.class);
58
59 assertTrue(PARENT_POJOMATOR.doEquals(child1, child2));
60 assertTrue(childPojomator.doEquals(child1, child2));
61 }
62
63 @Test public void testTwoChildrenWithOneHavingNewProperties() {
64 class Child1 extends Parent { @Property int y = 4; }
65 class Child2 extends Parent {}
66 Child1 child1 = new Child1();
67 Child2 child2 = new Child2();
68 Pojomator<Child1> child1Pojomator = PojomatorFactory.makePojomator(Child1.class);
69 Pojomator<Child2> child2Pojomator = PojomatorFactory.makePojomator(Child2.class);
70
71 assertFalse(child1Pojomator.doEquals(child1, child2));
72 assertFalse(child2Pojomator.doEquals(child2, child1));
73 }
74 }