Add aggressive cancellation for auto suggestion

- Add ring buffer
- Count separator for auto suggestion
- Add a test for ring buffer

Change-Id: Id4a0aa00ceb1b055b8fc96c45e100d318cceb2ab
diff --git a/tests/Android.mk b/tests/Android.mk
index e72587d..60e82d5 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -10,7 +10,7 @@
 # Include all test java files.
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-LOCAL_PACKAGE_NAME := LatinIMETests
+LOCAL_PACKAGE_NAME := LatinIME2Tests
 
 LOCAL_INSTRUMENTATION_FOR := LatinIme2Google
 
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index 210e814..66cecee 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -27,7 +27,7 @@
     </application>
 
     <instrumentation android:name="android.test.InstrumentationTestRunner"
-        android:targetPackage="com.android.inputmethod.latin"
+        android:targetPackage="com.google.android.inputmethod.latin"
         android:label="LatinIME tests">
     </instrumentation>
 </manifest>
diff --git a/tests/src/com/android/inputmethod/latin/ImeLoggerTests.java b/tests/src/com/android/inputmethod/latin/ImeLoggerTests.java
new file mode 100644
index 0000000..234559b
--- /dev/null
+++ b/tests/src/com/android/inputmethod/latin/ImeLoggerTests.java
@@ -0,0 +1,59 @@
+package com.android.inputmethod.latin;
+
+import android.test.ServiceTestCase;
+
+public class ImeLoggerTests extends ServiceTestCase<LatinIME> {
+
+    private static final String WORD_SEPARATORS
+            = ".\u0009\u0020,;:!?\n()[]*&@{}<>;_+=|\\u0022";
+
+    public ImeLoggerTests() {
+        super(LatinIME.class);
+    }
+    static LatinImeLogger sLogger;
+    @Override
+    protected void setUp() {
+        try {
+            super.setUp();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        setupService();
+        // startService(null); // can't be started because VoiceInput can't be found.
+        final LatinIME context = getService();
+        context.mWordSeparators = WORD_SEPARATORS;
+        LatinImeLogger.init(context);
+        sLogger = LatinImeLogger.sLatinImeLogger;
+    }
+    /*********************** Tests *********************/
+    public void testRingBuffer() {
+        for (int i = 0; i < sLogger.mRingCharBuffer.BUFSIZE * 2; ++i) {
+            LatinImeLogger.logOnDelete();
+        }
+        assertEquals("", sLogger.mRingCharBuffer.getLastString());
+        LatinImeLogger.logOnInputChar('t');
+        LatinImeLogger.logOnInputChar('g');
+        LatinImeLogger.logOnInputChar('i');
+        LatinImeLogger.logOnInputChar('s');
+        LatinImeLogger.logOnInputChar(' ');
+        LatinImeLogger.logOnAutoSuggestion("tgis", "this");
+        LatinImeLogger.logOnInputChar(' ');
+        LatinImeLogger.logOnDelete();
+        assertEquals("", sLogger.mRingCharBuffer.getLastString());
+        LatinImeLogger.logOnDelete();
+        assertEquals("tgis", sLogger.mRingCharBuffer.getLastString());
+        assertEquals("tgis", LatinImeLogger.sLastAutoSuggestBefore);
+        LatinImeLogger.logOnAutoSuggestionCanceled();
+        assertEquals("", LatinImeLogger.sLastAutoSuggestBefore);
+        LatinImeLogger.logOnDelete();
+        assertEquals("tgi", sLogger.mRingCharBuffer.getLastString());
+        for (int i = 0; i < sLogger.mRingCharBuffer.BUFSIZE * 2; ++i) {
+            LatinImeLogger.logOnDelete();
+        }
+        assertEquals("", sLogger.mRingCharBuffer.getLastString());
+        for (int i = 0; i < sLogger.mRingCharBuffer.BUFSIZE * 2; ++i) {
+            LatinImeLogger.logOnInputChar('a');
+        }
+        assertEquals(sLogger.mRingCharBuffer.BUFSIZE, sLogger.mRingCharBuffer.length);
+    }
+}
diff --git a/tests/src/com/android/inputmethod/latin/tests/SuggestTests.java b/tests/src/com/android/inputmethod/latin/tests/SuggestTests.java
index 9401d92..0d3babf 100644
--- a/tests/src/com/android/inputmethod/latin/tests/SuggestTests.java
+++ b/tests/src/com/android/inputmethod/latin/tests/SuggestTests.java
@@ -241,8 +241,11 @@
      * Are accented forms of words suggested as corrections?
      */
     public void testAccents() {
-        assertTrue(isDefaultCorrection("nino", "ni\u00F1o")); // ni–o
-        assertTrue(isDefaultCorrection("nimo", "ni\u00F1o")); // ni–o
-        assertTrue(isDefaultCorrection("maria", "Mar\u00EDa")); // Mar’a
+        // ni<LATIN SMALL LETTER N WITH TILDE>o
+        assertTrue(isDefaultCorrection("nino", "ni\u00F1o"));
+        // ni<LATIN SMALL LETTER N WITH TILDE>o
+        assertTrue(isDefaultCorrection("nimo", "ni\u00F1o"));
+        // Mar<LATIN SMALL LETTER I WITH ACUTE>a
+        assertTrue(isDefaultCorrection("maria", "Mar\u00EDa"));
     }
 }