aboutsummaryrefslogtreecommitdiffstats
path: root/tests/src
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src')
-rw-r--r--tests/src/com/android/inputmethod/latin/BinaryDictionaryTests.java45
-rw-r--r--tests/src/com/android/inputmethod/latin/RichInputConnectionAndTextRangeTests.java36
-rw-r--r--tests/src/com/android/inputmethod/latin/WordComposerTests.java54
-rw-r--r--tests/src/com/android/inputmethod/latin/settings/SpacingAndPunctuationsTests.java401
-rw-r--r--tests/src/com/android/inputmethod/latin/utils/RecapitalizeStatusTests.java34
-rw-r--r--tests/src/com/android/inputmethod/latin/utils/StringAndJsonUtilsTests.java63
6 files changed, 556 insertions, 77 deletions
diff --git a/tests/src/com/android/inputmethod/latin/BinaryDictionaryTests.java b/tests/src/com/android/inputmethod/latin/BinaryDictionaryTests.java
index 604434f9e..73b6fdc3b 100644
--- a/tests/src/com/android/inputmethod/latin/BinaryDictionaryTests.java
+++ b/tests/src/com/android/inputmethod/latin/BinaryDictionaryTests.java
@@ -106,6 +106,51 @@ public class BinaryDictionaryTests extends AndroidTestCase {
binaryDictionary.close();
}
+ public void testAddTooLongWord() {
+ testAddTooLongWord(FormatSpec.VERSION4);
+ }
+
+ private void testAddTooLongWord(final int formatVersion) {
+ File dictFile = null;
+ try {
+ dictFile = createEmptyDictionaryAndGetFile("TestBinaryDictionary", formatVersion);
+ } catch (IOException e) {
+ fail("IOException while writing an initial dictionary : " + e);
+ }
+ final BinaryDictionary binaryDictionary = new BinaryDictionary(dictFile.getAbsolutePath(),
+ 0 /* offset */, dictFile.length(), true /* useFullEditDistance */,
+ Locale.getDefault(), TEST_LOCALE, true /* isUpdatable */);
+
+ final StringBuffer stringBuilder = new StringBuffer();
+ for (int i = 0; i < Constants.DICTIONARY_MAX_WORD_LENGTH; i++) {
+ stringBuilder.append('a');
+ }
+ final String validLongWord = stringBuilder.toString();
+ stringBuilder.append('a');
+ final String invalidLongWord = stringBuilder.toString();
+ final int probability = 100;
+ addUnigramWord(binaryDictionary, "aaa", probability);
+ addUnigramWord(binaryDictionary, validLongWord, probability);
+ addUnigramWord(binaryDictionary, invalidLongWord, probability);
+ // Too long short cut.
+ binaryDictionary.addUnigramWord("a", probability, invalidLongWord,
+ 10 /* shortcutProbability */, false /* isNotAWord */, false /* isBlacklisted */,
+ BinaryDictionary.NOT_A_VALID_TIMESTAMP);
+ addUnigramWord(binaryDictionary, "abc", probability);
+ final int updatedProbability = 200;
+ // Update.
+ addUnigramWord(binaryDictionary, validLongWord, updatedProbability);
+ addUnigramWord(binaryDictionary, invalidLongWord, updatedProbability);
+ addUnigramWord(binaryDictionary, "abc", updatedProbability);
+
+ assertEquals(probability, binaryDictionary.getFrequency("aaa"));
+ assertEquals(updatedProbability, binaryDictionary.getFrequency(validLongWord));
+ assertEquals(BinaryDictionary.NOT_A_PROBABILITY,
+ binaryDictionary.getFrequency(invalidLongWord));
+ assertEquals(updatedProbability, binaryDictionary.getFrequency("abc"));
+ dictFile.delete();
+ }
+
private void addUnigramWord(final BinaryDictionary binaryDictionary, final String word,
final int probability) {
binaryDictionary.addUnigramWord(word, probability, "" /* shortcutTarget */,
diff --git a/tests/src/com/android/inputmethod/latin/RichInputConnectionAndTextRangeTests.java b/tests/src/com/android/inputmethod/latin/RichInputConnectionAndTextRangeTests.java
index f19d1853e..7f0743543 100644
--- a/tests/src/com/android/inputmethod/latin/RichInputConnectionAndTextRangeTests.java
+++ b/tests/src/com/android/inputmethod/latin/RichInputConnectionAndTextRangeTests.java
@@ -32,6 +32,7 @@ import android.view.inputmethod.InputConnectionWrapper;
import com.android.inputmethod.latin.settings.SpacingAndPunctuations;
import com.android.inputmethod.latin.utils.RunInLocale;
+import com.android.inputmethod.latin.utils.StringUtils;
import com.android.inputmethod.latin.utils.TextRange;
import java.util.Locale;
@@ -183,6 +184,12 @@ public class RichInputConnectionAndTextRangeTests extends AndroidTestCase {
/**
* Test logic in getting the word range at the cursor.
*/
+ private static final int[] SPACE = { Constants.CODE_SPACE };
+ static final int[] TAB = { Constants.CODE_TAB };
+ private static final int[] SPACE_TAB = StringUtils.toSortedCodePointArray(" \t");
+ // A character that needs surrogate pair to represent its code point (U+2008A).
+ private static final String SUPPLEMENTARY_CHAR = "\uD840\uDC8A";
+
public void testGetWordRangeAtCursor() {
ExtractedText et = new ExtractedText();
final MockInputMethodService mockInputMethodService = new MockInputMethodService();
@@ -194,48 +201,47 @@ public class RichInputConnectionAndTextRangeTests extends AndroidTestCase {
ic.beginBatchEdit();
// basic case
- r = ic.getWordRangeAtCursor(" ", 0);
+ r = ic.getWordRangeAtCursor(SPACE, 0);
assertTrue(TextUtils.equals("word", r.mWord));
// more than one word
- r = ic.getWordRangeAtCursor(" ", 1);
+ r = ic.getWordRangeAtCursor(SPACE, 1);
assertTrue(TextUtils.equals("word word", r.mWord));
ic.endBatchEdit();
// tab character instead of space
mockInputMethodService.setInputConnection(new MockConnection("one\tword\two", "rd", et));
ic.beginBatchEdit();
- r = ic.getWordRangeAtCursor("\t", 1);
+ r = ic.getWordRangeAtCursor(TAB, 1);
ic.endBatchEdit();
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);
+ r = ic.getWordRangeAtCursor(TAB, 1);
ic.endBatchEdit();
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);
+ r = ic.getWordRangeAtCursor(SPACE_TAB, 1);
ic.endBatchEdit();
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);
+ r = ic.getWordRangeAtCursor(SPACE_TAB, 2);
ic.endBatchEdit();
assertTrue(TextUtils.equals("one word\tword", r.mWord));
// splitting on supplementary character
- final String supplementaryChar = "\uD840\uDC8A";
mockInputMethodService.setInputConnection(
- new MockConnection("one word" + supplementaryChar + "wo", "rd", et));
+ new MockConnection("one word" + SUPPLEMENTARY_CHAR + "wo", "rd", et));
ic.beginBatchEdit();
- r = ic.getWordRangeAtCursor(supplementaryChar, 0);
+ r = ic.getWordRangeAtCursor(StringUtils.toSortedCodePointArray(SUPPLEMENTARY_CHAR), 0);
ic.endBatchEdit();
assertTrue(TextUtils.equals("word", r.mWord));
}
@@ -265,7 +271,7 @@ public class RichInputConnectionAndTextRangeTests extends AndroidTestCase {
TextRange r;
SuggestionSpan[] suggestions;
- r = ic.getWordRangeAtCursor(" ", 0);
+ r = ic.getWordRangeAtCursor(SPACE, 0);
suggestions = r.getSuggestionSpansAtWord();
assertEquals(suggestions.length, 1);
MoreAsserts.assertEquals(suggestions[0].getSuggestions(), SUGGESTIONS1);
@@ -277,7 +283,7 @@ public class RichInputConnectionAndTextRangeTests extends AndroidTestCase {
text.setSpan(new SuggestionSpan(Locale.ENGLISH, SUGGESTIONS2, 0 /* flags */),
10 /* start */, 16 /* end */, 0 /* flags */);
mockInputMethodService.setInputConnection(new MockConnection(text, cursorPos));
- r = ic.getWordRangeAtCursor(" ", 0);
+ r = ic.getWordRangeAtCursor(SPACE, 0);
suggestions = r.getSuggestionSpansAtWord();
assertEquals(suggestions.length, 2);
MoreAsserts.assertEquals(suggestions[0].getSuggestions(), SUGGESTIONS1);
@@ -290,7 +296,7 @@ public class RichInputConnectionAndTextRangeTests extends AndroidTestCase {
text.setSpan(new SuggestionSpan(Locale.ENGLISH, SUGGESTIONS2, 0 /* flags */),
5 /* start */, 16 /* end */, 0 /* flags */);
mockInputMethodService.setInputConnection(new MockConnection(text, cursorPos));
- r = ic.getWordRangeAtCursor(" ", 0);
+ r = ic.getWordRangeAtCursor(SPACE, 0);
suggestions = r.getSuggestionSpansAtWord();
assertEquals(suggestions.length, 1);
MoreAsserts.assertEquals(suggestions[0].getSuggestions(), SUGGESTIONS1);
@@ -302,7 +308,7 @@ public class RichInputConnectionAndTextRangeTests extends AndroidTestCase {
text.setSpan(new SuggestionSpan(Locale.ENGLISH, SUGGESTIONS2, 0 /* flags */),
10 /* start */, 20 /* end */, 0 /* flags */);
mockInputMethodService.setInputConnection(new MockConnection(text, cursorPos));
- r = ic.getWordRangeAtCursor(" ", 0);
+ r = ic.getWordRangeAtCursor(SPACE, 0);
suggestions = r.getSuggestionSpansAtWord();
assertEquals(suggestions.length, 1);
MoreAsserts.assertEquals(suggestions[0].getSuggestions(), SUGGESTIONS1);
@@ -314,7 +320,7 @@ public class RichInputConnectionAndTextRangeTests extends AndroidTestCase {
text.setSpan(new SuggestionSpan(Locale.ENGLISH, SUGGESTIONS2, 0 /* flags */),
5 /* start */, 20 /* end */, 0 /* flags */);
mockInputMethodService.setInputConnection(new MockConnection(text, cursorPos));
- r = ic.getWordRangeAtCursor(" ", 0);
+ r = ic.getWordRangeAtCursor(SPACE, 0);
suggestions = r.getSuggestionSpansAtWord();
assertEquals(suggestions.length, 1);
MoreAsserts.assertEquals(suggestions[0].getSuggestions(), SUGGESTIONS1);
@@ -326,7 +332,7 @@ public class RichInputConnectionAndTextRangeTests extends AndroidTestCase {
text.setSpan(new SuggestionSpan(Locale.ENGLISH, SUGGESTIONS2, 0 /* flags */),
5 /* start */, 20 /* end */, 0 /* flags */);
mockInputMethodService.setInputConnection(new MockConnection(text, cursorPos));
- r = ic.getWordRangeAtCursor(" ", 0);
+ r = ic.getWordRangeAtCursor(SPACE, 0);
suggestions = r.getSuggestionSpansAtWord();
assertEquals(suggestions.length, 0);
}
diff --git a/tests/src/com/android/inputmethod/latin/WordComposerTests.java b/tests/src/com/android/inputmethod/latin/WordComposerTests.java
index 1336c6d1a..d68bb5c54 100644
--- a/tests/src/com/android/inputmethod/latin/WordComposerTests.java
+++ b/tests/src/com/android/inputmethod/latin/WordComposerTests.java
@@ -19,6 +19,9 @@ package com.android.inputmethod.latin;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
+import com.android.inputmethod.latin.utils.CoordinateUtils;
+import com.android.inputmethod.latin.utils.StringUtils;
+
/**
* Unit tests for WordComposer.
*/
@@ -33,10 +36,13 @@ public class WordComposerTests extends AndroidTestCase {
// in UTF-16, whereas those outside the BMP need 4 bytes.
// http://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_Multilingual_Plane
final String STR_WITHIN_BMP = "abcdef";
+ final int[] CODEPOINTS_WITHIN_BMP = StringUtils.toCodePointArray(STR_WITHIN_BMP);
+ final int[] COORDINATES_WITHIN_BMP =
+ CoordinateUtils.newCoordinateArray(CODEPOINTS_WITHIN_BMP.length,
+ Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE);
final String PREVWORD = "prevword";
- wc.setComposingWord(STR_WITHIN_BMP, PREVWORD, null /* keyboard */);
- assertEquals(wc.size(),
- STR_WITHIN_BMP.codePointCount(0, STR_WITHIN_BMP.length()));
+ wc.setComposingWord(CODEPOINTS_WITHIN_BMP, COORDINATES_WITHIN_BMP, PREVWORD);
+ assertEquals(wc.size(), STR_WITHIN_BMP.codePointCount(0, STR_WITHIN_BMP.length()));
assertFalse(wc.isCursorFrontOrMiddleOfComposingWord());
wc.setCursorPositionWithinWord(2);
assertTrue(wc.isCursorFrontOrMiddleOfComposingWord());
@@ -62,10 +68,14 @@ public class WordComposerTests extends AndroidTestCase {
// \uD861\uDED7 is 𨛗, a character outside the BMP
final String STR_WITH_SUPPLEMENTARY_CHAR = "abcde\uD861\uDED7fgh";
- wc.setComposingWord(STR_WITH_SUPPLEMENTARY_CHAR, null /* previousWord */,
- null /* keyboard */);
- assertEquals(wc.size(), STR_WITH_SUPPLEMENTARY_CHAR.codePointCount(0,
- STR_WITH_SUPPLEMENTARY_CHAR.length()));
+ final int[] CODEPOINTS_WITH_SUPPLEMENTARY_CHAR =
+ StringUtils.toCodePointArray(STR_WITH_SUPPLEMENTARY_CHAR);
+ final int[] COORDINATES_WITH_SUPPLEMENTARY_CHAR =
+ CoordinateUtils.newCoordinateArray(CODEPOINTS_WITH_SUPPLEMENTARY_CHAR.length,
+ Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE);
+ wc.setComposingWord(CODEPOINTS_WITH_SUPPLEMENTARY_CHAR, COORDINATES_WITH_SUPPLEMENTARY_CHAR,
+ null /* previousWord */);
+ assertEquals(wc.size(), CODEPOINTS_WITH_SUPPLEMENTARY_CHAR.length);
assertFalse(wc.isCursorFrontOrMiddleOfComposingWord());
wc.setCursorPositionWithinWord(3);
assertTrue(wc.isCursorFrontOrMiddleOfComposingWord());
@@ -75,44 +85,46 @@ public class WordComposerTests extends AndroidTestCase {
assertFalse(wc.isCursorFrontOrMiddleOfComposingWord());
assertNull(wc.getPreviousWordForSuggestion());
- wc.setComposingWord(STR_WITH_SUPPLEMENTARY_CHAR, STR_WITHIN_BMP, null /* keyboard */);
+ wc.setComposingWord(CODEPOINTS_WITH_SUPPLEMENTARY_CHAR, COORDINATES_WITH_SUPPLEMENTARY_CHAR,
+ STR_WITHIN_BMP);
wc.setCursorPositionWithinWord(3);
assertTrue(wc.moveCursorByAndReturnIfInsideComposingWord(7));
assertEquals(STR_WITHIN_BMP, wc.getPreviousWordForSuggestion());
- wc.setComposingWord(STR_WITH_SUPPLEMENTARY_CHAR, STR_WITH_SUPPLEMENTARY_CHAR,
- null /* keyboard */);
+ wc.setComposingWord(CODEPOINTS_WITH_SUPPLEMENTARY_CHAR, COORDINATES_WITH_SUPPLEMENTARY_CHAR,
+ STR_WITH_SUPPLEMENTARY_CHAR);
wc.setCursorPositionWithinWord(3);
assertTrue(wc.moveCursorByAndReturnIfInsideComposingWord(7));
assertEquals(STR_WITH_SUPPLEMENTARY_CHAR, wc.getPreviousWordForSuggestion());
- wc.setComposingWord(STR_WITH_SUPPLEMENTARY_CHAR, STR_WITHIN_BMP, null /* keyboard */);
+ wc.setComposingWord(CODEPOINTS_WITH_SUPPLEMENTARY_CHAR, COORDINATES_WITH_SUPPLEMENTARY_CHAR,
+ STR_WITHIN_BMP);
wc.setCursorPositionWithinWord(3);
assertTrue(wc.moveCursorByAndReturnIfInsideComposingWord(-3));
assertFalse(wc.moveCursorByAndReturnIfInsideComposingWord(-1));
assertEquals(STR_WITHIN_BMP, wc.getPreviousWordForSuggestion());
- wc.setComposingWord(STR_WITH_SUPPLEMENTARY_CHAR, null /* previousWord */,
- null /* keyboard */);
+ wc.setComposingWord(CODEPOINTS_WITH_SUPPLEMENTARY_CHAR, COORDINATES_WITH_SUPPLEMENTARY_CHAR,
+ null /* previousWord */);
wc.setCursorPositionWithinWord(3);
assertFalse(wc.moveCursorByAndReturnIfInsideComposingWord(-9));
assertNull(wc.getPreviousWordForSuggestion());
- wc.setComposingWord(STR_WITH_SUPPLEMENTARY_CHAR, STR_WITH_SUPPLEMENTARY_CHAR,
- null /* keyboard */);
+ wc.setComposingWord(CODEPOINTS_WITH_SUPPLEMENTARY_CHAR, COORDINATES_WITH_SUPPLEMENTARY_CHAR,
+ STR_WITH_SUPPLEMENTARY_CHAR);
assertTrue(wc.moveCursorByAndReturnIfInsideComposingWord(-10));
assertEquals(STR_WITH_SUPPLEMENTARY_CHAR, wc.getPreviousWordForSuggestion());
- wc.setComposingWord(STR_WITH_SUPPLEMENTARY_CHAR, null /* previousWord */,
- null /* keyboard */);
+ wc.setComposingWord(CODEPOINTS_WITH_SUPPLEMENTARY_CHAR, COORDINATES_WITH_SUPPLEMENTARY_CHAR,
+ null /* previousWord */);
assertFalse(wc.moveCursorByAndReturnIfInsideComposingWord(-11));
- wc.setComposingWord(STR_WITH_SUPPLEMENTARY_CHAR, null /* previousWord */,
- null /* keyboard */);
+ wc.setComposingWord(CODEPOINTS_WITH_SUPPLEMENTARY_CHAR, COORDINATES_WITH_SUPPLEMENTARY_CHAR,
+ null /* previousWord */);
assertTrue(wc.moveCursorByAndReturnIfInsideComposingWord(0));
- wc.setComposingWord(STR_WITH_SUPPLEMENTARY_CHAR, null /* previousWord */,
- null /* keyboard */);
+ wc.setComposingWord(CODEPOINTS_WITH_SUPPLEMENTARY_CHAR, COORDINATES_WITH_SUPPLEMENTARY_CHAR,
+ null /* previousWord */);
wc.setCursorPositionWithinWord(2);
assertTrue(wc.moveCursorByAndReturnIfInsideComposingWord(0));
}
diff --git a/tests/src/com/android/inputmethod/latin/settings/SpacingAndPunctuationsTests.java b/tests/src/com/android/inputmethod/latin/settings/SpacingAndPunctuationsTests.java
new file mode 100644
index 000000000..424e7ff1b
--- /dev/null
+++ b/tests/src/com/android/inputmethod/latin/settings/SpacingAndPunctuationsTests.java
@@ -0,0 +1,401 @@
+/*
+ * Copyright (C) 2014 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.settings;
+
+import android.content.res.Resources;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.inputmethod.latin.SuggestedWords;
+import com.android.inputmethod.latin.utils.RunInLocale;
+
+import junit.framework.AssertionFailedError;
+
+import java.util.Locale;
+
+@SmallTest
+public class SpacingAndPunctuationsTests extends AndroidTestCase {
+ private static final int ARMENIAN_FULL_STOP = '\u0589';
+ private static final int ARMENIAN_COMMA = '\u055D';
+
+ private SpacingAndPunctuations ENGLISH;
+ private SpacingAndPunctuations FRENCH;
+ private SpacingAndPunctuations GERMAN;
+ private SpacingAndPunctuations ARMENIAN;
+ private SpacingAndPunctuations THAI;
+ private SpacingAndPunctuations KHMER;
+ private SpacingAndPunctuations LAO;
+ private SpacingAndPunctuations ARABIC;
+ private SpacingAndPunctuations PERSIAN;
+ private SpacingAndPunctuations HEBREW;
+
+ private SpacingAndPunctuations UNITED_STATES;
+ private SpacingAndPunctuations UNITED_KINGDOM;
+ private SpacingAndPunctuations CANADA_FRENCH;
+ private SpacingAndPunctuations SWISS_GERMAN;
+ private SpacingAndPunctuations INDIA_ENGLISH;
+ private SpacingAndPunctuations ARMENIA_ARMENIAN;
+ private SpacingAndPunctuations CAMBODIA_KHMER;
+ private SpacingAndPunctuations LAOS_LAO;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ // Language only
+ ENGLISH = getSpacingAndPunctuations(Locale.ENGLISH);
+ FRENCH = getSpacingAndPunctuations(Locale.FRENCH);
+ GERMAN = getSpacingAndPunctuations(Locale.GERMAN);
+ THAI = getSpacingAndPunctuations(new Locale("th"));
+ ARMENIAN = getSpacingAndPunctuations(new Locale("hy"));
+ KHMER = getSpacingAndPunctuations(new Locale("km"));
+ LAO = getSpacingAndPunctuations(new Locale("lo"));
+ ARABIC = getSpacingAndPunctuations(new Locale("ar"));
+ PERSIAN = getSpacingAndPunctuations(new Locale("fa"));
+ HEBREW = getSpacingAndPunctuations(new Locale("iw"));
+
+ // Language and Country
+ UNITED_STATES = getSpacingAndPunctuations(Locale.US);
+ UNITED_KINGDOM = getSpacingAndPunctuations(Locale.UK);
+ CANADA_FRENCH = getSpacingAndPunctuations(Locale.CANADA_FRENCH);
+ SWISS_GERMAN = getSpacingAndPunctuations(new Locale("de", "CH"));
+ INDIA_ENGLISH = getSpacingAndPunctuations(new Locale("en", "IN"));
+ ARMENIA_ARMENIAN = getSpacingAndPunctuations(new Locale("hy", "AM"));
+ CAMBODIA_KHMER = getSpacingAndPunctuations(new Locale("km", "KH"));
+ LAOS_LAO = getSpacingAndPunctuations(new Locale("lo", "LA"));
+ }
+
+ private SpacingAndPunctuations getSpacingAndPunctuations(final Locale locale) {
+ final RunInLocale<SpacingAndPunctuations> job = new RunInLocale<SpacingAndPunctuations>() {
+ @Override
+ protected SpacingAndPunctuations job(Resources res) {
+ return new SpacingAndPunctuations(res);
+ }
+ };
+ return job.runInLocale(getContext().getResources(), locale);
+ }
+
+ private static void testingStandardWordSeparator(final SpacingAndPunctuations sp) {
+ assertTrue("Tab", sp.isWordSeparator('\t'));
+ assertTrue("Newline", sp.isWordSeparator('\n'));
+ assertTrue("Space", sp.isWordSeparator(' '));
+ assertTrue("Exclamation", sp.isWordSeparator('!'));
+ assertTrue("Quotation", sp.isWordSeparator('"'));
+ assertFalse("Number", sp.isWordSeparator('#'));
+ assertFalse("Dollar", sp.isWordSeparator('$'));
+ assertFalse("Percent", sp.isWordSeparator('%'));
+ assertTrue("Ampersand", sp.isWordSeparator('&'));
+ assertFalse("Apostrophe", sp.isWordSeparator('\''));
+ assertTrue("L Paren", sp.isWordSeparator('('));
+ assertTrue("R Paren", sp.isWordSeparator(')'));
+ assertTrue("Asterisk", sp.isWordSeparator('*'));
+ assertTrue("Plus", sp.isWordSeparator('+'));
+ assertTrue("Comma", sp.isWordSeparator(','));
+ assertFalse("Minus", sp.isWordSeparator('-'));
+ assertTrue("Period", sp.isWordSeparator('.'));
+ assertTrue("Slash", sp.isWordSeparator('/'));
+ assertTrue("Colon", sp.isWordSeparator(':'));
+ assertTrue("Semicolon", sp.isWordSeparator(';'));
+ assertTrue("L Angle", sp.isWordSeparator('<'));
+ assertTrue("Equal", sp.isWordSeparator('='));
+ assertTrue("R Angle", sp.isWordSeparator('>'));
+ assertTrue("Question", sp.isWordSeparator('?'));
+ assertFalse("Atmark", sp.isWordSeparator('@'));
+ assertTrue("L S Bracket", sp.isWordSeparator('['));
+ assertFalse("B Slash", sp.isWordSeparator('\\'));
+ assertTrue("R S Bracket", sp.isWordSeparator(']'));
+ assertFalse("Circumflex", sp.isWordSeparator('^'));
+ assertTrue("Underscore", sp.isWordSeparator('_'));
+ assertFalse("Grave", sp.isWordSeparator('`'));
+ assertTrue("L C Brace", sp.isWordSeparator('{'));
+ assertTrue("V Line", sp.isWordSeparator('|'));
+ assertTrue("R C Brace", sp.isWordSeparator('}'));
+ assertFalse("Tilde", sp.isWordSeparator('~'));
+ }
+
+ public void testWordSeparator() {
+ testingStandardWordSeparator(ENGLISH);
+ testingStandardWordSeparator(FRENCH);
+ testingStandardWordSeparator(CANADA_FRENCH);
+ testingStandardWordSeparator(ARMENIA_ARMENIAN);
+ assertTrue(ARMENIA_ARMENIAN.isWordSeparator(ARMENIAN_FULL_STOP));
+ assertTrue(ARMENIA_ARMENIAN.isWordSeparator(ARMENIAN_COMMA));
+ // TODO: We should fix these.
+ testingStandardWordSeparator(ARMENIAN);
+ assertFalse(ARMENIAN.isWordSeparator(ARMENIAN_FULL_STOP));
+ assertFalse(ARMENIAN.isWordSeparator(ARMENIAN_COMMA));
+ }
+
+ private static void testingStandardWordConnector(final SpacingAndPunctuations sp) {
+ assertFalse("Tab", sp.isWordConnector('\t'));
+ assertFalse("Newline", sp.isWordConnector('\n'));
+ assertFalse("Space", sp.isWordConnector(' '));
+ assertFalse("Exclamation", sp.isWordConnector('!'));
+ assertFalse("Quotation", sp.isWordConnector('"'));
+ assertFalse("Number", sp.isWordConnector('#'));
+ assertFalse("Dollar", sp.isWordConnector('$'));
+ assertFalse("Percent", sp.isWordConnector('%'));
+ assertFalse("Ampersand", sp.isWordConnector('&'));
+ assertTrue("Apostrophe", sp.isWordConnector('\''));
+ assertFalse("L Paren", sp.isWordConnector('('));
+ assertFalse("R Paren", sp.isWordConnector(')'));
+ assertFalse("Asterisk", sp.isWordConnector('*'));
+ assertFalse("Plus", sp.isWordConnector('+'));
+ assertFalse("Comma", sp.isWordConnector(','));
+ assertTrue("Minus", sp.isWordConnector('-'));
+ assertFalse("Period", sp.isWordConnector('.'));
+ assertFalse("Slash", sp.isWordConnector('/'));
+ assertFalse("Colon", sp.isWordConnector(':'));
+ assertFalse("Semicolon", sp.isWordConnector(';'));
+ assertFalse("L Angle", sp.isWordConnector('<'));
+ assertFalse("Equal", sp.isWordConnector('='));
+ assertFalse("R Angle", sp.isWordConnector('>'));
+ assertFalse("Question", sp.isWordConnector('?'));
+ assertFalse("Atmark", sp.isWordConnector('@'));
+ assertFalse("L S Bracket", sp.isWordConnector('['));
+ assertFalse("B Slash", sp.isWordConnector('\\'));
+ assertFalse("R S Bracket", sp.isWordConnector(']'));
+ assertFalse("Circumflex", sp.isWordConnector('^'));
+ assertFalse("Underscore", sp.isWordConnector('_'));
+ assertFalse("Grave", sp.isWordConnector('`'));
+ assertFalse("L C Brace", sp.isWordConnector('{'));
+ assertFalse("V Line", sp.isWordConnector('|'));
+ assertFalse("R C Brace", sp.isWordConnector('}'));
+ assertFalse("Tilde", sp.isWordConnector('~'));
+
+ }
+
+ public void testWordConnector() {
+ testingStandardWordConnector(ENGLISH);
+ testingStandardWordConnector(FRENCH);
+ testingStandardWordConnector(CANADA_FRENCH);
+ testingStandardWordConnector(ARMENIA_ARMENIAN);
+ }
+
+ private static void testingCommonPrecededBySpace(final SpacingAndPunctuations sp) {
+ assertFalse("Tab", sp.isUsuallyPrecededBySpace('\t'));
+ assertFalse("Newline", sp.isUsuallyPrecededBySpace('\n'));
+ assertFalse("Space", sp.isUsuallyPrecededBySpace(' '));
+ //assertFalse("Exclamation", sp.isUsuallyPrecededBySpace('!'));
+ assertFalse("Quotation", sp.isUsuallyPrecededBySpace('"'));
+ assertFalse("Number", sp.isUsuallyPrecededBySpace('#'));
+ assertFalse("Dollar", sp.isUsuallyPrecededBySpace('$'));
+ assertFalse("Percent", sp.isUsuallyPrecededBySpace('%'));
+ assertTrue("Ampersand", sp.isUsuallyPrecededBySpace('&'));
+ assertFalse("Apostrophe", sp.isUsuallyPrecededBySpace('\''));
+ assertTrue("L Paren", sp.isUsuallyPrecededBySpace('('));
+ assertFalse("R Paren", sp.isUsuallyPrecededBySpace(')'));
+ assertFalse("Asterisk", sp.isUsuallyPrecededBySpace('*'));
+ assertFalse("Plus", sp.isUsuallyPrecededBySpace('+'));
+ assertFalse("Comma", sp.isUsuallyPrecededBySpace(','));
+ assertFalse("Minus", sp.isUsuallyPrecededBySpace('-'));
+ assertFalse("Period", sp.isUsuallyPrecededBySpace('.'));
+ assertFalse("Slash", sp.isUsuallyPrecededBySpace('/'));
+ //assertFalse("Colon", sp.isUsuallyPrecededBySpace(':'));
+ //assertFalse("Semicolon", sp.isUsuallyPrecededBySpace(';'));
+ assertFalse("L Angle", sp.isUsuallyPrecededBySpace('<'));
+ assertFalse("Equal", sp.isUsuallyPrecededBySpace('='));
+ assertFalse("R Angle", sp.isUsuallyPrecededBySpace('>'));
+ //assertFalse("Question", sp.isUsuallyPrecededBySpace('?'));
+ assertFalse("Atmark", sp.isUsuallyPrecededBySpace('@'));
+ assertTrue("L S Bracket", sp.isUsuallyPrecededBySpace('['));
+ assertFalse("B Slash", sp.isUsuallyPrecededBySpace('\\'));
+ assertFalse("R S Bracket", sp.isUsuallyPrecededBySpace(']'));
+ assertFalse("Circumflex", sp.isUsuallyPrecededBySpace('^'));
+ assertFalse("Underscore", sp.isUsuallyPrecededBySpace('_'));
+ assertFalse("Grave", sp.isUsuallyPrecededBySpace('`'));
+ assertTrue("L C Brace", sp.isUsuallyPrecededBySpace('{'));
+ assertFalse("V Line", sp.isUsuallyPrecededBySpace('|'));
+ assertFalse("R C Brace", sp.isUsuallyPrecededBySpace('}'));
+ assertFalse("Tilde", sp.isUsuallyPrecededBySpace('~'));
+ }
+
+ private static void testingStandardPrecededBySpace(final SpacingAndPunctuations sp) {
+ testingCommonPrecededBySpace(sp);
+ assertFalse("Exclamation", sp.isUsuallyPrecededBySpace('!'));
+ assertFalse("Colon", sp.isUsuallyPrecededBySpace(':'));
+ assertFalse("Semicolon", sp.isUsuallyPrecededBySpace(';'));
+ assertFalse("Question", sp.isUsuallyPrecededBySpace('?'));
+ }
+
+ public void testIsUsuallyPrecededBySpace() {
+ testingStandardPrecededBySpace(ENGLISH);
+ testingCommonPrecededBySpace(FRENCH);
+ assertTrue("Exclamation", FRENCH.isUsuallyPrecededBySpace('!'));
+ assertTrue("Colon", FRENCH.isUsuallyPrecededBySpace(':'));
+ assertTrue("Semicolon", FRENCH.isUsuallyPrecededBySpace(';'));
+ assertTrue("Question", FRENCH.isUsuallyPrecededBySpace('?'));
+ testingCommonPrecededBySpace(CANADA_FRENCH);
+ assertFalse("Exclamation", CANADA_FRENCH.isUsuallyPrecededBySpace('!'));
+ assertTrue("Colon", CANADA_FRENCH.isUsuallyPrecededBySpace(':'));
+ assertFalse("Semicolon", CANADA_FRENCH.isUsuallyPrecededBySpace(';'));
+ assertFalse("Question", CANADA_FRENCH.isUsuallyPrecededBySpace('?'));
+ testingStandardPrecededBySpace(ARMENIA_ARMENIAN);
+ }
+
+ private static void testingStandardFollowedBySpace(final SpacingAndPunctuations sp) {
+ assertFalse("Tab", sp.isUsuallyFollowedBySpace('\t'));
+ assertFalse("Newline", sp.isUsuallyFollowedBySpace('\n'));
+ assertFalse("Space", sp.isUsuallyFollowedBySpace(' '));
+ assertTrue("Exclamation", sp.isUsuallyFollowedBySpace('!'));
+ assertFalse("Quotation", sp.isUsuallyFollowedBySpace('"'));
+ assertFalse("Number", sp.isUsuallyFollowedBySpace('#'));
+ assertFalse("Dollar", sp.isUsuallyFollowedBySpace('$'));
+ assertFalse("Percent", sp.isUsuallyFollowedBySpace('%'));
+ assertTrue("Ampersand", sp.isUsuallyFollowedBySpace('&'));
+ assertFalse("Apostrophe", sp.isUsuallyFollowedBySpace('\''));
+ assertFalse("L Paren", sp.isUsuallyFollowedBySpace('('));
+ assertTrue("R Paren", sp.isUsuallyFollowedBySpace(')'));
+ assertFalse("Asterisk", sp.isUsuallyFollowedBySpace('*'));
+ assertFalse("Plus", sp.isUsuallyFollowedBySpace('+'));
+ assertTrue("Comma", sp.isUsuallyFollowedBySpace(','));
+ assertFalse("Minus", sp.isUsuallyFollowedBySpace('-'));
+ assertTrue("Period", sp.isUsuallyFollowedBySpace('.'));
+ assertFalse("Slash", sp.isUsuallyFollowedBySpace('/'));
+ assertTrue("Colon", sp.isUsuallyFollowedBySpace(':'));
+ assertTrue("Semicolon", sp.isUsuallyFollowedBySpace(';'));
+ assertFalse("L Angle", sp.isUsuallyFollowedBySpace('<'));
+ assertFalse("Equal", sp.isUsuallyFollowedBySpace('='));
+ assertFalse("R Angle", sp.isUsuallyFollowedBySpace('>'));
+ assertTrue("Question", sp.isUsuallyFollowedBySpace('?'));
+ assertFalse("Atmark", sp.isUsuallyFollowedBySpace('@'));
+ assertFalse("L S Bracket", sp.isUsuallyFollowedBySpace('['));
+ assertFalse("B Slash", sp.isUsuallyFollowedBySpace('\\'));
+ assertTrue("R S Bracket", sp.isUsuallyFollowedBySpace(']'));
+ assertFalse("Circumflex", sp.isUsuallyFollowedBySpace('^'));
+ assertFalse("Underscore", sp.isUsuallyFollowedBySpace('_'));
+ assertFalse("Grave", sp.isUsuallyFollowedBySpace('`'));
+ assertFalse("L C Brace", sp.isUsuallyFollowedBySpace('{'));
+ assertFalse("V Line", sp.isUsuallyFollowedBySpace('|'));
+ assertTrue("R C Brace", sp.isUsuallyFollowedBySpace('}'));
+ assertFalse("Tilde", sp.isUsuallyFollowedBySpace('~'));
+ }
+
+ public void testIsUsuallyFollowedBySpace() {
+ testingStandardFollowedBySpace(ENGLISH);
+ testingStandardFollowedBySpace(FRENCH);
+ testingStandardFollowedBySpace(CANADA_FRENCH);
+ testingStandardFollowedBySpace(ARMENIA_ARMENIAN);
+ assertTrue(ARMENIA_ARMENIAN.isUsuallyFollowedBySpace(ARMENIAN_FULL_STOP));
+ assertTrue(ARMENIA_ARMENIAN.isUsuallyFollowedBySpace(ARMENIAN_COMMA));
+ }
+
+ private static void testingStandardSentenceSeparator(final SpacingAndPunctuations sp) {
+ assertFalse("Tab", sp.isUsuallyFollowedBySpace('\t'));
+ assertFalse("Newline", sp.isUsuallyFollowedBySpace('\n'));
+ assertFalse("Space", sp.isUsuallyFollowedBySpace(' '));
+ assertFalse("Exclamation", sp.isUsuallyFollowedBySpace('!'));
+ assertFalse("Quotation", sp.isUsuallyFollowedBySpace('"'));
+ assertFalse("Number", sp.isUsuallyFollowedBySpace('#'));
+ assertFalse("Dollar", sp.isUsuallyFollowedBySpace('$'));
+ assertFalse("Percent", sp.isUsuallyFollowedBySpace('%'));
+ assertFalse("Ampersand", sp.isUsuallyFollowedBySpace('&'));
+ assertFalse("Apostrophe", sp.isUsuallyFollowedBySpace('\''));
+ assertFalse("L Paren", sp.isUsuallyFollowedBySpace('('));
+ assertFalse("R Paren", sp.isUsuallyFollowedBySpace(')'));
+ assertFalse("Asterisk", sp.isUsuallyFollowedBySpace('*'));
+ assertFalse("Plus", sp.isUsuallyFollowedBySpace('+'));
+ assertFalse("Comma", sp.isUsuallyFollowedBySpace(','));
+ assertFalse("Minus", sp.isUsuallyFollowedBySpace('-'));
+ assertTrue("Period", sp.isUsuallyFollowedBySpace('.'));
+ assertFalse("Slash", sp.isUsuallyFollowedBySpace('/'));
+ assertFalse("Colon", sp.isUsuallyFollowedBySpace(':'));
+ assertFalse("Semicolon", sp.isUsuallyFollowedBySpace(';'));
+ assertFalse("L Angle", sp.isUsuallyFollowedBySpace('<'));
+ assertFalse("Equal", sp.isUsuallyFollowedBySpace('='));
+ assertFalse("R Angle", sp.isUsuallyFollowedBySpace('>'));
+ assertFalse("Question", sp.isUsuallyFollowedBySpace('?'));
+ assertFalse("Atmark", sp.isUsuallyFollowedBySpace('@'));
+ assertFalse("L S Bracket", sp.isUsuallyFollowedBySpace('['));
+ assertFalse("B Slash", sp.isUsuallyFollowedBySpace('\\'));
+ assertFalse("R S Bracket", sp.isUsuallyFollowedBySpace(']'));
+ assertFalse("Circumflex", sp.isUsuallyFollowedBySpace('^'));
+ assertFalse("Underscore", sp.isUsuallyFollowedBySpace('_'));
+ assertFalse("Grave", sp.isUsuallyFollowedBySpace('`'));
+ assertFalse("L C Brace", sp.isUsuallyFollowedBySpace('{'));
+ assertFalse("V Line", sp.isUsuallyFollowedBySpace('|'));
+ assertFalse("R C Brace", sp.isUsuallyFollowedBySpace('}'));
+ assertFalse("Tilde", sp.isUsuallyFollowedBySpace('~'));
+ }
+
+ public void isSentenceSeparator() {
+ testingStandardSentenceSeparator(ENGLISH);
+ try {
+ testingStandardSentenceSeparator(ARMENIA_ARMENIAN);
+ fail("Armenian Sentence Separator");
+ } catch (final AssertionFailedError e) {
+ assertEquals("Period", e.getMessage());
+ }
+ assertTrue(ARMENIA_ARMENIAN.isSentenceSeparator(ARMENIAN_FULL_STOP));
+ assertFalse(ARMENIA_ARMENIAN.isSentenceSeparator(ARMENIAN_COMMA));
+ }
+
+ public void testLanguageHasSpace() {
+ assertTrue(ENGLISH.mCurrentLanguageHasSpaces);
+ assertTrue(FRENCH.mCurrentLanguageHasSpaces);
+ assertTrue(GERMAN.mCurrentLanguageHasSpaces);
+ assertFalse(THAI.mCurrentLanguageHasSpaces);
+ assertFalse(CAMBODIA_KHMER.mCurrentLanguageHasSpaces);
+ assertFalse(LAOS_LAO.mCurrentLanguageHasSpaces);
+ // TODO: We should fix these.
+ assertTrue(KHMER.mCurrentLanguageHasSpaces);
+ assertTrue(LAO.mCurrentLanguageHasSpaces);
+ }
+
+ public void testUsesAmericanTypography() {
+ assertTrue(ENGLISH.mUsesAmericanTypography);
+ assertTrue(UNITED_STATES.mUsesAmericanTypography);
+ assertTrue(UNITED_KINGDOM.mUsesAmericanTypography);
+ assertTrue(INDIA_ENGLISH.mUsesAmericanTypography);
+ assertFalse(FRENCH.mUsesAmericanTypography);
+ assertFalse(GERMAN.mUsesAmericanTypography);
+ assertFalse(SWISS_GERMAN.mUsesAmericanTypography);
+ }
+
+ public void testUsesGermanRules() {
+ assertFalse(ENGLISH.mUsesGermanRules);
+ assertFalse(FRENCH.mUsesGermanRules);
+ assertTrue(GERMAN.mUsesGermanRules);
+ assertTrue(SWISS_GERMAN.mUsesGermanRules);
+ }
+
+ private static void testingStandardPunctuationSuggestions(final SpacingAndPunctuations sp) {
+ final SuggestedWords suggestedWords = sp.mSuggestPuncList;
+ assertFalse("typedWordValid", suggestedWords.mTypedWordValid);
+ assertFalse("willAutoCorrect", suggestedWords.mWillAutoCorrect);
+ assertTrue("isPunctuationSuggestions", suggestedWords.mIsPunctuationSuggestions);
+ assertFalse("isObsoleteSuggestions", suggestedWords.mIsObsoleteSuggestions);
+ assertFalse("isPrediction", suggestedWords.mIsPrediction);
+ final String[] punctuations = {
+ "!", "?", ",", ":", ";", "\"", "(", ")", "'", "-", "/", "@", "_"
+ };
+ assertEquals("size", punctuations.length, suggestedWords.size());
+ for (int index = 0; index < punctuations.length; index++) {
+ assertEquals("punctuation at " + index,
+ punctuations[index], suggestedWords.getWord(index));
+ }
+ }
+ public void testPunctuationSuggestions() {
+ testingStandardPunctuationSuggestions(ENGLISH);
+ testingStandardPunctuationSuggestions(FRENCH);
+ testingStandardPunctuationSuggestions(GERMAN);
+ // TODO: Should fix these RTL languages
+ testingStandardPunctuationSuggestions(ARABIC);
+ testingStandardPunctuationSuggestions(PERSIAN);
+ testingStandardPunctuationSuggestions(HEBREW);
+ }
+}
diff --git a/tests/src/com/android/inputmethod/latin/utils/RecapitalizeStatusTests.java b/tests/src/com/android/inputmethod/latin/utils/RecapitalizeStatusTests.java
index a52041264..ada80c3fa 100644
--- a/tests/src/com/android/inputmethod/latin/utils/RecapitalizeStatusTests.java
+++ b/tests/src/com/android/inputmethod/latin/utils/RecapitalizeStatusTests.java
@@ -19,31 +19,35 @@ package com.android.inputmethod.latin.utils;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
+import com.android.inputmethod.latin.Constants;
+
import java.util.Locale;
@SmallTest
public class RecapitalizeStatusTests extends AndroidTestCase {
+ private static final int[] SPACE = { Constants.CODE_SPACE };
+
public void testTrim() {
final RecapitalizeStatus status = new RecapitalizeStatus();
- status.initialize(30, 40, "abcdefghij", Locale.ENGLISH, " ");
+ status.initialize(30, 40, "abcdefghij", Locale.ENGLISH, SPACE);
status.trim();
assertEquals("abcdefghij", status.getRecapitalizedString());
assertEquals(30, status.getNewCursorStart());
assertEquals(40, status.getNewCursorEnd());
- status.initialize(30, 44, " abcdefghij", Locale.ENGLISH, " ");
+ status.initialize(30, 44, " abcdefghij", Locale.ENGLISH, SPACE);
status.trim();
assertEquals("abcdefghij", status.getRecapitalizedString());
assertEquals(34, status.getNewCursorStart());
assertEquals(44, status.getNewCursorEnd());
- status.initialize(30, 40, "abcdefgh ", Locale.ENGLISH, " ");
+ status.initialize(30, 40, "abcdefgh ", Locale.ENGLISH, SPACE);
status.trim();
assertEquals("abcdefgh", status.getRecapitalizedString());
assertEquals(30, status.getNewCursorStart());
assertEquals(38, status.getNewCursorEnd());
- status.initialize(30, 45, " abcdefghij ", Locale.ENGLISH, " ");
+ status.initialize(30, 45, " abcdefghij ", Locale.ENGLISH, SPACE);
status.trim();
assertEquals("abcdefghij", status.getRecapitalizedString());
assertEquals(33, status.getNewCursorStart());
@@ -52,7 +56,7 @@ public class RecapitalizeStatusTests extends AndroidTestCase {
public void testRotate() {
final RecapitalizeStatus status = new RecapitalizeStatus();
- status.initialize(29, 40, "abcd efghij", Locale.ENGLISH, " ");
+ status.initialize(29, 40, "abcd efghij", Locale.ENGLISH, SPACE);
status.rotate();
assertEquals("Abcd Efghij", status.getRecapitalizedString());
assertEquals(29, status.getNewCursorStart());
@@ -64,7 +68,7 @@ public class RecapitalizeStatusTests extends AndroidTestCase {
status.rotate();
assertEquals("Abcd Efghij", status.getRecapitalizedString());
- status.initialize(29, 40, "Abcd Efghij", Locale.ENGLISH, " ");
+ status.initialize(29, 40, "Abcd Efghij", Locale.ENGLISH, SPACE);
status.rotate();
assertEquals("ABCD EFGHIJ", status.getRecapitalizedString());
assertEquals(29, status.getNewCursorStart());
@@ -76,7 +80,7 @@ public class RecapitalizeStatusTests extends AndroidTestCase {
status.rotate();
assertEquals("ABCD EFGHIJ", status.getRecapitalizedString());
- status.initialize(29, 40, "ABCD EFGHIJ", Locale.ENGLISH, " ");
+ status.initialize(29, 40, "ABCD EFGHIJ", Locale.ENGLISH, SPACE);
status.rotate();
assertEquals("abcd efghij", status.getRecapitalizedString());
assertEquals(29, status.getNewCursorStart());
@@ -88,7 +92,7 @@ public class RecapitalizeStatusTests extends AndroidTestCase {
status.rotate();
assertEquals("abcd efghij", status.getRecapitalizedString());
- status.initialize(29, 39, "AbCDefghij", Locale.ENGLISH, " ");
+ status.initialize(29, 39, "AbCDefghij", Locale.ENGLISH, SPACE);
status.rotate();
assertEquals("abcdefghij", status.getRecapitalizedString());
assertEquals(29, status.getNewCursorStart());
@@ -102,7 +106,7 @@ public class RecapitalizeStatusTests extends AndroidTestCase {
status.rotate();
assertEquals("abcdefghij", status.getRecapitalizedString());
- status.initialize(29, 40, "Abcd efghij", Locale.ENGLISH, " ");
+ status.initialize(29, 40, "Abcd efghij", Locale.ENGLISH, SPACE);
status.rotate();
assertEquals("abcd efghij", status.getRecapitalizedString());
assertEquals(29, status.getNewCursorStart());
@@ -116,7 +120,8 @@ public class RecapitalizeStatusTests extends AndroidTestCase {
status.rotate();
assertEquals("abcd efghij", status.getRecapitalizedString());
- status.initialize(30, 34, "grüß", Locale.GERMAN, " "); status.rotate();
+ status.initialize(30, 34, "grüß", Locale.GERMAN, SPACE);
+ status.rotate();
assertEquals("Grüß", status.getRecapitalizedString());
assertEquals(30, status.getNewCursorStart());
assertEquals(34, status.getNewCursorEnd());
@@ -133,7 +138,8 @@ public class RecapitalizeStatusTests extends AndroidTestCase {
assertEquals(30, status.getNewCursorStart());
assertEquals(34, status.getNewCursorEnd());
- status.initialize(30, 33, "œuf", Locale.FRENCH, " "); status.rotate();
+ status.initialize(30, 33, "œuf", Locale.FRENCH, SPACE);
+ status.rotate();
assertEquals("Œuf", status.getRecapitalizedString());
assertEquals(30, status.getNewCursorStart());
assertEquals(33, status.getNewCursorEnd());
@@ -150,7 +156,8 @@ public class RecapitalizeStatusTests extends AndroidTestCase {
assertEquals(30, status.getNewCursorStart());
assertEquals(33, status.getNewCursorEnd());
- status.initialize(30, 33, "œUf", Locale.FRENCH, " "); status.rotate();
+ status.initialize(30, 33, "œUf", Locale.FRENCH, SPACE);
+ status.rotate();
assertEquals("œuf", status.getRecapitalizedString());
assertEquals(30, status.getNewCursorStart());
assertEquals(33, status.getNewCursorEnd());
@@ -171,7 +178,8 @@ public class RecapitalizeStatusTests extends AndroidTestCase {
assertEquals(30, status.getNewCursorStart());
assertEquals(33, status.getNewCursorEnd());
- status.initialize(30, 35, "école", Locale.FRENCH, " "); status.rotate();
+ status.initialize(30, 35, "école", Locale.FRENCH, SPACE);
+ status.rotate();
assertEquals("École", status.getRecapitalizedString());
assertEquals(30, status.getNewCursorStart());
assertEquals(35, status.getNewCursorEnd());
diff --git a/tests/src/com/android/inputmethod/latin/utils/StringAndJsonUtilsTests.java b/tests/src/com/android/inputmethod/latin/utils/StringAndJsonUtilsTests.java
index 71966124f..e55c32bd0 100644
--- a/tests/src/com/android/inputmethod/latin/utils/StringAndJsonUtilsTests.java
+++ b/tests/src/com/android/inputmethod/latin/utils/StringAndJsonUtilsTests.java
@@ -19,6 +19,8 @@ package com.android.inputmethod.latin.utils;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
+import com.android.inputmethod.latin.Constants;
+
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
@@ -206,42 +208,47 @@ public class StringAndJsonUtilsTests extends AndroidTestCase {
assertTrue(StringUtils.isIdenticalAfterDowncase(""));
}
- private static void checkCapitalize(final String src, final String dst, final String separators,
- final Locale locale) {
- assertEquals(dst, StringUtils.capitalizeEachWord(src, separators, locale));
+ private static void checkCapitalize(final String src, final String dst,
+ final int[] sortedSeparators, final Locale locale) {
+ assertEquals(dst, StringUtils.capitalizeEachWord(src, sortedSeparators, locale));
assert(src.equals(dst)
- == StringUtils.isIdenticalAfterCapitalizeEachWord(src, separators));
+ == StringUtils.isIdenticalAfterCapitalizeEachWord(src, sortedSeparators));
}
+ private static final int[] SPACE = { Constants.CODE_SPACE };
+ private static final int[] SPACE_PERIOD = StringUtils.toSortedCodePointArray(" .");
+ private static final int[] SENTENCE_SEPARATORS =
+ StringUtils.toSortedCodePointArray(" \n.!?*()&");
+ private static final int[] WORD_SEPARATORS = StringUtils.toSortedCodePointArray(" \n.!?*,();&");
+
public void testCapitalizeEachWord() {
- checkCapitalize("", "", " ", Locale.ENGLISH);
- checkCapitalize("test", "Test", " ", Locale.ENGLISH);
- checkCapitalize(" test", " Test", " ", Locale.ENGLISH);
- checkCapitalize("Test", "Test", " ", Locale.ENGLISH);
- checkCapitalize(" Test", " Test", " ", Locale.ENGLISH);
- checkCapitalize(".Test", ".test", " ", Locale.ENGLISH);
- checkCapitalize(".Test", ".Test", " .", Locale.ENGLISH);
- checkCapitalize(".Test", ".Test", ". ", Locale.ENGLISH);
- checkCapitalize("test and retest", "Test And Retest", " .", Locale.ENGLISH);
- checkCapitalize("Test and retest", "Test And Retest", " .", Locale.ENGLISH);
- checkCapitalize("Test And Retest", "Test And Retest", " .", Locale.ENGLISH);
- checkCapitalize("Test And.Retest ", "Test And.Retest ", " .", Locale.ENGLISH);
- checkCapitalize("Test And.retest ", "Test And.Retest ", " .", Locale.ENGLISH);
- checkCapitalize("Test And.retest ", "Test And.retest ", " ", Locale.ENGLISH);
- checkCapitalize("Test And.Retest ", "Test And.retest ", " ", Locale.ENGLISH);
- checkCapitalize("test and ietest", "Test And İetest", " .", new Locale("tr"));
- checkCapitalize("test and ietest", "Test And Ietest", " .", Locale.ENGLISH);
- checkCapitalize("Test&Retest", "Test&Retest", " \n.!?*()&", Locale.ENGLISH);
- checkCapitalize("Test&retest", "Test&Retest", " \n.!?*()&", Locale.ENGLISH);
- checkCapitalize("test&Retest", "Test&Retest", " \n.!?*()&", Locale.ENGLISH);
+ checkCapitalize("", "", SPACE, Locale.ENGLISH);
+ checkCapitalize("test", "Test", SPACE, Locale.ENGLISH);
+ checkCapitalize(" test", " Test", SPACE, Locale.ENGLISH);
+ checkCapitalize("Test", "Test", SPACE, Locale.ENGLISH);
+ checkCapitalize(" Test", " Test", SPACE, Locale.ENGLISH);
+ checkCapitalize(".Test", ".test", SPACE, Locale.ENGLISH);
+ checkCapitalize(".Test", ".Test", SPACE_PERIOD, Locale.ENGLISH);
+ checkCapitalize("test and retest", "Test And Retest", SPACE_PERIOD, Locale.ENGLISH);
+ checkCapitalize("Test and retest", "Test And Retest", SPACE_PERIOD, Locale.ENGLISH);
+ checkCapitalize("Test And Retest", "Test And Retest", SPACE_PERIOD, Locale.ENGLISH);
+ checkCapitalize("Test And.Retest ", "Test And.Retest ", SPACE_PERIOD, Locale.ENGLISH);
+ checkCapitalize("Test And.retest ", "Test And.Retest ", SPACE_PERIOD, Locale.ENGLISH);
+ checkCapitalize("Test And.retest ", "Test And.retest ", SPACE, Locale.ENGLISH);
+ checkCapitalize("Test And.Retest ", "Test And.retest ", SPACE, Locale.ENGLISH);
+ checkCapitalize("test and ietest", "Test And İetest", SPACE_PERIOD, new Locale("tr"));
+ checkCapitalize("test and ietest", "Test And Ietest", SPACE_PERIOD, Locale.ENGLISH);
+ checkCapitalize("Test&Retest", "Test&Retest", SENTENCE_SEPARATORS, Locale.ENGLISH);
+ checkCapitalize("Test&retest", "Test&Retest", SENTENCE_SEPARATORS, Locale.ENGLISH);
+ checkCapitalize("test&Retest", "Test&Retest", SENTENCE_SEPARATORS, Locale.ENGLISH);
checkCapitalize("rest\nrecreation! And in the end...",
- "Rest\nRecreation! And In The End...", " \n.!?*,();&", Locale.ENGLISH);
+ "Rest\nRecreation! And In The End...", WORD_SEPARATORS, Locale.ENGLISH);
checkCapitalize("lorem ipsum dolor sit amet", "Lorem Ipsum Dolor Sit Amet",
- " \n.,!?*()&;", Locale.ENGLISH);
+ WORD_SEPARATORS, Locale.ENGLISH);
checkCapitalize("Lorem!Ipsum (Dolor) Sit * Amet", "Lorem!Ipsum (Dolor) Sit * Amet",
- " \n,.;!?*()&", Locale.ENGLISH);
+ WORD_SEPARATORS, Locale.ENGLISH);
checkCapitalize("Lorem!Ipsum (dolor) Sit * Amet", "Lorem!Ipsum (Dolor) Sit * Amet",
- " \n,.;!?*()&", Locale.ENGLISH);
+ WORD_SEPARATORS, Locale.ENGLISH);
}
public void testLooksLikeURL() {