Add a preliminary test for basic Russian spell check

Bug: 6981919
Change-Id: I5ec6a6468cb616e7a4369c79b4dbfc84f3d8de59
diff --git a/tests/src/com/android/inputmethod/latin/InputTestsBase.java b/tests/src/com/android/inputmethod/latin/InputTestsBase.java
index dfb83fa..fe58cb8 100644
--- a/tests/src/com/android/inputmethod/latin/InputTestsBase.java
+++ b/tests/src/com/android/inputmethod/latin/InputTestsBase.java
@@ -41,6 +41,7 @@
 import com.android.inputmethod.keyboard.Keyboard;
 
 import java.util.HashMap;
+import java.util.Locale;
 
 public class InputTestsBase extends ServiceTestCase<LatinIME> {
 
@@ -93,12 +94,20 @@
 
     // A helper class to increase control over the TextView
     public static class MyTextView extends TextView {
+        public Locale mCurrentLocale;
         public MyTextView(final Context c) {
             super(c);
         }
         public void onAttachedToWindow() {
             super.onAttachedToWindow();
         }
+        public Locale getTextServicesLocale() {
+            // This method is necessary because TextView is asking this method for the language
+            // to check the spell in. If we don't override this, the spell checker will run in
+            // whatever language the keyboard is currently set on the test device, ignoring any
+            // settings we do inside the tests.
+            return mCurrentLocale;
+        }
     }
 
     public InputTestsBase() {
@@ -261,6 +270,7 @@
 
     protected void changeLanguage(final String locale) {
         final InputMethodSubtype subtype = mSubtypeMap.get(locale);
+        mTextView.mCurrentLocale = LocaleUtils.constructLocaleFromString(locale);
         if (subtype == null) {
             fail("InputMethodSubtype for locale " + locale + " is not enabled");
         }
diff --git a/tests/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerServiceTest.java b/tests/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerServiceTest.java
index 11624e1..21406d3 100644
--- a/tests/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerServiceTest.java
+++ b/tests/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerServiceTest.java
@@ -40,4 +40,24 @@
         // We also assume the top suggestion should be "this".
         assertEquals("", "this", suggestions[0]);
     }
+
+    public void testRussianSpellchecker() {
+        changeLanguage("ru");
+        mTextView.onAttachedToWindow();
+        mTextView.setText("годп");
+        type(" ");
+        sleep(1000);
+        runMessages();
+        sleep(1000);
+
+        final SpanGetter span = new SpanGetter(mTextView.getText(), SuggestionSpan.class);
+        // If no span, the following will crash
+        final String[] suggestions = span.getSuggestions();
+        // For this test we consider "годп" should yield at least 2 suggestions (at this moment
+        // it yields 5).
+        assertTrue(suggestions.length >= 2);
+        // We also assume the top suggestion should be "года", which is the top word in the
+        // Russian dictionary.
+        assertEquals("", "года", suggestions[0]);
+    }
 }