diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
index 13a7273..4967a5e 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
@@ -315,7 +315,7 @@
     }
 
     /**
-     * Updates state machine to figure out when to automatically snap back to the previous mode.
+     * Updates state machine to figure out when to automatically switch back to the previous mode.
      */
     public void onCodeInput(int code) {
         mState.onCodeInput(code, isSinglePointer(), mInputMethodService.getCurrentAutoCapsState());
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
index b3d8f97..3e70896 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
@@ -269,7 +269,7 @@
     }
 
     private void onReleaseSymbol() {
-        // Snap back to the previous keyboard mode if the user chords the mode change key and
+        // Switch back to the previous keyboard mode if the user chords the mode change key and
         // another key, then releases the mode change key.
         if (mSwitchState == SWITCH_STATE_CHORDING_ALPHA) {
             toggleAlphabetAndSymbols();
@@ -355,8 +355,8 @@
                 setShifted(SwitchActions.UNSHIFT);
             }
         } else {
-            // In symbol mode, snap back to the previous keyboard mode if the user chords the shift
-            // key and another key, then releases the shift key.
+            // In symbol mode, switch back to the previous keyboard mode if the user chords the
+            // shift key and another key, then releases the shift key.
             if (mSwitchState == SWITCH_STATE_CHORDING_SYMBOL) {
                 toggleShiftInSymbols();
             }
@@ -368,7 +368,7 @@
         if (DEBUG_EVENT) {
             Log.d(TAG, "onCancelInput: single=" + isSinglePointer + " " + this);
         }
-        // Snap back to the previous keyboard mode if the user cancels sliding input.
+        // Switch back to the previous keyboard mode if the user cancels sliding input.
         if (isSinglePointer) {
             if (mSwitchState == SWITCH_STATE_MOMENTARY_ALPHA_AND_SYMBOL) {
                 toggleAlphabetAndSymbols();
@@ -427,13 +427,13 @@
                     mSwitchState = SWITCH_STATE_SYMBOL_BEGIN;
                 }
             } else if (isSinglePointer) {
-                // Snap back to the previous keyboard mode if the user pressed the mode change key
+                // Switch back to the previous keyboard mode if the user pressed the mode change key
                 // and slid to other key, then released the finger.
-                // If the user cancels the sliding input, snapping back to the previous keyboard
+                // If the user cancels the sliding input, switching back to the previous keyboard
                 // mode is handled by {@link #onCancelInput}.
                 toggleAlphabetAndSymbols();
             } else {
-                // Chording input is being started. The keyboard mode will be snapped back to the
+                // Chording input is being started. The keyboard mode will be switched back to the
                 // previous mode in {@link onReleaseSymbol} when the mode change key is released.
                 mSwitchState = SWITCH_STATE_CHORDING_ALPHA;
             }
@@ -443,12 +443,12 @@
                 // Detected only the shift key has been pressed on symbol layout, and then released.
                 mSwitchState = SWITCH_STATE_SYMBOL_BEGIN;
             } else if (isSinglePointer) {
-                // Snap back to the previous keyboard mode if the user pressed the shift key on
+                // Switch back to the previous keyboard mode if the user pressed the shift key on
                 // symbol mode and slid to other key, then released the finger.
                 toggleShiftInSymbols();
                 mSwitchState = SWITCH_STATE_SYMBOL;
             } else {
-                // Chording input is being started. The keyboard mode will be snapped back to the
+                // Chording input is being started. The keyboard mode will be switched back to the
                 // previous mode in {@link onReleaseShift} when the shift key is released.
                 mSwitchState = SWITCH_STATE_CHORDING_SYMBOL;
             }
@@ -458,14 +458,14 @@
                     || code == Keyboard.CODE_OUTPUT_TEXT)) {
                 mSwitchState = SWITCH_STATE_SYMBOL;
             }
-            // Snap back to alpha keyboard mode immediately if user types a quote character.
+            // Switch back to alpha keyboard mode immediately if user types a quote character.
             if (isLayoutSwitchBackCharacter(code)) {
                 setAlphabetKeyboard();
             }
             break;
         case SWITCH_STATE_SYMBOL:
         case SWITCH_STATE_CHORDING_SYMBOL:
