diff --git a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
index fe2908428855b63a92abac5706dd6a35db6c4b33..eb0ec39902ed8d839bc5be80abf6f35863ddbce1 100644
--- a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
+++ b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
@@ -31,6 +31,7 @@ import android.view.inputmethod.InputMethodInfo;
 import android.view.inputmethod.InputMethodManager;
 import android.view.inputmethod.InputMethodSubtype;
 
+import com.android.inputmethod.annotations.UsedForTesting;
 import com.android.inputmethod.keyboard.KeyboardSwitcher;
 
 import java.util.List;
@@ -239,7 +240,14 @@ public final class SubtypeSwitcher {
         return mNeedsToDisplayLanguage.getValue();
     }
 
+    private static Locale sForcedLocaleForTesting = null;
+    @UsedForTesting
+    void forceLocale(final Locale locale) {
+        sForcedLocaleForTesting = locale;
+    }
+
     public Locale getCurrentSubtypeLocale() {
+        if (null != sForcedLocaleForTesting) return sForcedLocaleForTesting;
         return SubtypeLocale.getSubtypeLocale(getCurrentSubtype());
     }
 
diff --git a/tests/src/com/android/inputmethod/latin/BlueUnderlineTests.java b/tests/src/com/android/inputmethod/latin/BlueUnderlineTests.java
index e2d669bf6d575768c226b2d9502ae6113a410507..6b4d52d62b1510b91cdb6b30b965afa7646be7ae 100644
--- a/tests/src/com/android/inputmethod/latin/BlueUnderlineTests.java
+++ b/tests/src/com/android/inputmethod/latin/BlueUnderlineTests.java
@@ -117,7 +117,5 @@ public class BlueUnderlineTests extends InputTestsBase {
         // Now simulate the user moving the cursor.
         SpanGetter span = new SpanGetter(mTextView.getText(), UnderlineSpan.class);
         assertNull("should not be composing, so should not have an underline span", span.mSpan);
-        span = new SpanGetter(mTextView.getText(), SuggestionSpan.class);
-        assertNull("should not be composing, so should not have an underline span", span.mSpan);
     }
 }
diff --git a/tests/src/com/android/inputmethod/latin/InputTestsBase.java b/tests/src/com/android/inputmethod/latin/InputTestsBase.java
index 86298674b3055cb37c4050dba6c827185d675478..a01fef2e2a06e52d308c6586aa0ed44d56aeb691 100644
--- a/tests/src/com/android/inputmethod/latin/InputTestsBase.java
+++ b/tests/src/com/android/inputmethod/latin/InputTestsBase.java
@@ -55,8 +55,6 @@ public class InputTestsBase extends ServiceTestCase<LatinIME> {
     protected MyTextView mTextView;
     protected View mInputView;
     protected InputConnection mInputConnection;
-    private final HashMap<String, InputMethodSubtype> mSubtypeMap =
-            new HashMap<String, InputMethodSubtype>();
 
     // A helper class to ease span tests
     public static class SpanGetter {
@@ -143,7 +141,6 @@ public class InputTestsBase extends ServiceTestCase<LatinIME> {
         final boolean previousDebugSetting = setDebugMode(true);
         mLatinIME.onCreate();
         setDebugMode(previousDebugSetting);
-        initSubtypeMap();
         final EditorInfo ei = new EditorInfo();
         ei.inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT;
         final InputConnection ic = mTextView.onCreateInputConnection(ei);
@@ -161,26 +158,6 @@ public class InputTestsBase extends ServiceTestCase<LatinIME> {
         changeLanguage("en_US");
     }
 
-    private void initSubtypeMap() {
-        final InputMethodManager imm = (InputMethodManager)mLatinIME.getSystemService(
-                Context.INPUT_METHOD_SERVICE);
-        final String packageName = mLatinIME.getPackageName();
-        // The IMEs and subtypes don't need to be enabled to run this test because IMF isn't
-        // involved here.
-        for (final InputMethodInfo imi : imm.getInputMethodList()) {
-            if (imi.getPackageName().equals(packageName)) {
-                final int subtypeCount = imi.getSubtypeCount();
-                for (int i = 0; i < subtypeCount; i++) {
-                    final InputMethodSubtype ims = imi.getSubtypeAt(i);
-                    final String locale = ims.getLocale();
-                    mSubtypeMap.put(locale, ims);
-                }
-                return;
-            }
-        }
-        fail("LatinIME is not found");
-    }
-
     // We need to run the messages added to the handler from LatinIME. The only way to do
     // that is to call Looper#loop() on the right looper, so we're going to get the looper
     // object and call #loop() here. The messages in the handler actually run on the UI
@@ -270,12 +247,8 @@ public class InputTestsBase extends ServiceTestCase<LatinIME> {
     }
 
     protected void changeLanguage(final String locale) {
-        final InputMethodSubtype subtype = mSubtypeMap.get(locale);
         mTextView.mCurrentLocale = LocaleUtils.constructLocaleFromString(locale);
-        if (subtype == null) {
-            fail("InputMethodSubtype for locale " + locale + " is not enabled");
-        }
-        SubtypeSwitcher.getInstance().onSubtypeChanged(subtype);
+        SubtypeSwitcher.getInstance().forceLocale(mTextView.mCurrentLocale);
         mLatinIME.loadKeyboard();
         mKeyboard = mLatinIME.mKeyboardSwitcher.getKeyboard();
         waitForDictionaryToBeLoaded();