18f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle/*
28f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Written by Doug Lea with assistance from members of JCP JSR-166
38f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Expert Group and released to the public domain, as explained at
48f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * http://creativecommons.org/publicdomain/zero/1.0/
58f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */
68f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
78f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepackage jsr166;
88f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
98e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.AbstractMap;
108e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.Map;
118e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath
128e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.Test;
138e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.TestSuite;
148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepublic class EntryTest extends JSR166TestCase {
168e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // android-note: Removed because the CTS runner does a bad job of
178e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // retrying tests that have suite() declarations.
188e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    //
198e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // public static void main(String[] args) {
208e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    //     main(suite(), args);
218e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // }
228e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // public static Test suite() {
23b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak    //     return new TestSuite(EntryTest.class);
248e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // }
258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    static final String k1 = "1";
278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    static final String v1 = "a";
288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    static final String k2 = "2";
298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    static final String v2 = "b";
308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * A new SimpleEntry(k, v) holds k, v.
338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor1() {
358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e = new AbstractMap.SimpleEntry(k1, v1);
368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(k1, e.getKey());
378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(v1, e.getValue());
388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * A new SimpleImmutableEntry(k, v) holds k, v.
428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor2() {
448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry s = new AbstractMap.SimpleImmutableEntry(k1, v1);
458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(k1, s.getKey());
468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(v1, s.getValue());
478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * A new SimpleEntry(entry(k, v)) holds k, v.
518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor3() {
538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e2 = new AbstractMap.SimpleEntry(k1, v1);
548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e = new AbstractMap.SimpleEntry(e2);
558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(k1, e.getKey());
568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(v1, e.getValue());
578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * A new SimpleImmutableEntry(entry(k, v)) holds k, v.
618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor4() {
638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry s2 = new AbstractMap.SimpleImmutableEntry(k1, v1);
648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry s = new AbstractMap.SimpleImmutableEntry(s2);
658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(k1, s.getKey());
668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(v1, s.getValue());
678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Entries with same key-value pairs are equal and have same
718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * hashcodes
728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testEquals() {
748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e2 = new AbstractMap.SimpleEntry(k1, v1);
758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e = new AbstractMap.SimpleEntry(e2);
768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry s2 = new AbstractMap.SimpleImmutableEntry(k1, v1);
778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry s = new AbstractMap.SimpleImmutableEntry(s2);
788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(e2, e);
798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(e2.hashCode(), e.hashCode());
808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(s2, s);
818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(s2.hashCode(), s.hashCode());
828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(e2, s2);
838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(e2.hashCode(), s2.hashCode());
848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(e, s);
858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(e.hashCode(), s.hashCode());
868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Entries with different key-value pairs are not equal
908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testNotEquals() {
928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e2 = new AbstractMap.SimpleEntry(k1, v1);
938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e = new AbstractMap.SimpleEntry(k2, v1);
948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(e2.equals(e));
958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = new AbstractMap.SimpleEntry(k1, v2);
968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(e2.equals(e));
978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e = new AbstractMap.SimpleEntry(k2, v2);
988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(e2.equals(e));
998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry s2 = new AbstractMap.SimpleImmutableEntry(k1, v1);
1018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry s = new AbstractMap.SimpleImmutableEntry(k2, v1);
1028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(s2.equals(s));
1038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        s = new AbstractMap.SimpleImmutableEntry(k1, v2);
1048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(s2.equals(s));
1058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        s = new AbstractMap.SimpleImmutableEntry(k2, v2);
1068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(s2.equals(s));
1078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * getValue returns last setValue for SimpleEntry
1118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testSetValue1() {
1138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e2 = new AbstractMap.SimpleEntry(k1, v1);
1148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry e = new AbstractMap.SimpleEntry(e2);
1158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(k1, e.getKey());
1168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(v1, e.getValue());
1178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        e.setValue(k2);
1188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(k2, e.getValue());
1198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(e2.equals(e));
1208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * setValue for SimpleImmutableEntry throws UnsupportedOperationException
1248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testSetValue2() {
1268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry s2 = new AbstractMap.SimpleImmutableEntry(k1, v1);
1278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Map.Entry s = new AbstractMap.SimpleImmutableEntry(s2);
1288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(k1, s.getKey());
1298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(v1, s.getValue());
1308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
1318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            s.setValue(k2);
1328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
1338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (UnsupportedOperationException success) {}
1348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle}
136