-            // Snap back to alpha keyboard mode if user types one or more non-space/enter
+            // Switch back to alpha keyboard mode if user types one or more non-space/enter
             // characters followed by a space/enter or a quote character.
             if (isSpaceCharacter(code) || isLayoutSwitchBackCharacter(code)) {
                 setAlphabetKeyboard();
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java
index b00f7f6..6fbe769 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java
@@ -18,7 +18,7 @@
 
 public class KeyboardStateMultiTouchTests extends KeyboardStateTestsBase {
     // Shift key chording input.
-    public void testShiftChording() {
+    public void testChording() {
         // Press shift key and hold, enter into choring shift state.
         pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
 
@@ -26,23 +26,102 @@
         chordingPressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
         chordingPressAndReleaseKey('X', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
 
-        // Release shift key, snap back to normal state.
+        // Release shift key, switch back to alphabet.
         releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
-    }
 
-    // Symbols key chording input.
-    public void testSymbolsChording() {
-        // Press symbols key and hold, enter into choring shift state.
+        // Press symbols key and hold, enter into choring symbols state.
         pressKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
 
         // Press/release symbol letter keys.
         chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
         chordingPressAndReleaseKey('2', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
 
-        // Release shift key, snap back to normal state.
+        // Release symbols key, switch back to alphabet.
         releaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
     }
 
+    // Shift key chording input in shift locked.
+    public void testShiftChordingShiftLocked() {
+        // Long press shift key, enter alphabet shift locked.
+        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+
+        // Press shift key and hold, enter into choring shift state.
+        pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
+
+        // Press/release letter keys.
+        chordingPressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+        chordingPressAndReleaseKey('X', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+
+        // TODO: This test fails due to bug, though external behavior is correct.
+        // Release shift key, switch back to alphabet shift locked.
+//        releaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCKED);
+//
+//        // Press symbols key and hold, enter into choring symbols state.
+//        pressKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
+//
+//        // Press/release symbol letter keys.
+//        chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+//        chordingPressAndReleaseKey('2', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+//
+//        // Release symbols key, switch back to alphabet shift locked.
+//        releaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED);
+    }
+
+    // Symbols key chording input.
+    public void testSymbolsChording() {
+        // Press/release symbols key, enter symbols.
+        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+
+        // Press shift key and hold, enter into choring symbols shifted state.
+        pressKey(CODE_SHIFT, SYMBOLS_SHIFTED);
+
+        // Press/release symbols keys.
+        chordingPressAndReleaseKey('1', SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+        chordingPressAndReleaseKey('2', SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+
+        // Release shift key, switch back to symbols.
+        releaseKey(CODE_SHIFT, SYMBOLS_UNSHIFTED);
+
+        // Press "ABC" key and hold, enter into choring alphabet state.
+        pressKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
+
+        // Press/release letter keys.
+        chordingPressAndReleaseKey('a', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+        chordingPressAndReleaseKey('b', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+
+        // Release "ABC" key, switch back to symbols.
+        releaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
+    }
+
+    // Symbols shifted key chording input in symbol.
+    public void testSymbolsShiftedChording() {
+        // Press/release symbols key, enter symbols.
+        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+        // Press/release shift key, enter symbols shifted.
+        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+
+        // Press shift key and hold, enter into chording symbols state.
+        pressKey(CODE_SHIFT, SYMBOLS_UNSHIFTED);
+
+        // Press/release symbol letter keys.
+        chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+        chordingPressAndReleaseKey('2', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+
+        // Release shift key, switch back to symbols shifted state.
+        releaseKey(CODE_SHIFT, SYMBOLS_SHIFTED);
+
+        // TODO: This test fails due to bug.
+//        // Press "ABC" key and hold, enter into choring alphabet state.
+//        pressKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
+//
+//        // Press/release letter keys.
+//        chordingPressAndReleaseKey('a', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+//        chordingPressAndReleaseKey('b', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+//
+//        // Release "ABC" key, switch back to symbols.
+//        releaseKey(CODE_SYMBOL, SYMBOLS_SHIFTED);
+    }
+
     // Chording shift key in automatic upper case.
     public void testAutomaticUpperCaseChording() {
         // Set auto caps mode on.
@@ -51,13 +130,13 @@
         // Update shift state with auto caps enabled.
         updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
 
-        // Press shift key.
+        // Press shift key and hold, enter into chording shift state.
         pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
 
         // Press/release letter keys.
         chordingPressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
 
-        // Release shift key, snap back to alphabet.
+        // Release shift key, switch back to alphabet.
         releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
     }
 
@@ -69,13 +148,13 @@
         // Update shift state with auto caps enabled.
         updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
 
-        // Press "123?" key.
+        // Press "123?" key and hold, enter into chording symbols state.
         pressKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
 
         // Press/release symbol letter keys.
         chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
 
-        // Release "123?" key, snap back to alphabet.
+        // Release "123?" key, switch back to alphabet.
         releaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
     }
 
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateSingleTouchTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateSingleTouchTests.java
index 04f4f45..d13ca63 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateSingleTouchTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateSingleTouchTests.java
@@ -26,7 +26,7 @@
 
         // Press/release shift key, enter into shift state.
         pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
-        // Press/release letter key, snap back to normal state.
+        // Press/release letter key, switch back to normal state.
         pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
     }
 
@@ -35,7 +35,7 @@
         // Press and slide from shift key.
         pressAndSlideFromKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
 
-        // Enter/release letter key, snap back to alphabet.
+        // Enter/release letter key, switch back to alphabet.
         pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
     }
 
@@ -64,7 +64,7 @@
         // Press and slide from "123?" key.
         pressAndSlideFromKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
 
-        // Enter/release into symbol key, snap back to alphabet.
+        // Enter/release into symbol key, switch back to alphabet.
         pressAndReleaseKey('!', SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
     }
 
@@ -88,7 +88,7 @@
         // Press and slide from "=\<" key.
         pressAndSlideFromKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
 
-        // Enter/release symbol shifted letter key, snap back to symbols.
+        // Enter/release symbol shifted letter key, switch back to symbols.
         pressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_UNSHIFTED);
     }
 
@@ -103,30 +103,26 @@
         // Press and slide from "123?" key.
         pressAndSlideFromKey(CODE_SHIFT, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
 
-        // Enter/release symbol letter key, snap back to symbols shifted.
+        // Enter/release symbol letter key, switch back to symbols shifted.
         pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_SHIFTED);
     }
 
-    // Automatic snap back to alphabet from symbols by space key.
-    public void testSnapBackBySpace() {
+    // Automatic switch back to alphabet from symbols by space key.
+    public void testSwitchBackBySpace() {
         // Press/release "?123" key, enter into symbols.
         pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
 
         // Enter a symbol letter.
         pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
 
-        // Enter space, snap back to alphabet.
+        // Enter space, switch back to alphabet.
         pressAndReleaseKey(CODE_SPACE, SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
     }
 
-    // TODO: Add automatic snap back to shift locked test.
-
-    // Automatic snap back to alphabet from symbols by registered letters.
-    public void testSnapBack() {
-        // Set snap back chars.
-        final String snapBackChars = "'";
-        final int snapBackCode = snapBackChars.codePointAt(0);
-        loadKeyboard(snapBackChars, ALPHABET_UNSHIFTED);
+    // Automatic switch back to shift locked test.
+    public void testSwitchBackBySpaceInShiftLocked() {
+        // Long press shift key, enter alphabet shift locked.
+        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
 
         // Press/release "?123" key, enter into symbols.
         pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
@@ -134,8 +130,27 @@
         // Enter a symbol letter.
         pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
 
-        // Enter snap back letter, snap back to alphabet.
-        pressAndReleaseKey(snapBackCode, SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
+        // Enter space, switch back to alphabet.
+        pressAndReleaseKey(CODE_SPACE, SYMBOLS_UNSHIFTED, ALPHABET_SHIFT_LOCKED);
+    }
+
+
+    // Automatic switch back to alphabet from symbols by registered letters.
+    public void testSwitchBackChar() {
+        // Set switch back chars.
+        final String switchBackSymbols = "'";
+        final int switchBackCode = switchBackSymbols.codePointAt(0);
+        setLayoutSwitchBackSymbols(switchBackSymbols);
+        loadKeyboard(ALPHABET_UNSHIFTED);
+
+        // Press/release "?123" key, enter into symbols.
+        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+
+        // Enter a symbol letter.
+        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+
+        // Enter switch back letter, switch back to alphabet.
+        pressAndReleaseKey(switchBackCode, SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
     }
 
     // Automatic upper case test
@@ -255,7 +270,84 @@
         updateShiftState(ALPHABET_SHIFT_LOCKED);
     }
 
-    // TODO: Change focus test.
+    // Change focus to new text field.
+    public void testChangeFocus() {
+        // Press/release shift key.
+        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+        // Change focus to new text field.
+        loadKeyboard(ALPHABET_UNSHIFTED);
 
-    // TODO: Change orientation test.
+        // Long press shift key, enter alphabet shift locked.
+        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+        // Change focus to new text field.
+        loadKeyboard(ALPHABET_UNSHIFTED);
+
+        // Press/release symbol key.
+        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+        // Change focus to new text field.
+        loadKeyboard(ALPHABET_UNSHIFTED);
+
+        // Press/release symbol key.
+        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+        // Press/release shift key.
+        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+        // Change focus to new text field.
+        loadKeyboard(ALPHABET_UNSHIFTED);
+    }
+
+    // Change focus to auto caps text field.
+    public void testChangeFocusAutoCaps() {
+        // Set auto caps mode on.
+        setAutoCapsMode(AUTO_CAPS);
+
+        // Update shift state.
+        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
+        // Change focus to new text field.
+        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
+
+        // Press/release shift key, enter alphabet.
+        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
+        // Change focus to new text field.
+        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
+
+        // Long press shift key, enter alphabet shift locked.
+        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+        // Change focus to new text field.
+        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
+
+        // Press/release symbol key.
+        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+        // Change focus to new text field.
+        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
+
+        // Press/release symbol key.
+        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+        // Press/release shift key.
+        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+        // Change focus to new text field.
+        loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
+    }
+
+    // Change orientation.
+    public void testChangeOrientation() {
+        // Press/release shift key.
+        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+        // Rotate device.
+        rotateDevice(ALPHABET_MANUAL_SHIFTED);
+
+        // Long press shift key, enter alphabet shift locked.
+        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+        // Rotate device.
+        rotateDevice(ALPHABET_SHIFT_LOCKED);
+
+        // Press/release symbol key.
+        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+        // Rotate device.
+        rotateDevice(SYMBOLS_UNSHIFTED);
+
+        // Press/release shift key.
+        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+        // Rotate device.
+        rotateDevice(SYMBOLS_SHIFTED);
+    }
 }
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateTestsBase.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateTestsBase.java
index 6eaa0e9..62df2cf 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateTestsBase.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateTestsBase.java
@@ -18,10 +18,12 @@
 
 import android.test.AndroidTestCase;
 
-public abstract class KeyboardStateTestsBase extends AndroidTestCase
+public class KeyboardStateTestsBase extends AndroidTestCase
         implements MockKeyboardSwitcher.Constants {
     protected MockKeyboardSwitcher mSwitcher;
 
+    private String mLayoutSwitchBackSymbols = "";
+
     @Override
     protected void setUp() throws Exception {
         super.setUp();
@@ -29,24 +31,33 @@
         mSwitcher = new MockKeyboardSwitcher();
         mSwitcher.setAutoCapsMode(NO_AUTO_CAPS);
 
-        final String layoutSwitchBackSymbols = "";
-        loadKeyboard(layoutSwitchBackSymbols, ALPHABET_UNSHIFTED);
+        loadKeyboard(ALPHABET_UNSHIFTED);
     }
 
     public void setAutoCapsMode(boolean autoCaps) {
         mSwitcher.setAutoCapsMode(autoCaps);
     }
 
+    public void setLayoutSwitchBackSymbols(String switchBackSymbols) {
+        mLayoutSwitchBackSymbols = switchBackSymbols;
+    }
+
     public void updateShiftState(int afterUpdate) {
         mSwitcher.updateShiftState();
         assertEquals(afterUpdate, mSwitcher.getLayoutId());
     }
 
-    public void loadKeyboard(String layoutSwitchBackSymbols, int afterLoad) {
-        mSwitcher.loadKeyboard(layoutSwitchBackSymbols);
+    public void loadKeyboard(int afterLoad) {
+        mSwitcher.loadKeyboard(mLayoutSwitchBackSymbols);
         updateShiftState(afterLoad);
     }
 
+    public void rotateDevice(int afterRotate) {
+        mSwitcher.saveKeyboardState();
+        mSwitcher.loadKeyboard(mLayoutSwitchBackSymbols);
+        assertEquals(afterRotate, mSwitcher.getLayoutId());
+    }
+
     public void pressKey(int code, int afterPress) {
         mSwitcher.onPressKey(code);
         assertEquals(afterPress, mSwitcher.getLayoutId());
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java b/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java
index 9692945..87b4636 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java
@@ -108,6 +108,10 @@
         mState.onLoadKeyboard(layoutSwitchBackSymbols);
     }
 
+    public void saveKeyboardState() {
+        mState.onSaveKeyboardState();
+    }
+
     public void onPressKey(int code) {
         mState.onPressKey(code);
     }
