1 /* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.inputmethod.latin.settings; 18 19 import android.content.res.Resources; 20 import android.test.AndroidTestCase; 21 import android.test.suitebuilder.annotation.SmallTest; 22 23 import com.android.inputmethod.latin.SuggestedWords; 24 import com.android.inputmethod.latin.common.Constants; 25 import com.android.inputmethod.latin.utils.RunInLocale; 26 27 import junit.framework.AssertionFailedError; 28 29 import java.util.Locale; 30 31 @SmallTest 32 public class SpacingAndPunctuationsTests extends AndroidTestCase { 33 private static final int ARMENIAN_FULL_STOP = '\u0589'; 34 private static final int ARMENIAN_COMMA = '\u055D'; 35 36 private int mScreenMetrics; 37 38 private boolean isPhone() { 39 return Constants.isPhone(mScreenMetrics); 40 } 41 42 private boolean isTablet() { 43 return Constants.isTablet(mScreenMetrics); 44 } 45 46 private SpacingAndPunctuations ENGLISH; 47 private SpacingAndPunctuations FRENCH; 48 private SpacingAndPunctuations GERMAN; 49 private SpacingAndPunctuations ARMENIAN; 50 private SpacingAndPunctuations THAI; 51 private SpacingAndPunctuations KHMER; 52 private SpacingAndPunctuations LAO; 53 private SpacingAndPunctuations ARABIC; 54 private SpacingAndPunctuations PERSIAN; 55 private SpacingAndPunctuations HEBREW; 56 57 private SpacingAndPunctuations UNITED_STATES; 58 private SpacingAndPunctuations UNITED_KINGDOM; 59 private SpacingAndPunctuations CANADA_FRENCH; 60 private SpacingAndPunctuations SWISS_GERMAN; 61 private SpacingAndPunctuations INDIA_ENGLISH; 62 private SpacingAndPunctuations ARMENIA_ARMENIAN; 63 private SpacingAndPunctuations CAMBODIA_KHMER; 64 private SpacingAndPunctuations LAOS_LAO; 65 66 @Override 67 protected void setUp() throws Exception { 68 super.setUp(); 69 70 mScreenMetrics = Settings.readScreenMetrics(getContext().getResources()); 71 72 // Language only 73 ENGLISH = getSpacingAndPunctuations(Locale.ENGLISH); 74 FRENCH = getSpacingAndPunctuations(Locale.FRENCH); 75 GERMAN = getSpacingAndPunctuations(Locale.GERMAN); 76 THAI = getSpacingAndPunctuations(new Locale("th")); 77 ARMENIAN = getSpacingAndPunctuations(new Locale("hy")); 78 KHMER = getSpacingAndPunctuations(new Locale("km")); 79 LAO = getSpacingAndPunctuations(new Locale("lo")); 80 ARABIC = getSpacingAndPunctuations(new Locale("ar")); 81 PERSIAN = getSpacingAndPunctuations(new Locale("fa")); 82 HEBREW = getSpacingAndPunctuations(new Locale("iw")); 83 84 // Language and Country 85 UNITED_STATES = getSpacingAndPunctuations(Locale.US); 86 UNITED_KINGDOM = getSpacingAndPunctuations(Locale.UK); 87 CANADA_FRENCH = getSpacingAndPunctuations(Locale.CANADA_FRENCH); 88 SWISS_GERMAN = getSpacingAndPunctuations(new Locale("de", "CH")); 89 INDIA_ENGLISH = getSpacingAndPunctuations(new Locale("en", "IN")); 90 ARMENIA_ARMENIAN = getSpacingAndPunctuations(new Locale("hy", "AM")); 91 CAMBODIA_KHMER = getSpacingAndPunctuations(new Locale("km", "KH")); 92 LAOS_LAO = getSpacingAndPunctuations(new Locale("lo", "LA")); 93 } 94 95 private SpacingAndPunctuations getSpacingAndPunctuations(final Locale locale) { 96 final RunInLocale<SpacingAndPunctuations> job = new RunInLocale<SpacingAndPunctuations>() { 97 @Override 98 protected SpacingAndPunctuations job(Resources res) { 99 return new SpacingAndPunctuations(res); 100 } 101 }; 102 return job.runInLocale(getContext().getResources(), locale); 103 } 104 105 private static void testingStandardWordSeparator(final SpacingAndPunctuations sp) { 106 assertTrue("Tab", sp.isWordSeparator('\t')); 107 assertTrue("Newline", sp.isWordSeparator('\n')); 108 assertTrue("Space", sp.isWordSeparator(' ')); 109 assertTrue("Exclamation", sp.isWordSeparator('!')); 110 assertTrue("Quotation", sp.isWordSeparator('"')); 111 assertFalse("Number", sp.isWordSeparator('#')); 112 assertFalse("Dollar", sp.isWordSeparator('$')); 113 assertFalse("Percent", sp.isWordSeparator('%')); 114 assertTrue("Ampersand", sp.isWordSeparator('&')); 115 assertFalse("Apostrophe", sp.isWordSeparator('\'')); 116 assertTrue("L Paren", sp.isWordSeparator('(')); 117 assertTrue("R Paren", sp.isWordSeparator(')')); 118 assertTrue("Asterisk", sp.isWordSeparator('*')); 119 assertTrue("Plus", sp.isWordSeparator('+')); 120 assertTrue("Comma", sp.isWordSeparator(',')); 121 assertFalse("Minus", sp.isWordSeparator('-')); 122 assertTrue("Period", sp.isWordSeparator('.')); 123 assertTrue("Slash", sp.isWordSeparator('/')); 124 assertTrue("Colon", sp.isWordSeparator(':')); 125 assertTrue("Semicolon", sp.isWordSeparator(';')); 126 assertTrue("L Angle", sp.isWordSeparator('<')); 127 assertTrue("Equal", sp.isWordSeparator('=')); 128 assertTrue("R Angle", sp.isWordSeparator('>')); 129 assertTrue("Question", sp.isWordSeparator('?')); 130 assertFalse("Atmark", sp.isWordSeparator('@')); 131 assertTrue("L S Bracket", sp.isWordSeparator('[')); 132 assertFalse("B Slash", sp.isWordSeparator('\\')); 133 assertTrue("R S Bracket", sp.isWordSeparator(']')); 134 assertFalse("Circumflex", sp.isWordSeparator('^')); 135 assertTrue("Underscore", sp.isWordSeparator('_')); 136 assertFalse("Grave", sp.isWordSeparator('`')); 137 assertTrue("L C Brace", sp.isWordSeparator('{')); 138 assertTrue("V Line", sp.isWordSeparator('|')); 139 assertTrue("R C Brace", sp.isWordSeparator('}')); 140 assertFalse("Tilde", sp.isWordSeparator('~')); 141 } 142 143 public void testWordSeparator() { 144 testingStandardWordSeparator(ENGLISH); 145 testingStandardWordSeparator(FRENCH); 146 testingStandardWordSeparator(CANADA_FRENCH); 147 testingStandardWordSeparator(ARMENIA_ARMENIAN); 148 assertTrue(ARMENIA_ARMENIAN.isWordSeparator(ARMENIAN_FULL_STOP)); 149 assertTrue(ARMENIA_ARMENIAN.isWordSeparator(ARMENIAN_COMMA)); 150 // TODO: We should fix these. 151 testingStandardWordSeparator(ARMENIAN); 152 assertFalse(ARMENIAN.isWordSeparator(ARMENIAN_FULL_STOP)); 153 assertFalse(ARMENIAN.isWordSeparator(ARMENIAN_COMMA)); 154 } 155 156 private static void testingStandardWordConnector(final SpacingAndPunctuations sp) { 157 assertFalse("Tab", sp.isWordConnector('\t')); 158 assertFalse("Newline", sp.isWordConnector('\n')); 159 assertFalse("Space", sp.isWordConnector(' ')); 160 assertFalse("Exclamation", sp.isWordConnector('!')); 161 assertFalse("Quotation", sp.isWordConnector('"')); 162 assertFalse("Number", sp.isWordConnector('#')); 163 assertFalse("Dollar", sp.isWordConnector('$')); 164 assertFalse("Percent", sp.isWordConnector('%')); 165 assertFalse("Ampersand", sp.isWordConnector('&')); 166 assertTrue("Apostrophe", sp.isWordConnector('\'')); 167 assertFalse("L Paren", sp.isWordConnector('(')); 168 assertFalse("R Paren", sp.isWordConnector(')')); 169 assertFalse("Asterisk", sp.isWordConnector('*')); 170 assertFalse("Plus", sp.isWordConnector('+')); 171 assertFalse("Comma", sp.isWordConnector(',')); 172 assertTrue("Minus", sp.isWordConnector('-')); 173 assertFalse("Period", sp.isWordConnector('.')); 174 assertFalse("Slash", sp.isWordConnector('/')); 175 assertFalse("Colon", sp.isWordConnector(':')); 176 assertFalse("Semicolon", sp.isWordConnector(';')); 177 assertFalse("L Angle", sp.isWordConnector('<')); 178 assertFalse("Equal", sp.isWordConnector('=')); 179 assertFalse("R Angle", sp.isWordConnector('>')); 180 assertFalse("Question", sp.isWordConnector('?')); 181 assertFalse("Atmark", sp.isWordConnector('@')); 182 assertFalse("L S Bracket", sp.isWordConnector('[')); 183 assertFalse("B Slash", sp.isWordConnector('\\')); 184 assertFalse("R S Bracket", sp.isWordConnector(']')); 185 assertFalse("Circumflex", sp.isWordConnector('^')); 186 assertFalse("Underscore", sp.isWordConnector('_')); 187 assertFalse("Grave", sp.isWordConnector('`')); 188 assertFalse("L C Brace", sp.isWordConnector('{')); 189 assertFalse("V Line", sp.isWordConnector('|')); 190 assertFalse("R C Brace", sp.isWordConnector('}')); 191 assertFalse("Tilde", sp.isWordConnector('~')); 192 193 } 194 195 public void testWordConnector() { 196 testingStandardWordConnector(ENGLISH); 197 testingStandardWordConnector(FRENCH); 198 testingStandardWordConnector(CANADA_FRENCH); 199 testingStandardWordConnector(ARMENIA_ARMENIAN); 200 } 201 202 private static void testingCommonPrecededBySpace(final SpacingAndPunctuations sp) { 203 assertFalse("Tab", sp.isUsuallyPrecededBySpace('\t')); 204 assertFalse("Newline", sp.isUsuallyPrecededBySpace('\n')); 205 assertFalse("Space", sp.isUsuallyPrecededBySpace(' ')); 206 //assertFalse("Exclamation", sp.isUsuallyPrecededBySpace('!')); 207 assertFalse("Quotation", sp.isUsuallyPrecededBySpace('"')); 208 assertFalse("Number", sp.isUsuallyPrecededBySpace('#')); 209 assertFalse("Dollar", sp.isUsuallyPrecededBySpace('$')); 210 assertFalse("Percent", sp.isUsuallyPrecededBySpace('%')); 211 assertTrue("Ampersand", sp.isUsuallyPrecededBySpace('&')); 212 assertFalse("Apostrophe", sp.isUsuallyPrecededBySpace('\'')); 213 assertTrue("L Paren", sp.isUsuallyPrecededBySpace('(')); 214 assertFalse("R Paren", sp.isUsuallyPrecededBySpace(')')); 215 assertFalse("Asterisk", sp.isUsuallyPrecededBySpace('*')); 216 assertFalse("Plus", sp.isUsuallyPrecededBySpace('+')); 217 assertFalse("Comma", sp.isUsuallyPrecededBySpace(',')); 218 assertFalse("Minus", sp.isUsuallyPrecededBySpace('-')); 219 assertFalse("Period", sp.isUsuallyPrecededBySpace('.')); 220 assertFalse("Slash", sp.isUsuallyPrecededBySpace('/')); 221 //assertFalse("Colon", sp.isUsuallyPrecededBySpace(':')); 222 //assertFalse("Semicolon", sp.isUsuallyPrecededBySpace(';')); 223 assertFalse("L Angle", sp.isUsuallyPrecededBySpace('<')); 224 assertFalse("Equal", sp.isUsuallyPrecededBySpace('=')); 225 assertFalse("R Angle", sp.isUsuallyPrecededBySpace('>')); 226 //assertFalse("Question", sp.isUsuallyPrecededBySpace('?')); 227 assertFalse("Atmark", sp.isUsuallyPrecededBySpace('@')); 228 assertTrue("L S Bracket", sp.isUsuallyPrecededBySpace('[')); 229 assertFalse("B Slash", sp.isUsuallyPrecededBySpace('\\')); 230 assertFalse("R S Bracket", sp.isUsuallyPrecededBySpace(']')); 231 assertFalse("Circumflex", sp.isUsuallyPrecededBySpace('^')); 232 assertFalse("Underscore", sp.isUsuallyPrecededBySpace('_')); 233 assertFalse("Grave", sp.isUsuallyPrecededBySpace('`')); 234 assertTrue("L C Brace", sp.isUsuallyPrecededBySpace('{')); 235 assertFalse("V Line", sp.isUsuallyPrecededBySpace('|')); 236 assertFalse("R C Brace", sp.isUsuallyPrecededBySpace('}')); 237 assertFalse("Tilde", sp.isUsuallyPrecededBySpace('~')); 238 } 239 240 private static void testingStandardPrecededBySpace(final SpacingAndPunctuations sp) { 241 testingCommonPrecededBySpace(sp); 242 assertFalse("Exclamation", sp.isUsuallyPrecededBySpace('!')); 243 assertFalse("Colon", sp.isUsuallyPrecededBySpace(':')); 244 assertFalse("Semicolon", sp.isUsuallyPrecededBySpace(';')); 245 assertFalse("Question", sp.isUsuallyPrecededBySpace('?')); 246 } 247 248 public void testIsUsuallyPrecededBySpace() { 249 testingStandardPrecededBySpace(ENGLISH); 250 testingCommonPrecededBySpace(FRENCH); 251 assertTrue("Exclamation", FRENCH.isUsuallyPrecededBySpace('!')); 252 assertTrue("Colon", FRENCH.isUsuallyPrecededBySpace(':')); 253 assertTrue("Semicolon", FRENCH.isUsuallyPrecededBySpace(';')); 254 assertTrue("Question", FRENCH.isUsuallyPrecededBySpace('?')); 255 testingCommonPrecededBySpace(CANADA_FRENCH); 256 assertFalse("Exclamation", CANADA_FRENCH.isUsuallyPrecededBySpace('!')); 257 assertTrue("Colon", CANADA_FRENCH.isUsuallyPrecededBySpace(':')); 258 assertFalse("Semicolon", CANADA_FRENCH.isUsuallyPrecededBySpace(';')); 259 assertFalse("Question", CANADA_FRENCH.isUsuallyPrecededBySpace('?')); 260 testingStandardPrecededBySpace(ARMENIA_ARMENIAN); 261 } 262 263 private static void testingStandardFollowedBySpace(final SpacingAndPunctuations sp) { 264 assertFalse("Tab", sp.isUsuallyFollowedBySpace('\t')); 265 assertFalse("Newline", sp.isUsuallyFollowedBySpace('\n')); 266 assertFalse("Space", sp.isUsuallyFollowedBySpace(' ')); 267 assertTrue("Exclamation", sp.isUsuallyFollowedBySpace('!')); 268 assertFalse("Quotation", sp.isUsuallyFollowedBySpace('"')); 269 assertFalse("Number", sp.isUsuallyFollowedBySpace('#')); 270 assertFalse("Dollar", sp.isUsuallyFollowedBySpace('$')); 271 assertFalse("Percent", sp.isUsuallyFollowedBySpace('%')); 272 assertTrue("Ampersand", sp.isUsuallyFollowedBySpace('&')); 273 assertFalse("Apostrophe", sp.isUsuallyFollowedBySpace('\'')); 274 assertFalse("L Paren", sp.isUsuallyFollowedBySpace('(')); 275 assertTrue("R Paren", sp.isUsuallyFollowedBySpace(')')); 276 assertFalse("Asterisk", sp.isUsuallyFollowedBySpace('*')); 277 assertFalse("Plus", sp.isUsuallyFollowedBySpace('+')); 278 assertTrue("Comma", sp.isUsuallyFollowedBySpace(',')); 279 assertFalse("Minus", sp.isUsuallyFollowedBySpace('-')); 280 assertTrue("Period", sp.isUsuallyFollowedBySpace('.')); 281 assertFalse("Slash", sp.isUsuallyFollowedBySpace('/')); 282 assertTrue("Colon", sp.isUsuallyFollowedBySpace(':')); 283 assertTrue("Semicolon", sp.isUsuallyFollowedBySpace(';')); 284 assertFalse("L Angle", sp.isUsuallyFollowedBySpace('<')); 285 assertFalse("Equal", sp.isUsuallyFollowedBySpace('=')); 286 assertFalse("R Angle", sp.isUsuallyFollowedBySpace('>')); 287 assertTrue("Question", sp.isUsuallyFollowedBySpace('?')); 288 assertFalse("Atmark", sp.isUsuallyFollowedBySpace('@')); 289 assertFalse("L S Bracket", sp.isUsuallyFollowedBySpace('[')); 290 assertFalse("B Slash", sp.isUsuallyFollowedBySpace('\\')); 291 assertTrue("R S Bracket", sp.isUsuallyFollowedBySpace(']')); 292 assertFalse("Circumflex", sp.isUsuallyFollowedBySpace('^')); 293 assertFalse("Underscore", sp.isUsuallyFollowedBySpace('_')); 294 assertFalse("Grave", sp.isUsuallyFollowedBySpace('`')); 295 assertFalse("L C Brace", sp.isUsuallyFollowedBySpace('{')); 296 assertFalse("V Line", sp.isUsuallyFollowedBySpace('|')); 297 assertTrue("R C Brace", sp.isUsuallyFollowedBySpace('}')); 298 assertFalse("Tilde", sp.isUsuallyFollowedBySpace('~')); 299 } 300 301 public void testIsUsuallyFollowedBySpace() { 302 testingStandardFollowedBySpace(ENGLISH); 303 testingStandardFollowedBySpace(FRENCH); 304 testingStandardFollowedBySpace(CANADA_FRENCH); 305 testingStandardFollowedBySpace(ARMENIA_ARMENIAN); 306 assertTrue(ARMENIA_ARMENIAN.isUsuallyFollowedBySpace(ARMENIAN_FULL_STOP)); 307 assertTrue(ARMENIA_ARMENIAN.isUsuallyFollowedBySpace(ARMENIAN_COMMA)); 308 } 309 310 private static void testingStandardSentenceSeparator(final SpacingAndPunctuations sp) { 311 assertFalse("Tab", sp.isUsuallyFollowedBySpace('\t')); 312 assertFalse("Newline", sp.isUsuallyFollowedBySpace('\n')); 313 assertFalse("Space", sp.isUsuallyFollowedBySpace(' ')); 314 assertFalse("Exclamation", sp.isUsuallyFollowedBySpace('!')); 315 assertFalse("Quotation", sp.isUsuallyFollowedBySpace('"')); 316 assertFalse("Number", sp.isUsuallyFollowedBySpace('#')); 317 assertFalse("Dollar", sp.isUsuallyFollowedBySpace('$')); 318 assertFalse("Percent", sp.isUsuallyFollowedBySpace('%')); 319 assertFalse("Ampersand", sp.isUsuallyFollowedBySpace('&')); 320 assertFalse("Apostrophe", sp.isUsuallyFollowedBySpace('\'')); 321 assertFalse("L Paren", sp.isUsuallyFollowedBySpace('(')); 322 assertFalse("R Paren", sp.isUsuallyFollowedBySpace(')')); 323 assertFalse("Asterisk", sp.isUsuallyFollowedBySpace('*')); 324 assertFalse("Plus", sp.isUsuallyFollowedBySpace('+')); 325 assertFalse("Comma", sp.isUsuallyFollowedBySpace(',')); 326 assertFalse("Minus", sp.isUsuallyFollowedBySpace('-')); 327 assertTrue("Period", sp.isUsuallyFollowedBySpace('.')); 328 assertFalse("Slash", sp.isUsuallyFollowedBySpace('/')); 329 assertFalse("Colon", sp.isUsuallyFollowedBySpace(':')); 330 assertFalse("Semicolon", sp.isUsuallyFollowedBySpace(';')); 331 assertFalse("L Angle", sp.isUsuallyFollowedBySpace('<')); 332 assertFalse("Equal", sp.isUsuallyFollowedBySpace('=')); 333 assertFalse("R Angle", sp.isUsuallyFollowedBySpace('>')); 334 assertFalse("Question", sp.isUsuallyFollowedBySpace('?')); 335 assertFalse("Atmark", sp.isUsuallyFollowedBySpace('@')); 336 assertFalse("L S Bracket", sp.isUsuallyFollowedBySpace('[')); 337 assertFalse("B Slash", sp.isUsuallyFollowedBySpace('\\')); 338 assertFalse("R S Bracket", sp.isUsuallyFollowedBySpace(']')); 339 assertFalse("Circumflex", sp.isUsuallyFollowedBySpace('^')); 340 assertFalse("Underscore", sp.isUsuallyFollowedBySpace('_')); 341 assertFalse("Grave", sp.isUsuallyFollowedBySpace('`')); 342 assertFalse("L C Brace", sp.isUsuallyFollowedBySpace('{')); 343 assertFalse("V Line", sp.isUsuallyFollowedBySpace('|')); 344 assertFalse("R C Brace", sp.isUsuallyFollowedBySpace('}')); 345 assertFalse("Tilde", sp.isUsuallyFollowedBySpace('~')); 346 } 347 348 public void isSentenceSeparator() { 349 testingStandardSentenceSeparator(ENGLISH); 350 try { 351 testingStandardSentenceSeparator(ARMENIA_ARMENIAN); 352 fail("Armenian Sentence Separator"); 353 } catch (final AssertionFailedError e) { 354 assertEquals("Period", e.getMessage()); 355 } 356 assertTrue(ARMENIA_ARMENIAN.isSentenceSeparator(ARMENIAN_FULL_STOP)); 357 assertFalse(ARMENIA_ARMENIAN.isSentenceSeparator(ARMENIAN_COMMA)); 358 } 359 360 public void testLanguageHasSpace() { 361 assertTrue(ENGLISH.mCurrentLanguageHasSpaces); 362 assertTrue(FRENCH.mCurrentLanguageHasSpaces); 363 assertTrue(GERMAN.mCurrentLanguageHasSpaces); 364 assertFalse(THAI.mCurrentLanguageHasSpaces); 365 assertFalse(CAMBODIA_KHMER.mCurrentLanguageHasSpaces); 366 assertFalse(LAOS_LAO.mCurrentLanguageHasSpaces); 367 // TODO: We should fix these. 368 assertTrue(KHMER.mCurrentLanguageHasSpaces); 369 assertTrue(LAO.mCurrentLanguageHasSpaces); 370 } 371 372 public void testUsesAmericanTypography() { 373 assertTrue(ENGLISH.mUsesAmericanTypography); 374 assertTrue(UNITED_STATES.mUsesAmericanTypography); 375 assertTrue(UNITED_KINGDOM.mUsesAmericanTypography); 376 assertTrue(INDIA_ENGLISH.mUsesAmericanTypography); 377 assertFalse(FRENCH.mUsesAmericanTypography); 378 assertFalse(GERMAN.mUsesAmericanTypography); 379 assertFalse(SWISS_GERMAN.mUsesAmericanTypography); 380 } 381 382 public void testUsesGermanRules() { 383 assertFalse(ENGLISH.mUsesGermanRules); 384 assertFalse(FRENCH.mUsesGermanRules); 385 assertTrue(GERMAN.mUsesGermanRules); 386 assertTrue(SWISS_GERMAN.mUsesGermanRules); 387 } 388 389 // Punctuations for phone. 390 private static final String[] PUNCTUATION_LABELS_PHONE = { 391 "!", "?", ",", ":", ";", "\"", "(", ")", "'", "-", "/", "@", "_" 392 }; 393 private static final String[] PUNCTUATION_WORDS_PHONE_LTR = PUNCTUATION_LABELS_PHONE; 394 private static final String[] PUNCTUATION_WORDS_PHONE_HEBREW = { 395 "!", "?", ",", ":", ";", "\"", ")", "(", "'", "-", "/", "@", "_" 396 }; 397 // U+061F: "" ARABIC QUESTION MARK 398 // U+060C: "" ARABIC COMMA 399 // U+061B: "" ARABIC SEMICOLON 400 private static final String[] PUNCTUATION_LABELS_PHONE_ARABIC_PERSIAN = { 401 "!", "\u061F", "\u060C", ":", "\u061B", "\"", "(", ")", "'", "-", "/", "@", "_" 402 }; 403 private static final String[] PUNCTUATION_WORDS_PHONE_ARABIC_PERSIAN = { 404 "!", "\u061F", "\u060C", ":", "\u061B", "\"", ")", "(", "'", "-", "/", "@", "_" 405 }; 406 407 // Punctuations for tablet. 408 private static final String[] PUNCTUATION_LABELS_TABLET = { 409 ":", ";", "\"", "(", ")", "'", "-", "/", "@", "_" 410 }; 411 private static final String[] PUNCTUATION_WORDS_TABLET_LTR = PUNCTUATION_LABELS_TABLET; 412 private static final String[] PUNCTUATION_WORDS_TABLET_HEBREW = { 413 ":", ";", "\"", ")", "(", "'", "-", "/", "@", "_" 414 }; 415 private static final String[] PUNCTUATION_LABELS_TABLET_ARABIC_PERSIAN = { 416 "!", "\u061F", ":", "\u061B", "\"", "'", "(", ")", "-", "/", "@", "_" 417 }; 418 private static final String[] PUNCTUATION_WORDS_TABLET_ARABIC_PERSIAN = { 419 "!", "\u061F", ":", "\u061B", "\"", "'", ")", "(", "-", "/", "@", "_" 420 }; 421 422 private static void testingStandardPunctuationSuggestions(final SpacingAndPunctuations sp, 423 final String[] punctuationLabels, final String[] punctuationWords) { 424 final SuggestedWords suggestedWords = sp.mSuggestPuncList; 425 assertFalse("typedWordValid", suggestedWords.mTypedWordValid); 426 assertFalse("willAutoCorrect", suggestedWords.mWillAutoCorrect); 427 assertTrue("isPunctuationSuggestions", suggestedWords.isPunctuationSuggestions()); 428 assertFalse("isObsoleteSuggestions", suggestedWords.mIsObsoleteSuggestions); 429 assertFalse("isPrediction", suggestedWords.isPrediction()); 430 assertEquals("size", punctuationLabels.length, suggestedWords.size()); 431 for (int index = 0; index < suggestedWords.size(); index++) { 432 assertEquals("punctuation label at " + index, 433 punctuationLabels[index], suggestedWords.getLabel(index)); 434 assertEquals("punctuation word at " + index, 435 punctuationWords[index], suggestedWords.getWord(index)); 436 } 437 } 438 439 public void testPhonePunctuationSuggestions() { 440 if (!isPhone()) { 441 return; 442 } 443 testingStandardPunctuationSuggestions(ENGLISH, 444 PUNCTUATION_LABELS_PHONE, PUNCTUATION_WORDS_PHONE_LTR); 445 testingStandardPunctuationSuggestions(FRENCH, 446 PUNCTUATION_LABELS_PHONE, PUNCTUATION_WORDS_PHONE_LTR); 447 testingStandardPunctuationSuggestions(GERMAN, 448 PUNCTUATION_LABELS_PHONE, PUNCTUATION_WORDS_PHONE_LTR); 449 testingStandardPunctuationSuggestions(ARABIC, 450 PUNCTUATION_LABELS_PHONE_ARABIC_PERSIAN, PUNCTUATION_WORDS_PHONE_ARABIC_PERSIAN); 451 testingStandardPunctuationSuggestions(PERSIAN, 452 PUNCTUATION_LABELS_PHONE_ARABIC_PERSIAN, PUNCTUATION_WORDS_PHONE_ARABIC_PERSIAN); 453 testingStandardPunctuationSuggestions(HEBREW, 454 PUNCTUATION_LABELS_PHONE, PUNCTUATION_WORDS_PHONE_HEBREW); 455 } 456 457 public void testTabletPunctuationSuggestions() { 458 if (!isTablet()) { 459 return; 460 } 461 testingStandardPunctuationSuggestions(ENGLISH, 462 PUNCTUATION_LABELS_TABLET, PUNCTUATION_WORDS_TABLET_LTR); 463 testingStandardPunctuationSuggestions(FRENCH, 464 PUNCTUATION_LABELS_TABLET, PUNCTUATION_WORDS_TABLET_LTR); 465 testingStandardPunctuationSuggestions(GERMAN, 466 PUNCTUATION_LABELS_TABLET, PUNCTUATION_WORDS_TABLET_LTR); 467 testingStandardPunctuationSuggestions(ARABIC, 468 PUNCTUATION_LABELS_TABLET_ARABIC_PERSIAN, PUNCTUATION_WORDS_TABLET_ARABIC_PERSIAN); 469 testingStandardPunctuationSuggestions(PERSIAN, 470 PUNCTUATION_LABELS_TABLET_ARABIC_PERSIAN, PUNCTUATION_WORDS_TABLET_ARABIC_PERSIAN); 471 testingStandardPunctuationSuggestions(HEBREW, 472 PUNCTUATION_LABELS_TABLET, PUNCTUATION_WORDS_TABLET_HEBREW); 473 } 474 } 475