Home | History | Annotate | Download | only in internal
      1 /*
      2  * Copyright (C) 2014 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.inputmethod.keyboard.internal;
     18 
     19 import static com.android.inputmethod.keyboard.internal.LanguageOnSpacebarHelper.FORMAT_TYPE_FULL_LOCALE;
     20 import static com.android.inputmethod.keyboard.internal.LanguageOnSpacebarHelper.FORMAT_TYPE_LANGUAGE_ONLY;
     21 import static com.android.inputmethod.keyboard.internal.LanguageOnSpacebarHelper.FORMAT_TYPE_NONE;
     22 
     23 import android.content.Context;
     24 import android.test.AndroidTestCase;
     25 import android.test.suitebuilder.annotation.SmallTest;
     26 import android.view.inputmethod.InputMethodSubtype;
     27 
     28 import com.android.inputmethod.latin.RichInputMethodManager;
     29 import com.android.inputmethod.latin.utils.AdditionalSubtypeUtils;
     30 import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
     31 
     32 import java.util.Arrays;
     33 import java.util.List;
     34 import java.util.Locale;
     35 
     36 @SmallTest
     37 public class LanguageOnSpacebarHelperTests extends AndroidTestCase {
     38     private final LanguageOnSpacebarHelper mLanguageOnSpacebarHelper =
     39             new LanguageOnSpacebarHelper();
     40 
     41     private RichInputMethodManager mRichImm;
     42 
     43     InputMethodSubtype EN_US_QWERTY;
     44     InputMethodSubtype EN_GB_QWERTY;
     45     InputMethodSubtype FR_AZERTY;
     46     InputMethodSubtype FR_CA_QWERTY;
     47     InputMethodSubtype FR_CH_SWISS;
     48     InputMethodSubtype FR_CH_QWERTY;
     49     InputMethodSubtype FR_CH_QWERTZ;
     50     InputMethodSubtype ZZ_QWERTY;
     51 
     52     @Override
     53     protected void setUp() throws Exception {
     54         super.setUp();
     55         final Context context = getContext();
     56         RichInputMethodManager.init(context);
     57         mRichImm = RichInputMethodManager.getInstance();
     58         SubtypeLocaleUtils.init(context);
     59 
     60         EN_US_QWERTY = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
     61                 Locale.US.toString(), "qwerty");
     62         EN_GB_QWERTY = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
     63                 Locale.UK.toString(), "qwerty");
     64         FR_AZERTY = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
     65                 Locale.FRENCH.toString(), "azerty");
     66         FR_CA_QWERTY = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
     67                 Locale.CANADA_FRENCH.toString(), "qwerty");
     68         FR_CH_SWISS = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
     69                 "fr_CH", "swiss");
     70         FR_CH_QWERTZ = AdditionalSubtypeUtils.createAsciiEmojiCapableAdditionalSubtype(
     71                 "fr_CH", "qwertz");
     72         FR_CH_QWERTY = AdditionalSubtypeUtils.createAsciiEmojiCapableAdditionalSubtype(
     73                 "fr_CH", "qwerty");
     74         ZZ_QWERTY = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
     75                 SubtypeLocaleUtils.NO_LANGUAGE, "qwerty");
     76     }
     77 
     78     private static List<InputMethodSubtype> asList(final InputMethodSubtype ... subtypes) {
     79         return Arrays.asList(subtypes);
     80     }
     81 
     82     public void testOneSubtype() {
     83         mLanguageOnSpacebarHelper.updateEnabledSubtypes(asList(EN_US_QWERTY));
     84         mLanguageOnSpacebarHelper.updateIsSystemLanguageSameAsInputLanguage(true /* isSame */);
     85         assertEquals("one same English (US)", FORMAT_TYPE_NONE,
     86                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(EN_US_QWERTY));
     87         assertEquals("one same NoLanguage", FORMAT_TYPE_FULL_LOCALE,
     88                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(ZZ_QWERTY));
     89 
     90         mLanguageOnSpacebarHelper.updateEnabledSubtypes(asList(FR_AZERTY));
     91         mLanguageOnSpacebarHelper.updateIsSystemLanguageSameAsInputLanguage(false /* isSame */);
     92         assertEquals("one diff English (US)", FORMAT_TYPE_LANGUAGE_ONLY,
     93                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(EN_US_QWERTY));
     94         assertEquals("one diff NoLanguage", FORMAT_TYPE_FULL_LOCALE,
     95                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(ZZ_QWERTY));
     96     }
     97 
     98     public void testTwoSubtypes() {
     99         mLanguageOnSpacebarHelper.updateEnabledSubtypes(asList(EN_US_QWERTY, FR_AZERTY));
    100 
    101         mLanguageOnSpacebarHelper.updateIsSystemLanguageSameAsInputLanguage(true /* isSame */);
    102         assertEquals("two same English (US)", FORMAT_TYPE_LANGUAGE_ONLY,
    103                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(EN_US_QWERTY));
    104         assertEquals("two same French)", FORMAT_TYPE_LANGUAGE_ONLY,
    105                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(FR_AZERTY));
    106         assertEquals("two same NoLanguage", FORMAT_TYPE_FULL_LOCALE,
    107                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(ZZ_QWERTY));
    108 
    109         mLanguageOnSpacebarHelper.updateIsSystemLanguageSameAsInputLanguage(false /* isSame */);
    110         assertEquals("two diff English (US)", FORMAT_TYPE_LANGUAGE_ONLY,
    111                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(EN_US_QWERTY));
    112         assertEquals("two diff French", FORMAT_TYPE_LANGUAGE_ONLY,
    113                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(FR_AZERTY));
    114         assertEquals("two diff NoLanguage", FORMAT_TYPE_FULL_LOCALE,
    115                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(ZZ_QWERTY));
    116     }
    117 
    118     public void testSameLanuageSubtypes() {
    119         mLanguageOnSpacebarHelper.updateEnabledSubtypes(
    120                 asList(EN_US_QWERTY, EN_GB_QWERTY, FR_AZERTY, ZZ_QWERTY));
    121 
    122         mLanguageOnSpacebarHelper.updateIsSystemLanguageSameAsInputLanguage(true /* isSame */);
    123         assertEquals("two same English (US)", FORMAT_TYPE_FULL_LOCALE,
    124                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(EN_US_QWERTY));
    125         assertEquals("two same English (UK)", FORMAT_TYPE_FULL_LOCALE,
    126                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(EN_GB_QWERTY));
    127         assertEquals("two same NoLanguage", FORMAT_TYPE_FULL_LOCALE,
    128                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(ZZ_QWERTY));
    129 
    130         mLanguageOnSpacebarHelper.updateIsSystemLanguageSameAsInputLanguage(false /* isSame */);
    131         assertEquals("two diff English (US)", FORMAT_TYPE_FULL_LOCALE,
    132                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(EN_US_QWERTY));
    133         assertEquals("two diff English (UK)", FORMAT_TYPE_FULL_LOCALE,
    134                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(EN_GB_QWERTY));
    135         assertEquals("two diff NoLanguage", FORMAT_TYPE_FULL_LOCALE,
    136                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(ZZ_QWERTY));
    137     }
    138 
    139     public void testMultiSameLanuageSubtypes() {
    140         mLanguageOnSpacebarHelper.updateEnabledSubtypes(
    141                 asList(FR_AZERTY, FR_CA_QWERTY, FR_CH_SWISS, FR_CH_QWERTY, FR_CH_QWERTZ));
    142 
    143         mLanguageOnSpacebarHelper.updateIsSystemLanguageSameAsInputLanguage(true /* isSame */);
    144         assertEquals("multi same French", FORMAT_TYPE_LANGUAGE_ONLY,
    145                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(FR_AZERTY));
    146         assertEquals("multi same French (CA)", FORMAT_TYPE_FULL_LOCALE,
    147                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(FR_CA_QWERTY));
    148         assertEquals("multi same French (CH)", FORMAT_TYPE_LANGUAGE_ONLY,
    149                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(FR_CH_SWISS));
    150         assertEquals("multi same French (CH) (QWERTY)", FORMAT_TYPE_FULL_LOCALE,
    151                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(FR_CH_QWERTY));
    152         assertEquals("multi same French (CH) (QWERTZ)", FORMAT_TYPE_LANGUAGE_ONLY,
    153                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(FR_CH_QWERTZ));
    154 
    155         mLanguageOnSpacebarHelper.updateIsSystemLanguageSameAsInputLanguage(false /* isSame */);
    156         assertEquals("multi diff French", FORMAT_TYPE_LANGUAGE_ONLY,
    157                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(FR_AZERTY));
    158         assertEquals("multi diff French (CA)", FORMAT_TYPE_FULL_LOCALE,
    159                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(FR_CA_QWERTY));
    160         assertEquals("multi diff French (CH)", FORMAT_TYPE_LANGUAGE_ONLY,
    161                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(FR_CH_SWISS));
    162         assertEquals("multi diff French (CH) (QWERTY)", FORMAT_TYPE_FULL_LOCALE,
    163                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(FR_CH_QWERTY));
    164         assertEquals("multi diff French (CH) (QWERTZ)", FORMAT_TYPE_LANGUAGE_ONLY,
    165                 mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(FR_CH_QWERTZ));
    166     }
    167 }
    168