Home | History | Annotate | Download | only in settings
      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 
     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