1f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa/*
2f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa * Copyright (C) 2014 The Android Open Source Project
3f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa *
4f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa * Licensed under the Apache License, Version 2.0 (the "License");
5f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa * you may not use this file except in compliance with the License.
6f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa * You may obtain a copy of the License at
7f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa *
8f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa *      http://www.apache.org/licenses/LICENSE-2.0
9f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa *
10f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa * Unless required by applicable law or agreed to in writing, software
11f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa * distributed under the License is distributed on an "AS IS" BASIS,
12f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa * See the License for the specific language governing permissions and
14f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa * limitations under the License.
15f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa */
16f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa
17f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawapackage android.os;
18f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa
19f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawaimport android.test.InstrumentationTestCase;
20f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawaimport android.test.suitebuilder.annotation.SmallTest;
21f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawaimport android.view.inputmethod.InputMethodSubtype;
22f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawaimport android.view.inputmethod.InputMethodSubtypeArray;
23f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawaimport android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder;
24f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa
25f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawaimport java.util.ArrayList;
26f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa
27f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawapublic class InputMethodSubtypeArrayTest extends InstrumentationTestCase {
28f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa    @SmallTest
29f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa    public void testInstanciate() throws Exception {
30f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
31f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        subtypes.add(createDummySubtype(0, "en_US"));
32f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        subtypes.add(createDummySubtype(1, "en_US"));
33f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        subtypes.add(createDummySubtype(2, "ja_JP"));
34f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa
35f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        final InputMethodSubtypeArray array = new InputMethodSubtypeArray(subtypes);
36f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(subtypes.size(), array.getCount());
37f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(subtypes.get(0), array.get(0));
38f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(subtypes.get(1), array.get(1));
39f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(subtypes.get(2), array.get(2));
40f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa
41f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        final InputMethodSubtypeArray clonedArray = cloneViaParcel(array);
42f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(subtypes.size(), clonedArray.getCount());
43f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(subtypes.get(0), clonedArray.get(0));
44f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(subtypes.get(1), clonedArray.get(1));
45f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(subtypes.get(2), clonedArray.get(2));
46f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa
47f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        final InputMethodSubtypeArray clonedClonedArray = cloneViaParcel(clonedArray);
48f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(clonedArray.getCount(), clonedClonedArray.getCount());
49f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(clonedArray.get(0), clonedClonedArray.get(0));
50f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(clonedArray.get(1), clonedClonedArray.get(1));
51f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(clonedArray.get(2), clonedClonedArray.get(2));
52f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa    }
53f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa
54f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa    InputMethodSubtypeArray cloneViaParcel(final InputMethodSubtypeArray original) {
55f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        Parcel parcel = null;
56f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        try {
57f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa            parcel = Parcel.obtain();
58f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa            original.writeToParcel(parcel);
59f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa            parcel.setDataPosition(0);
60f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa            return new InputMethodSubtypeArray(parcel);
61f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        } finally {
62f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa            if (parcel != null) {
63f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa                parcel.recycle();
64f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa            }
65f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        }
66f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa    }
67f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa
68f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa    private static InputMethodSubtype createDummySubtype(final int id, final String locale) {
69f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        final InputMethodSubtypeBuilder builder = new InputMethodSubtypeBuilder();
70f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        return builder.setSubtypeNameResId(0)
71f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa                .setSubtypeIconResId(0)
72f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa                .setSubtypeId(id)
73f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa                .setSubtypeLocale(locale)
74f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa                .setIsAsciiCapable(true)
75f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa                .build();
76f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa    }
77f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa}
78