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