1 /* 2 * Written by Doug Lea with assistance from members of JCP JSR-166 3 * Expert Group and released to the public domain, as explained at 4 * http://creativecommons.org/publicdomain/zero/1.0/ 5 */ 6 7 package jsr166; 8 9 import java.util.AbstractMap; 10 import java.util.Map; 11 12 import junit.framework.Test; 13 import junit.framework.TestSuite; 14 15 public class EntryTest extends JSR166TestCase { 16 // android-note: Removed because the CTS runner does a bad job of 17 // retrying tests that have suite() declarations. 18 // 19 // public static void main(String[] args) { 20 // main(suite(), args); 21 // } 22 // public static Test suite() { 23 // return new TestSuite(EntryTest.class); 24 // } 25 26 static final String k1 = "1"; 27 static final String v1 = "a"; 28 static final String k2 = "2"; 29 static final String v2 = "b"; 30 31 /** 32 * A new SimpleEntry(k, v) holds k, v. 33 */ testConstructor1()34 public void testConstructor1() { 35 Map.Entry e = new AbstractMap.SimpleEntry(k1, v1); 36 assertEquals(k1, e.getKey()); 37 assertEquals(v1, e.getValue()); 38 } 39 40 /** 41 * A new SimpleImmutableEntry(k, v) holds k, v. 42 */ testConstructor2()43 public void testConstructor2() { 44 Map.Entry s = new AbstractMap.SimpleImmutableEntry(k1, v1); 45 assertEquals(k1, s.getKey()); 46 assertEquals(v1, s.getValue()); 47 } 48 49 /** 50 * A new SimpleEntry(entry(k, v)) holds k, v. 51 */ testConstructor3()52 public void testConstructor3() { 53 Map.Entry e2 = new AbstractMap.SimpleEntry(k1, v1); 54 Map.Entry e = new AbstractMap.SimpleEntry(e2); 55 assertEquals(k1, e.getKey()); 56 assertEquals(v1, e.getValue()); 57 } 58 59 /** 60 * A new SimpleImmutableEntry(entry(k, v)) holds k, v. 61 */ testConstructor4()62 public void testConstructor4() { 63 Map.Entry s2 = new AbstractMap.SimpleImmutableEntry(k1, v1); 64 Map.Entry s = new AbstractMap.SimpleImmutableEntry(s2); 65 assertEquals(k1, s.getKey()); 66 assertEquals(v1, s.getValue()); 67 } 68 69 /** 70 * Entries with same key-value pairs are equal and have same 71 * hashcodes 72 */ testEquals()73 public void testEquals() { 74 Map.Entry e2 = new AbstractMap.SimpleEntry(k1, v1); 75 Map.Entry e = new AbstractMap.SimpleEntry(e2); 76 Map.Entry s2 = new AbstractMap.SimpleImmutableEntry(k1, v1); 77 Map.Entry s = new AbstractMap.SimpleImmutableEntry(s2); 78 assertEquals(e2, e); 79 assertEquals(e2.hashCode(), e.hashCode()); 80 assertEquals(s2, s); 81 assertEquals(s2.hashCode(), s.hashCode()); 82 assertEquals(e2, s2); 83 assertEquals(e2.hashCode(), s2.hashCode()); 84 assertEquals(e, s); 85 assertEquals(e.hashCode(), s.hashCode()); 86 } 87 88 /** 89 * Entries with different key-value pairs are not equal 90 */ testNotEquals()91 public void testNotEquals() { 92 Map.Entry e2 = new AbstractMap.SimpleEntry(k1, v1); 93 Map.Entry e = new AbstractMap.SimpleEntry(k2, v1); 94 assertFalse(e2.equals(e)); 95 e = new AbstractMap.SimpleEntry(k1, v2); 96 assertFalse(e2.equals(e)); 97 e = new AbstractMap.SimpleEntry(k2, v2); 98 assertFalse(e2.equals(e)); 99 100 Map.Entry s2 = new AbstractMap.SimpleImmutableEntry(k1, v1); 101 Map.Entry s = new AbstractMap.SimpleImmutableEntry(k2, v1); 102 assertFalse(s2.equals(s)); 103 s = new AbstractMap.SimpleImmutableEntry(k1, v2); 104 assertFalse(s2.equals(s)); 105 s = new AbstractMap.SimpleImmutableEntry(k2, v2); 106 assertFalse(s2.equals(s)); 107 } 108 109 /** 110 * getValue returns last setValue for SimpleEntry 111 */ testSetValue1()112 public void testSetValue1() { 113 Map.Entry e2 = new AbstractMap.SimpleEntry(k1, v1); 114 Map.Entry e = new AbstractMap.SimpleEntry(e2); 115 assertEquals(k1, e.getKey()); 116 assertEquals(v1, e.getValue()); 117 e.setValue(k2); 118 assertEquals(k2, e.getValue()); 119 assertFalse(e2.equals(e)); 120 } 121 122 /** 123 * setValue for SimpleImmutableEntry throws UnsupportedOperationException 124 */ testSetValue2()125 public void testSetValue2() { 126 Map.Entry s2 = new AbstractMap.SimpleImmutableEntry(k1, v1); 127 Map.Entry s = new AbstractMap.SimpleImmutableEntry(s2); 128 assertEquals(k1, s.getKey()); 129 assertEquals(v1, s.getValue()); 130 try { 131 s.setValue(k2); 132 shouldThrow(); 133 } catch (UnsupportedOperationException success) {} 134 } 135 } 136