SpacingAndPunctuationsTests.java revision 8380f921f7edaeea2033a1e967a14941400fe246
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
17package com.android.inputmethod.latin.settings;
18
19import android.content.res.Resources;
20import android.test.AndroidTestCase;
21import android.test.suitebuilder.annotation.SmallTest;
22
23import com.android.inputmethod.latin.Constants;
24import com.android.inputmethod.latin.R;
25import com.android.inputmethod.latin.SuggestedWords;
26import com.android.inputmethod.latin.utils.RunInLocale;
27
28import junit.framework.AssertionFailedError;
29
30import java.util.Locale;
31
32@SmallTest
33public 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
39    private boolean isPhone() {
40        return mScreenMetrics == Constants.SCREEN_METRICS_SMALL_PHONE
41                || mScreenMetrics == Constants.SCREEN_METRICS_LARGE_PHONE;
42    }
43
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
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
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
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
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
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
198    public void testWordConnector() {
199        testingStandardWordConnector(ENGLISH);
200        testingStandardWordConnector(FRENCH);
201        testingStandardWordConnector(CANADA_FRENCH);
202        testingStandardWordConnector(ARMENIA_ARMENIAN);
203    }
204
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
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
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
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
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
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
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
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
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
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
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
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
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