add Metadata.hashCode
diff --git a/src/com/google/enterprise/adaptor/Metadata.java b/src/com/google/enterprise/adaptor/Metadata.java index bd17db2..f0d154f 100644 --- a/src/com/google/enterprise/adaptor/Metadata.java +++ b/src/com/google/enterprise/adaptor/Metadata.java
@@ -192,6 +192,7 @@ } /** True if exactly the same key-values are represented. */ + @Override public boolean equals(Object o) { if (!(o instanceof Metadata)) { return false; @@ -203,6 +204,11 @@ return mappings.equals(other.mappings); } + @Override + public int hashCode() { + return mappings.hashCode(); + } + /** True with 0 entries. */ public boolean isEmpty() { return mappings.isEmpty();
diff --git a/test/com/google/enterprise/adaptor/MetadataTest.java b/test/com/google/enterprise/adaptor/MetadataTest.java index f915c7f..fd3fcea 100644 --- a/test/com/google/enterprise/adaptor/MetadataTest.java +++ b/test/com/google/enterprise/adaptor/MetadataTest.java
@@ -360,6 +360,35 @@ } @Test + public void testHashCode() { + Metadata m1 = new Metadata(); + m1.add("foo", "home"); + Metadata m2 = new Metadata(); + m2.add("foo", "home"); + assertEquals(m1.hashCode(), m2.hashCode()); + + m1.add("foo", "bar"); + m2.add("foo", "bar"); + assertEquals(m1.hashCode(), m2.hashCode()); + + m1.set("foo", "high"); + m2.set("foo", "low"); + assertFalse(m1.hashCode() == m2.hashCode()); + + m2.set("foo", "high"); + assertEquals(m1.hashCode(), m2.hashCode()); + + m1.set("bar", makeSet("floor", "door")); + m2.set("bar", makeSet("floor", "door")); + assertEquals(m1.hashCode(), m2.hashCode()); + + m1.set("bar", makeSet("near", "far")); + assertFalse(m1.hashCode() == m2.hashCode()); + m2.set("bar", makeSet("near", "far")); + assertEquals(m1.hashCode(), m2.hashCode()); + } + + @Test public void testUnmodifiableSetSingle() { Metadata m = new Metadata().unmodifiableView(); thrown.expect(UnsupportedOperationException.class);