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