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