2014-03-28 07:03:00 +00:00
|
|
|
/*
|
|
|
|
* 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.
|
|
|
|
*/
|
|
|
|
|
2014-11-07 22:50:28 +00:00
|
|
|
package com.android.inputmethod.latin.utils;
|
2014-03-28 07:03:00 +00:00
|
|
|
|
2014-11-07 22:50:28 +00:00
|
|
|
import static com.android.inputmethod.latin.utils.LanguageOnSpacebarUtils.FORMAT_TYPE_FULL_LOCALE;
|
|
|
|
import static com.android.inputmethod.latin.utils.LanguageOnSpacebarUtils.FORMAT_TYPE_LANGUAGE_ONLY;
|
|
|
|
import static com.android.inputmethod.latin.utils.LanguageOnSpacebarUtils.FORMAT_TYPE_NONE;
|
2014-03-28 07:03:00 +00:00
|
|
|
|
|
|
|
import android.content.Context;
|
|
|
|
import android.test.AndroidTestCase;
|
|
|
|
import android.test.suitebuilder.annotation.SmallTest;
|
|
|
|
import android.view.inputmethod.InputMethodSubtype;
|
|
|
|
|
|
|
|
import com.android.inputmethod.latin.RichInputMethodManager;
|
2014-08-25 04:42:15 +00:00
|
|
|
import com.android.inputmethod.latin.RichInputMethodSubtype;
|
2014-03-28 07:03:00 +00:00
|
|
|
import com.android.inputmethod.latin.utils.AdditionalSubtypeUtils;
|
2014-11-07 22:50:28 +00:00
|
|
|
import com.android.inputmethod.latin.utils.LanguageOnSpacebarUtils;
|
2014-03-28 07:03:00 +00:00
|
|
|
import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
|
|
|
|
|
2014-11-06 20:08:10 +00:00
|
|
|
import java.util.ArrayList;
|
2014-03-28 07:03:00 +00:00
|
|
|
import java.util.Locale;
|
|
|
|
|
2014-11-06 20:08:10 +00:00
|
|
|
import javax.annotation.Nonnull;
|
|
|
|
|
2014-03-28 07:03:00 +00:00
|
|
|
@SmallTest
|
2014-11-07 22:50:28 +00:00
|
|
|
public class LanguageOnSpacebarUtilsTests extends AndroidTestCase {
|
2014-03-28 07:03:00 +00:00
|
|
|
private RichInputMethodManager mRichImm;
|
|
|
|
|
2014-08-25 04:42:15 +00:00
|
|
|
RichInputMethodSubtype EN_US_QWERTY;
|
|
|
|
RichInputMethodSubtype EN_GB_QWERTY;
|
|
|
|
RichInputMethodSubtype FR_AZERTY;
|
|
|
|
RichInputMethodSubtype FR_CA_QWERTY;
|
|
|
|
RichInputMethodSubtype FR_CH_SWISS;
|
|
|
|
RichInputMethodSubtype FR_CH_QWERTY;
|
|
|
|
RichInputMethodSubtype FR_CH_QWERTZ;
|
2014-11-06 20:08:10 +00:00
|
|
|
RichInputMethodSubtype IW_HEBREW;
|
2014-08-25 04:42:15 +00:00
|
|
|
RichInputMethodSubtype ZZ_QWERTY;
|
2014-03-28 07:03:00 +00:00
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void setUp() throws Exception {
|
|
|
|
super.setUp();
|
|
|
|
final Context context = getContext();
|
|
|
|
RichInputMethodManager.init(context);
|
|
|
|
mRichImm = RichInputMethodManager.getInstance();
|
2014-11-06 20:08:10 +00:00
|
|
|
|
|
|
|
EN_US_QWERTY = findSubtypeOf(Locale.US.toString(), "qwerty");
|
|
|
|
EN_GB_QWERTY = findSubtypeOf(Locale.UK.toString(), "qwerty");
|
|
|
|
FR_AZERTY = findSubtypeOf(Locale.FRENCH.toString(), "azerty");
|
|
|
|
FR_CA_QWERTY = findSubtypeOf(Locale.CANADA_FRENCH.toString(), "qwerty");
|
|
|
|
FR_CH_SWISS = findSubtypeOf("fr_CH", "swiss");
|
2014-08-25 04:42:15 +00:00
|
|
|
FR_CH_QWERTZ = new RichInputMethodSubtype(
|
|
|
|
AdditionalSubtypeUtils.createAsciiEmojiCapableAdditionalSubtype("fr_CH", "qwertz"));
|
|
|
|
FR_CH_QWERTY = new RichInputMethodSubtype(
|
|
|
|
AdditionalSubtypeUtils.createAsciiEmojiCapableAdditionalSubtype("fr_CH", "qwerty"));
|
2014-11-06 20:08:10 +00:00
|
|
|
IW_HEBREW = findSubtypeOf("iw", "hebrew");
|
|
|
|
ZZ_QWERTY = findSubtypeOf(SubtypeLocaleUtils.NO_LANGUAGE, "qwerty");
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nonnull
|
|
|
|
private RichInputMethodSubtype findSubtypeOf(final String localeString,
|
|
|
|
final String keyboardLayoutSetName) {
|
|
|
|
final InputMethodSubtype subtype = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
|
|
|
|
localeString, keyboardLayoutSetName);
|
|
|
|
if (subtype == null) {
|
|
|
|
throw new RuntimeException("Can't find subtype of " + localeString + " with "
|
|
|
|
+ keyboardLayoutSetName);
|
|
|
|
}
|
|
|
|
return new RichInputMethodSubtype(subtype);
|
|
|
|
}
|
|
|
|
|
2014-11-07 22:50:28 +00:00
|
|
|
private static void enableSubtypes(final RichInputMethodSubtype ... subtypes) {
|
2014-11-06 20:08:10 +00:00
|
|
|
final ArrayList<InputMethodSubtype> enabledSubtypes = new ArrayList<>();
|
|
|
|
for (final RichInputMethodSubtype subtype : subtypes) {
|
|
|
|
enabledSubtypes.add(subtype.getRawSubtype());
|
|
|
|
}
|
2014-11-07 22:50:28 +00:00
|
|
|
LanguageOnSpacebarUtils.setEnabledSubtypes(enabledSubtypes);
|
2014-11-06 20:08:10 +00:00
|
|
|
}
|
|
|
|
|
2014-11-07 22:50:28 +00:00
|
|
|
private static void assertFormatType(final RichInputMethodSubtype subtype,
|
2014-11-06 20:08:10 +00:00
|
|
|
final boolean implicitlyEnabledSubtype, final Locale systemLocale,
|
|
|
|
final int expectedFormat) {
|
2014-11-07 22:50:28 +00:00
|
|
|
LanguageOnSpacebarUtils.onSubtypeChanged(subtype, implicitlyEnabledSubtype, systemLocale);
|
2015-03-11 23:11:50 +00:00
|
|
|
assertEquals(subtype.getLocale() + " implicitly=" + implicitlyEnabledSubtype
|
2014-11-09 02:50:59 +00:00
|
|
|
+ " in " + systemLocale, expectedFormat,
|
2014-11-07 22:50:28 +00:00
|
|
|
LanguageOnSpacebarUtils.getLanguageOnSpacebarFormatType(subtype));
|
2014-11-06 20:08:10 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public void testOneSubtypeImplicitlyEnabled() {
|
|
|
|
enableSubtypes(EN_US_QWERTY);
|
|
|
|
assertFormatType(EN_US_QWERTY, true, Locale.US, FORMAT_TYPE_NONE);
|
|
|
|
|
|
|
|
enableSubtypes(EN_GB_QWERTY);
|
|
|
|
assertFormatType(EN_GB_QWERTY, true, Locale.UK, FORMAT_TYPE_NONE);
|
|
|
|
|
|
|
|
enableSubtypes(FR_AZERTY);
|
|
|
|
assertFormatType(FR_AZERTY, true, Locale.FRANCE, FORMAT_TYPE_NONE);
|
|
|
|
|
|
|
|
enableSubtypes(FR_CA_QWERTY);
|
|
|
|
assertFormatType(FR_CA_QWERTY, true, Locale.CANADA_FRENCH, FORMAT_TYPE_NONE);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void testOneSubtypeExplicitlyEnabled() {
|
|
|
|
enableSubtypes(EN_US_QWERTY);
|
|
|
|
assertFormatType(EN_US_QWERTY, false, Locale.UK, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(EN_US_QWERTY, false, Locale.FRANCE, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
|
|
|
|
enableSubtypes(EN_GB_QWERTY);
|
|
|
|
assertFormatType(EN_GB_QWERTY, false, Locale.US, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(EN_GB_QWERTY, false, Locale.FRANCE, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
|
|
|
|
enableSubtypes(FR_AZERTY);
|
|
|
|
assertFormatType(FR_AZERTY, false, Locale.US, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(FR_AZERTY, false, Locale.CANADA_FRENCH, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
|
|
|
|
enableSubtypes(FR_CA_QWERTY);
|
|
|
|
assertFormatType(FR_CA_QWERTY, false, Locale.US, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(FR_CA_QWERTY, false, Locale.FRANCE, FORMAT_TYPE_LANGUAGE_ONLY);
|
2014-03-28 07:03:00 +00:00
|
|
|
}
|
|
|
|
|
2014-11-06 20:08:10 +00:00
|
|
|
public void testOneSubtypeImplicitlyEnabledWithNoLanguageSubtype() {
|
|
|
|
final Locale Locale_IW = new Locale("iw");
|
|
|
|
enableSubtypes(IW_HEBREW, ZZ_QWERTY);
|
|
|
|
// TODO: Should this be FORMAT_TYPE_NONE?
|
|
|
|
assertFormatType(IW_HEBREW, true, Locale_IW, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
// TODO: Should this be FORMAT_TYPE_NONE?
|
|
|
|
assertFormatType(ZZ_QWERTY, true, Locale_IW, FORMAT_TYPE_FULL_LOCALE);
|
2014-03-28 07:03:00 +00:00
|
|
|
}
|
|
|
|
|
2014-11-06 20:08:10 +00:00
|
|
|
public void testTwoSubtypesExplicitlyEnabled() {
|
|
|
|
enableSubtypes(EN_US_QWERTY, FR_AZERTY);
|
|
|
|
assertFormatType(EN_US_QWERTY, false, Locale.US, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(FR_AZERTY, false, Locale.US, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(EN_US_QWERTY, false, Locale.FRANCE, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(FR_AZERTY, false, Locale.FRANCE, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(EN_US_QWERTY, false, Locale.JAPAN, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(FR_AZERTY, false, Locale.JAPAN, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
|
|
|
|
enableSubtypes(EN_US_QWERTY, ZZ_QWERTY);
|
|
|
|
assertFormatType(EN_US_QWERTY, false, Locale.US, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(ZZ_QWERTY, false, Locale.US, FORMAT_TYPE_FULL_LOCALE);
|
|
|
|
assertFormatType(EN_US_QWERTY, false, Locale.FRANCE, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(ZZ_QWERTY, false, Locale.FRANCE, FORMAT_TYPE_FULL_LOCALE);
|
|
|
|
|
2014-03-28 07:03:00 +00:00
|
|
|
}
|
|
|
|
|
2014-11-06 20:08:10 +00:00
|
|
|
public void testMultiSubtypeWithSameLanuageAndSameLayout() {
|
|
|
|
// Explicitly enable en_US, en_GB, fr_FR, and no language keyboards.
|
|
|
|
enableSubtypes(EN_US_QWERTY, EN_GB_QWERTY, FR_CA_QWERTY, ZZ_QWERTY);
|
|
|
|
|
|
|
|
assertFormatType(EN_US_QWERTY, false, Locale.US, FORMAT_TYPE_FULL_LOCALE);
|
|
|
|
assertFormatType(EN_GB_QWERTY, false, Locale.US, FORMAT_TYPE_FULL_LOCALE);
|
|
|
|
assertFormatType(FR_CA_QWERTY, false, Locale.US, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(ZZ_QWERTY, false, Locale.US, FORMAT_TYPE_FULL_LOCALE);
|
|
|
|
|
|
|
|
assertFormatType(EN_US_QWERTY, false, Locale.JAPAN, FORMAT_TYPE_FULL_LOCALE);
|
|
|
|
assertFormatType(EN_GB_QWERTY, false, Locale.JAPAN, FORMAT_TYPE_FULL_LOCALE);
|
|
|
|
assertFormatType(FR_CA_QWERTY, false, Locale.JAPAN, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(ZZ_QWERTY, false, Locale.JAPAN, FORMAT_TYPE_FULL_LOCALE);
|
2014-03-28 07:03:00 +00:00
|
|
|
}
|
|
|
|
|
2014-11-06 20:08:10 +00:00
|
|
|
public void testMultiSubtypesWithSameLanguageButHaveDifferentLayout() {
|
|
|
|
enableSubtypes(FR_AZERTY, FR_CA_QWERTY, FR_CH_SWISS, FR_CH_QWERTZ);
|
|
|
|
|
|
|
|
assertFormatType(FR_AZERTY, false, Locale.FRANCE, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(FR_CA_QWERTY, false, Locale.FRANCE, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(FR_CH_SWISS, false, Locale.FRANCE, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(FR_CH_QWERTZ, false, Locale.FRANCE, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
|
|
|
|
assertFormatType(FR_AZERTY, false, Locale.CANADA_FRENCH, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(FR_CA_QWERTY, false, Locale.CANADA_FRENCH, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(FR_CH_SWISS, false, Locale.CANADA_FRENCH, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(FR_CH_QWERTZ, false, Locale.CANADA_FRENCH, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
|
|
|
|
assertFormatType(FR_AZERTY, false, Locale.JAPAN, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(FR_CA_QWERTY, false, Locale.JAPAN, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(FR_CH_SWISS, false, Locale.JAPAN, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(FR_CH_QWERTZ, false, Locale.JAPAN, FORMAT_TYPE_LANGUAGE_ONLY);
|
2014-03-28 07:03:00 +00:00
|
|
|
}
|
|
|
|
|
2014-11-06 20:08:10 +00:00
|
|
|
public void testMultiSubtypesWithSameLanguageAndMayHaveSameLayout() {
|
|
|
|
enableSubtypes(FR_AZERTY, FR_CA_QWERTY, FR_CH_SWISS, FR_CH_QWERTY, FR_CH_QWERTZ);
|
|
|
|
|
|
|
|
assertFormatType(FR_AZERTY, false, Locale.FRANCE, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(FR_CA_QWERTY, false, Locale.FRANCE, FORMAT_TYPE_FULL_LOCALE);
|
|
|
|
assertFormatType(FR_CH_SWISS, false, Locale.FRANCE, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(FR_CH_QWERTY, false, Locale.FRANCE, FORMAT_TYPE_FULL_LOCALE);
|
|
|
|
assertFormatType(FR_CH_QWERTZ, false, Locale.FRANCE, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
|
|
|
|
assertFormatType(FR_AZERTY, false, Locale.CANADA_FRENCH, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(FR_CA_QWERTY, false, Locale.CANADA_FRENCH, FORMAT_TYPE_FULL_LOCALE);
|
|
|
|
assertFormatType(FR_CH_SWISS, false, Locale.CANADA_FRENCH, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(FR_CH_QWERTY, false, Locale.CANADA_FRENCH, FORMAT_TYPE_FULL_LOCALE);
|
|
|
|
assertFormatType(FR_CH_QWERTZ, false, Locale.CANADA_FRENCH, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
|
|
|
|
assertFormatType(FR_AZERTY, false, Locale.JAPAN, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(FR_CA_QWERTY, false, Locale.JAPAN, FORMAT_TYPE_FULL_LOCALE);
|
|
|
|
assertFormatType(FR_CH_SWISS, false, Locale.JAPAN, FORMAT_TYPE_LANGUAGE_ONLY);
|
|
|
|
assertFormatType(FR_CH_QWERTY, false, Locale.JAPAN, FORMAT_TYPE_FULL_LOCALE);
|
|
|
|
assertFormatType(FR_CH_QWERTZ, false, Locale.JAPAN, FORMAT_TYPE_LANGUAGE_ONLY);
|
2014-03-28 07:03:00 +00:00
|
|
|
}
|
|
|
|
}
|