162ca68051
Note that unit test for Sinhala (Sri Lanka) and Tamil (Sri Lanka) have been unexpectedly @suppressed. Bug: 17743363 Change-Id: I4076a61adbf2d4aee58417d0c354b8ef4a938668
180 lines
9.9 KiB
Java
180 lines
9.9 KiB
Java
/*
|
|
* Copyright (C) 2014 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package com.android.inputmethod.keyboard.action;
|
|
|
|
import android.content.res.Resources;
|
|
import android.test.suitebuilder.annotation.MediumTest;
|
|
import android.view.inputmethod.EditorInfo;
|
|
import android.view.inputmethod.InputMethodSubtype;
|
|
|
|
import com.android.inputmethod.keyboard.KeyboardLayoutSet;
|
|
import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
|
|
import com.android.inputmethod.keyboard.internal.KeyboardTextsSet;
|
|
import com.android.inputmethod.latin.R;
|
|
import com.android.inputmethod.latin.RichInputMethodManager;
|
|
import com.android.inputmethod.latin.utils.RunInLocale;
|
|
import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
|
|
|
|
import java.util.Locale;
|
|
|
|
@MediumTest
|
|
public class KlpActionLabelTests extends KlpActionTestsBase {
|
|
void doTestActionKeys(final InputMethodSubtype subtype, final String tag,
|
|
final ExpectedActionKey unspecifiedKey, final ExpectedActionKey noneKey,
|
|
final ExpectedActionKey goKey, final ExpectedActionKey searchKey,
|
|
final ExpectedActionKey sendKey, final ExpectedActionKey nextKey,
|
|
final ExpectedActionKey doneKey, final ExpectedActionKey previousKey) {
|
|
doTestActionKey(
|
|
tag + " unspecified", subtype, EditorInfo.IME_ACTION_UNSPECIFIED, unspecifiedKey);
|
|
doTestActionKey(tag + " none", subtype, EditorInfo.IME_ACTION_NONE, noneKey);
|
|
doTestActionKey(tag + " go", subtype, EditorInfo.IME_ACTION_GO, goKey);
|
|
doTestActionKey(tag + " search", subtype, EditorInfo.IME_ACTION_SEARCH, searchKey);
|
|
doTestActionKey(tag + " send", subtype, EditorInfo.IME_ACTION_SEND, sendKey);
|
|
doTestActionKey(tag + " next", subtype, EditorInfo.IME_ACTION_NEXT, nextKey);
|
|
doTestActionKey(tag + " done", subtype, EditorInfo.IME_ACTION_DONE, doneKey);
|
|
doTestActionKey(tag + " previous", subtype, EditorInfo.IME_ACTION_PREVIOUS, previousKey);
|
|
}
|
|
|
|
// Working variable to simulate system locale changing.
|
|
private Locale mSystemLocale = Locale.getDefault();
|
|
|
|
private void doTestActionKeysInLocaleWithStringResources(final InputMethodSubtype subtype,
|
|
final Locale labelLocale, final Locale systemLocale) {
|
|
// Simulate system locale changing, see {@link SystemBroadcastReceiver}.
|
|
if (!systemLocale.equals(mSystemLocale)) {
|
|
KeyboardLayoutSet.onSystemLocaleChanged();
|
|
mSystemLocale = systemLocale;
|
|
}
|
|
final ExpectedActionKey enterKey = ExpectedActionKey.newIconKey(
|
|
KeyboardIconsSet.NAME_ENTER_KEY);
|
|
final ExpectedActionKey goKey = ExpectedActionKey.newLabelKey(
|
|
R.string.label_go_key, labelLocale, getContext());
|
|
final ExpectedActionKey searchKey = ExpectedActionKey.newIconKey(
|
|
KeyboardIconsSet.NAME_SEARCH_KEY);
|
|
final ExpectedActionKey sendKey = ExpectedActionKey.newLabelKey(
|
|
R.string.label_send_key, labelLocale, getContext());
|
|
final ExpectedActionKey nextKey = ExpectedActionKey.newLabelKey(
|
|
R.string.label_next_key, labelLocale, getContext());
|
|
final ExpectedActionKey doneKey = ExpectedActionKey.newLabelKey(
|
|
R.string.label_done_key, labelLocale, getContext());
|
|
final ExpectedActionKey previousKey = ExpectedActionKey.newLabelKey(
|
|
R.string.label_previous_key, labelLocale, getContext());
|
|
final String tag = "label=" + labelLocale + " system=" + systemLocale
|
|
+ " " + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype);
|
|
final RunInLocale<Void> job = new RunInLocale<Void>() {
|
|
@Override
|
|
public Void job(final Resources res) {
|
|
doTestActionKeys(subtype, tag, enterKey, enterKey, goKey, searchKey, sendKey,
|
|
nextKey, doneKey, previousKey);
|
|
return null;
|
|
}
|
|
};
|
|
job.runInLocale(getContext().getResources(), systemLocale);
|
|
}
|
|
|
|
public void testActionLabelInOtherLocale() {
|
|
final RichInputMethodManager richImm = RichInputMethodManager.getInstance();
|
|
final InputMethodSubtype italian = richImm.findSubtypeByLocaleAndKeyboardLayoutSet(
|
|
Locale.ITALIAN.toString(), SubtypeLocaleUtils.QWERTY);
|
|
// An action label should be displayed in subtype's locale regardless of the system locale.
|
|
doTestActionKeysInLocaleWithStringResources(italian, Locale.ITALIAN, Locale.US);
|
|
doTestActionKeysInLocaleWithStringResources(italian, Locale.ITALIAN, Locale.FRENCH);
|
|
doTestActionKeysInLocaleWithStringResources(italian, Locale.ITALIAN, Locale.ITALIAN);
|
|
doTestActionKeysInLocaleWithStringResources(italian, Locale.ITALIAN, Locale.JAPANESE);
|
|
}
|
|
|
|
public void testNoLanguageSubtypeActionLabel() {
|
|
final RichInputMethodManager richImm = RichInputMethodManager.getInstance();
|
|
final InputMethodSubtype noLanguage = richImm.findSubtypeByLocaleAndKeyboardLayoutSet(
|
|
SubtypeLocaleUtils.NO_LANGUAGE, SubtypeLocaleUtils.QWERTY);
|
|
// An action label of no language keyboard should be displayed in the system locale.
|
|
doTestActionKeysInLocaleWithStringResources(noLanguage, Locale.US, Locale.US);
|
|
doTestActionKeysInLocaleWithStringResources(noLanguage, Locale.FRENCH, Locale.FRENCH);
|
|
doTestActionKeysInLocaleWithStringResources(noLanguage, Locale.ITALIAN, Locale.ITALIAN);
|
|
doTestActionKeysInLocaleWithStringResources(noLanguage, Locale.JAPANESE, Locale.JAPANESE);
|
|
}
|
|
|
|
private void doTestActionKeysInLocaleWithKeyboardTextsSet(final InputMethodSubtype subtype,
|
|
final Locale labelLocale, final Locale systemLocale) {
|
|
// Simulate system locale changing, see {@link SystemBroadcastReceiver}.
|
|
if (!systemLocale.equals(mSystemLocale)) {
|
|
KeyboardLayoutSet.onSystemLocaleChanged();
|
|
mSystemLocale = systemLocale;
|
|
}
|
|
final KeyboardTextsSet textsSet = new KeyboardTextsSet();
|
|
textsSet.setLocale(labelLocale, getContext());
|
|
final ExpectedActionKey enterKey = ExpectedActionKey.newIconKey(
|
|
KeyboardIconsSet.NAME_ENTER_KEY);
|
|
final ExpectedActionKey goKey = ExpectedActionKey.newLabelKey(
|
|
textsSet.getText("label_go_key"));
|
|
final ExpectedActionKey searchKey = ExpectedActionKey.newIconKey(
|
|
KeyboardIconsSet.NAME_SEARCH_KEY);
|
|
final ExpectedActionKey sendKey = ExpectedActionKey.newLabelKey(
|
|
textsSet.getText("label_send_key"));
|
|
final ExpectedActionKey nextKey = ExpectedActionKey.newLabelKey(
|
|
textsSet.getText("label_next_key"));
|
|
final ExpectedActionKey doneKey = ExpectedActionKey.newLabelKey(
|
|
textsSet.getText("label_done_key"));
|
|
final ExpectedActionKey previousKey = ExpectedActionKey.newLabelKey(
|
|
textsSet.getText("label_previous_key"));
|
|
final String tag = "label=" + subtype.getLocale() + " system=" + systemLocale
|
|
+ " " + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype);
|
|
final RunInLocale<Void> job = new RunInLocale<Void>() {
|
|
@Override
|
|
public Void job(final Resources res) {
|
|
doTestActionKeys(subtype, tag, enterKey, enterKey, goKey, searchKey, sendKey,
|
|
nextKey, doneKey, previousKey);
|
|
return null;
|
|
}
|
|
};
|
|
job.runInLocale(getContext().getResources(), systemLocale);
|
|
}
|
|
|
|
public void testHinglishActionLabel() {
|
|
final RichInputMethodManager richImm = RichInputMethodManager.getInstance();
|
|
final Locale hi_ZZ = new Locale("hi", "ZZ");
|
|
final InputMethodSubtype hiLatn = richImm.findSubtypeByLocaleAndKeyboardLayoutSet(
|
|
hi_ZZ.toString(), SubtypeLocaleUtils.QWERTY);
|
|
// This is a preliminary subtype and may not exist.
|
|
if (hiLatn == null) {
|
|
return;
|
|
}
|
|
// An action label should be displayed in subtype's locale regardless of the system locale.
|
|
doTestActionKeysInLocaleWithKeyboardTextsSet(hiLatn, hi_ZZ, new Locale("hi"));
|
|
doTestActionKeysInLocaleWithKeyboardTextsSet(hiLatn, hi_ZZ, Locale.US);
|
|
doTestActionKeysInLocaleWithKeyboardTextsSet(hiLatn, hi_ZZ, Locale.FRENCH);
|
|
doTestActionKeysInLocaleWithKeyboardTextsSet(hiLatn, hi_ZZ, Locale.ITALIAN);
|
|
doTestActionKeysInLocaleWithKeyboardTextsSet(hiLatn, hi_ZZ, Locale.JAPANESE);
|
|
}
|
|
|
|
public void testSerbianLatinActionLabel() {
|
|
final RichInputMethodManager richImm = RichInputMethodManager.getInstance();
|
|
final Locale sr_ZZ = new Locale("sr", "ZZ");
|
|
final InputMethodSubtype srLatn = richImm.findSubtypeByLocaleAndKeyboardLayoutSet(
|
|
sr_ZZ.toString(), "serbian_qwertz");
|
|
// This is a preliminary subtype and may not exist.
|
|
if (srLatn == null) {
|
|
return;
|
|
}
|
|
// An action label should be displayed in subtype's locale regardless of the system locale.
|
|
doTestActionKeysInLocaleWithKeyboardTextsSet(srLatn, sr_ZZ, new Locale("sr"));
|
|
doTestActionKeysInLocaleWithKeyboardTextsSet(srLatn, sr_ZZ, Locale.US);
|
|
doTestActionKeysInLocaleWithKeyboardTextsSet(srLatn, sr_ZZ, Locale.FRENCH);
|
|
doTestActionKeysInLocaleWithKeyboardTextsSet(srLatn, sr_ZZ, Locale.ITALIAN);
|
|
doTestActionKeysInLocaleWithKeyboardTextsSet(srLatn, sr_ZZ, Locale.JAPANESE);
|
|
}
|
|
}
|