Introduce subtype filter to unit test

Change-Id: I3de573ffa38c46b78e1f8a602f99c49c164516f0
main
Tadashi G. Takaoka 2014-09-25 15:53:41 +09:00
parent 951252bf47
commit dbb2182e39
2 changed files with 58 additions and 24 deletions

View File

@ -25,8 +25,8 @@ import java.util.ArrayList;
@SmallTest @SmallTest
public class KeyboardLayoutSetSubtypesCountTests extends KeyboardLayoutSetTestsBase { public class KeyboardLayoutSetSubtypesCountTests extends KeyboardLayoutSetTestsBase {
private static final int NUMBER_OF_SUBTYPES = 78; private static final int NUMBER_OF_SUBTYPES = 80;
private static final int NUMBER_OF_ASCII_CAPABLE_SUBTYPES = 46; private static final int NUMBER_OF_ASCII_CAPABLE_SUBTYPES = 48;
private static final int NUMBER_OF_PREDEFINED_ADDITIONAL_SUBTYPES = 2; private static final int NUMBER_OF_PREDEFINED_ADDITIONAL_SUBTYPES = 2;
@Override @Override
@ -52,13 +52,14 @@ public class KeyboardLayoutSetSubtypesCountTests extends KeyboardLayoutSetTestsB
public final void testAsciiCapableSubtypesCount() { public final void testAsciiCapableSubtypesCount() {
final ArrayList<InputMethodSubtype> asciiCapableSubtypesList = final ArrayList<InputMethodSubtype> asciiCapableSubtypesList =
getAsciiCapableSubtypesList(); getSubtypesFilteredBy(FILTER_IS_ASCII_CAPABLE);
assertEquals(toString(asciiCapableSubtypesList), assertEquals(toString(asciiCapableSubtypesList),
NUMBER_OF_ASCII_CAPABLE_SUBTYPES, asciiCapableSubtypesList.size()); NUMBER_OF_ASCII_CAPABLE_SUBTYPES, asciiCapableSubtypesList.size());
} }
public final void testAdditionalSubtypesCount() { public final void testAdditionalSubtypesCount() {
final ArrayList<InputMethodSubtype> additionalSubtypesList = getAdditionalSubtypesList(); final ArrayList<InputMethodSubtype> additionalSubtypesList =
getSubtypesFilteredBy(FILTER_IS_ADDITIONAL_SUBTYPE);
assertEquals(toString(additionalSubtypesList), assertEquals(toString(additionalSubtypesList),
NUMBER_OF_PREDEFINED_ADDITIONAL_SUBTYPES, additionalSubtypesList.size()); NUMBER_OF_PREDEFINED_ADDITIONAL_SUBTYPES, additionalSubtypesList.size());
} }

View File

@ -17,7 +17,9 @@
package com.android.inputmethod.keyboard; package com.android.inputmethod.keyboard;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Resources; import android.content.res.Resources;
import android.preference.PreferenceManager;
import android.test.AndroidTestCase; import android.test.AndroidTestCase;
import android.view.ContextThemeWrapper; import android.view.ContextThemeWrapper;
import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo;
@ -30,6 +32,7 @@ import com.android.inputmethod.latin.Constants;
import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.RichInputMethodManager; import com.android.inputmethod.latin.RichInputMethodManager;
import com.android.inputmethod.latin.RichInputMethodSubtype; import com.android.inputmethod.latin.RichInputMethodSubtype;
import com.android.inputmethod.latin.settings.Settings;
import com.android.inputmethod.latin.utils.AdditionalSubtypeUtils; import com.android.inputmethod.latin.utils.AdditionalSubtypeUtils;
import com.android.inputmethod.latin.utils.ResourceUtils; import com.android.inputmethod.latin.utils.ResourceUtils;
import com.android.inputmethod.latin.utils.SubtypeLocaleUtils; import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
@ -40,9 +43,27 @@ import java.util.Locale;
public abstract class KeyboardLayoutSetTestsBase extends AndroidTestCase { public abstract class KeyboardLayoutSetTestsBase extends AndroidTestCase {
// All input method subtypes of LatinIME. // All input method subtypes of LatinIME.
private final ArrayList<InputMethodSubtype> mAllSubtypesList = new ArrayList<>(); private final ArrayList<InputMethodSubtype> mAllSubtypesList = new ArrayList<>();
private final ArrayList<InputMethodSubtype> mAsciiCapableSubtypesList = new ArrayList<>();
private final ArrayList<InputMethodSubtype> mAdditionalSubtypesList = new ArrayList<>();
public interface SubtypeFilter {
public boolean accept(final InputMethodSubtype subtype);
}
public static final SubtypeFilter FILTER_IS_ASCII_CAPABLE = new SubtypeFilter() {
@Override
public boolean accept(InputMethodSubtype subtype) {
return InputMethodSubtypeCompatUtils.isAsciiCapable(subtype);
}
};
public static final SubtypeFilter FILTER_IS_ADDITIONAL_SUBTYPE = new SubtypeFilter() {
@Override
public boolean accept(InputMethodSubtype subtype) {
return AdditionalSubtypeUtils.isAdditionalSubtype(subtype);
}
};
private SharedPreferences mSharedPreferences;
private String mSavedAdditionalSubtypes;
private int mScreenMetrics; private int mScreenMetrics;
protected abstract int getKeyboardThemeForTests(); protected abstract int getKeyboardThemeForTests();
@ -50,41 +71,53 @@ public abstract class KeyboardLayoutSetTestsBase extends AndroidTestCase {
@Override @Override
protected void setUp() throws Exception { protected void setUp() throws Exception {
super.setUp(); super.setUp();
final Context context = getContext();
mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
final Resources res = context.getResources();
// Save additional subtypes preference.
mSavedAdditionalSubtypes = Settings.readPrefAdditionalSubtypes(mSharedPreferences, res);
final String predefinedSubtypes = AdditionalSubtypeUtils.createPrefSubtypes(
res.getStringArray(R.array.predefined_subtypes));
// Reset additional subtypes to predefined ones.
Settings.writePrefAdditionalSubtypes(mSharedPreferences, predefinedSubtypes);
final KeyboardTheme keyboardTheme = KeyboardTheme.searchKeyboardThemeById( final KeyboardTheme keyboardTheme = KeyboardTheme.searchKeyboardThemeById(
getKeyboardThemeForTests(), KeyboardTheme.KEYBOARD_THEMES); getKeyboardThemeForTests(), KeyboardTheme.KEYBOARD_THEMES);
setContext(new ContextThemeWrapper(getContext(), keyboardTheme.mStyleId)); setContext(new ContextThemeWrapper(getContext(), keyboardTheme.mStyleId));
KeyboardLayoutSet.onKeyboardThemeChanged(); KeyboardLayoutSet.onKeyboardThemeChanged();
final Context context = getContext(); mScreenMetrics = res.getInteger(R.integer.config_screen_metrics);
mScreenMetrics = context.getResources().getInteger(R.integer.config_screen_metrics);
RichInputMethodManager.init(context); RichInputMethodManager.init(context);
final RichInputMethodManager richImm = RichInputMethodManager.getInstance(); final RichInputMethodManager richImm = RichInputMethodManager.getInstance();
final InputMethodInfo imi = richImm.getInputMethodInfoOfThisIme(); final InputMethodInfo imi = richImm.getInputMethodInfoOfThisIme();
final int subtypeCount = imi.getSubtypeCount(); final int subtypeCount = imi.getSubtypeCount();
for (int index = 0; index < subtypeCount; index++) { for (int index = 0; index < subtypeCount; index++) {
final InputMethodSubtype subtype = imi.getSubtypeAt(index); mAllSubtypesList.add(imi.getSubtypeAt(index));
if (AdditionalSubtypeUtils.isAdditionalSubtype(subtype)) {
mAdditionalSubtypesList.add(subtype);
continue;
}
mAllSubtypesList.add(subtype);
if (InputMethodSubtypeCompatUtils.isAsciiCapable(subtype)) {
mAsciiCapableSubtypesList.add(subtype);
} }
} }
@Override
protected void tearDown() throws Exception {
// Restore additional subtypes preference.
Settings.writePrefAdditionalSubtypes(mSharedPreferences, mSavedAdditionalSubtypes);
super.tearDown();
} }
protected final ArrayList<InputMethodSubtype> getAllSubtypesList() { protected final ArrayList<InputMethodSubtype> getAllSubtypesList() {
return mAllSubtypesList; return mAllSubtypesList;
} }
protected final ArrayList<InputMethodSubtype> getAsciiCapableSubtypesList() { protected final ArrayList<InputMethodSubtype> getSubtypesFilteredBy(
return mAsciiCapableSubtypesList; final SubtypeFilter filter) {
final ArrayList<InputMethodSubtype> list = new ArrayList<>();
for (final InputMethodSubtype subtype : mAllSubtypesList) {
if (filter.accept(subtype)) {
list.add(subtype);
} }
}
protected final ArrayList<InputMethodSubtype> getAdditionalSubtypesList() { return list;
return mAdditionalSubtypesList;
} }
protected final boolean isPhone() { protected final boolean isPhone() {
@ -102,7 +135,7 @@ public abstract class KeyboardLayoutSetTestsBase extends AndroidTestCase {
return subtype; return subtype;
} }
} }
for (final InputMethodSubtype subtype : mAsciiCapableSubtypesList) { for (final InputMethodSubtype subtype : getSubtypesFilteredBy(FILTER_IS_ASCII_CAPABLE)) {
final Locale subtypeLocale = SubtypeLocaleUtils.getSubtypeLocale(subtype); final Locale subtypeLocale = SubtypeLocaleUtils.getSubtypeLocale(subtype);
if (locale.equals(subtypeLocale)) { if (locale.equals(subtypeLocale)) {
// Create additional subtype. // Create additional subtype.