View Javadoc
1   package org.pojomatic;
2   
3   import static org.testng.Assert.*;
4   
5   import org.testng.annotations.Test;
6   import org.pojomatic.annotations.Property;
7   import org.pojomatic.annotations.SkipArrayCheck;
8   import org.pojomatic.diff.NoDifferences;
9   import org.pojomatic.internal.PojomatorFactory;
10  
11  public class PojomaticTest {
12    public static class Bean {
13      @Property public final int x;
14      public Bean(int x) { this.x = x; }
15      public Bean() { x = 0; }
16    }
17  
18    private static Pojomator<Bean> BEAN_POJOMATOR = PojomatorFactory.makePojomator(Bean.class);
19    private static Bean BEAN = new Bean(1);
20  
21    @Test
22    public void testPojomator() {
23      Pojomator<Bean> pojomator = Pojomatic.pojomator(Bean.class);
24      assertEquals(pojomator.doToString(BEAN), BEAN_POJOMATOR.doToString(BEAN));
25    }
26  
27    @Test
28    public void testToString() {
29      assertEquals(Pojomatic.toString(BEAN), BEAN_POJOMATOR.doToString(BEAN));
30    }
31  
32    @Test
33    public void testDiffNoDifferences() {
34      assertEquals(Pojomatic.diff(BEAN, BEAN), NoDifferences.getInstance());
35    }
36  
37    @Test(expectedExceptions=NullPointerException.class)
38    public void testDiffBothNull() {
39      Pojomatic.diff(null, null);
40    }
41  
42    @Test(expectedExceptions=NullPointerException.class)
43    public void testDiffNullFirst() {
44      Pojomatic.diff(null, BEAN);
45    }
46  
47    @Test(expectedExceptions=NullPointerException.class)
48    public void testDiffNullSecond() {
49      Pojomatic.diff(BEAN, null);
50    }
51  
52    @Test
53    public void testHashCode() {
54      assertEquals(Pojomatic.hashCode(BEAN), BEAN_POJOMATOR.doHashCode(BEAN));
55    }
56  
57    @Test
58    public void testEquals() {
59      assertTrue(Pojomatic.equals(new Bean(3), new Bean(3)));
60      assertFalse(Pojomatic.equals(new Bean(3), new Bean(4)));
61    }
62  
63    @Test
64    public void testCompatibleForEquality() {
65      class BeanSubClass extends Bean{}
66  
67      class BeanWithExtraData extends Bean {
68        @Property public int getY() { return 0; }
69      }
70      assertTrue(Pojomatic.areCompatibleForEquals(Bean.class, BeanSubClass.class));
71      assertFalse(Pojomatic.areCompatibleForEquals(Bean.class, BeanWithExtraData.class));
72      assertFalse(Pojomatic.areCompatibleForEquals(BeanWithExtraData.class, Bean.class));
73    }
74  
75    @Test
76    public void testSkipArrayCheck() {
77      class Box {
78        @Property
79        @SkipArrayCheck
80        Object o;
81  
82        Box(Object o) { this.o = o; }
83      }
84      assertFalse(Pojomatic.equals(new Box(new String[] { "x" }), new Box(new String[] { "x" })));
85      assertNotEquals(Pojomatic.hashCode(new Box(new String[] { "x" })), Pojomatic.hashCode(new Box(new String[] { "x" })));
86  
87      String[] array = new String[] { "y" };
88      assertTrue(Pojomatic.equals(new Box(array),  new Box(array)));
89      assertEquals(Pojomatic.hashCode(new Box(array)), Pojomatic.hashCode(new Box(array)));
90    }
91  
92    @Test
93    public void testNoSkipArrayCheck() {
94      class Box {
95        @Property
96        Object o;
97  
98        Box(Object o) { this.o = o; }
99      }
100     assertTrue(Pojomatic.equals(new Box(new String[] { "x" }), new Box(new String[] { "x" })));
101     assertEquals(Pojomatic.hashCode(new Box(new String[] { "x" })), Pojomatic.hashCode(new Box(new String[] { "x" })));
102   }
103 
104   @Test
105   public void testSkipArrayCheckIgnoredForArrayType() {
106     class Box {
107       @Property
108       @SkipArrayCheck
109       Object[] os;
110 
111       Box(Object o) { this.os = new Object[] { o }; }
112     }
113     assertTrue(Pojomatic.equals(new Box(new String[] { "x" }), new Box(new String[] { "x" })));
114     assertEquals(Pojomatic.hashCode(new Box(new String[] { "x" })), Pojomatic.hashCode(new Box(new String[] { "x" })));
115   }
116 
117 
118 }