1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Licensed to the Apache Software Foundation (ASF) under one or more
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements.  See the NOTICE file distributed with
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership.
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License.  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.lang;
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel;
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.TestCase;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.testframework.serialization.SerializationTest;
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport tests.util.SerializationTester;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.HashMap;
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(Enum.class)
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class EnumTest extends TestCase {
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    enum Sample {
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        LARRY, MOE, CURLY
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    Sample larry = Sample.LARRY;
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    Sample moe = Sample.MOE;
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    enum Empty {
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    enum Bogus {
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        UNUSED
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    enum Color {
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Red, Green, Blue {};
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.NOT_FEASIBLE,
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Can't be tested, according to the spec this constructor can't be invoked.",
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "Enum",
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class, int.class}
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_EnumLStringLlang() {
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //TODO
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.NOT_FEASIBLE,
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Can't be tested, according to the spec.",
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "clone",
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_clone() {
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      //TODO
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.lang.Enum#compareTo(java.lang.Enum)
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "compareTo",
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.Enum.class}
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_compareToLjava_lang_Enum() {
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(0 < Sample.MOE.compareTo(Sample.LARRY));
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(0, Sample.MOE.compareTo(Sample.MOE));
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(0 > Sample.MOE.compareTo(Sample.CURLY));
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Sample.MOE.compareTo((Sample)null);
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Should throw NullPointerException");
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException e) {
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.lang.Enum#equals(Object)
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "equals",
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.Object.class}
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_equalsLjava_lang_Object() {
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(moe.equals("bob"));
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(moe.equals(Sample.MOE));
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(Sample.LARRY.equals(Sample.CURLY));
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(Sample.LARRY.equals(larry));
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(Sample.CURLY.equals(null));
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.lang.Enum#getDeclaringClass()
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getDeclaringClass",
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getDeclaringClass() {
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(Sample.class, moe.getDeclaringClass());
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.lang.Enum#hashCode()
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "hashCode",
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_hashCode() {
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals (moe.hashCode(), moe.hashCode());
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue (moe.hashCode() != Sample.LARRY.hashCode());
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.lang.Enum#name()
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "name",
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_name() {
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("MOE", moe.name());
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.lang.Enum#ordinal()
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "ordinal",
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_ordinal() {
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(0, larry.ordinal());
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(1, moe.ordinal());
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(2, Sample.CURLY.ordinal());
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.lang.Enum#toString()
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "toString",
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_toString() {
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(moe.toString().equals("MOE"));
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.lang.Enum#valueOf(Class, String)
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "valueOf",
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.Class.class, java.lang.String.class}
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_valueOfLjava_lang_String() {
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(Sample.CURLY, Sample.valueOf("CURLY"));
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(Sample.LARRY, Sample.valueOf("LARRY"));
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(moe, Sample.valueOf("MOE"));
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Sample.valueOf("non-existant");
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Expected an exception");
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e){
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Sample.valueOf(null);
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Should throw NullPointerException");
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException e) {
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // May be caused by some compilers' code
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // other compilers will throw this
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Sample s = Enum.valueOf(Sample.class, "CURLY");
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(s, Sample.CURLY);
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = Enum.valueOf(Sample.class, "LARRY");
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(larry, s);
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = Enum.valueOf(Sample.class, "MOE");
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(s, moe);
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Enum.valueOf(Bogus.class, "MOE");
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Expected IllegalArgumentException");
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Enum.valueOf((Class<Sample>)null, "a string");
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Expected an exception");
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException e) {
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // May be caused by some compilers' code
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // other compilers will throw this
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Enum.valueOf(Sample.class, null);
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Expected an exception");
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException e) {
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // May be caused by some compilers' code
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // other compilers will throw this
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Enum.valueOf((Class<Sample>)null, (String)null);
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Expected an exception");
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException e) {
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // May be caused by some compilers' code
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // other compilers will throw this
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.lang.Enum#values
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.TODO,
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Tests the values() method which is not in the API since it is" +
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "automatically created by the compiler for enum types",
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "!values",
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_values() {
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Sample[] myValues = Sample.values();
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(3, myValues.length);
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(Sample.LARRY, myValues[0]);
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(Sample.MOE, myValues[1]);
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(Sample.CURLY, myValues[2]);
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(0, Empty.values().length);
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @test Serialization/deserilazation compatibility with Harmony.
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Serialization/deserilazation compatibility.",
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "!SerializationGolden",
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
278a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project    public void test_compatibilitySerialization_inClass_Complex_Harmony() throws Exception{
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // TODO migrate to the new testing framework
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(SerializationTester.assertCompabilityEquals(new MockEnum2(),
281a99b695964e28a5906003d40db48cbd550fbcdf4The Android Open Source Project            "/serialization/org/apache/harmony/luni/tests/java/lang/EnumTest.harmony.ser"));
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests serialization/deserialization compatibility.
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies serialization/deserialization compatibility.",
290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "!SerializationSelf",
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testSerializationSelf() throws Exception {
294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test a map class that has enums.
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // regression test for Harmony-1163
297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        HashMap<Color, Integer> enumColorMap = new HashMap<Color, Integer>();
298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        enumColorMap.put(Color.Red, 1);
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        enumColorMap.put(Color.Blue, 3);
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Object[] testCases = { enumColorMap, Sample.CURLY };
302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SerializationTest.verifySelf(testCases);
304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test a class that has enums as its fields.
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MockEnum mock = new MockEnum();
307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MockEnum test = (MockEnum) SerializationTest.copySerializable(mock);
308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(mock.i, test.i);
309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(mock.str, test.str);
310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(mock.samEnum, test.samEnum);
311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test a class that has enums and a string of same name as its fields.
313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MockEnum2 mock2 = new MockEnum2();
314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MockEnum2 test2 = (MockEnum2) SerializationTest.copySerializable(mock2);
315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(mock2.i, test2.i);
316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(mock2.str, test2.str);
317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(mock2.samEnum, test2.samEnum);
318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests serialization/deserialization compatibility with RI.
323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies serialization/deserialization compatibility.",
327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "!SerializationGolden",
328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testSerializationCompatibility() throws Exception {
331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // regression test for Harmony-1163
333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        HashMap<Color, Integer> enumColorMap = new HashMap<Color, Integer>();
334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        enumColorMap.put(Color.Red, 1);
335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        enumColorMap.put(Color.Blue, 3);
336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Object[] testCases = { Sample.CURLY, new MockEnum(),
338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test a class that has enums and a string of same name as its fields.
339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new MockEnum2(),
340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // test a map class that has enums.
341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                enumColorMap, };
342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SerializationTest.verifyGolden(this, testCases);
344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
347