Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bca817b2 authored by Yohei Yukawa's avatar Yohei Yukawa
Browse files

Enrich test cases when enabling default IMEs part 2

This is another groundwork for subsequent fixes.

Notable changes in test cases are:
- isSystemReady == false is now coverted.
- tests can run even when the system locale of test
  environment is different from "en_US"

BUG: 17347871

Change-Id: I9434270735d3b37d8b788d41250b23d7950aaeed
parent 0ecb0c43
Loading
Loading
Loading
Loading
+58 −30
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

package android.os;

import com.android.internal.inputmethod.InputMethodUtils;

import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.ResolveInfo;
@@ -28,15 +26,22 @@ import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodSubtype;
import android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder;

import com.android.internal.inputmethod.InputMethodUtils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;

public class InputMethodTest extends InstrumentationTestCase {
    private static final boolean IS_AUX = true;
    private static final boolean IS_DEFAULT = true;
    private static final boolean IS_AUTO = true;
    private static final boolean IS_ASCII_CAPABLE = true;
    private static final boolean IS_SYSTEM_READY = true;
    private static final ArrayList<InputMethodSubtype> NO_SUBTYPE = null;
    private static final Locale LOCALE_EN_US = new Locale("en", "US");

    @SmallTest
    public void testDefaultEnabledImesWithDefaultVoiceIme() throws Exception {
@@ -49,19 +54,19 @@ public class InputMethodTest extends InstrumentationTestCase {
        imis.add(createDefaultDummyLatinKeyboardIme());
        imis.add(createNonDefaultDummyJaJPKeyboardIme());
        imis.add(createNonDefaultDummyJaJPKeyboardImeWithoutSubtypes());
        final ArrayList<InputMethodInfo> enabledImis = InputMethodUtils.getDefaultEnabledImes(
                context, true, imis);
        assertEquals(2, enabledImis.size());
        for (int i = 0; i < enabledImis.size(); ++i) {
            final InputMethodInfo imi = enabledImis.get(0);
            // "DummyDefaultAutoVoiceIme" and "DummyDefaultEnKeyboardIme"
            if (imi.getPackageName().equals("DummyDefaultAutoVoiceIme")
                    || imi.getPackageName().equals("DummyDefaultEnKeyboardIme")) {
                continue;
            } else {
                fail("Invalid enabled subtype.");
            }
        }

        final ArrayList<InputMethodInfo> enabledImisForSystemNotReady =
                callGetDefaultEnabledImesUnderWithLocale(context, !IS_SYSTEM_READY, imis,
                        LOCALE_EN_US);
        assertEquals(toSet("DummyDefaultAutoVoiceIme", "DummyDefaultEnKeyboardIme",
                "DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1"),
                getPackageNames(enabledImisForSystemNotReady));

        final ArrayList<InputMethodInfo> enabledImisForSystemReady =
                callGetDefaultEnabledImesUnderWithLocale(context, IS_SYSTEM_READY, imis,
                        LOCALE_EN_US);
        assertEquals(toSet("DummyDefaultAutoVoiceIme", "DummyDefaultEnKeyboardIme"),
                getPackageNames(enabledImisForSystemReady));
    }

    @SmallTest
@@ -74,21 +79,18 @@ public class InputMethodTest extends InstrumentationTestCase {
        imis.add(createDefaultDummyLatinKeyboardIme());
        imis.add(createNonDefaultDummyJaJPKeyboardIme());
        imis.add(createNonDefaultDummyJaJPKeyboardImeWithoutSubtypes());
        final ArrayList<InputMethodInfo> enabledImis = InputMethodUtils.getDefaultEnabledImes(
                context, true, imis);
        assertEquals(3, enabledImis.size());
        for (int i = 0; i < enabledImis.size(); ++i) {
            final InputMethodInfo imi = enabledImis.get(0);
            // "DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1" and
            // "DummyDefaultEnKeyboardIme"
            if (imi.getPackageName().equals("DummyNonDefaultAutoVoiceIme0")
                    || imi.getPackageName().equals("DummyNonDefaultAutoVoiceIme1")
                    || imi.getPackageName().equals("DummyDefaultEnKeyboardIme")) {
                continue;
            } else {
                fail("Invalid enabled subtype.");
            }
        }

        final ArrayList<InputMethodInfo> enabledImisForSystemNotReady =
                callGetDefaultEnabledImesUnderWithLocale(context, !IS_SYSTEM_READY, imis,
                        LOCALE_EN_US);
        assertEquals(toSet("DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1",
                "DummyDefaultEnKeyboardIme"), getPackageNames(enabledImisForSystemNotReady));

        final ArrayList<InputMethodInfo> enabledImisForSystemReady =
                callGetDefaultEnabledImesUnderWithLocale(context, IS_SYSTEM_READY, imis,
                        LOCALE_EN_US);
        assertEquals(toSet("DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1",
                "DummyDefaultEnKeyboardIme"), getPackageNames(enabledImisForSystemReady));
    }

    @SmallTest
@@ -129,6 +131,32 @@ public class InputMethodTest extends InstrumentationTestCase {
        }
    }

    private static ArrayList<InputMethodInfo> callGetDefaultEnabledImesUnderWithLocale(
            final Context context, final boolean isSystemReady,
            final ArrayList<InputMethodInfo> imis, final Locale locale) {
        final Locale initialLocale = context.getResources().getConfiguration().locale;
        try {
            context.getResources().getConfiguration().setLocale(locale);
            return InputMethodUtils.getDefaultEnabledImes(context, isSystemReady, imis);
        } finally {
            context.getResources().getConfiguration().setLocale(initialLocale);
        }
    }

    @SafeVarargs
    private static <T> HashSet<T> toSet(final T... xs) {
        return new HashSet<T>(Arrays.asList(xs));
    }

    private HashSet<String> getPackageNames(final ArrayList<InputMethodInfo> imis) {
        final HashSet<String> packageNames = new HashSet<>();
        for (final InputMethodInfo imi : imis) {
            final String actualPackageName = imi.getPackageName();
            packageNames.add(actualPackageName);
        }
        return packageNames;
    }

    private static void verifyEquality(InputMethodInfo expected, InputMethodInfo actual) {
        assertEquals(expected, actual);
        assertEquals(expected.getSubtypeCount(), actual.getSubtypeCount());