aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderFixedOrderTests.java8
-rw-r--r--tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderTests.java8
-rw-r--r--tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java5
-rw-r--r--tests/src/com/android/inputmethod/latin/InputTestsBase.java41
-rw-r--r--tests/src/com/android/inputmethod/latin/RecapitalizeStatusTests.java191
-rw-r--r--tests/src/com/android/inputmethod/latin/RichInputConnectionTests.java20
-rw-r--r--tests/src/com/android/inputmethod/latin/StringUtilsTests.java36
-rw-r--r--tests/src/com/android/inputmethod/latin/SuggestedWordsTests.java60
-rw-r--r--tests/src/com/android/inputmethod/latin/makedict/BinaryDictIOTests.java10
9 files changed, 311 insertions, 68 deletions
diff --git a/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderFixedOrderTests.java b/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderFixedOrderTests.java
index 8fef1de2a..6bb5adab5 100644
--- a/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderFixedOrderTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderFixedOrderTests.java
@@ -43,10 +43,10 @@ public class MoreKeysKeyboardBuilderFixedOrderTests extends AndroidTestCase {
super.setUp();
}
- private static MoreKeysKeyboardParams createParams(int numKeys, int columnNum,
- int coordXInParnet) {
+ private static MoreKeysKeyboardParams createParams(final int numKeys, final int columnNum,
+ final int coordXInParent) {
final MoreKeysKeyboardParams params = new MoreKeysKeyboardParams();
- params.setParameters(numKeys, columnNum, WIDTH, HEIGHT, coordXInParnet, KEYBOARD_WIDTH,
+ params.setParameters(numKeys, columnNum, WIDTH, HEIGHT, coordXInParent, KEYBOARD_WIDTH,
/* isFixedOrderColumn */true, /* dividerWidth */0);
return params;
}
@@ -55,7 +55,7 @@ public class MoreKeysKeyboardBuilderFixedOrderTests extends AndroidTestCase {
MoreKeysKeyboardParams params = null;
try {
final int fixColumns = KEYBOARD_WIDTH / WIDTH;
- params = createParams(10, fixColumns + 1, HEIGHT);
+ params = createParams(fixColumns + 1, fixColumns + 1, HEIGHT);
fail("Should throw IllegalArgumentException");
} catch (IllegalArgumentException e) {
// Too small keyboard to hold more keys keyboard.
diff --git a/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderTests.java b/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderTests.java
index ee4c72a85..99da4812a 100644
--- a/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderTests.java
@@ -43,10 +43,10 @@ public class MoreKeysKeyboardBuilderTests extends AndroidTestCase {
super.setUp();
}
- private static MoreKeysKeyboardParams createParams(int numKeys, int maxColumns,
- int coordXInParnet) {
+ private static MoreKeysKeyboardParams createParams(final int numKeys, final int maxColumns,
+ final int coordXInParent) {
final MoreKeysKeyboardParams params = new MoreKeysKeyboardParams();
- params.setParameters(numKeys, maxColumns, WIDTH, HEIGHT, coordXInParnet, KEYBOARD_WIDTH,
+ params.setParameters(numKeys, maxColumns, WIDTH, HEIGHT, coordXInParent, KEYBOARD_WIDTH,
/* isFixedOrderColumn */false, /* dividerWidth */0);
return params;
}
@@ -55,7 +55,7 @@ public class MoreKeysKeyboardBuilderTests extends AndroidTestCase {
MoreKeysKeyboardParams params = null;
try {
final int maxColumns = KEYBOARD_WIDTH / WIDTH;
- params = createParams(10, maxColumns + 1, HEIGHT);
+ params = createParams(maxColumns + 1, maxColumns + 1, HEIGHT);
fail("Should throw IllegalArgumentException");
} catch (IllegalArgumentException e) {
// Too small keyboard to hold more keys keyboard.
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java b/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java
index eb484084e..74506d26a 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java
@@ -19,6 +19,7 @@ package com.android.inputmethod.keyboard.internal;
import android.text.TextUtils;
import com.android.inputmethod.latin.Constants;
+import com.android.inputmethod.latin.RecapitalizeStatus;
public class MockKeyboardSwitcher implements KeyboardState.SwitchActions {
public interface MockConstants {
@@ -120,7 +121,7 @@ public class MockKeyboardSwitcher implements KeyboardState.SwitchActions {
@Override
public void requestUpdatingShiftState() {
- mState.onUpdateShiftState(mAutoCapsState);
+ mState.onUpdateShiftState(mAutoCapsState, RecapitalizeStatus.NOT_A_RECAPITALIZE_MODE);
}
@Override
@@ -162,7 +163,7 @@ public class MockKeyboardSwitcher implements KeyboardState.SwitchActions {
}
public void updateShiftState() {
- mState.onUpdateShiftState(mAutoCapsState);
+ mState.onUpdateShiftState(mAutoCapsState, RecapitalizeStatus.NOT_A_RECAPITALIZE_MODE);
}
public void loadKeyboard() {
diff --git a/tests/src/com/android/inputmethod/latin/InputTestsBase.java b/tests/src/com/android/inputmethod/latin/InputTestsBase.java
index 4583eab2f..9e107a49c 100644
--- a/tests/src/com/android/inputmethod/latin/InputTestsBase.java
+++ b/tests/src/com/android/inputmethod/latin/InputTestsBase.java
@@ -162,45 +162,22 @@ public class InputTestsBase extends ServiceTestCase<LatinIME> {
// on the same thread that the tests are running on to mimic the actual environment as
// closely as possible.
// Now, Looper#loop() never exits in normal operation unless the Looper#quit() method
- // is called, so we need to do that at the right time so that #loop() returns at some
- // point and we don't end up in an infinite loop.
- // After we quit, the looper is still technically ready to process more messages but
- // the handler will refuse to enqueue any because #quit() has been called and it
- // explicitly tests for it on message enqueuing, so we'll have to reset it so that
- // it lets us continue normal operation.
+ // is called, which has a lot of bad side effects. We can however just throw an exception
+ // in the runnable which will unwind the stack and allow us to exit.
+ private final class InterruptRunMessagesException extends RuntimeException {
+ // Empty class
+ }
protected void runMessages() {
- // Here begins deep magic.
- final Looper looper = mLatinIME.mHandler.getLooper();
mLatinIME.mHandler.post(new Runnable() {
@Override
public void run() {
- looper.quit();
+ throw new InterruptRunMessagesException();
}
});
- // The only way to get out of Looper#loop() is to call #quit() on it (or on its queue).
- // Once #quit() is called remaining messages are not processed, which is why we post
- // a message that calls it instead of calling it directly.
- Looper.loop();
-
- // Once #quit() has been called, the looper is not functional any more (it used to be,
- // but now it SIGSEGV's if it's used again).
- // It won't accept creating a new looper for this thread and switching to it...
- // ...unless we can trick it into throwing out the old looper and believing it hasn't
- // been initialized before.
- MessageQueue queue = Looper.myQueue();
try {
- // However there is no way of doing it externally, and the static ThreadLocal
- // field into which it's stored is private.
- // So... get out the big guns.
- java.lang.reflect.Field f = Looper.class.getDeclaredField("sThreadLocal");
- f.setAccessible(true); // private lolwut
- final ThreadLocal<Looper> a = (ThreadLocal<Looper>) f.get(looper);
- a.set(null);
- looper.prepare();
- } catch (NoSuchFieldException e) {
- throw new RuntimeException(e);
- } catch (IllegalAccessException e) {
- throw new RuntimeException(e);
+ Looper.loop();
+ } catch (InterruptRunMessagesException e) {
+ // Resume normal operation
}
}
diff --git a/tests/src/com/android/inputmethod/latin/RecapitalizeStatusTests.java b/tests/src/com/android/inputmethod/latin/RecapitalizeStatusTests.java
new file mode 100644
index 000000000..9d7203e5a
--- /dev/null
+++ b/tests/src/com/android/inputmethod/latin/RecapitalizeStatusTests.java
@@ -0,0 +1,191 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.inputmethod.latin;
+
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import java.util.Locale;
+
+@SmallTest
+public class RecapitalizeStatusTests extends AndroidTestCase {
+ public void testTrim() {
+ final RecapitalizeStatus status = new RecapitalizeStatus();
+ status.initialize(30, 40, "abcdefghij", Locale.ENGLISH, " ");
+ status.trim();
+ assertEquals("abcdefghij", status.getRecapitalizedString());
+ assertEquals(30, status.getNewCursorStart());
+ assertEquals(40, status.getNewCursorEnd());
+
+ status.initialize(30, 44, " abcdefghij", Locale.ENGLISH, " ");
+ status.trim();
+ assertEquals("abcdefghij", status.getRecapitalizedString());
+ assertEquals(34, status.getNewCursorStart());
+ assertEquals(44, status.getNewCursorEnd());
+
+ status.initialize(30, 40, "abcdefgh ", Locale.ENGLISH, " ");
+ status.trim();
+ assertEquals("abcdefgh", status.getRecapitalizedString());
+ assertEquals(30, status.getNewCursorStart());
+ assertEquals(38, status.getNewCursorEnd());
+
+ status.initialize(30, 45, " abcdefghij ", Locale.ENGLISH, " ");
+ status.trim();
+ assertEquals("abcdefghij", status.getRecapitalizedString());
+ assertEquals(33, status.getNewCursorStart());
+ assertEquals(43, status.getNewCursorEnd());
+ }
+
+ public void testRotate() {
+ final RecapitalizeStatus status = new RecapitalizeStatus();
+ status.initialize(29, 40, "abcd efghij", Locale.ENGLISH, " ");
+ status.rotate();
+ assertEquals("Abcd Efghij", status.getRecapitalizedString());
+ assertEquals(29, status.getNewCursorStart());
+ assertEquals(40, status.getNewCursorEnd());
+ status.rotate();
+ assertEquals("ABCD EFGHIJ", status.getRecapitalizedString());
+ status.rotate();
+ assertEquals("abcd efghij", status.getRecapitalizedString());
+ status.rotate();
+ assertEquals("Abcd Efghij", status.getRecapitalizedString());
+
+ status.initialize(29, 40, "Abcd Efghij", Locale.ENGLISH, " ");
+ status.rotate();
+ assertEquals("ABCD EFGHIJ", status.getRecapitalizedString());
+ assertEquals(29, status.getNewCursorStart());
+ assertEquals(40, status.getNewCursorEnd());
+ status.rotate();
+ assertEquals("abcd efghij", status.getRecapitalizedString());
+ status.rotate();
+ assertEquals("Abcd Efghij", status.getRecapitalizedString());
+ status.rotate();
+ assertEquals("ABCD EFGHIJ", status.getRecapitalizedString());
+
+ status.initialize(29, 40, "ABCD EFGHIJ", Locale.ENGLISH, " ");
+ status.rotate();
+ assertEquals("abcd efghij", status.getRecapitalizedString());
+ assertEquals(29, status.getNewCursorStart());
+ assertEquals(40, status.getNewCursorEnd());
+ status.rotate();
+ assertEquals("Abcd Efghij", status.getRecapitalizedString());
+ status.rotate();
+ assertEquals("ABCD EFGHIJ", status.getRecapitalizedString());
+ status.rotate();
+ assertEquals("abcd efghij", status.getRecapitalizedString());
+
+ status.initialize(29, 39, "AbCDefghij", Locale.ENGLISH, " ");
+ status.rotate();
+ assertEquals("abcdefghij", status.getRecapitalizedString());
+ assertEquals(29, status.getNewCursorStart());
+ assertEquals(39, status.getNewCursorEnd());
+ status.rotate();
+ assertEquals("Abcdefghij", status.getRecapitalizedString());
+ status.rotate();
+ assertEquals("ABCDEFGHIJ", status.getRecapitalizedString());
+ status.rotate();
+ assertEquals("AbCDefghij", status.getRecapitalizedString());
+ status.rotate();
+ assertEquals("abcdefghij", status.getRecapitalizedString());
+
+ status.initialize(29, 40, "Abcd efghij", Locale.ENGLISH, " ");
+ status.rotate();
+ assertEquals("abcd efghij", status.getRecapitalizedString());
+ assertEquals(29, status.getNewCursorStart());
+ assertEquals(40, status.getNewCursorEnd());
+ status.rotate();
+ assertEquals("Abcd Efghij", status.getRecapitalizedString());
+ status.rotate();
+ assertEquals("ABCD EFGHIJ", status.getRecapitalizedString());
+ status.rotate();
+ assertEquals("Abcd efghij", status.getRecapitalizedString());
+ status.rotate();
+ assertEquals("abcd efghij", status.getRecapitalizedString());
+
+ status.initialize(30, 34, "grüß", Locale.GERMAN, " "); status.rotate();
+ assertEquals("Grüß", status.getRecapitalizedString());
+ assertEquals(30, status.getNewCursorStart());
+ assertEquals(34, status.getNewCursorEnd());
+ status.rotate();
+ assertEquals("GRÜSS", status.getRecapitalizedString());
+ assertEquals(30, status.getNewCursorStart());
+ assertEquals(35, status.getNewCursorEnd());
+ status.rotate();
+ assertEquals("grüß", status.getRecapitalizedString());
+ assertEquals(30, status.getNewCursorStart());
+ assertEquals(34, status.getNewCursorEnd());
+ status.rotate();
+ assertEquals("Grüß", status.getRecapitalizedString());
+ assertEquals(30, status.getNewCursorStart());
+ assertEquals(34, status.getNewCursorEnd());
+
+ status.initialize(30, 33, "œuf", Locale.FRENCH, " "); status.rotate();
+ assertEquals("Œuf", status.getRecapitalizedString());
+ assertEquals(30, status.getNewCursorStart());
+ assertEquals(33, status.getNewCursorEnd());
+ status.rotate();
+ assertEquals("ŒUF", status.getRecapitalizedString());
+ assertEquals(30, status.getNewCursorStart());
+ assertEquals(33, status.getNewCursorEnd());
+ status.rotate();
+ assertEquals("œuf", status.getRecapitalizedString());
+ assertEquals(30, status.getNewCursorStart());
+ assertEquals(33, status.getNewCursorEnd());
+ status.rotate();
+ assertEquals("Œuf", status.getRecapitalizedString());
+ assertEquals(30, status.getNewCursorStart());
+ assertEquals(33, status.getNewCursorEnd());
+
+ status.initialize(30, 33, "œUf", Locale.FRENCH, " "); status.rotate();
+ assertEquals("œuf", status.getRecapitalizedString());
+ assertEquals(30, status.getNewCursorStart());
+ assertEquals(33, status.getNewCursorEnd());
+ status.rotate();
+ assertEquals("Œuf", status.getRecapitalizedString());
+ assertEquals(30, status.getNewCursorStart());
+ assertEquals(33, status.getNewCursorEnd());
+ status.rotate();
+ assertEquals("ŒUF", status.getRecapitalizedString());
+ assertEquals(30, status.getNewCursorStart());
+ assertEquals(33, status.getNewCursorEnd());
+ status.rotate();
+ assertEquals("œUf", status.getRecapitalizedString());
+ assertEquals(30, status.getNewCursorStart());
+ assertEquals(33, status.getNewCursorEnd());
+ status.rotate();
+ assertEquals("œuf", status.getRecapitalizedString());
+ assertEquals(30, status.getNewCursorStart());
+ assertEquals(33, status.getNewCursorEnd());
+
+ status.initialize(30, 35, "école", Locale.FRENCH, " "); status.rotate();
+ assertEquals("École", status.getRecapitalizedString());
+ assertEquals(30, status.getNewCursorStart());
+ assertEquals(35, status.getNewCursorEnd());
+ status.rotate();
+ assertEquals("ÉCOLE", status.getRecapitalizedString());
+ assertEquals(30, status.getNewCursorStart());
+ assertEquals(35, status.getNewCursorEnd());
+ status.rotate();
+ assertEquals("école", status.getRecapitalizedString());
+ assertEquals(30, status.getNewCursorStart());
+ assertEquals(35, status.getNewCursorEnd());
+ status.rotate();
+ assertEquals("École", status.getRecapitalizedString());
+ assertEquals(30, status.getNewCursorStart());
+ assertEquals(35, status.getNewCursorEnd());
+ }
+}
diff --git a/tests/src/com/android/inputmethod/latin/RichInputConnectionTests.java b/tests/src/com/android/inputmethod/latin/RichInputConnectionTests.java
index 9e545a5b2..aacd60f4d 100644
--- a/tests/src/com/android/inputmethod/latin/RichInputConnectionTests.java
+++ b/tests/src/com/android/inputmethod/latin/RichInputConnectionTests.java
@@ -19,6 +19,7 @@ package com.android.inputmethod.latin;
import android.inputmethodservice.InputMethodService;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
+import android.text.TextUtils;
import android.view.inputmethod.ExtractedText;
import android.view.inputmethod.ExtractedTextRequest;
import android.view.inputmethod.InputConnection;
@@ -84,6 +85,11 @@ public class RichInputConnectionTests extends AndroidTestCase {
public boolean endBatchEdit() {
return true;
}
+
+ @Override
+ public boolean finishComposingText() {
+ return true;
+ }
}
private class MockInputMethodService extends InputMethodService {
@@ -141,11 +147,11 @@ public class RichInputConnectionTests extends AndroidTestCase {
ic.beginBatchEdit();
// basic case
r = ic.getWordRangeAtCursor(" ", 0);
- assertEquals("word", r.mWord);
+ assertTrue(TextUtils.equals("word", r.mWord));
// more than one word
r = ic.getWordRangeAtCursor(" ", 1);
- assertEquals("word word", r.mWord);
+ assertTrue(TextUtils.equals("word word", r.mWord));
ic.endBatchEdit();
// tab character instead of space
@@ -153,28 +159,28 @@ public class RichInputConnectionTests extends AndroidTestCase {
ic.beginBatchEdit();
r = ic.getWordRangeAtCursor("\t", 1);
ic.endBatchEdit();
- assertEquals("word\tword", r.mWord);
+ assertTrue(TextUtils.equals("word\tword", r.mWord));
// only one word doesn't go too far
mockInputMethodService.setInputConnection(new MockConnection("one\tword\two", "rd", et));
ic.beginBatchEdit();
r = ic.getWordRangeAtCursor("\t", 1);
ic.endBatchEdit();
- assertEquals("word\tword", r.mWord);
+ assertTrue(TextUtils.equals("word\tword", r.mWord));
// tab or space
mockInputMethodService.setInputConnection(new MockConnection("one word\two", "rd", et));
ic.beginBatchEdit();
r = ic.getWordRangeAtCursor(" \t", 1);
ic.endBatchEdit();
- assertEquals("word\tword", r.mWord);
+ assertTrue(TextUtils.equals("word\tword", r.mWord));
// tab or space multiword
mockInputMethodService.setInputConnection(new MockConnection("one word\two", "rd", et));
ic.beginBatchEdit();
r = ic.getWordRangeAtCursor(" \t", 2);
ic.endBatchEdit();
- assertEquals("one word\tword", r.mWord);
+ assertTrue(TextUtils.equals("one word\tword", r.mWord));
// splitting on supplementary character
final String supplementaryChar = "\uD840\uDC8A";
@@ -183,6 +189,6 @@ public class RichInputConnectionTests extends AndroidTestCase {
ic.beginBatchEdit();
r = ic.getWordRangeAtCursor(supplementaryChar, 0);
ic.endBatchEdit();
- assertEquals("word", r.mWord);
+ assertTrue(TextUtils.equals("word", r.mWord));
}
}
diff --git a/tests/src/com/android/inputmethod/latin/StringUtilsTests.java b/tests/src/com/android/inputmethod/latin/StringUtilsTests.java
index 136faff71..1e3cc8ad4 100644
--- a/tests/src/com/android/inputmethod/latin/StringUtilsTests.java
+++ b/tests/src/com/android/inputmethod/latin/StringUtilsTests.java
@@ -216,21 +216,25 @@ public class StringUtilsTests extends AndroidTestCase {
" \n,.;!?*()&", Locale.ENGLISH);
}
- public void testContainsAny() {
- assertFalse(StringUtils.containsAny("", " "));
- assertFalse(StringUtils.containsAny("test and retest", ""));
- assertTrue(StringUtils.containsAny("test and retest", "x3iq o"));
- assertTrue(StringUtils.containsAny("test and retest", "x3iqo "));
- assertTrue(StringUtils.containsAny("test and retest", " x3iqo"));
- assertFalse(StringUtils.containsAny("test and retest", "x3iqo"));
- assertTrue(StringUtils.containsAny("test and retest", "tse "));
- assertTrue(StringUtils.containsAny("test and retest.", ".?()"));
- assertFalse(StringUtils.containsAny("test and retest", ".?()"));
- // Surrogate pair
- assertTrue(StringUtils.containsAny("test and \uD861\uDED7 retest.", "\uD861\uDED7"));
- // Ill-formed string
- assertFalse(StringUtils.containsAny("test and \uD861 retest.", "\uD861\uDED7"));
- // Ill-formed string
- assertFalse(StringUtils.containsAny("test and \uDED7 retest.", "\uD861\uDED7"));
+ public void testLooksLikeURL() {
+ assertTrue(StringUtils.lastPartLooksLikeURL("http://www.google."));
+ assertFalse(StringUtils.lastPartLooksLikeURL("word wo"));
+ assertTrue(StringUtils.lastPartLooksLikeURL("/etc/foo"));
+ assertFalse(StringUtils.lastPartLooksLikeURL("left/right"));
+ assertTrue(StringUtils.lastPartLooksLikeURL("www.goo"));
+ assertTrue(StringUtils.lastPartLooksLikeURL("www."));
+ assertFalse(StringUtils.lastPartLooksLikeURL("U.S.A"));
+ assertFalse(StringUtils.lastPartLooksLikeURL("U.S.A."));
+ assertTrue(StringUtils.lastPartLooksLikeURL("rtsp://foo."));
+ assertTrue(StringUtils.lastPartLooksLikeURL("://"));
+ assertFalse(StringUtils.lastPartLooksLikeURL("abc/"));
+ assertTrue(StringUtils.lastPartLooksLikeURL("abc.def/ghi"));
+ assertFalse(StringUtils.lastPartLooksLikeURL("abc.def"));
+ // TODO: ideally this would not look like a URL, but to keep down the complexity of the
+ // code for now True is acceptable.
+ assertTrue(StringUtils.lastPartLooksLikeURL("abc./def"));
+ // TODO: ideally this would not look like a URL, but to keep down the complexity of the
+ // code for now True is acceptable.
+ assertTrue(StringUtils.lastPartLooksLikeURL(".abc/def"));
}
}
diff --git a/tests/src/com/android/inputmethod/latin/SuggestedWordsTests.java b/tests/src/com/android/inputmethod/latin/SuggestedWordsTests.java
new file mode 100644
index 000000000..916252292
--- /dev/null
+++ b/tests/src/com/android/inputmethod/latin/SuggestedWordsTests.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.inputmethod.latin;
+
+import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
+
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import java.util.ArrayList;
+import java.util.Locale;
+
+@SmallTest
+public class SuggestedWordsTests extends AndroidTestCase {
+ public void testGetSuggestedWordsExcludingTypedWord() {
+ final String TYPED_WORD = "typed";
+ final int TYPED_WORD_FREQ = 5;
+ final int NUMBER_OF_ADDED_SUGGESTIONS = 5;
+ final ArrayList<SuggestedWordInfo> list = CollectionUtils.newArrayList();
+ list.add(new SuggestedWordInfo(TYPED_WORD, TYPED_WORD_FREQ,
+ SuggestedWordInfo.KIND_TYPED, ""));
+ for (int i = 0; i < NUMBER_OF_ADDED_SUGGESTIONS; ++i) {
+ list.add(new SuggestedWordInfo("" + i, 1, SuggestedWordInfo.KIND_CORRECTION, ""));
+ }
+
+ final SuggestedWords words = new SuggestedWords(
+ list,
+ false /* typedWordValid */,
+ false /* willAutoCorrect */,
+ false /* isPunctuationSuggestions */,
+ false /* isObsoleteSuggestions */,
+ false /* isPrediction*/);
+ assertEquals(NUMBER_OF_ADDED_SUGGESTIONS + 1, words.size());
+ assertEquals("typed", words.getWord(0));
+ assertEquals(SuggestedWordInfo.KIND_TYPED, words.getInfo(0).mKind);
+ assertEquals("0", words.getWord(1));
+ assertEquals(SuggestedWordInfo.KIND_CORRECTION, words.getInfo(1).mKind);
+ assertEquals("4", words.getWord(5));
+ assertEquals(SuggestedWordInfo.KIND_CORRECTION, words.getInfo(5).mKind);
+
+ final SuggestedWords wordsWithoutTyped = words.getSuggestedWordsExcludingTypedWord();
+ assertEquals(words.size() - 1, wordsWithoutTyped.size());
+ assertEquals("0", wordsWithoutTyped.getWord(0));
+ assertEquals(SuggestedWordInfo.KIND_CORRECTION, wordsWithoutTyped.getInfo(0).mKind);
+ }
+}
diff --git a/tests/src/com/android/inputmethod/latin/makedict/BinaryDictIOTests.java b/tests/src/com/android/inputmethod/latin/makedict/BinaryDictIOTests.java
index bd8729203..b704d08b3 100644
--- a/tests/src/com/android/inputmethod/latin/makedict/BinaryDictIOTests.java
+++ b/tests/src/com/android/inputmethod/latin/makedict/BinaryDictIOTests.java
@@ -51,7 +51,7 @@ import java.util.Set;
@LargeTest
public class BinaryDictIOTests extends AndroidTestCase {
private static final String TAG = BinaryDictIOTests.class.getSimpleName();
- private static final int MAX_UNIGRAMS = 1000;
+ private static final int MAX_UNIGRAMS = 100;
private static final int UNIGRAM_FREQ = 10;
private static final int BIGRAM_FREQ = 50;
private static final int TOLERANCE_OF_BIGRAM_FREQ = 5;
@@ -135,9 +135,13 @@ public class BinaryDictIOTests extends AndroidTestCase {
while (count > 0) {
final long r = Math.abs(random.nextInt());
if (r < 0) continue;
- // Don't insert 0~20, but insert any other code point.
+ // Don't insert 0~0x20, but insert any other code point.
// Code points are in the range 0~0x10FFFF.
- builder.appendCodePoint((int)(20 + r % (0x10FFFF - 20)));
+ final int candidateCodePoint = (int)(0x20 + r % (Character.MAX_CODE_POINT - 0x20));
+ // Code points between MIN_ and MAX_SURROGATE are not valid on their own.
+ if (candidateCodePoint >= Character.MIN_SURROGATE
+ && candidateCodePoint <= Character.MAX_SURROGATE) continue;
+ builder.appendCodePoint(candidateCodePoint);
--count;
}
return builder.toString();