Fix a bug when deleting the last char

And unit test

Change-Id: Ic4fc3626f8b86e10156d770d41cd6deab5d31f39
diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java
index fa1b5ef..dd24432 100644
--- a/java/src/com/android/inputmethod/latin/WordComposer.java
+++ b/java/src/com/android/inputmethod/latin/WordComposer.java
@@ -212,6 +212,7 @@
             final int lastPos = size - 1;
             char lastChar = mTypedWord.charAt(lastPos);
             mCodes.remove(lastPos);
+            // TODO: This crashes and catches fire if the code point doesn't fit a char
             mTypedWord.deleteCharAt(lastPos);
             if (Character.isUpperCase(lastChar)) mCapsCount--;
         }
@@ -221,8 +222,9 @@
         if (mTrailingSingleQuotesCount > 0) {
             --mTrailingSingleQuotesCount;
         } else {
-            for (int i = mTypedWord.offsetByCodePoints(mTypedWord.length(), -1);
-                    i >= 0; i = mTypedWord.offsetByCodePoints(i, -1)) {
+            int i = mTypedWord.length();
+            while (i > 0) {
+                i = mTypedWord.offsetByCodePoints(i, -1);
                 if (Keyboard.CODE_SINGLE_QUOTE != mTypedWord.codePointAt(i)) break;
                 ++mTrailingSingleQuotesCount;
             }
diff --git a/tests/src/com/android/inputmethod/latin/InputLogicTests.java b/tests/src/com/android/inputmethod/latin/InputLogicTests.java
index af647b8..ee3a97f 100644
--- a/tests/src/com/android/inputmethod/latin/InputLogicTests.java
+++ b/tests/src/com/android/inputmethod/latin/InputLogicTests.java
@@ -291,4 +291,13 @@
         assertEquals("manual pick then space then type", WORD1_TO_TYPE + WORD2_TO_TYPE,
                 mTextView.getText().toString());
     }
+
+    public void testDeleteWholeComposingWord() {
+        final String WORD_TO_TYPE = "this";
+        type(WORD_TO_TYPE);
+        for (int i = 0; i < WORD_TO_TYPE.length(); ++i) {
+            type(Keyboard.CODE_DELETE);
+        }
+        assertEquals("delete whole composing word", "", mTextView.getText().toString());
+    }
 }