1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License.
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License.
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.apache.harmony.luni.tests.java.util;
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargets;
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.TestCase;
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Collection;
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.HashMap;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Iterator;
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Map;
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Set;
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(Map.Entry.class)
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class MapEntryTest extends TestCase {
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    Map.Entry me = null;
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    HashMap   hm = null;
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    Iterator  i  = null;
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getKey",
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testGetKey() {
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(hm.containsKey(me.getKey()));
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        hm.clear();
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            me.getKey();
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalStateException e) {
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getValue",
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testGetValue() {
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(hm.containsValue(me.getValue()));
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        hm.clear();
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            me.getValue();
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalStateException e) {
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    class Mock_HashMap extends HashMap {
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @Override
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public Object put(Object key, Object val) {
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (val == null) throw new NullPointerException();
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (val.getClass() == Double.class) throw new ClassCastException();
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (((String)val).equals("Wrong element")) throw new IllegalArgumentException();
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new UnsupportedOperationException();
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public Object fakePut(Object key, Object val) {
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return super.put(key, val);
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "RI does not throw following exceptions: UnsupportedOperationException,ClassCastException, IllegalArgumentException and NullPointerException",
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setValue",
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.Object.class}
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testSetValue() {
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Mock_HashMap mhm = new Mock_HashMap();
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mhm.fakePut(new Integer(1), "One");
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        mhm.fakePut(new Integer(2), "Two");
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        i = mhm.entrySet().iterator();
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        me = (Map.Entry)i.next();
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        me.setValue("Wrong element");
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        hm.clear();
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            me.setValue("");
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalStateException e) {
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "equals",
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.Object.class}
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testEquals() {
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Map.Entry me1 = (Map.Entry)i.next();
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(me.equals(me1));
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(me.equals(this));
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        me1 = me;
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(me.equals(me1));
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "hashCode",
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testHashCode() {
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Map.Entry me1 = (Map.Entry)i.next();
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(me.hashCode() != me1.hashCode());
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected void setUp() throws Exception {
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        hm = new HashMap();
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        hm.put(new Integer(1), "one");
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        hm.put(new Integer(2), "two");
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        i = hm.entrySet().iterator();
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        me = (Map.Entry)i.next();
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super.setUp();
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
149