4141import static org .junit .Assert .assertNotEquals ;
4242import static org .junit .Assert .assertNotNull ;
4343import static org .junit .Assert .assertNull ;
44+ import static org .junit .Assert .assertThat ;
4445import static org .junit .Assert .assertTrue ;
4546import static org .junit .Assert .fail ;
47+ import static org .hamcrest .CoreMatchers .is ;
4648
4749/**
4850 * Unit test of the {@link UniversalExtractor}.
@@ -86,13 +88,34 @@ public void testExtractorEquality()
8688 {
8789 UniversalExtractor extractorUniversal1 = new UniversalExtractor ("getFoo()" );
8890 UniversalExtractor extractorUniversal2 = new UniversalExtractor ("foo" );
91+ UniversalExtractor extractorUniversal3 = new UniversalExtractor ("getFoo" );
8992 ReflectionExtractor extractorReflection1 = new ReflectionExtractor ("getFoo" );
9093
9194 assertTrue ("u1=" + extractorUniversal1 + " u2=" + extractorUniversal2 , extractorUniversal1 .equals (extractorUniversal2 ));
95+ assertTrue ("u1=" + extractorUniversal1 + " u3=" + extractorUniversal3 , extractorUniversal1 .equals (extractorUniversal3 ));
96+ assertTrue ("u2=" + extractorUniversal1 + " u3=" + extractorUniversal3 , extractorUniversal1 .equals (extractorUniversal3 ));
9297 assertTrue ("u1=" + extractorUniversal1 + " r1=" + extractorReflection1 , extractorUniversal1 .equals (extractorReflection1 ));
9398 assertTrue ("u1=" + extractorUniversal1 + " r1=" + extractorReflection1 , extractorReflection1 .equals (extractorUniversal1 ));
9499 assertTrue ("u2=" + extractorUniversal2 + " r1=" + extractorReflection1 , extractorUniversal2 .equals (extractorReflection1 ));
95100 assertTrue ("u2=" + extractorUniversal2 + " r1=" + extractorReflection1 , extractorReflection1 .equals (extractorUniversal2 ));
101+ assertTrue ("u3=" + extractorUniversal3 + " r1=" + extractorReflection1 , extractorReflection1 .equals (extractorUniversal3 ));
102+ }
103+
104+ @ Test
105+ public void testMethodExtractorEqualityHashCode ()
106+ {
107+ UniversalExtractor ueMethod = new UniversalExtractor ("aMethod()" );
108+ UniversalExtractor ueProperty = new UniversalExtractor ("aMethod" ); // this is a property, validating not a reflective method extractor
109+ ReflectionExtractor re1 = new ReflectionExtractor ("aMethod" );
110+
111+ assertTrue (ueMethod .isMethodExtractor ());
112+ assertTrue (ueProperty .isPropertyExtractor ());
113+ assertEquals (ueMethod , re1 );
114+ assertNotEquals (ueMethod , ueProperty );
115+ assertNotEquals (ueProperty , re1 );
116+ assertThat (ueMethod .hashCode (), is (re1 .hashCode ()));
117+ assertNotEquals (re1 , ueProperty );
118+ assertNotEquals (ueProperty .hashCode (), re1 .hashCode ());
96119 }
97120
98121 @ Test
@@ -119,22 +142,35 @@ public void testOptionalParameters()
119142 @ Test
120143 public void testEqualsHashCodeCanonicalName ()
121144 {
122- UniversalExtractor extractor1 = new UniversalExtractor ("foo" );
123- UniversalExtractor extractor2 = new UniversalExtractor ("foo()" );
124- UniversalExtractor extractor3 = new UniversalExtractor ("getFoo()" );
125- UniversalExtractor extractor5 = new UniversalExtractor ("isFoo()" );
126-
127- assertFalse (extractor1 .equals (extractor2 ));
128- assertFalse (extractor2 .equals (extractor1 ));
145+ UniversalExtractor extractor1 = new UniversalExtractor ("foo" );
146+ UniversalExtractor extractor2 = new UniversalExtractor ("foo()" );
147+ UniversalExtractor extractor3 = new UniversalExtractor ("getFoo()" );
148+ UniversalExtractor extractor6 = new UniversalExtractor ("getFoo" );
149+ UniversalExtractor extractor5 = new UniversalExtractor ("isFoo()" );
150+ ReflectionExtractor extractor7 = new ReflectionExtractor ("getFoo" );
151+ ReflectionExtractor extractor8 = new ReflectionExtractor ("foo" );
152+
153+ assertFalse ("comparing a method extractor with a property extractor, expected false" , extractor1 .equals (extractor2 ));
154+ assertFalse ("comparing a method extractor with a property extractor, expected false" , extractor2 .equals (extractor1 ));
129155 assertNotEquals (extractor1 .hashCode (), extractor2 .hashCode ());
130156
157+ assertTrue ("compare RE foo with UE foo(), expect true" , extractor2 .equals (extractor8 ));
158+ assertEquals (extractor2 .getCanonicalName (), extractor8 .getCanonicalName ());
159+
131160 assertTrue (extractor1 .equals (extractor3 ));
132161 assertTrue (extractor3 .equals (extractor1 ));
162+ assertTrue (extractor7 .equals (extractor6 ));
163+ assertTrue (extractor7 .equals (extractor1 ));
133164 assertEquals (extractor1 .hashCode (), extractor3 .hashCode ());
134165
135166 assertTrue (extractor1 .equals (extractor5 ));
136167 assertTrue (extractor5 .equals (extractor1 ));
168+ assertTrue (extractor3 .equals (extractor6 ));
169+ assertTrue (extractor1 .equals (extractor6 ));
137170 assertEquals (extractor1 .hashCode (), extractor5 .hashCode ());
171+ assertEquals (extractor1 .hashCode (), extractor7 .hashCode ());
172+ assertEquals (extractor6 .hashCode (), extractor3 .hashCode ());
173+ assertEquals (extractor6 .hashCode (), extractor7 .hashCode ());
138174
139175 // single arg method invocation
140176 UniversalExtractor extractor4 = new UniversalExtractor ("foo()" , new Integer []{ 42 });
@@ -143,7 +179,9 @@ public void testEqualsHashCodeCanonicalName()
143179
144180 assertEquals ("foo" , extractor1 .getCanonicalName ());
145181 assertEquals ("foo()" , extractor2 .getCanonicalName ());
182+ assertEquals ("foo()" , extractor8 .getCanonicalName ());
146183 assertEquals ("foo" , extractor3 .getCanonicalName ());
184+ assertEquals ("foo" , extractor6 .getCanonicalName ());
147185 assertEquals (null , extractor4 .getCanonicalName ());
148186 }
149187
@@ -377,6 +415,19 @@ public void testJavaBean()
377415 UniversalExtractor extractor = new UniversalExtractor ("foo" );
378416 assertEquals (extractor .extract (bean ), "value" );
379417
418+ // Ensure that these are identified as java bean property and work same as above.
419+ UniversalExtractor ue1 = new UniversalExtractor ("getFoo()" );
420+ UniversalExtractor ue2 = new UniversalExtractor ("getFoo" );
421+ ValueExtractor <TestJavaBean , String > ve = TestJavaBean ::getFoo ;
422+
423+ assertEquals (ue1 .extract (bean ), "value" );
424+ assertEquals (ue2 .extract (bean ), "value" );
425+ assertEquals (ve .extract (bean ), "value" );
426+ assertEquals (ue1 , ue2 );
427+ assertEquals (extractor , ue1 );
428+ assertEquals (extractor , ue2 );
429+ assertEquals (ve .getCanonicalName (), ue1 .getCanonicalName ());
430+
380431 // ensure cached method approach works also
381432 assertEquals (extractor .extract (bean ), "value" );
382433
0 commit comments