diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSetTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSetTests.java
new file mode 100644
index 0000000000000000000000000000000000000000..17d76871868c49b0db4075514f8bd6214de1115c
--- /dev/null
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSetTests.java
@@ -0,0 +1,106 @@
+/*
+ * 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.internal;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.view.inputmethod.InputMethodInfo;
+import android.view.inputmethod.InputMethodSubtype;
+
+import com.android.inputmethod.latin.RichInputMethodManager;
+import com.android.inputmethod.latin.utils.CollectionUtils;
+import com.android.inputmethod.latin.utils.RunInLocale;
+import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+
+@SmallTest
+public final class KeyboardTextsSetTests extends AndroidTestCase {
+    // All input method subtypes of LatinIME.
+    private List<InputMethodSubtype> mAllSubtypesList;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        RichInputMethodManager.init(getContext());
+        final RichInputMethodManager richImm = RichInputMethodManager.getInstance();
+
+        final ArrayList<InputMethodSubtype> allSubtypesList = CollectionUtils.newArrayList();
+        final InputMethodInfo imi = richImm.getInputMethodInfoOfThisIme();
+        final int subtypeCount = imi.getSubtypeCount();
+        for (int index = 0; index < subtypeCount; index++) {
+            final InputMethodSubtype subtype = imi.getSubtypeAt(index);
+            allSubtypesList.add(subtype);
+        }
+        mAllSubtypesList = Collections.unmodifiableList(allSubtypesList);
+    }
+
+    // Test that the text {@link KeyboardTextsSet#SWITCH_TO_ALPHA_KEY_LABEL} exists for all
+    // subtypes. The text is needed to implement Emoji Keyboard, see
+    // {@link KeyboardSwitcher#setEmojiKeyboard()}.
+    public void testSwitchToAlphaKeyLabel() {
+        final KeyboardTextsSet textsSet = new KeyboardTextsSet();
+        for (final InputMethodSubtype subtype : mAllSubtypesList) {
+            final Locale locale = SubtypeLocaleUtils.getSubtypeLocale(subtype);
+            textsSet.setLocale(locale);
+            final String switchToAlphaKeyLabel = textsSet.getText(
+                    KeyboardTextsSet.SWITCH_TO_ALPHA_KEY_LABEL);
+            assertNotNull("Switch to alpha key label of " + locale, switchToAlphaKeyLabel);
+            assertFalse("Switch to alpha key label of " + locale, switchToAlphaKeyLabel.isEmpty());
+        }
+    }
+
+    private static final String[] TEXT_NAMES_FROM_RESOURCE = {
+        // Labels for action.
+        "label_go_key",
+        "label_send_key",
+        "label_next_key",
+        "label_done_key",
+        "label_previous_key",
+        // Other labels.
+        "label_pause_key",
+        "label_wait_key",
+    };
+
+    // Test that the text from resources are correctly loaded for all subtypes.
+    public void testTextFromResources() {
+        final Context context = getContext();
+        final KeyboardTextsSet textsSet = new KeyboardTextsSet();
+        for (final InputMethodSubtype subtype : mAllSubtypesList) {
+            final Locale locale = SubtypeLocaleUtils.getSubtypeLocale(subtype);
+            textsSet.setLocale(locale);
+            final RunInLocale<Void> job = new RunInLocale<Void>() {
+                @Override
+                protected Void job(final Resources res) {
+                    textsSet.loadStringResources(context);
+                    return null;
+                }
+            };
+            job.runInLocale(context.getResources(), locale);
+            for (final String name : TEXT_NAMES_FROM_RESOURCE) {
+                final String text = textsSet.getText(name);
+                assertNotNull(name + " of " + locale, text);
+                assertFalse(name + " of " + locale, text.isEmpty());
+            }
+        }
+    }
+}