diff options
Diffstat (limited to 'tests/src')
8 files changed, 302 insertions, 36 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/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(); |