diff options
Diffstat (limited to 'tests')
15 files changed, 235 insertions, 61 deletions
diff --git a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetTestsBase.java b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetTestsBase.java index 0fb6ff2b4..75bd60999 100644 --- a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetTestsBase.java +++ b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetTestsBase.java @@ -18,6 +18,7 @@ package com.android.inputmethod.keyboard; import android.content.Context; import android.content.res.Resources; +import android.preference.PreferenceManager; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.SmallTest; import android.view.ContextThemeWrapper; @@ -40,9 +41,6 @@ import java.util.Locale; @SmallTest public class KeyboardLayoutSetTestsBase extends AndroidTestCase { - private static final KeyboardTheme DEFAULT_KEYBOARD_THEME = - KeyboardTheme.getDefaultKeyboardTheme(); - // All input method subtypes of LatinIME. private final ArrayList<InputMethodSubtype> mAllSubtypesList = CollectionUtils.newArrayList(); private final ArrayList<InputMethodSubtype> mAsciiCapableSubtypesList = @@ -58,7 +56,9 @@ public class KeyboardLayoutSetTestsBase extends AndroidTestCase { super.setUp(); mScreenMetrics = mContext.getResources().getInteger(R.integer.config_screen_metrics); - mThemeContext = new ContextThemeWrapper(mContext, DEFAULT_KEYBOARD_THEME.mStyleId); + final KeyboardTheme keyboardTheme = KeyboardTheme.getKeyboardTheme( + PreferenceManager.getDefaultSharedPreferences(mContext)); + mThemeContext = new ContextThemeWrapper(mContext, keyboardTheme.mStyleId); RichInputMethodManager.init(mThemeContext); final RichInputMethodManager richImm = RichInputMethodManager.getInstance(); diff --git a/tests/src/com/android/inputmethod/keyboard/KeyboardThemeTests.java b/tests/src/com/android/inputmethod/keyboard/KeyboardThemeTests.java new file mode 100644 index 000000000..9b532fe6f --- /dev/null +++ b/tests/src/com/android/inputmethod/keyboard/KeyboardThemeTests.java @@ -0,0 +1,93 @@ +/* + * 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; + +import android.content.SharedPreferences; +import android.os.Build.VERSION_CODES; +import android.preference.PreferenceManager; +import android.test.AndroidTestCase; +import android.test.suitebuilder.annotation.SmallTest; + +@SmallTest +public class KeyboardThemeTests extends AndroidTestCase { + private SharedPreferences mPrefs; + + private static final int THEME_ID_NULL = -1; + private static final int THEME_ID_ICS = KeyboardTheme.THEME_ID_ICS; + private static final int THEME_ID_KLP = KeyboardTheme.THEME_ID_KLP; + private static final int THEME_ID_LMP = KeyboardTheme.THEME_ID_LMP; + + @Override + protected void setUp() throws Exception { + super.setUp(); + mPrefs = PreferenceManager.getDefaultSharedPreferences(getContext()); + } + + private void assertDefaultKeyboardTheme(final int sdkVersion, final int oldThemeId, + final int expectedThemeId) { + if (oldThemeId == THEME_ID_NULL) { + mPrefs.edit().remove(KeyboardTheme.KITKAT_KEYBOARD_THEME_KEY).apply(); + } else { + final String themeIdString = Integer.toString(oldThemeId); + mPrefs.edit().putString(KeyboardTheme.KITKAT_KEYBOARD_THEME_KEY, themeIdString).apply(); + } + final KeyboardTheme defaultTheme = + KeyboardTheme.getDefaultKeyboardTheme(mPrefs, sdkVersion); + assertNotNull(defaultTheme); + assertEquals(expectedThemeId, defaultTheme.mThemeId); + assertFalse(mPrefs.contains(KeyboardTheme.KITKAT_KEYBOARD_THEME_KEY)); + } + + private void assertDefaultKeyboardThemeICS(final int sdkVersion) { + assertDefaultKeyboardTheme(sdkVersion, THEME_ID_NULL, THEME_ID_ICS); + assertDefaultKeyboardTheme(sdkVersion, THEME_ID_ICS, THEME_ID_ICS); + assertDefaultKeyboardTheme(sdkVersion, THEME_ID_KLP, THEME_ID_KLP); + } + + private void assertDefaultKeyboardThemeKLP(final int sdkVersion) { + assertDefaultKeyboardTheme(sdkVersion, THEME_ID_NULL, THEME_ID_KLP); + assertDefaultKeyboardTheme(sdkVersion, THEME_ID_ICS, THEME_ID_ICS); + assertDefaultKeyboardTheme(sdkVersion, THEME_ID_KLP, THEME_ID_KLP); + } + + private void assertDefaultKeyboardThemeLMP(final int sdkVersion) { + // Forced to switch to LMP theme. + assertDefaultKeyboardTheme(sdkVersion, THEME_ID_NULL, THEME_ID_LMP); + assertDefaultKeyboardTheme(sdkVersion, THEME_ID_ICS, THEME_ID_LMP); + assertDefaultKeyboardTheme(sdkVersion, THEME_ID_KLP, THEME_ID_LMP); + } + + public void testDefaultKeyboardThemeICS() { + assertDefaultKeyboardThemeICS(VERSION_CODES.ICE_CREAM_SANDWICH); + assertDefaultKeyboardThemeICS(VERSION_CODES.ICE_CREAM_SANDWICH_MR1); + } + + public void testDefaultKeyboardThemeJB() { + assertDefaultKeyboardThemeICS(VERSION_CODES.JELLY_BEAN); + assertDefaultKeyboardThemeICS(VERSION_CODES.JELLY_BEAN_MR1); + assertDefaultKeyboardThemeICS(VERSION_CODES.JELLY_BEAN_MR2); + } + + public void testDefaultKeyboardThemeKLP() { + assertDefaultKeyboardThemeKLP(VERSION_CODES.KITKAT); + } + + public void testDefaultKeyboardThemeLMP() { + // TODO: Update this constant once the *next* version becomes available. + assertDefaultKeyboardThemeLMP(VERSION_CODES.CUR_DEVELOPMENT); + } +} diff --git a/tests/src/com/android/inputmethod/keyboard/layout/Dvorak.java b/tests/src/com/android/inputmethod/keyboard/layout/Dvorak.java index 99cf6e50e..7ba1d7876 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/Dvorak.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/Dvorak.java @@ -51,7 +51,7 @@ public final class Dvorak extends LayoutBase { @Override public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) { - return isPhone ? joinKeys(key("q", SHORTCUT_KEY, SETTINGS_KEY)) : joinKeys(key("/")); + return isPhone ? joinKeys(key("q", SETTINGS_KEY)) : joinKeys(key("/")); } @Override diff --git a/tests/src/com/android/inputmethod/keyboard/layout/Farsi.java b/tests/src/com/android/inputmethod/keyboard/layout/Farsi.java index a0070891a..16d2f8684 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/Farsi.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/Farsi.java @@ -91,7 +91,7 @@ public final class Farsi extends LayoutBase { @Override public ExpectedKey[] getSpaceKeys(final boolean isPhone) { - return joinKeys(SPACE_KEY, key(ZWNJ_KEY, ZWJ_KEY)); + return joinKeys(LANGUAGE_SWITCH_KEY, SPACE_KEY, key(ZWNJ_KEY, ZWJ_KEY)); } @Override diff --git a/tests/src/com/android/inputmethod/keyboard/layout/HindiCompact.java b/tests/src/com/android/inputmethod/keyboard/layout/HindiCompact.java index afd26e428..cf20149ae 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/HindiCompact.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/HindiCompact.java @@ -16,29 +16,12 @@ package com.android.inputmethod.keyboard.layout; -import static com.android.inputmethod.keyboard.layout.DevanagariLetterConstants.SIGN_ANUSVARA; -import static com.android.inputmethod.keyboard.layout.DevanagariLetterConstants.SIGN_CANDRABINDU; -import static com.android.inputmethod.keyboard.layout.DevanagariLetterConstants.SIGN_NUKTA; -import static com.android.inputmethod.keyboard.layout.DevanagariLetterConstants.SIGN_VIRAMA; -import static com.android.inputmethod.keyboard.layout.DevanagariLetterConstants.SIGN_VISARGA; -import static com.android.inputmethod.keyboard.layout.DevanagariLetterConstants.VOWEL_SIGN_AA; -import static com.android.inputmethod.keyboard.layout.DevanagariLetterConstants.VOWEL_SIGN_AI; -import static com.android.inputmethod.keyboard.layout.DevanagariLetterConstants.VOWEL_SIGN_AU; -import static com.android.inputmethod.keyboard.layout.DevanagariLetterConstants.VOWEL_SIGN_CANDRA_E; -import static com.android.inputmethod.keyboard.layout.DevanagariLetterConstants.VOWEL_SIGN_CANDRA_O; -import static com.android.inputmethod.keyboard.layout.DevanagariLetterConstants.VOWEL_SIGN_E; -import static com.android.inputmethod.keyboard.layout.DevanagariLetterConstants.VOWEL_SIGN_I; -import static com.android.inputmethod.keyboard.layout.DevanagariLetterConstants.VOWEL_SIGN_II; -import static com.android.inputmethod.keyboard.layout.DevanagariLetterConstants.VOWEL_SIGN_O; -import static com.android.inputmethod.keyboard.layout.DevanagariLetterConstants.VOWEL_SIGN_U; -import static com.android.inputmethod.keyboard.layout.DevanagariLetterConstants.VOWEL_SIGN_UU; -import static com.android.inputmethod.keyboard.layout.DevanagariLetterConstants.VOWEL_SIGN_VOCALIC_R; +import static com.android.inputmethod.keyboard.layout.DevanagariLetterConstants.*; import com.android.inputmethod.keyboard.layout.Hindi.HindiCustomizer; import com.android.inputmethod.keyboard.layout.Hindi.HindiSymbols; import com.android.inputmethod.keyboard.layout.expected.ExpectedKey; import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder; -import com.android.inputmethod.latin.Constants; import java.util.Locale; diff --git a/tests/src/com/android/inputmethod/keyboard/layout/LayoutBase.java b/tests/src/com/android/inputmethod/keyboard/layout/LayoutBase.java index 4123a22ef..e4e95548f 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/LayoutBase.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/LayoutBase.java @@ -29,7 +29,6 @@ import java.util.Locale; * The base class of keyboard layout. */ public abstract class LayoutBase extends AbstractLayoutBase { - /** * This class is used to customize common keyboard layout to language specific layout. */ @@ -152,7 +151,7 @@ public abstract class LayoutBase extends AbstractLayoutBase { * keyboard. */ public ExpectedKey[] getSpaceKeys(final boolean isPhone) { - return joinKeys(SPACE_KEY); + return joinKeys(LANGUAGE_SWITCH_KEY, SPACE_KEY); } /** @@ -161,7 +160,8 @@ public abstract class LayoutBase extends AbstractLayoutBase { * @return the array of {@link ExpectedKey} that should be placed at left of the spacebar. */ public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) { - return isPhone ? joinKeys(key(",", SETTINGS_KEY)) : joinKeys("/"); + // U+002C: "," COMMA + return isPhone ? joinKeys(key("\u002C", SETTINGS_KEY)) : joinKeys("/"); } /** @@ -306,6 +306,10 @@ public abstract class LayoutBase extends AbstractLayoutBase { /** * Get common alphabet layout. This layout doesn't contain any special keys. + * + * A keyboard layout is an array of rows, and a row consists of an array of + * {@link ExpectedKey}s. Each row may have different number of {@link ExpectedKey}s. + * * @param isPhone true if requesting phone's layout. * @return the common alphabet keyboard layout. */ @@ -313,6 +317,10 @@ public abstract class LayoutBase extends AbstractLayoutBase { /** * Get common alphabet shifted layout. This layout doesn't contain any special keys. + * + * A keyboard layout is an array of rows, and a row consists of an array of + * {@link ExpectedKey}s. Each row may have different number of {@link ExpectedKey}s. + * * @param isPhone true if requesting phone's layout. * @param elementId the element id of the requesting shifted mode. * @return the common alphabet shifted keyboard layout. @@ -327,9 +335,13 @@ public abstract class LayoutBase extends AbstractLayoutBase { /** * Get the complete expected keyboard layout. + * + * A keyboard layout is an array of rows, and a row consists of an array of + * {@link ExpectedKey}s. Each row may have different number of {@link ExpectedKey}s. + * * @param isPhone true if requesting phone's layout. * @param elementId the element id of the requesting keyboard mode. - * @return + * @return the keyboard layout of the <code>elementId</code>. */ public ExpectedKey[][] getLayout(final boolean isPhone, final int elementId) { if (elementId == KeyboardId.ELEMENT_SYMBOLS) { diff --git a/tests/src/com/android/inputmethod/keyboard/layout/NepaliRomanized.java b/tests/src/com/android/inputmethod/keyboard/layout/NepaliRomanized.java index 7048dbb73..7933d078c 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/NepaliRomanized.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/NepaliRomanized.java @@ -47,7 +47,7 @@ public final class NepaliRomanized extends LayoutBase { @Override public ExpectedKey[] getSpaceKeys(final boolean isPhone) { - return joinKeys(SPACE_KEY, key(ZWNJ_KEY, ZWJ_KEY)); + return joinKeys(LANGUAGE_SWITCH_KEY, SPACE_KEY, key(ZWNJ_KEY, ZWJ_KEY)); } // U+0930/U+0941/U+002E "रु." NEPALESE RUPEE SIGN diff --git a/tests/src/com/android/inputmethod/keyboard/layout/expected/AbstractKeyboardBuilder.java b/tests/src/com/android/inputmethod/keyboard/layout/expected/AbstractKeyboardBuilder.java index 3365b92ec..6e721047c 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/expected/AbstractKeyboardBuilder.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/expected/AbstractKeyboardBuilder.java @@ -21,9 +21,9 @@ import java.util.Arrays; /** * This class builds a keyboard that is a two dimensional array of elements <code>E</code>. * - * A keyboard consists of array of rows, and a row consists of array of elements. Each row may have - * different number of elements. A element of a keyboard can be specified by a row number and a - * column number, both numbers starts from 1. + * A keyboard consists of an array of rows, and a row consists of an array of elements. Each row + * may have different number of elements. A element of a keyboard can be specified by a row number + * and a column number, both numbers starts from 1. * * @param <E> the type of a keyboard element. A keyboard element must be an immutable object. */ @@ -39,8 +39,7 @@ abstract class AbstractKeyboardBuilder<E> { abstract E[][] newArrayOfArray(final int size); /** - * Construct a builder filled with the default element. - * @param dimensions the integer array of each row's size. + * Construct an empty builder. */ AbstractKeyboardBuilder() { mRows = newArrayOfArray(0); @@ -80,7 +79,7 @@ abstract class AbstractKeyboardBuilder<E> { * Get the current contents of the specified row. * @param row the row number to get the contents. * @return the array of elements at row number <code>row</code>. - * @throws {@link RuntimeException} if <code>row</code> is illegal. + * @throws RuntimeException if <code>row</code> is illegal. */ E[] getRowAt(final int row) { final int rowIndex = row - 1; @@ -94,7 +93,7 @@ abstract class AbstractKeyboardBuilder<E> { * Set an array of elements to the specified row. * @param row the row number to set <code>elements</code>. * @param elements the array of elements to set at row number <code>row</code>. - * @throws {@link RuntimeException} if <code>row</code> is illegal. + * @throws RuntimeException if <code>row</code> is illegal. */ void setRowAt(final int row, final E[] elements) { final int rowIndex = row - 1; @@ -114,7 +113,7 @@ abstract class AbstractKeyboardBuilder<E> { * @param element the element to set or insert at <code>row,column</code>. * @param insert if true, the <code>element</code> is inserted at <code>row,column</code>. * Otherwise the <code>element</code> replace the element at <code>row,column</code>. - * @throws {@link RuntimeException} if <code>row</code> or <code>column</code> is illegal. + * @throws RuntimeException if <code>row</code> or <code>column</code> is illegal. */ void setElementAt(final int row, final int column, final E element, final boolean insert) { final E[] elements = getRowAt(row); diff --git a/tests/src/com/android/inputmethod/keyboard/layout/expected/AbstractLayoutBase.java b/tests/src/com/android/inputmethod/keyboard/layout/expected/AbstractLayoutBase.java index 6176f6a3e..9e0039d84 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/expected/AbstractLayoutBase.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/expected/AbstractLayoutBase.java @@ -19,7 +19,6 @@ package com.android.inputmethod.keyboard.layout.expected; import com.android.inputmethod.keyboard.internal.KeyboardIconsSet; import com.android.inputmethod.keyboard.layout.expected.ExpectedKey.ExpectedAdditionalMoreKey; import com.android.inputmethod.latin.Constants; -import com.android.inputmethod.latin.utils.StringUtils; /** * Base class to create an expected keyboard for unit test. @@ -109,6 +108,8 @@ public abstract class AbstractLayoutBase { // Icon ids. private static final int ICON_DELETE = KeyboardIconsSet.getIconId( KeyboardIconsSet.NAME_DELETE_KEY); + private static final int ICON_SPACE = KeyboardIconsSet.getIconId( + KeyboardIconsSet.NAME_SPACE_KEY); private static final int ICON_TAB = KeyboardIconsSet.getIconId( KeyboardIconsSet.NAME_TAB_KEY); private static final int ICON_SHORTCUT = KeyboardIconsSet.getIconId( @@ -131,6 +132,5 @@ public abstract class AbstractLayoutBase { ICON_LANGUAGE_SWITCH, Constants.CODE_LANGUAGE_SWITCH); public static final ExpectedKey ENTER_KEY = key(ICON_ENTER, Constants.CODE_ENTER); public static final ExpectedKey EMOJI_KEY = key(ICON_EMOJI, Constants.CODE_EMOJI); - public static final ExpectedKey SPACE_KEY = key( - StringUtils.newSingleCodePointString(Constants.CODE_SPACE)); + public static final ExpectedKey SPACE_KEY = key(ICON_SPACE, Constants.CODE_SPACE); } diff --git a/tests/src/com/android/inputmethod/keyboard/layout/expected/ActualKeyboardBuilder.java b/tests/src/com/android/inputmethod/keyboard/layout/expected/ActualKeyboardBuilder.java index 26d2e2ad2..d0fea58b0 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/expected/ActualKeyboardBuilder.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/expected/ActualKeyboardBuilder.java @@ -28,6 +28,9 @@ import java.util.List; /** * This class builds an actual keyboard for unit test. + * + * An actual keyboard is an array of rows, and a row consists of an array of {@link Key}s. + * Each row may have different number of {@link Key}s. */ public final class ActualKeyboardBuilder extends AbstractKeyboardBuilder<Key> { private static ArrayList<Key> filterOutSpacer(final List<Key> keys) { @@ -43,7 +46,8 @@ public final class ActualKeyboardBuilder extends AbstractKeyboardBuilder<Key> { /** * Create the keyboard that consists of the array of rows of the actual keyboard's keys. - * @param sortedKeys the sorted list of keys of the actual keyboard. + * @param sortedKeys keys list of the actual keyboard that is sorted from top-left to + * bottom-right. * @return the actual keyboard grouped with rows. */ public static Key[][] buildKeyboard(final List<Key> sortedKeys) { diff --git a/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKeyboardBuilder.java b/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKeyboardBuilder.java index f068ad11d..e06d34d67 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKeyboardBuilder.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKeyboardBuilder.java @@ -24,6 +24,11 @@ import java.util.Locale; /** * This class builds an expected keyboard for unit test. + * + * An expected keyboard is an array of rows, and a row consists of an array of {@link ExpectedKey}s. + * Each row may have different number of {@link ExpectedKey}s. While building an expected keyboard, + * an {@link ExpectedKey} can be specified by a row number and a column number, both numbers starts + * from 1. */ public final class ExpectedKeyboardBuilder extends AbstractKeyboardBuilder<ExpectedKey> { public ExpectedKeyboardBuilder() { @@ -212,7 +217,7 @@ public final class ExpectedKeyboardBuilder extends AbstractKeyboardBuilder<Expec * @param keys the array of keys to insert at <code>row,column</code>. Each key can be * {@link ExpectedKey}, {@link ExpectedKey} array, and {@link String}. * @return this builder. - * @throws {@link RuntimeException} if <code>row</code> or <code>column</code> is illegal. + * @throws RuntimeException if <code>row</code> or <code>column</code> is illegal. */ public ExpectedKeyboardBuilder insertKeysAtRow(final int row, final int column, final Object ... keys) { @@ -229,7 +234,7 @@ public final class ExpectedKeyboardBuilder extends AbstractKeyboardBuilder<Expec * @param keys the array of keys to add on the left most of the row. Each key can be * {@link ExpectedKey}, {@link ExpectedKey} array, and {@link String}. * @return this builder. - * @throws {@link RuntimeException} if <code>row</code> is illegal. + * @throws RuntimeException if <code>row</code> is illegal. */ public ExpectedKeyboardBuilder addKeysOnTheLeftOfRow(final int row, final Object ... keys) { @@ -247,7 +252,7 @@ public final class ExpectedKeyboardBuilder extends AbstractKeyboardBuilder<Expec * @param keys the array of keys to add on the right most of the row. Each key can be * {@link ExpectedKey}, {@link ExpectedKey} array, and {@link String}. * @return this builder. - * @throws {@link RuntimeException} if <code>row</code> is illegal. + * @throws RuntimeException if <code>row</code> is illegal. */ public ExpectedKeyboardBuilder addKeysOnTheRightOfRow(final int row, final Object ... keys) { diff --git a/tests/src/com/android/inputmethod/keyboard/layout/tests/EnglishCustomizer.java b/tests/src/com/android/inputmethod/keyboard/layout/tests/EnglishCustomizer.java index 29264ff3b..3e82f65bf 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/tests/EnglishCustomizer.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/tests/EnglishCustomizer.java @@ -27,34 +27,34 @@ class EnglishCustomizer extends LayoutCustomizer { @Override public ExpectedKeyboardBuilder setAccentedLetters(final ExpectedKeyboardBuilder builder) { return builder - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE + // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - .setMoreKeysOf("e", "\u00E8", "\u00E9", "\u00EA", "\u00EB", "\u0113") + .setMoreKeysOf("e", "\u00E9", "\u00E8", "\u00EA", "\u00EB", "\u0113") + // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - .setMoreKeysOf("u", "\u00FB", "\u00FC", "\u00F9", "\u00FA", "\u016B") + .setMoreKeysOf("u", "\u00FA", "\u00FB", "\u00FC", "\u00F9", "\u016B") + // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - .setMoreKeysOf("i", "\u00EE", "\u00EF", "\u00ED", "\u012B", "\u00EC") + .setMoreKeysOf("i", "\u00ED", "\u00EE", "\u00EF", "\u012B", "\u00EC") + // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE // U+0153: "œ" LATIN SMALL LIGATURE OE // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE .setMoreKeysOf("o", - "\u00F4", "\u00F6", "\u00F2", "\u00F3", "\u0153", "\u00F8", "\u014D", + "\u00F3", "\u00F4", "\u00F6", "\u00F2", "\u0153", "\u00F8", "\u014D", "\u00F5") // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX diff --git a/tests/src/com/android/inputmethod/keyboard/layout/tests/LayoutTestsBase.java b/tests/src/com/android/inputmethod/keyboard/layout/tests/LayoutTestsBase.java index 4002c49c2..d4e8fb647 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/tests/LayoutTestsBase.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/tests/LayoutTestsBase.java @@ -51,7 +51,10 @@ abstract class LayoutTestsBase extends KeyboardLayoutSetTestsBase { mSubtype = getSubtype(mLayout.getLocale(), mLayout.getName()); mLogTag = SubtypeLocaleUtils.getSubtypeNameForLogging(mSubtype) + "/" + (isPhone() ? "phone" : "tablet"); - mKeyboardLayoutSet = createKeyboardLayoutSet(mSubtype, null /* editorInfo */); + // TODO: Test with language switch key enabled and disabled. + mKeyboardLayoutSet = createKeyboardLayoutSet(mSubtype, null /* editorInfo */, + true /* isShortcutImeEnabled */, true /* showsVoiceInputKey */, + true /* isLanguageSwitchKeyEnabled */); } // Those helper methods have a lower case name to be readable when defining expected keyboard diff --git a/tests/src/com/android/inputmethod/latin/BinaryDictionaryDecayingTests.java b/tests/src/com/android/inputmethod/latin/BinaryDictionaryDecayingTests.java index ae2205b36..aed24c56e 100644 --- a/tests/src/com/android/inputmethod/latin/BinaryDictionaryDecayingTests.java +++ b/tests/src/com/android/inputmethod/latin/BinaryDictionaryDecayingTests.java @@ -93,15 +93,17 @@ public class BinaryDictionaryDecayingTests extends AndroidTestCase { private File createEmptyDictionaryAndGetFile(final String dictId, final int formatVersion) throws IOException { - if (formatVersion == FormatSpec.VERSION4) { - return createEmptyVer4DictionaryAndGetFile(dictId); + if (formatVersion == FormatSpec.VERSION4 + || formatVersion == FormatSpec.VERSION4_ONLY_FOR_TESTING) { + return createEmptyVer4DictionaryAndGetFile(dictId, formatVersion); } else { throw new IOException("Dictionary format version " + formatVersion + " is not supported."); } } - private File createEmptyVer4DictionaryAndGetFile(final String dictId) throws IOException { + private File createEmptyVer4DictionaryAndGetFile(final String dictId, final int formatVersion) + throws IOException { final File file = File.createTempFile(dictId, TEST_DICT_FILE_EXTENSION, getContext().getCacheDir()); FileUtils.deleteRecursively(file); @@ -113,7 +115,7 @@ public class BinaryDictionaryDecayingTests extends AndroidTestCase { DictionaryHeader.ATTRIBUTE_VALUE_TRUE); attributeMap.put(DictionaryHeader.HAS_HISTORICAL_INFO_KEY, DictionaryHeader.ATTRIBUTE_VALUE_TRUE); - if (BinaryDictionaryUtils.createEmptyDictFile(file.getAbsolutePath(), FormatSpec.VERSION4, + if (BinaryDictionaryUtils.createEmptyDictFile(file.getAbsolutePath(), formatVersion, LocaleUtils.constructLocaleFromString(TEST_LOCALE), attributeMap)) { return file; } else { @@ -562,4 +564,43 @@ public class BinaryDictionaryDecayingTests extends AndroidTestCase { } } } + + public void testDictMigration() { + testDictMigration(FormatSpec.VERSION4_ONLY_FOR_TESTING, FormatSpec.VERSION4); + } + + private void testDictMigration(final int fromFormatVersion, final int toFormatVersion) { + setCurrentTimeForTestMode(mCurrentTime); + File dictFile = null; + try { + dictFile = createEmptyDictionaryAndGetFile("TestBinaryDictionary", fromFormatVersion); + } catch (IOException e) { + fail("IOException while writing an initial dictionary : " + e); + } + final BinaryDictionary binaryDictionary = new BinaryDictionary(dictFile.getAbsolutePath(), + 0 /* offset */, dictFile.length(), true /* useFullEditDistance */, + Locale.getDefault(), TEST_LOCALE, true /* isUpdatable */); + // TODO: Add tests for bigrams when the implementation gets ready. + addUnigramWord(binaryDictionary, "aaa", DUMMY_PROBABILITY); + assertTrue(binaryDictionary.isValidWord("aaa")); + addUnigramWord(binaryDictionary, "bbb", Dictionary.NOT_A_PROBABILITY); + assertFalse(binaryDictionary.isValidWord("bbb")); + addUnigramWord(binaryDictionary, "ccc", DUMMY_PROBABILITY); + addUnigramWord(binaryDictionary, "ccc", DUMMY_PROBABILITY); + addUnigramWord(binaryDictionary, "ccc", DUMMY_PROBABILITY); + addUnigramWord(binaryDictionary, "ccc", DUMMY_PROBABILITY); + addUnigramWord(binaryDictionary, "ccc", DUMMY_PROBABILITY); + + assertEquals(fromFormatVersion, binaryDictionary.getFormatVersion()); + assertTrue(binaryDictionary.migrateTo(toFormatVersion)); + assertTrue(binaryDictionary.isValidDictionary()); + assertEquals(toFormatVersion, binaryDictionary.getFormatVersion()); + assertTrue(binaryDictionary.isValidWord("aaa")); + assertFalse(binaryDictionary.isValidWord("bbb")); + assertTrue(binaryDictionary.getFrequency("aaa") < binaryDictionary.getFrequency("ccc")); + addUnigramWord(binaryDictionary, "bbb", Dictionary.NOT_A_PROBABILITY); + assertTrue(binaryDictionary.isValidWord("bbb")); + binaryDictionary.close(); + dictFile.delete(); + } } diff --git a/tests/src/com/android/inputmethod/latin/BinaryDictionaryTests.java b/tests/src/com/android/inputmethod/latin/BinaryDictionaryTests.java index 0fb0fa587..9ceafa705 100644 --- a/tests/src/com/android/inputmethod/latin/BinaryDictionaryTests.java +++ b/tests/src/com/android/inputmethod/latin/BinaryDictionaryTests.java @@ -46,21 +46,23 @@ public class BinaryDictionaryTests extends AndroidTestCase { private File createEmptyDictionaryAndGetFile(final String dictId, final int formatVersion) throws IOException { - if (formatVersion == FormatSpec.VERSION4) { - return createEmptyVer4DictionaryAndGetFile(dictId); + if (formatVersion == FormatSpec.VERSION4 + || formatVersion == FormatSpec.VERSION4_ONLY_FOR_TESTING) { + return createEmptyVer4DictionaryAndGetFile(dictId, formatVersion); } else { throw new IOException("Dictionary format version " + formatVersion + " is not supported."); } } - private File createEmptyVer4DictionaryAndGetFile(final String dictId) throws IOException { + private File createEmptyVer4DictionaryAndGetFile(final String dictId, + final int formatVersion) throws IOException { final File file = File.createTempFile(dictId, TEST_DICT_FILE_EXTENSION, getContext().getCacheDir()); file.delete(); file.mkdir(); Map<String, String> attributeMap = new HashMap<String, String>(); - if (BinaryDictionaryUtils.createEmptyDictFile(file.getAbsolutePath(), FormatSpec.VERSION4, + if (BinaryDictionaryUtils.createEmptyDictFile(file.getAbsolutePath(), formatVersion, Locale.ENGLISH, attributeMap)) { return file; } else { @@ -1223,4 +1225,36 @@ public class BinaryDictionaryTests extends AndroidTestCase { } } } + + public void testDictMigration() { + testDictMigration(FormatSpec.VERSION4_ONLY_FOR_TESTING, FormatSpec.VERSION4); + } + + private void testDictMigration(final int fromFormatVersion, final int toFormatVersion) { + File dictFile = null; + try { + dictFile = createEmptyDictionaryAndGetFile("TestBinaryDictionary", fromFormatVersion); + } catch (IOException e) { + fail("IOException while writing an initial dictionary : " + e); + } + final BinaryDictionary binaryDictionary = new BinaryDictionary(dictFile.getAbsolutePath(), + 0 /* offset */, dictFile.length(), true /* useFullEditDistance */, + Locale.getDefault(), TEST_LOCALE, true /* isUpdatable */); + final int unigramProbability = 100; + addUnigramWord(binaryDictionary, "aaa", unigramProbability); + addUnigramWord(binaryDictionary, "bbb", unigramProbability); + final int bigramProbability = 10; + addBigramWords(binaryDictionary, "aaa", "bbb", bigramProbability); + assertEquals(unigramProbability, binaryDictionary.getFrequency("aaa")); + assertEquals(unigramProbability, binaryDictionary.getFrequency("bbb")); + assertTrue(binaryDictionary.isValidBigram("aaa", "bbb")); + assertEquals(fromFormatVersion, binaryDictionary.getFormatVersion()); + assertTrue(binaryDictionary.migrateTo(toFormatVersion)); + assertTrue(binaryDictionary.isValidDictionary()); + assertEquals(toFormatVersion, binaryDictionary.getFormatVersion()); + assertEquals(unigramProbability, binaryDictionary.getFrequency("aaa")); + assertEquals(unigramProbability, binaryDictionary.getFrequency("bbb")); + // TODO: Add tests for bigram frequency when the implementation gets ready. + assertTrue(binaryDictionary.isValidBigram("aaa", "bbb")); + } } |