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