• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
setUp()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 
asList(final InputMethodSubtype ... subtypes)78     private static List<InputMethodSubtype> asList(final InputMethodSubtype ... subtypes) {
79         return Arrays.asList(subtypes);
80     }
81 
testOneSubtype()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 
testTwoSubtypes()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 
testSameLanuageSubtypes()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 
testMultiSameLanuageSubtypes()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