aboutsummaryrefslogtreecommitdiffstats
path: root/tests/src/com/android/inputmethod/latin
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/com/android/inputmethod/latin')
-rw-r--r--tests/src/com/android/inputmethod/latin/EditDistanceTests.java18
-rw-r--r--tests/src/com/android/inputmethod/latin/InputLogicTests.java399
-rw-r--r--tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java49
-rw-r--r--tests/src/com/android/inputmethod/latin/SuggestHelper.java67
-rw-r--r--tests/src/com/android/inputmethod/latin/SuggestTests.java7
-rw-r--r--tests/src/com/android/inputmethod/latin/SuggestTestsBase.java20
-rw-r--r--tests/src/com/android/inputmethod/latin/UserBigramSuggestHelper.java13
-rw-r--r--tests/src/com/android/inputmethod/latin/UserBigramSuggestTests.java4
-rw-r--r--tests/src/com/android/inputmethod/latin/UtilsTests.java2
9 files changed, 478 insertions, 101 deletions
diff --git a/tests/src/com/android/inputmethod/latin/EditDistanceTests.java b/tests/src/com/android/inputmethod/latin/EditDistanceTests.java
index 75bd04938..c053a49e5 100644
--- a/tests/src/com/android/inputmethod/latin/EditDistanceTests.java
+++ b/tests/src/com/android/inputmethod/latin/EditDistanceTests.java
@@ -37,7 +37,7 @@ public class EditDistanceTests extends AndroidTestCase {
* sitting
*/
public void testExample1() {
- final int dist = Utils.editDistance("kitten", "sitting");
+ final int dist = BinaryDictionary.editDistance("kitten", "sitting");
assertEquals("edit distance between 'kitten' and 'sitting' is 3",
3, dist);
}
@@ -50,26 +50,26 @@ public class EditDistanceTests extends AndroidTestCase {
* S--unday
*/
public void testExample2() {
- final int dist = Utils.editDistance("Saturday", "Sunday");
+ final int dist = BinaryDictionary.editDistance("Saturday", "Sunday");
assertEquals("edit distance between 'Saturday' and 'Sunday' is 3",
3, dist);
}
public void testBothEmpty() {
- final int dist = Utils.editDistance("", "");
+ final int dist = BinaryDictionary.editDistance("", "");
assertEquals("when both string are empty, no edits are needed",
0, dist);
}
public void testFirstArgIsEmpty() {
- final int dist = Utils.editDistance("", "aaaa");
+ final int dist = BinaryDictionary.editDistance("", "aaaa");
assertEquals("when only one string of the arguments is empty,"
+ " the edit distance is the length of the other.",
4, dist);
}
public void testSecoondArgIsEmpty() {
- final int dist = Utils.editDistance("aaaa", "");
+ final int dist = BinaryDictionary.editDistance("aaaa", "");
assertEquals("when only one string of the arguments is empty,"
+ " the edit distance is the length of the other.",
4, dist);
@@ -78,27 +78,27 @@ public class EditDistanceTests extends AndroidTestCase {
public void testSameStrings() {
final String arg1 = "The quick brown fox jumps over the lazy dog.";
final String arg2 = "The quick brown fox jumps over the lazy dog.";
- final int dist = Utils.editDistance(arg1, arg2);
+ final int dist = BinaryDictionary.editDistance(arg1, arg2);
assertEquals("when same strings are passed, distance equals 0.",
0, dist);
}
public void testSameReference() {
final String arg = "The quick brown fox jumps over the lazy dog.";
- final int dist = Utils.editDistance(arg, arg);
+ final int dist = BinaryDictionary.editDistance(arg, arg);
assertEquals("when same string references are passed, the distance equals 0.",
0, dist);
}
public void testNullArg() {
try {
- Utils.editDistance(null, "aaa");
+ BinaryDictionary.editDistance(null, "aaa");
fail("IllegalArgumentException should be thrown.");
} catch (Exception e) {
assertTrue(e instanceof IllegalArgumentException);
}
try {
- Utils.editDistance("aaa", null);
+ BinaryDictionary.editDistance("aaa", null);
fail("IllegalArgumentException should be thrown.");
} catch (Exception e) {
assertTrue(e instanceof IllegalArgumentException);
diff --git a/tests/src/com/android/inputmethod/latin/InputLogicTests.java b/tests/src/com/android/inputmethod/latin/InputLogicTests.java
new file mode 100644
index 000000000..9d886da3b
--- /dev/null
+++ b/tests/src/com/android/inputmethod/latin/InputLogicTests.java
@@ -0,0 +1,399 @@
+/*
+ * Copyright (C) 2012 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.latin;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+import android.test.ServiceTestCase;
+import android.text.InputType;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
+import android.view.View;
+import android.view.inputmethod.BaseInputConnection;
+import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputConnection;
+import android.widget.FrameLayout;
+import android.widget.TextView;
+
+import com.android.inputmethod.keyboard.Keyboard;
+import com.android.inputmethod.keyboard.KeyboardActionListener;
+import com.android.inputmethod.latin.spellcheck.AndroidSpellCheckerService; // for proximity info
+import com.android.inputmethod.latin.spellcheck.SpellCheckerProximityInfo;
+
+import java.util.Arrays;
+import java.util.HashMap;
+
+public class InputLogicTests extends ServiceTestCase<LatinIME> {
+
+ private static final String PREF_DEBUG_MODE = "debug_mode";
+
+ private LatinIME mLatinIME;
+ private TextView mTextView;
+ private InputConnection mInputConnection;
+ private HashMap<Integer, int[]> mProximity;
+
+ public InputLogicTests() {
+ super(LatinIME.class);
+ mProximity = createProximity();
+ }
+
+ private static HashMap<Integer, int[]> createProximity() {
+ final HashMap<Integer, int[]> proximity = new HashMap<Integer, int[]>();
+ final int[] testProximity = SpellCheckerProximityInfo.getProximityForScript(
+ AndroidSpellCheckerService.SCRIPT_LATIN);
+ final int ROW_SIZE = SpellCheckerProximityInfo.ROW_SIZE;
+ final int NUL = SpellCheckerProximityInfo.NUL;
+ for (int row = 0; row * ROW_SIZE < testProximity.length; ++row) {
+ final int rowBase = row * ROW_SIZE;
+ int column;
+ for (column = 1; NUL != testProximity[rowBase + column]; ++column) {
+ // Do nothing, just search for a NUL element
+ }
+ proximity.put(testProximity[row * ROW_SIZE],
+ Arrays.copyOfRange(testProximity, rowBase, rowBase + column));
+ }
+ return proximity;
+ }
+
+ // returns the previous setting value
+ private boolean setDebugMode(final boolean mode) {
+ final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mLatinIME);
+ final boolean previousDebugSetting = prefs.getBoolean(PREF_DEBUG_MODE, false);
+ final SharedPreferences.Editor editor = prefs.edit();
+ editor.putBoolean(PREF_DEBUG_MODE, true);
+ editor.commit();
+ return previousDebugSetting;
+ }
+
+ @Override
+ protected void setUp() {
+ try {
+ super.setUp();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ mTextView = new TextView(getContext());
+ mTextView.setInputType(InputType.TYPE_CLASS_TEXT);
+ mTextView.setEnabled(true);
+ setupService();
+ mLatinIME = getService();
+ final boolean previousDebugSetting = setDebugMode(true);
+ mLatinIME.onCreate();
+ setDebugMode(previousDebugSetting);
+ final EditorInfo ei = new EditorInfo();
+ ei.inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT;
+ final InputConnection ic = mTextView.onCreateInputConnection(ei);
+ ei.inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT;
+ final LayoutInflater inflater =
+ (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ final ViewGroup vg = new FrameLayout(getContext());
+ final View inputView = inflater.inflate(R.layout.input_view, vg);
+ mLatinIME.setInputView(inputView);
+ mLatinIME.onBindInput();
+ mLatinIME.onCreateInputView();
+ mLatinIME.onStartInputView(ei, false);
+ mLatinIME.onCreateInputMethodInterface().startInput(ic, ei);
+ mInputConnection = ic;
+ // Wait for the main dictionary to be loaded (we need it for auto-correction tests)
+ int remainingAttempts = 10;
+ while (remainingAttempts > 0 && !mLatinIME.mSuggest.hasMainDictionary()) {
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ // Don't do much
+ } finally {
+ --remainingAttempts;
+ }
+ }
+ if (!mLatinIME.mSuggest.hasMainDictionary()) {
+ throw new RuntimeException("Can't initialize the main dictionary");
+ }
+ }
+
+ // type(int) and type(String): helper methods to send a code point resp. a string to LatinIME.
+ private void type(final int codePoint) {
+ // onPressKey and onReleaseKey are explicitly deactivated here, but they do happen in the
+ // code (although multitouch/slide input and other factors make the sequencing complicated).
+ // They are supposed to be entirely deconnected from the input logic from LatinIME point of
+ // view and only delegates to the parts of the code that care. So we don't include them here
+ // to keep these tests as pinpoint as possible and avoid bringing it too many dependencies,
+ // but keep them in mind if something breaks. Commenting them out as is should work.
+ //mLatinIME.onPressKey(codePoint);
+ int[] proximityKeys = mProximity.get(codePoint);
+ if (null == proximityKeys) {
+ proximityKeys = new int[] { codePoint };
+ }
+ mLatinIME.onCodeInput(codePoint, proximityKeys,
+ KeyboardActionListener.NOT_A_TOUCH_COORDINATE,
+ KeyboardActionListener.NOT_A_TOUCH_COORDINATE);
+ //mLatinIME.onReleaseKey(codePoint, false);
+ }
+
+ private void type(final String stringToType) {
+ for (int i = 0; i < stringToType.length(); i = stringToType.offsetByCodePoints(i, 1)) {
+ type(stringToType.codePointAt(i));
+ }
+ }
+
+ public void testTypeWord() {
+ final String WORD_TO_TYPE = "abcd";
+ type(WORD_TO_TYPE);
+ assertEquals("type word", WORD_TO_TYPE, mTextView.getText().toString());
+ }
+
+ public void testPickSuggestionThenBackspace() {
+ final String WORD_TO_TYPE = "this";
+ final String EXPECTED_RESULT = "this";
+ type(WORD_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, WORD_TO_TYPE);
+ mLatinIME.onUpdateSelection(0, 0, WORD_TO_TYPE.length(), WORD_TO_TYPE.length(), -1, -1);
+ type(Keyboard.CODE_DELETE);
+ assertEquals("press suggestion then backspace", EXPECTED_RESULT,
+ mTextView.getText().toString());
+ }
+
+ public void testPickTypedWordOverAutoCorrectionThenBackspace() {
+ final String WORD_TO_TYPE = "tgis";
+ final String EXPECTED_RESULT = "tgis";
+ type(WORD_TO_TYPE);
+ // Choose the typed word, which should be in position 1 (because position 0 should
+ // be occupied by the "this" auto-correction, as checked by testAutoCorrect())
+ mLatinIME.pickSuggestionManually(1, WORD_TO_TYPE);
+ mLatinIME.onUpdateSelection(0, 0, WORD_TO_TYPE.length(), WORD_TO_TYPE.length(), -1, -1);
+ type(Keyboard.CODE_DELETE);
+ assertEquals("pick typed word over auto-correction then backspace", EXPECTED_RESULT,
+ mTextView.getText().toString());
+ }
+
+ public void testDeleteSelection() {
+ final String STRING_TO_TYPE = "some text delete me some text";
+ final int SELECTION_START = 10;
+ final int SELECTION_END = 19;
+ final String EXPECTED_RESULT = "some text some text";
+ type(STRING_TO_TYPE);
+ // There is no IMF to call onUpdateSelection for us so we must do it by hand.
+ // Send once to simulate the cursor actually responding to the move caused by typing.
+ // This is necessary because LatinIME is bookkeeping to avoid confusing a real cursor
+ // move with a move triggered by LatinIME inputting stuff.
+ mLatinIME.onUpdateSelection(0, 0, STRING_TO_TYPE.length(), STRING_TO_TYPE.length(), -1, -1);
+ mInputConnection.setSelection(SELECTION_START, SELECTION_END);
+ // And now we simulate the user actually selecting some text.
+ mLatinIME.onUpdateSelection(0, 0, SELECTION_START, SELECTION_END, -1, -1);
+ type(Keyboard.CODE_DELETE);
+ assertEquals("delete selection", EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testAutoCorrect() {
+ final String STRING_TO_TYPE = "tgis ";
+ final String EXPECTED_RESULT = "this ";
+ type(STRING_TO_TYPE);
+ assertEquals("simple auto-correct", EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testDoubleSpace() {
+ final String STRING_TO_TYPE = "this ";
+ final String EXPECTED_RESULT = "this. ";
+ type(STRING_TO_TYPE);
+ assertEquals("double space make a period", EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testCancelDoubleSpace() {
+ final String STRING_TO_TYPE = "this ";
+ final String EXPECTED_RESULT = "this ";
+ type(STRING_TO_TYPE);
+ type(Keyboard.CODE_DELETE);
+ assertEquals("double space make a period", EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testBackspaceAtStartAfterAutocorrect() {
+ final String STRING_TO_TYPE = "tgis ";
+ final String EXPECTED_RESULT = "this ";
+ final int NEW_CURSOR_POSITION = 0;
+ type(STRING_TO_TYPE);
+ mLatinIME.onUpdateSelection(0, 0, STRING_TO_TYPE.length(), STRING_TO_TYPE.length(), -1, -1);
+ mInputConnection.setSelection(NEW_CURSOR_POSITION, NEW_CURSOR_POSITION);
+ mLatinIME.onUpdateSelection(0, 0, NEW_CURSOR_POSITION, NEW_CURSOR_POSITION, -1, -1);
+ type(Keyboard.CODE_DELETE);
+ assertEquals("auto correct then move cursor to start of line then backspace",
+ EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testAutoCorrectThenMoveCursorThenBackspace() {
+ final String STRING_TO_TYPE = "and tgis ";
+ final String EXPECTED_RESULT = "andthis ";
+ final int NEW_CURSOR_POSITION = STRING_TO_TYPE.indexOf('t');
+ type(STRING_TO_TYPE);
+ mLatinIME.onUpdateSelection(0, 0, STRING_TO_TYPE.length(), STRING_TO_TYPE.length(), -1, -1);
+ mInputConnection.setSelection(NEW_CURSOR_POSITION, NEW_CURSOR_POSITION);
+ mLatinIME.onUpdateSelection(0, 0, NEW_CURSOR_POSITION, NEW_CURSOR_POSITION, -1, -1);
+ type(Keyboard.CODE_DELETE);
+ assertEquals("auto correct then move cursor then backspace",
+ EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testNoSpaceAfterManualPick() {
+ final String WORD_TO_TYPE = "this";
+ final String EXPECTED_RESULT = WORD_TO_TYPE;
+ type(WORD_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, WORD_TO_TYPE);
+ assertEquals("no space after manual pick", EXPECTED_RESULT,
+ mTextView.getText().toString());
+ }
+
+ public void testManualPickThenType() {
+ final String WORD1_TO_TYPE = "this";
+ final String WORD2_TO_TYPE = "is";
+ final String EXPECTED_RESULT = "this is";
+ type(WORD1_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, WORD1_TO_TYPE);
+ type(WORD2_TO_TYPE);
+ assertEquals("manual pick then type", EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testManualPickThenSeparator() {
+ final String WORD1_TO_TYPE = "this";
+ final String WORD2_TO_TYPE = "!";
+ final String EXPECTED_RESULT = "this!";
+ type(WORD1_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, WORD1_TO_TYPE);
+ type(WORD2_TO_TYPE);
+ assertEquals("manual pick then separator", EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testWordThenSpaceThenPunctuationFromStripTwice() {
+ final String WORD_TO_TYPE = "this ";
+ final String PUNCTUATION_FROM_STRIP = "!";
+ final String EXPECTED_RESULT = "this!! ";
+ type(WORD_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, PUNCTUATION_FROM_STRIP);
+ mLatinIME.pickSuggestionManually(0, PUNCTUATION_FROM_STRIP);
+ assertEquals("type word then type space then punctuation from strip twice", EXPECTED_RESULT,
+ mTextView.getText().toString());
+ }
+
+ public void testWordThenSpaceThenPunctuationFromKeyboardTwice() {
+ final String WORD_TO_TYPE = "this !!";
+ final String EXPECTED_RESULT = "this !!";
+ type(WORD_TO_TYPE);
+ assertEquals("manual pick then space then punctuation from keyboard twice", EXPECTED_RESULT,
+ mTextView.getText().toString());
+ }
+
+ public void testManualPickThenPunctuationFromStripTwiceThenType() {
+ final String WORD1_TO_TYPE = "this";
+ final String WORD2_TO_TYPE = "is";
+ final String PUNCTUATION_FROM_STRIP = "!";
+ final String EXPECTED_RESULT = "this!! is";
+ type(WORD1_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, WORD1_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, PUNCTUATION_FROM_STRIP);
+ mLatinIME.pickSuggestionManually(0, PUNCTUATION_FROM_STRIP);
+ type(WORD2_TO_TYPE);
+ assertEquals("pick word then pick punctuation twice then type", EXPECTED_RESULT,
+ mTextView.getText().toString());
+ }
+
+ public void testManualPickThenSpaceThenType() {
+ final String WORD1_TO_TYPE = "this";
+ final String WORD2_TO_TYPE = " is";
+ final String EXPECTED_RESULT = "this is";
+ type(WORD1_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, WORD1_TO_TYPE);
+ type(WORD2_TO_TYPE);
+ assertEquals("manual pick then space then type", WORD1_TO_TYPE + WORD2_TO_TYPE,
+ mTextView.getText().toString());
+ }
+
+ public void testDeleteWholeComposingWord() {
+ final String WORD_TO_TYPE = "this";
+ type(WORD_TO_TYPE);
+ for (int i = 0; i < WORD_TO_TYPE.length(); ++i) {
+ type(Keyboard.CODE_DELETE);
+ }
+ assertEquals("delete whole composing word", "", mTextView.getText().toString());
+ }
+
+ public void testManuallyPickedWordThenColon() {
+ final String WORD_TO_TYPE = "this";
+ final String PUNCTUATION = ":";
+ final String EXPECTED_RESULT = "this:";
+ type(WORD_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, WORD_TO_TYPE);
+ type(PUNCTUATION);
+ assertEquals("manually pick word then colon",
+ EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testManuallyPickedWordThenOpenParen() {
+ final String WORD_TO_TYPE = "this";
+ final String PUNCTUATION = "(";
+ final String EXPECTED_RESULT = "this (";
+ type(WORD_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, WORD_TO_TYPE);
+ type(PUNCTUATION);
+ assertEquals("manually pick word then open paren",
+ EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testManuallyPickedWordThenCloseParen() {
+ final String WORD_TO_TYPE = "this";
+ final String PUNCTUATION = ")";
+ final String EXPECTED_RESULT = "this)";
+ type(WORD_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, WORD_TO_TYPE);
+ type(PUNCTUATION);
+ assertEquals("manually pick word then close paren",
+ EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testManuallyPickedWordThenSmiley() {
+ final String WORD_TO_TYPE = "this";
+ final String SPECIAL_KEY = ":-)";
+ final String EXPECTED_RESULT = "this :-)";
+ type(WORD_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, WORD_TO_TYPE);
+ mLatinIME.onTextInput(SPECIAL_KEY);
+ assertEquals("manually pick word then press the smiley key",
+ EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testManuallyPickedWordThenDotCom() {
+ final String WORD_TO_TYPE = "this";
+ final String SPECIAL_KEY = ".com";
+ final String EXPECTED_RESULT = "this.com";
+ type(WORD_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, WORD_TO_TYPE);
+ mLatinIME.onTextInput(SPECIAL_KEY);
+ assertEquals("manually pick word then press the .com key",
+ EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testTypeWordTypeDotThenPressDotCom() {
+ final String WORD_TO_TYPE = "this.";
+ final String SPECIAL_KEY = ".com";
+ final String EXPECTED_RESULT = "this.com";
+ type(WORD_TO_TYPE);
+ mLatinIME.onTextInput(SPECIAL_KEY);
+ assertEquals("type word type dot then press the .com key",
+ EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ // TODO: Add some tests for non-BMP characters
+}
diff --git a/tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java b/tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java
index fec3e8ee1..7925d1a49 100644
--- a/tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java
+++ b/tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java
@@ -16,10 +16,7 @@
package com.android.inputmethod.latin;
-import com.android.inputmethod.latin.LocaleUtils;
-
import android.content.Context;
-import android.content.res.Resources;
import android.test.AndroidTestCase;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
@@ -30,24 +27,22 @@ import java.util.List;
import java.util.Locale;
public class SubtypeLocaleTests extends AndroidTestCase {
- private static final String PACKAGE = LatinIME.class.getPackage().getName();
-
- private Resources mRes;
- private List<InputMethodSubtype> mKeyboardSubtypes = new ArrayList<InputMethodSubtype>();
+ private List<InputMethodSubtype> mKeyboardSubtypes;
@Override
protected void setUp() throws Exception {
super.setUp();
final Context context = getContext();
- mRes = context.getResources();
+ final String packageName = context.getApplicationInfo().packageName;
SubtypeLocale.init(context);
final InputMethodManager imm = (InputMethodManager) context.getSystemService(
Context.INPUT_METHOD_SERVICE);
for (final InputMethodInfo imi : imm.getInputMethodList()) {
- if (imi.getPackageName().equals(PACKAGE)) {
+ if (imi.getPackageName().equals(packageName)) {
+ mKeyboardSubtypes = new ArrayList<InputMethodSubtype>();
final int subtypeCount = imi.getSubtypeCount();
for (int i = 0; i < subtypeCount; ++i) {
InputMethodSubtype subtype = imi.getSubtypeAt(i);
@@ -58,37 +53,29 @@ public class SubtypeLocaleTests extends AndroidTestCase {
break;
}
}
- assertNotNull("Can not find input method " + PACKAGE, mKeyboardSubtypes);
+ assertNotNull("Can not find input method " + packageName, mKeyboardSubtypes);
assertTrue("Can not find keyboard subtype", mKeyboardSubtypes.size() > 0);
}
- private String getStringWithLocale(int resId, Locale locale) {
- final Locale savedLocale = Locale.getDefault();
- try {
- Locale.setDefault(locale);
- return mRes.getString(resId);
- } finally {
- Locale.setDefault(savedLocale);
- }
- }
-
public void testSubtypeLocale() {
final StringBuilder messages = new StringBuilder();
int failedCount = 0;
for (final InputMethodSubtype subtype : mKeyboardSubtypes) {
- final String localeCode = subtype.getLocale();
- final Locale locale = LocaleUtils.constructLocaleFromString(localeCode);
- // The locale name which will be displayed on spacebar. For example 'English (US)' or
- // 'Francais (Canada)'. (c=\u008d)
- final String displayName = SubtypeLocale.getFullDisplayName(locale);
- // The subtype name in its locale. For example 'English (US) Keyboard' or
- // 'Clavier Francais (Canada)'. (c=\u008d)
- final String subtypeName = getStringWithLocale(subtype.getNameResId(), locale);
- if (subtypeName.contains(displayName)) {
+ final Locale locale = LocaleUtils.constructLocaleFromString(subtype.getLocale());
+ final String subtypeLocaleString =
+ subtype.containsExtraValueKey(LatinIME.SUBTYPE_EXTRA_VALUE_KEYBOARD_LOCALE)
+ ? subtype.getExtraValueOf(LatinIME.SUBTYPE_EXTRA_VALUE_KEYBOARD_LOCALE)
+ : subtype.getLocale();
+ final Locale subtypeLocale = LocaleUtils.constructLocaleFromString(subtypeLocaleString);
+ // The subtype name in its locale. For example 'English (US)' or 'Deutsch (QWERTY)'.
+ final String subtypeName = SubtypeLocale.getFullDisplayName(subtypeLocale);
+ // The locale language name in its locale.
+ final String languageName = locale.getDisplayLanguage(locale);
+ if (!subtypeName.contains(languageName)) {
failedCount++;
messages.append(String.format(
- "subtype name is '%s' and should contain locale '%s' name '%s'\n",
- subtypeName, localeCode, displayName));
+ "subtype name is '%s' and should contain locale '%s' language name '%s'\n",
+ subtypeName, subtypeLocale, languageName));
}
}
assertEquals(messages.toString(), 0, failedCount);
diff --git a/tests/src/com/android/inputmethod/latin/SuggestHelper.java b/tests/src/com/android/inputmethod/latin/SuggestHelper.java
index 464930f4c..0c023bd78 100644
--- a/tests/src/com/android/inputmethod/latin/SuggestHelper.java
+++ b/tests/src/com/android/inputmethod/latin/SuggestHelper.java
@@ -19,72 +19,54 @@ package com.android.inputmethod.latin;
import android.content.Context;
import android.text.TextUtils;
-import com.android.inputmethod.keyboard.Key;
import com.android.inputmethod.keyboard.KeyDetector;
+import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.keyboard.KeyboardId;
-import com.android.inputmethod.keyboard.LatinKeyboard;
+import com.android.inputmethod.keyboard.KeyboardSet;
import java.io.File;
import java.util.Locale;
public class SuggestHelper {
protected final Suggest mSuggest;
- protected final LatinKeyboard mKeyboard;
+ protected int mCorrectionMode;
+ protected final Keyboard mKeyboard;
private final KeyDetector mKeyDetector;
- public SuggestHelper(Context context, int dictionaryId, KeyboardId keyboardId) {
+ public SuggestHelper(Context context, int dictionaryId, KeyboardSet keyboardSet) {
// Use null as the locale for Suggest so as to force it to use the internal dictionary
// (and not try to find a dictionary provider for a specified locale)
- mSuggest = new Suggest(context, dictionaryId, null);
- mKeyboard = new LatinKeyboard.Builder(context).load(keyboardId).build();
- mKeyDetector = new KeyDetector(0);
- init();
+ this(new Suggest(context, dictionaryId, null), keyboardSet);
}
protected SuggestHelper(final Context context, final File dictionaryPath,
- final long startOffset, final long length, final KeyboardId keyboardId,
+ final long startOffset, final long length, final KeyboardSet keyboardSet,
final Locale locale) {
- mSuggest = new Suggest(context, dictionaryPath, startOffset, length, null, locale);
- mKeyboard = new LatinKeyboard.Builder(context).load(keyboardId).build();
- mKeyDetector = new KeyDetector(0);
- init();
+ this(new Suggest(context, dictionaryPath, startOffset, length, null, locale), keyboardSet);
}
- private void init() {
- mSuggest.setCorrectionMode(Suggest.CORRECTION_FULL);
+ private SuggestHelper(final Suggest suggest, final KeyboardSet keyboardSet) {
+ mSuggest = suggest;
+ mKeyboard = keyboardSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET);
+ mKeyDetector = new KeyDetector(0);
+
+ setCorrectionMode(Suggest.CORRECTION_FULL);
mKeyDetector.setKeyboard(mKeyboard, 0, 0);
mKeyDetector.setProximityCorrectionEnabled(true);
mKeyDetector.setProximityThreshold(mKeyboard.mMostCommonKeyWidth);
}
public void setCorrectionMode(int correctionMode) {
- mSuggest.setCorrectionMode(correctionMode);
+ mCorrectionMode = correctionMode;
}
public boolean hasMainDictionary() {
return mSuggest.hasMainDictionary();
}
- private void addKeyInfo(WordComposer word, char c) {
- for (final Key key : mKeyboard.mKeys) {
- if (key.mCode == c) {
- final int x = key.mX + key.mWidth / 2;
- final int y = key.mY + key.mHeight / 2;
- final int[] codes = mKeyDetector.newCodeArray();
- mKeyDetector.getKeyIndexAndNearbyCodes(x, y, codes);
- word.add(c, codes, x, y);
- return;
- }
- }
- word.add(c, new int[] { c }, WordComposer.NOT_A_COORDINATE, WordComposer.NOT_A_COORDINATE);
- }
-
protected WordComposer createWordComposer(CharSequence s) {
WordComposer word = new WordComposer();
- for (int i = 0; i < s.length(); i++) {
- final char c = s.charAt(i);
- addKeyInfo(word, c);
- }
+ word.setComposingWord(s, mKeyboard, mKeyDetector);
return word;
}
@@ -96,13 +78,13 @@ public class SuggestHelper {
// TODO: This may be slow, but is OK for test so far.
public SuggestedWords getSuggestions(CharSequence typed) {
return mSuggest.getSuggestions(createWordComposer(typed), null,
- mKeyboard.getProximityInfo());
+ mKeyboard.getProximityInfo(), mCorrectionMode);
}
public CharSequence getFirstSuggestion(CharSequence typed) {
WordComposer word = createWordComposer(typed);
SuggestedWords suggestions = mSuggest.getSuggestions(word, null,
- mKeyboard.getProximityInfo());
+ mKeyboard.getProximityInfo(), mCorrectionMode);
// Note that suggestions.getWord(0) is the word user typed.
return suggestions.size() > 1 ? suggestions.getWord(1) : null;
}
@@ -110,7 +92,7 @@ public class SuggestHelper {
public CharSequence getAutoCorrection(CharSequence typed) {
WordComposer word = createWordComposer(typed);
SuggestedWords suggestions = mSuggest.getSuggestions(word, null,
- mKeyboard.getProximityInfo());
+ mKeyboard.getProximityInfo(), mCorrectionMode);
// Note that suggestions.getWord(0) is the word user typed.
return (suggestions.size() > 1 && mSuggest.hasAutoCorrection())
? suggestions.getWord(1) : null;
@@ -119,7 +101,7 @@ public class SuggestHelper {
public int getSuggestIndex(CharSequence typed, CharSequence expected) {
WordComposer word = createWordComposer(typed);
SuggestedWords suggestions = mSuggest.getSuggestions(word, null,
- mKeyboard.getProximityInfo());
+ mKeyboard.getProximityInfo(), mCorrectionMode);
// Note that suggestions.getWord(0) is the word user typed.
for (int i = 1; i < suggestions.size(); i++) {
if (TextUtils.equals(suggestions.getWord(i), expected))
@@ -131,7 +113,8 @@ public class SuggestHelper {
private void getBigramSuggestions(CharSequence previous, CharSequence typed) {
if (!TextUtils.isEmpty(previous) && (typed.length() > 1)) {
WordComposer firstChar = createWordComposer(Character.toString(typed.charAt(0)));
- mSuggest.getSuggestions(firstChar, previous, mKeyboard.getProximityInfo());
+ mSuggest.getSuggestions(firstChar, previous, mKeyboard.getProximityInfo(),
+ mCorrectionMode);
}
}
@@ -139,7 +122,7 @@ public class SuggestHelper {
WordComposer word = createWordComposer(typed);
getBigramSuggestions(previous, typed);
SuggestedWords suggestions = mSuggest.getSuggestions(word, previous,
- mKeyboard.getProximityInfo());
+ mKeyboard.getProximityInfo(), mCorrectionMode);
return suggestions.size() > 1 ? suggestions.getWord(1) : null;
}
@@ -147,7 +130,7 @@ public class SuggestHelper {
WordComposer word = createWordComposer(typed);
getBigramSuggestions(previous, typed);
SuggestedWords suggestions = mSuggest.getSuggestions(word, previous,
- mKeyboard.getProximityInfo());
+ mKeyboard.getProximityInfo(), mCorrectionMode);
return (suggestions.size() > 1 && mSuggest.hasAutoCorrection())
? suggestions.getWord(1) : null;
}
@@ -157,7 +140,7 @@ public class SuggestHelper {
WordComposer word = createWordComposer(typed);
getBigramSuggestions(previous, typed);
SuggestedWords suggestions = mSuggest.getSuggestions(word, previous,
- mKeyboard.getProximityInfo());
+ mKeyboard.getProximityInfo(), mCorrectionMode);
for (int i = 1; i < suggestions.size(); i++) {
if (TextUtils.equals(suggestions.getWord(i), expected))
return i;
diff --git a/tests/src/com/android/inputmethod/latin/SuggestTests.java b/tests/src/com/android/inputmethod/latin/SuggestTests.java
index 4080f34be..e12ae58c4 100644
--- a/tests/src/com/android/inputmethod/latin/SuggestTests.java
+++ b/tests/src/com/android/inputmethod/latin/SuggestTests.java
@@ -33,7 +33,7 @@ public class SuggestTests extends SuggestTestsBase {
final Locale locale = Locale.US;
mHelper = new SuggestHelper(
getContext(), mTestPackageFile, dict.getStartOffset(), dict.getLength(),
- createKeyboardId(locale, Configuration.ORIENTATION_PORTRAIT), locale);
+ createKeyboardSet(locale, Configuration.ORIENTATION_PORTRAIT), locale);
mHelper.setCorrectionMode(Suggest.CORRECTION_FULL_BIGRAM);
}
@@ -183,7 +183,8 @@ public class SuggestTests extends SuggestTestsBase {
"part", mHelper.getBigramAutoCorrection("about", "pa"));
// TODO: The following test fails.
// suggested("single: said", "said", mHelper.getAutoCorrection("sa"));
- suggested("bigram: from sa[me]",
- "same", mHelper.getBigramAutoCorrection("from", "sa"));
+ // TODO: The following test fails due to "transpose correction".
+ // suggested("bigram: from sa[me]",
+ // "same", mHelper.getBigramAutoCorrection("from", "sa"));
}
}
diff --git a/tests/src/com/android/inputmethod/latin/SuggestTestsBase.java b/tests/src/com/android/inputmethod/latin/SuggestTestsBase.java
index 058a3e7c0..73e34ba6f 100644
--- a/tests/src/com/android/inputmethod/latin/SuggestTestsBase.java
+++ b/tests/src/com/android/inputmethod/latin/SuggestTestsBase.java
@@ -19,11 +19,12 @@ package com.android.inputmethod.latin;
import android.content.res.AssetFileDescriptor;
import android.content.res.Configuration;
import android.test.AndroidTestCase;
+import android.text.InputType;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.view.inputmethod.EditorInfo;
-import com.android.inputmethod.keyboard.KeyboardId;
+import com.android.inputmethod.keyboard.KeyboardSet;
import java.io.File;
import java.io.InputStream;
@@ -38,7 +39,12 @@ public class SuggestTestsBase extends AndroidTestCase {
mTestPackageFile = new File(getTestContext().getApplicationInfo().sourceDir);
}
- protected KeyboardId createKeyboardId(Locale locale, int orientation) {
+ protected KeyboardSet createKeyboardSet(Locale locale, int orientation) {
+ return createKeyboardSet(locale, orientation, false);
+ }
+
+ protected KeyboardSet createKeyboardSet(Locale locale, int orientation,
+ boolean touchPositionCorrectionEnabled) {
final DisplayMetrics dm = getContext().getResources().getDisplayMetrics();
final int width;
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
@@ -50,10 +56,12 @@ public class SuggestTestsBase extends AndroidTestCase {
+ "orientation=" + orientation);
return null;
}
- return new KeyboardId(locale.toString() + " keyboard",
- com.android.inputmethod.latin.R.xml.kbd_qwerty, locale, orientation, width,
- KeyboardId.MODE_TEXT, new EditorInfo(), false, KeyboardId.F2KEY_MODE_NONE,
- false, false, false);
+ final EditorInfo editorInfo = new EditorInfo();
+ editorInfo.inputType = InputType.TYPE_CLASS_TEXT;
+ final KeyboardSet.Builder builder = new KeyboardSet.Builder(getContext(), editorInfo);
+ builder.setScreenGeometry(orientation, width);
+ builder.setSubtype(locale, true, touchPositionCorrectionEnabled);
+ return builder.build();
}
protected InputStream openTestRawResource(int resIdInTest) {
diff --git a/tests/src/com/android/inputmethod/latin/UserBigramSuggestHelper.java b/tests/src/com/android/inputmethod/latin/UserBigramSuggestHelper.java
index 023e20a10..74fadf76b 100644
--- a/tests/src/com/android/inputmethod/latin/UserBigramSuggestHelper.java
+++ b/tests/src/com/android/inputmethod/latin/UserBigramSuggestHelper.java
@@ -16,11 +16,11 @@
package com.android.inputmethod.latin;
-import com.android.inputmethod.keyboard.KeyboardId;
-
import android.content.Context;
import android.text.TextUtils;
+import com.android.inputmethod.keyboard.KeyboardSet;
+
import java.io.File;
import java.util.Locale;
import java.util.StringTokenizer;
@@ -31,14 +31,14 @@ public class UserBigramSuggestHelper extends SuggestHelper {
public UserBigramSuggestHelper(final Context context, final File dictionaryPath,
final long startOffset, final long length, final int userBigramMax,
- final int userBigramDelete, final KeyboardId keyboardId, final Locale locale) {
- super(context, dictionaryPath, startOffset, length, keyboardId, locale);
+ final int userBigramDelete, final KeyboardSet keyboardSet, final Locale locale) {
+ super(context, dictionaryPath, startOffset, length, keyboardSet, locale);
mContext = context;
mUserBigram = new UserBigramDictionary(context, null, locale.toString(),
Suggest.DIC_USER);
mUserBigram.setDatabaseMax(userBigramMax);
mUserBigram.setDatabaseDelete(userBigramDelete);
- mSuggest.setCorrectionMode(Suggest.CORRECTION_FULL_BIGRAM);
+ setCorrectionMode(Suggest.CORRECTION_FULL_BIGRAM);
mSuggest.setUserBigramDictionary(mUserBigram);
}
@@ -59,7 +59,8 @@ public class UserBigramSuggestHelper extends SuggestHelper {
flushUserBigrams();
if (!TextUtils.isEmpty(previous) && !TextUtils.isEmpty(Character.toString(typed))) {
WordComposer firstChar = createWordComposer(Character.toString(typed));
- mSuggest.getSuggestions(firstChar, previous, mKeyboard.getProximityInfo());
+ mSuggest.getSuggestions(firstChar, previous, mKeyboard.getProximityInfo(),
+ mCorrectionMode);
boolean reloading = mUserBigram.reloadDictionaryIfRequired();
if (reloading) mUserBigram.waitForDictionaryLoading();
mUserBigram.getBigrams(firstChar, previous, mSuggest);
diff --git a/tests/src/com/android/inputmethod/latin/UserBigramSuggestTests.java b/tests/src/com/android/inputmethod/latin/UserBigramSuggestTests.java
index 2bc0aabc0..2b88a7ca6 100644
--- a/tests/src/com/android/inputmethod/latin/UserBigramSuggestTests.java
+++ b/tests/src/com/android/inputmethod/latin/UserBigramSuggestTests.java
@@ -23,7 +23,7 @@ import com.android.inputmethod.latin.tests.R;
import java.util.Locale;
public class UserBigramSuggestTests extends SuggestTestsBase {
- private static final int SUGGESTION_STARTS = 6;
+ private static final int SUGGESTION_STARTS = 1;
private static final int MAX_DATA = 20;
private static final int DELETE_DATA = 10;
@@ -37,7 +37,7 @@ public class UserBigramSuggestTests extends SuggestTestsBase {
mHelper = new UserBigramSuggestHelper(
getContext(), mTestPackageFile, dict.getStartOffset(), dict.getLength(),
MAX_DATA, DELETE_DATA,
- createKeyboardId(locale, Configuration.ORIENTATION_PORTRAIT), locale);
+ createKeyboardSet(locale, Configuration.ORIENTATION_PORTRAIT), locale);
}
/************************** Tests ************************/
diff --git a/tests/src/com/android/inputmethod/latin/UtilsTests.java b/tests/src/com/android/inputmethod/latin/UtilsTests.java
index 5c0b03a0a..2ef4e2ff5 100644
--- a/tests/src/com/android/inputmethod/latin/UtilsTests.java
+++ b/tests/src/com/android/inputmethod/latin/UtilsTests.java
@@ -18,8 +18,6 @@ package com.android.inputmethod.latin;
import android.test.AndroidTestCase;
-import com.android.inputmethod.latin.tests.R;
-
public class UtilsTests extends AndroidTestCase {
// The following is meant to be a reasonable default for