diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java
index c2408c9c5b37a00f4a6857fea674d2ba7842a00a..5c62c11c5f5d8dd3ab648518bfc2ae6305206d9c 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java
@@ -34,6 +34,26 @@ public class KeyboardStateMultiTouchTests extends KeyboardStateTestsBase {
         releaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
     }
 
+    // Chording input in shifted.
+    public void testChordingShifted() {
+        // Press shift key, enter alphabet shifted.
+        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+
+        // Press shift key and hold, enter into choring shift state.
+        pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
+        // Press/release letter key.
+        chordingPressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+        // Release shift key, switch back to alphabet shifted.
+        releaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
+
+        // Press "?123" key and hold, enter into choring symbols state.
+        pressKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
+        // Press/release symbol letter key.
+        chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+        // Release "123?" key, switch back to alphabet shift unshifted.
+        releaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
+    }
+
     // Chording input in shift locked.
     public void testChordingShiftLocked() {
         // Long press shift key, enter alphabet shift locked.
@@ -240,4 +260,116 @@ public class KeyboardStateMultiTouchTests extends KeyboardStateTestsBase {
         // Release shift key
         releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
     }
+
+    // Multi touch input in manual shifted.
+    public void testMultiTouchManualShifted() {
+        // Press/release shift key, enter into alphabet shifted.
+        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+
+        // Press 'X' key and hold
+        pressKey('X', ALPHABET_MANUAL_SHIFTED);
+        // TODO: The following test fails due to a bug. Temporarily commented out.
+//        // Press 'z' key and hold, switch back to alphabet unshifted.
+//        chordingPressKey('z', ALPHABET_UNSHIFTED);
+//        // Release 'X' key
+//        releaseKey('X', ALPHABET_UNSHIFTED);
+//        // Release 'z' key
+//        releaseKey('z', ALPHABET_UNSHIFTED);
+    }
+
+    // Multi touch input in automatic upper case.
+    public void testMultiTouchAutomaticUpperCase() {
+        // Set auto word caps mode on.
+        setAutoCapsMode(CAP_MODE_WORDS);
+        // Update shift state with auto caps enabled.
+        pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
+
+        // Press 'X' key and hold
+        pressKey('X', ALPHABET_AUTOMATIC_SHIFTED);
+        // TODO: The following test fails due to a bug. Temporarily commented out.
+//        // Press 'z' key and hold, switch back to alphabet unshifted.
+//        chordingPressKey('z', ALPHABET_UNSHIFTED);
+//        // Release 'X' key
+//        releaseKey('X', ALPHABET_UNSHIFTED);
+//        // Release 'z' key
+//        releaseKey('z', ALPHABET_UNSHIFTED);
+    }
+
+    // Multi touch input in capitalize character mode.
+    public void testMultiTouchCapModeCharacter() {
+        // Set auto character caps mode on.
+        setAutoCapsMode(CAP_MODE_CHARACTERS);
+        // Update shift state with auto caps enabled.
+        pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
+
+        // Press 'X' key and hold
+        pressKey('X', ALPHABET_AUTOMATIC_SHIFTED);
+        // Press 'Z' key and hold, stay in automatic shifted mode.
+        chordingPressKey('Z', ALPHABET_AUTOMATIC_SHIFTED);
+        // Release 'X' key
+        releaseKey('X', ALPHABET_AUTOMATIC_SHIFTED);
+        // Release 'Z' key
+        releaseKey('Z', ALPHABET_AUTOMATIC_SHIFTED);
+    }
+
+    // Multi touch shift chording input in manual shifted.
+    public void testMultiTouchShiftChordingManualShifted() {
+        // Press/release shift key, enter into alphabet shifted.
+        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+
+        // Press shift key and hold, stays in alphabet shifted.
+        pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
+        // Press 'X' key and hold
+        chordingPressKey('X', ALPHABET_MANUAL_SHIFTED);
+        // Press 'Z' key and hold, stays in alphabet shifted.
+        chordingPressKey('Z', ALPHABET_MANUAL_SHIFTED);
+        // Release 'X' key
+        releaseKey('X', ALPHABET_MANUAL_SHIFTED);
+        // Release 'Z' key
+        releaseKey('Z', ALPHABET_MANUAL_SHIFTED);
+        // Release shift key.
+        releaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
+    }
+
+    // Multi touch shift chording input in automatic upper case.
+    public void testMultiTouchShiftChordingAutomaticUpperCase() {
+        // Set auto word caps mode on.
+        setAutoCapsMode(CAP_MODE_WORDS);
+        // Update shift state with auto caps enabled.
+        pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
+
+        // Press shift key and hold, switch to alphabet shifted.
+        pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
+        // Press 'X' key and hold
+        chordingPressKey('X', ALPHABET_MANUAL_SHIFTED);
+        // Press 'Z' key and hold, stays in alphabet shifted.
+        chordingPressKey('Z', ALPHABET_MANUAL_SHIFTED);
+        // Release 'X' key
+        releaseKey('X', ALPHABET_MANUAL_SHIFTED);
+        // Release 'Z' key
+        releaseKey('Z', ALPHABET_MANUAL_SHIFTED);
+        // Release shift key.
+        releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
+    }
+
+    // Multi touch shift chording input in capitalize character mode.
+    public void testMultiTouchShiftChordingCapModeCharacter() {
+        // Set auto character caps mode on.
+        setAutoCapsMode(CAP_MODE_CHARACTERS);
+        // Update shift state with auto caps enabled.
+        pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
+
+        // Press shift key and hold, switch to alphabet shifted.
+        pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
+        // Press 'X' key and hold
+        chordingPressKey('X', ALPHABET_MANUAL_SHIFTED);
+        // Press 'Z' key and hold, stay in automatic shifted mode.
+        chordingPressKey('Z', ALPHABET_MANUAL_SHIFTED);
+        // Release 'X' key
+        releaseKey('X', ALPHABET_MANUAL_SHIFTED);
+        // Release 'Z' key
+        releaseKey('Z', ALPHABET_MANUAL_SHIFTED);
+        // Release shift key.
+        releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
+    }
 }