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
1735f743713dfeb4e9138fee0f7bb6a7ee1da53521Yohei Yukawapackage android.view.inputmethod;
18f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa
1935f743713dfeb4e9138fee0f7bb6a7ee1da53521Yohei Yukawaimport android.os.Parcel;
20f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawaimport android.test.InstrumentationTestCase;
21f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawaimport android.test.suitebuilder.annotation.SmallTest;
22f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawaimport android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder;
23f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa
24f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawaimport java.util.ArrayList;
25f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa
26f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawapublic class InputMethodSubtypeArrayTest extends InstrumentationTestCase {
27f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa    @SmallTest
28f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa    public void testInstanciate() throws Exception {
29f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
30f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        subtypes.add(createDummySubtype(0, "en_US"));
31f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        subtypes.add(createDummySubtype(1, "en_US"));
32f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        subtypes.add(createDummySubtype(2, "ja_JP"));
33f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa
34f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        final InputMethodSubtypeArray array = new InputMethodSubtypeArray(subtypes);
35f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(subtypes.size(), array.getCount());
36f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(subtypes.get(0), array.get(0));
37f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(subtypes.get(1), array.get(1));
38f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(subtypes.get(2), array.get(2));
39f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa
40f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        final InputMethodSubtypeArray clonedArray = cloneViaParcel(array);
41f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(subtypes.size(), clonedArray.getCount());
42f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(subtypes.get(0), clonedArray.get(0));
43f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(subtypes.get(1), clonedArray.get(1));
44f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(subtypes.get(2), clonedArray.get(2));
45f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa
46f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        final InputMethodSubtypeArray clonedClonedArray = cloneViaParcel(clonedArray);
47f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(clonedArray.getCount(), clonedClonedArray.getCount());
48f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(clonedArray.get(0), clonedClonedArray.get(0));
49f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(clonedArray.get(1), clonedClonedArray.get(1));
50f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        assertEquals(clonedArray.get(2), clonedClonedArray.get(2));
51f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa    }
52f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa
53f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa    InputMethodSubtypeArray cloneViaParcel(final InputMethodSubtypeArray original) {
54f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        Parcel parcel = null;
55f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        try {
56f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa            parcel = Parcel.obtain();
57f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa            original.writeToParcel(parcel);
58f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa            parcel.setDataPosition(0);
59f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa            return new InputMethodSubtypeArray(parcel);
60f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        } finally {
61f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa            if (parcel != null) {
62f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa                parcel.recycle();
63f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa            }
64f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        }
65f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa    }
66f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa
67f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa    private static InputMethodSubtype createDummySubtype(final int id, final String locale) {
68f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        final InputMethodSubtypeBuilder builder = new InputMethodSubtypeBuilder();
69f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa        return builder.setSubtypeNameResId(0)
70f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa                .setSubtypeIconResId(0)
71f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa                .setSubtypeId(id)
72f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa                .setSubtypeLocale(locale)
73f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa                .setIsAsciiCapable(true)
74f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa                .build();
75f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa    }
76f06569561fe1c6e898debf8bb9f37331a9f87323Yohei Yukawa}
77