Author: kwin Date: Mon Jun 8 11:24:47 2015 New Revision: 1684151 URL: http://svn.apache.org/r1684151 Log: SLING-4784 implement equals and hashCode for ValueMapDecorator
Modified: sling/trunk/bundles/api/src/main/java/org/apache/sling/api/wrappers/ValueMapDecorator.java sling/trunk/bundles/api/src/test/java/org/apache/sling/api/wrappers/ValueMapDecoratorTest.java Modified: sling/trunk/bundles/api/src/main/java/org/apache/sling/api/wrappers/ValueMapDecorator.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/api/src/main/java/org/apache/sling/api/wrappers/ValueMapDecorator.java?rev=1684151&r1=1684150&r2=1684151&view=diff ============================================================================== --- sling/trunk/bundles/api/src/main/java/org/apache/sling/api/wrappers/ValueMapDecorator.java (original) +++ sling/trunk/bundles/api/src/main/java/org/apache/sling/api/wrappers/ValueMapDecorator.java Mon Jun 8 11:24:47 2015 @@ -221,4 +221,22 @@ public class ValueMapDecorator implement public String toString() { return super.toString() + " : " + this.base.toString(); } + + @Override + /** + * {@inheritDoc} + */ + public int hashCode() { + return base.hashCode(); + } + + @Override + /** + * {@inheritDoc} + */ + public boolean equals(Object obj) { + return base.equals(obj); + } + + } \ No newline at end of file Modified: sling/trunk/bundles/api/src/test/java/org/apache/sling/api/wrappers/ValueMapDecoratorTest.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/api/src/test/java/org/apache/sling/api/wrappers/ValueMapDecoratorTest.java?rev=1684151&r1=1684150&r2=1684151&view=diff ============================================================================== --- sling/trunk/bundles/api/src/test/java/org/apache/sling/api/wrappers/ValueMapDecoratorTest.java (original) +++ sling/trunk/bundles/api/src/test/java/org/apache/sling/api/wrappers/ValueMapDecoratorTest.java Mon Jun 8 11:24:47 2015 @@ -86,5 +86,55 @@ public class ValueMapDecoratorTest { Assert.assertNull("ValueMap should not support conversion to array of primitive type", valueMap.get("prop1", int[].class)); } + @Test + public void testEqualsAndHashCodeOfEqualValueMapsWithNonArrayTypes() { + map.put("prop1", "some string"); + ValueMapDecorator valueMap2 = new ValueMapDecorator(map); + Assert.assertTrue("Two ValueMapDecorators based on the same map should be equal", valueMap.equals(valueMap2)); + Assert.assertEquals("Two equal ValueMapDecorators should have the same hash code", valueMap.hashCode(), valueMap2.hashCode()); + + ValueMapDecorator valueMap3 = new ValueMapDecorator(new HashMap<String, Object>()); + valueMap3.put("prop1", "some string"); + Assert.assertEquals(valueMap, valueMap3); + Assert.assertEquals("Two equal ValueMapDecorators should have the same hash code", valueMap.hashCode(), valueMap3.hashCode()); + + Assert.assertEquals(map, valueMap); + Assert.assertEquals(valueMap, map); + } + + @Ignore("SLING-4784") + @Test + public void testEqualsAndHashCodeOfEqualValueMapsWithArrayTypes() { + map.put("prop1", new String[] {"1", "2"}); + ValueMapDecorator valueMap2 = new ValueMapDecorator(map); + Assert.assertTrue("Two ValueMapDecorators based on the same map should be equal", valueMap.equals(valueMap2)); + Assert.assertEquals("Two equal ValueMapDecorators should have the same hash code", valueMap.hashCode(), valueMap2.hashCode()); + + ValueMapDecorator valueMap3 = new ValueMapDecorator(new HashMap<String, Object>()); + valueMap3.put("prop1", new String[] {"1", "2"}); + Assert.assertEquals(valueMap, valueMap3); + Assert.assertEquals("Two equal ValueMapDecorators should have the same hash code", valueMap.hashCode(), valueMap3.hashCode()); + } + + @Test + public void testEqualsOfInequalValueMapsWithNonArrayTypes() { + valueMap.put("prop", "value"); + ValueMapDecorator valueMap2 = new ValueMapDecorator(new HashMap<String, Object>()); + valueMap2.put("prop", "value2"); + Assert.assertFalse("Two ValueMapDecorators based on maps with different entries should not be equal", valueMap.equals(valueMap2)); + + } + + @Test + public void testEqualsOfInequalValueMapsWithArrayTypes() { + valueMap.put("prop", new String[] {"1", "2"}); + ValueMapDecorator valueMap2 = new ValueMapDecorator(new HashMap<String, Object>()); + valueMap2.put("prop", new String[] {"3", "4"}); + Assert.assertFalse("Two ValueMapDecorators based on maps with different entries should not be equal", valueMap.equals(valueMap2)); + } + @Test + public void testEqualsOfValueMapAndUnderlyingMap() { + + } }