• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012 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.utils;
18 
19 import com.android.inputmethod.latin.settings.SettingsValues;
20 
21 import android.test.AndroidTestCase;
22 import android.test.suitebuilder.annotation.SmallTest;
23 
24 import java.util.Arrays;
25 import java.util.List;
26 import java.util.Locale;
27 
28 @SmallTest
29 public class StringUtilsTests extends AndroidTestCase {
testContainsInArray()30     public void testContainsInArray() {
31         assertFalse("empty array", StringUtils.containsInArray("key", new String[0]));
32         assertFalse("not in 1 element", StringUtils.containsInArray("key", new String[] {
33                 "key1"
34         }));
35         assertFalse("not in 2 elements", StringUtils.containsInArray("key", new String[] {
36                 "key1", "key2"
37         }));
38 
39         assertTrue("in 1 element", StringUtils.containsInArray("key", new String[] {
40                 "key"
41         }));
42         assertTrue("in 2 elements", StringUtils.containsInArray("key", new String[] {
43                 "key1", "key"
44         }));
45     }
46 
testContainsInExtraValues()47     public void testContainsInExtraValues() {
48         assertFalse("null", StringUtils.containsInCommaSplittableText("key", null));
49         assertFalse("empty", StringUtils.containsInCommaSplittableText("key", ""));
50         assertFalse("not in 1 element",
51                 StringUtils.containsInCommaSplittableText("key", "key1"));
52         assertFalse("not in 2 elements",
53                 StringUtils.containsInCommaSplittableText("key", "key1,key2"));
54 
55         assertTrue("in 1 element", StringUtils.containsInCommaSplittableText("key", "key"));
56         assertTrue("in 2 elements", StringUtils.containsInCommaSplittableText("key", "key1,key"));
57     }
58 
testAppendToExtraValuesIfNotExists()59     public void testAppendToExtraValuesIfNotExists() {
60         assertEquals("null", "key",
61                 StringUtils.appendToCommaSplittableTextIfNotExists("key", null));
62         assertEquals("empty", "key",
63                 StringUtils.appendToCommaSplittableTextIfNotExists("key", ""));
64 
65         assertEquals("not in 1 element", "key1,key",
66                 StringUtils.appendToCommaSplittableTextIfNotExists("key", "key1"));
67         assertEquals("not in 2 elements", "key1,key2,key",
68                 StringUtils.appendToCommaSplittableTextIfNotExists("key", "key1,key2"));
69 
70         assertEquals("in 1 element", "key",
71                 StringUtils.appendToCommaSplittableTextIfNotExists("key", "key"));
72         assertEquals("in 2 elements at position 1", "key,key2",
73                 StringUtils.appendToCommaSplittableTextIfNotExists("key", "key,key2"));
74         assertEquals("in 2 elements at position 2", "key1,key",
75                 StringUtils.appendToCommaSplittableTextIfNotExists("key", "key1,key"));
76         assertEquals("in 3 elements at position 2", "key1,key,key3",
77                 StringUtils.appendToCommaSplittableTextIfNotExists("key", "key1,key,key3"));
78     }
79 
testRemoveFromExtraValuesIfExists()80     public void testRemoveFromExtraValuesIfExists() {
81         assertEquals("null", "", StringUtils.removeFromCommaSplittableTextIfExists("key", null));
82         assertEquals("empty", "", StringUtils.removeFromCommaSplittableTextIfExists("key", ""));
83 
84         assertEquals("not in 1 element", "key1",
85                 StringUtils.removeFromCommaSplittableTextIfExists("key", "key1"));
86         assertEquals("not in 2 elements", "key1,key2",
87                 StringUtils.removeFromCommaSplittableTextIfExists("key", "key1,key2"));
88 
89         assertEquals("in 1 element", "",
90                 StringUtils.removeFromCommaSplittableTextIfExists("key", "key"));
91         assertEquals("in 2 elements at position 1", "key2",
92                 StringUtils.removeFromCommaSplittableTextIfExists("key", "key,key2"));
93         assertEquals("in 2 elements at position 2", "key1",
94                 StringUtils.removeFromCommaSplittableTextIfExists("key", "key1,key"));
95         assertEquals("in 3 elements at position 2", "key1,key3",
96                 StringUtils.removeFromCommaSplittableTextIfExists("key", "key1,key,key3"));
97 
98         assertEquals("in 3 elements at position 1,2,3", "",
99                 StringUtils.removeFromCommaSplittableTextIfExists("key", "key,key,key"));
100         assertEquals("in 5 elements at position 2,4", "key1,key3,key5",
101                 StringUtils.removeFromCommaSplittableTextIfExists(
102                         "key", "key1,key,key3,key,key5"));
103     }
104 
105 
testCapitalizeFirstCodePoint()106     public void testCapitalizeFirstCodePoint() {
107         assertEquals("SSaa",
108                 StringUtils.capitalizeFirstCodePoint("ßaa", Locale.GERMAN));
109         assertEquals("Aßa",
110                 StringUtils.capitalizeFirstCodePoint("aßa", Locale.GERMAN));
111         assertEquals("Iab",
112                 StringUtils.capitalizeFirstCodePoint("iab", Locale.ENGLISH));
113         assertEquals("CAmElCaSe",
114                 StringUtils.capitalizeFirstCodePoint("cAmElCaSe", Locale.ENGLISH));
115         assertEquals("İab",
116                 StringUtils.capitalizeFirstCodePoint("iab", new Locale("tr")));
117         assertEquals("AİB",
118                 StringUtils.capitalizeFirstCodePoint("AİB", new Locale("tr")));
119         assertEquals("A",
120                 StringUtils.capitalizeFirstCodePoint("a", Locale.ENGLISH));
121         assertEquals("A",
122                 StringUtils.capitalizeFirstCodePoint("A", Locale.ENGLISH));
123     }
124 
testCapitalizeFirstAndDowncaseRest()125     public void testCapitalizeFirstAndDowncaseRest() {
126         assertEquals("SSaa",
127                 StringUtils.capitalizeFirstAndDowncaseRest("ßaa", Locale.GERMAN));
128         assertEquals("Aßa",
129                 StringUtils.capitalizeFirstAndDowncaseRest("aßa", Locale.GERMAN));
130         assertEquals("Iab",
131                 StringUtils.capitalizeFirstAndDowncaseRest("iab", Locale.ENGLISH));
132         assertEquals("Camelcase",
133                 StringUtils.capitalizeFirstAndDowncaseRest("cAmElCaSe", Locale.ENGLISH));
134         assertEquals("İab",
135                 StringUtils.capitalizeFirstAndDowncaseRest("iab", new Locale("tr")));
136         assertEquals("Aib",
137                 StringUtils.capitalizeFirstAndDowncaseRest("AİB", new Locale("tr")));
138         assertEquals("A",
139                 StringUtils.capitalizeFirstAndDowncaseRest("a", Locale.ENGLISH));
140         assertEquals("A",
141                 StringUtils.capitalizeFirstAndDowncaseRest("A", Locale.ENGLISH));
142     }
143 
testGetCapitalizationType()144     public void testGetCapitalizationType() {
145         assertEquals(StringUtils.CAPITALIZE_NONE,
146                 StringUtils.getCapitalizationType("capitalize"));
147         assertEquals(StringUtils.CAPITALIZE_NONE,
148                 StringUtils.getCapitalizationType("cApITalize"));
149         assertEquals(StringUtils.CAPITALIZE_NONE,
150                 StringUtils.getCapitalizationType("capitalizE"));
151         assertEquals(StringUtils.CAPITALIZE_NONE,
152                 StringUtils.getCapitalizationType("__c a piu$@tali56ze"));
153         assertEquals(StringUtils.CAPITALIZE_FIRST,
154                 StringUtils.getCapitalizationType("A__c a piu$@tali56ze"));
155         assertEquals(StringUtils.CAPITALIZE_FIRST,
156                 StringUtils.getCapitalizationType("Capitalize"));
157         assertEquals(StringUtils.CAPITALIZE_FIRST,
158                 StringUtils.getCapitalizationType("     Capitalize"));
159         assertEquals(StringUtils.CAPITALIZE_ALL,
160                 StringUtils.getCapitalizationType("CAPITALIZE"));
161         assertEquals(StringUtils.CAPITALIZE_ALL,
162                 StringUtils.getCapitalizationType("  PI26LIE"));
163         assertEquals(StringUtils.CAPITALIZE_NONE,
164                 StringUtils.getCapitalizationType(""));
165     }
166 
testIsIdenticalAfterUpcaseIsIdenticalAfterDowncase()167     public void testIsIdenticalAfterUpcaseIsIdenticalAfterDowncase() {
168         assertFalse(StringUtils.isIdenticalAfterUpcase("capitalize"));
169         assertTrue(StringUtils.isIdenticalAfterDowncase("capitalize"));
170         assertFalse(StringUtils.isIdenticalAfterUpcase("cApITalize"));
171         assertFalse(StringUtils.isIdenticalAfterDowncase("cApITalize"));
172         assertFalse(StringUtils.isIdenticalAfterUpcase("capitalizE"));
173         assertFalse(StringUtils.isIdenticalAfterDowncase("capitalizE"));
174         assertFalse(StringUtils.isIdenticalAfterUpcase("__c a piu$@tali56ze"));
175         assertTrue(StringUtils.isIdenticalAfterDowncase("__c a piu$@tali56ze"));
176         assertFalse(StringUtils.isIdenticalAfterUpcase("A__c a piu$@tali56ze"));
177         assertFalse(StringUtils.isIdenticalAfterDowncase("A__c a piu$@tali56ze"));
178         assertFalse(StringUtils.isIdenticalAfterUpcase("Capitalize"));
179         assertFalse(StringUtils.isIdenticalAfterDowncase("Capitalize"));
180         assertFalse(StringUtils.isIdenticalAfterUpcase("     Capitalize"));
181         assertFalse(StringUtils.isIdenticalAfterDowncase("     Capitalize"));
182         assertTrue(StringUtils.isIdenticalAfterUpcase("CAPITALIZE"));
183         assertFalse(StringUtils.isIdenticalAfterDowncase("CAPITALIZE"));
184         assertTrue(StringUtils.isIdenticalAfterUpcase("  PI26LIE"));
185         assertFalse(StringUtils.isIdenticalAfterDowncase("  PI26LIE"));
186         assertTrue(StringUtils.isIdenticalAfterUpcase(""));
187         assertTrue(StringUtils.isIdenticalAfterDowncase(""));
188     }
189 
testLooksValidForDictionaryInsertion()190     public void testLooksValidForDictionaryInsertion() {
191         final SettingsValues settings =
192                 SettingsValues.makeDummySettingsValuesForTest(Locale.ENGLISH);
193         assertTrue(StringUtils.looksValidForDictionaryInsertion("aochaueo", settings));
194         assertFalse(StringUtils.looksValidForDictionaryInsertion("", settings));
195         assertTrue(StringUtils.looksValidForDictionaryInsertion("ao-ch'aueo", settings));
196         assertFalse(StringUtils.looksValidForDictionaryInsertion("2908743256", settings));
197         assertTrue(StringUtils.looksValidForDictionaryInsertion("31aochaueo", settings));
198         assertFalse(StringUtils.looksValidForDictionaryInsertion("akeo  raeoch oerch .", settings));
199         assertFalse(StringUtils.looksValidForDictionaryInsertion("!!!", settings));
200     }
201 
checkCapitalize(final String src, final String dst, final String separators, final Locale locale)202     private static void checkCapitalize(final String src, final String dst, final String separators,
203             final Locale locale) {
204         assertEquals(dst, StringUtils.capitalizeEachWord(src, separators, locale));
205         assert(src.equals(dst)
206                 == StringUtils.isIdenticalAfterCapitalizeEachWord(src, separators));
207     }
208 
testCapitalizeEachWord()209     public void testCapitalizeEachWord() {
210         checkCapitalize("", "", " ", Locale.ENGLISH);
211         checkCapitalize("test", "Test", " ", Locale.ENGLISH);
212         checkCapitalize("    test", "    Test", " ", Locale.ENGLISH);
213         checkCapitalize("Test", "Test", " ", Locale.ENGLISH);
214         checkCapitalize("    Test", "    Test", " ", Locale.ENGLISH);
215         checkCapitalize(".Test", ".test", " ", Locale.ENGLISH);
216         checkCapitalize(".Test", ".Test", " .", Locale.ENGLISH);
217         checkCapitalize(".Test", ".Test", ". ", Locale.ENGLISH);
218         checkCapitalize("test and retest", "Test And Retest", " .", Locale.ENGLISH);
219         checkCapitalize("Test and retest", "Test And Retest", " .", Locale.ENGLISH);
220         checkCapitalize("Test And Retest", "Test And Retest", " .", Locale.ENGLISH);
221         checkCapitalize("Test And.Retest  ", "Test And.Retest  ", " .", Locale.ENGLISH);
222         checkCapitalize("Test And.retest  ", "Test And.Retest  ", " .", Locale.ENGLISH);
223         checkCapitalize("Test And.retest  ", "Test And.retest  ", " ", Locale.ENGLISH);
224         checkCapitalize("Test And.Retest  ", "Test And.retest  ", " ", Locale.ENGLISH);
225         checkCapitalize("test and ietest", "Test And İetest", " .", new Locale("tr"));
226         checkCapitalize("test and ietest", "Test And Ietest", " .", Locale.ENGLISH);
227         checkCapitalize("Test&Retest", "Test&Retest", " \n.!?*()&", Locale.ENGLISH);
228         checkCapitalize("Test&retest", "Test&Retest", " \n.!?*()&", Locale.ENGLISH);
229         checkCapitalize("test&Retest", "Test&Retest", " \n.!?*()&", Locale.ENGLISH);
230         checkCapitalize("rest\nrecreation! And in the end...",
231                 "Rest\nRecreation! And In The End...", " \n.!?*,();&", Locale.ENGLISH);
232         checkCapitalize("lorem ipsum dolor sit amet", "Lorem Ipsum Dolor Sit Amet",
233                 " \n.,!?*()&;", Locale.ENGLISH);
234         checkCapitalize("Lorem!Ipsum (Dolor) Sit * Amet", "Lorem!Ipsum (Dolor) Sit * Amet",
235                 " \n,.;!?*()&", Locale.ENGLISH);
236         checkCapitalize("Lorem!Ipsum (dolor) Sit * Amet", "Lorem!Ipsum (Dolor) Sit * Amet",
237                 " \n,.;!?*()&", Locale.ENGLISH);
238     }
239 
testLooksLikeURL()240     public void testLooksLikeURL() {
241         assertTrue(StringUtils.lastPartLooksLikeURL("http://www.google."));
242         assertFalse(StringUtils.lastPartLooksLikeURL("word wo"));
243         assertTrue(StringUtils.lastPartLooksLikeURL("/etc/foo"));
244         assertFalse(StringUtils.lastPartLooksLikeURL("left/right"));
245         assertTrue(StringUtils.lastPartLooksLikeURL("www.goo"));
246         assertTrue(StringUtils.lastPartLooksLikeURL("www."));
247         assertFalse(StringUtils.lastPartLooksLikeURL("U.S.A"));
248         assertFalse(StringUtils.lastPartLooksLikeURL("U.S.A."));
249         assertTrue(StringUtils.lastPartLooksLikeURL("rtsp://foo."));
250         assertTrue(StringUtils.lastPartLooksLikeURL("://"));
251         assertFalse(StringUtils.lastPartLooksLikeURL("abc/"));
252         assertTrue(StringUtils.lastPartLooksLikeURL("abc.def/ghi"));
253         assertFalse(StringUtils.lastPartLooksLikeURL("abc.def"));
254         // TODO: ideally this would not look like a URL, but to keep down the complexity of the
255         // code for now True is acceptable.
256         assertTrue(StringUtils.lastPartLooksLikeURL("abc./def"));
257         // TODO: ideally this would not look like a URL, but to keep down the complexity of the
258         // code for now True is acceptable.
259         assertTrue(StringUtils.lastPartLooksLikeURL(".abc/def"));
260     }
261 
testHexStringUtils()262     public void testHexStringUtils() {
263         final byte[] bytes = new byte[] { (byte)0x01, (byte)0x11, (byte)0x22, (byte)0x33,
264                 (byte)0x55, (byte)0x88, (byte)0xEE };
265         final String bytesStr = StringUtils.byteArrayToHexString(bytes);
266         final byte[] bytes2 = StringUtils.hexStringToByteArray(bytesStr);
267         for (int i = 0; i < bytes.length; ++i) {
268             assertTrue(bytes[i] == bytes2[i]);
269         }
270         final String bytesStr2 = StringUtils.byteArrayToHexString(bytes2);
271         assertTrue(bytesStr.equals(bytesStr2));
272     }
273 
testJsonStringUtils()274     public void testJsonStringUtils() {
275         final Object[] objs = new Object[] { 1, "aaa", "bbb", 3 };
276         final List<Object> objArray = Arrays.asList(objs);
277         final String str = StringUtils.listToJsonStr(objArray);
278         final List<Object> newObjArray = StringUtils.jsonStrToList(str);
279         for (int i = 0; i < objs.length; ++i) {
280             assertEquals(objs[i], newObjArray.get(i));
281         }
282     }
283 }
284