Coverage Summary for Class: MapHashCodeTester (com.google.common.collect.testing.testers)

Class Class, % Method, % Line, %
MapHashCodeTester 100% (1/1) 100% (6/6) 100% (26/26)


1 /* 2  * Copyright (C) 2008 The Guava Authors 3  * 4  * Licensed under the Apache License, Version 2.0 (the "License"); 5  * you may not use this file except in compliance with the License. 6  * You may obtain a copy of the License at 7  * 8  * http://www.apache.org/licenses/LICENSE-2.0 9  * 10  * Unless required by applicable law or agreed to in writing, software 11  * distributed under the License is distributed on an "AS IS" BASIS, 12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13  * See the License for the specific language governing permissions and 14  * limitations under the License. 15  */ 16  17 package com.google.common.collect.testing.testers; 18  19 import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS; 20 import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES; 21  22 import com.google.common.annotations.GwtCompatible; 23 import com.google.common.collect.testing.AbstractMapTester; 24 import com.google.common.collect.testing.features.CollectionSize; 25 import com.google.common.collect.testing.features.MapFeature; 26 import java.util.Collection; 27 import java.util.Map.Entry; 28 import org.junit.Ignore; 29  30 /** 31  * Tests {@link java.util.Map#hashCode}. 32  * 33  * @author George van den Driessche 34  * @author Chris Povirk 35  */ 36 @GwtCompatible 37 @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. 38 public class MapHashCodeTester<K, V> extends AbstractMapTester<K, V> { 39  public void testHashCode() { 40  int expectedHashCode = 0; 41  for (Entry<K, V> entry : getSampleEntries()) { 42  expectedHashCode += hash(entry); 43  } 44  assertEquals( 45  "A Map's hashCode() should be the sum of those of its entries.", 46  expectedHashCode, 47  getMap().hashCode()); 48  } 49  50  @CollectionSize.Require(absent = CollectionSize.ZERO) 51  @MapFeature.Require(ALLOWS_NULL_KEYS) 52  public void testHashCode_containingNullKey() { 53  Entry<K, V> entryWithNull = entry(null, v3()); 54  runEntryWithNullTest(entryWithNull); 55  } 56  57  @CollectionSize.Require(absent = CollectionSize.ZERO) 58  @MapFeature.Require(ALLOWS_NULL_VALUES) 59  public void testHashCode_containingNullValue() { 60  Entry<K, V> entryWithNull = entry(k3(), null); 61  runEntryWithNullTest(entryWithNull); 62  } 63  64  private void runEntryWithNullTest(Entry<K, V> entryWithNull) { 65  Collection<Entry<K, V>> entries = getSampleEntries(getNumEntries() - 1); 66  67  entries.add(entryWithNull); 68  69  int expectedHashCode = 0; 70  for (Entry<K, V> entry : entries) { 71  expectedHashCode += hash(entry); 72  } 73  74  resetContainer(getSubjectGenerator().create(entries.toArray())); 75  assertEquals( 76  "A Map's hashCode() should be the sum of those of its entries (where " 77  + "a null element in an entry counts as having a hash of zero).", 78  expectedHashCode, 79  getMap().hashCode()); 80  } 81  82  private static int hash(Entry<?, ?> e) { 83  return (e.getKey() == null ? 0 : e.getKey().hashCode()) 84  ^ (e.getValue() == null ? 0 : e.getValue().hashCode()); 85  } 86 }