/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.inputmethod.latin; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.SmallTest; import java.util.Locale; @SmallTest public class StringUtilsTests extends AndroidTestCase { public void testContainsInArray() { assertFalse("empty array", StringUtils.containsInArray("key", new String[0])); assertFalse("not in 1 element", StringUtils.containsInArray("key", new String[] { "key1" })); assertFalse("not in 2 elements", StringUtils.containsInArray("key", new String[] { "key1", "key2" })); assertTrue("in 1 element", StringUtils.containsInArray("key", new String[] { "key" })); assertTrue("in 2 elements", StringUtils.containsInArray("key", new String[] { "key1", "key" })); } public void testContainsInCsv() { assertFalse("null", StringUtils.containsInCsv("key", null)); assertFalse("empty", StringUtils.containsInCsv("key", "")); assertFalse("not in 1 element", StringUtils.containsInCsv("key", "key1")); assertFalse("not in 2 elements", StringUtils.containsInCsv("key", "key1,key2")); assertTrue("in 1 element", StringUtils.containsInCsv("key", "key")); assertTrue("in 2 elements", StringUtils.containsInCsv("key", "key1,key")); } public void testAppendToCsvIfNotExists() { assertEquals("null", "key", StringUtils.appendToCsvIfNotExists("key", null)); assertEquals("empty", "key", StringUtils.appendToCsvIfNotExists("key", "")); assertEquals("not in 1 element", "key1,key", StringUtils.appendToCsvIfNotExists("key", "key1")); assertEquals("not in 2 elements", "key1,key2,key", StringUtils.appendToCsvIfNotExists("key", "key1,key2")); assertEquals("in 1 element", "key", StringUtils.appendToCsvIfNotExists("key", "key")); assertEquals("in 2 elements at position 1", "key,key2", StringUtils.appendToCsvIfNotExists("key", "key,key2")); assertEquals("in 2 elements at position 2", "key1,key", StringUtils.appendToCsvIfNotExists("key", "key1,key")); assertEquals("in 3 elements at position 2", "key1,key,key3", StringUtils.appendToCsvIfNotExists("key", "key1,key,key3")); } public void testRemoveFromCsvIfExists() { assertEquals("null", "", StringUtils.removeFromCsvIfExists("key", null)); assertEquals("empty", "", StringUtils.removeFromCsvIfExists("key", "")); assertEquals("not in 1 element", "key1", StringUtils.removeFromCsvIfExists("key", "key1")); assertEquals("not in 2 elements", "key1,key2", StringUtils.removeFromCsvIfExists("key", "key1,key2")); assertEquals("in 1 element", "", StringUtils.removeFromCsvIfExists("key", "key")); assertEquals("in 2 elements at position 1", "key2", StringUtils.removeFromCsvIfExists("key", "key,key2")); assertEquals("in 2 elements at position 2", "key1", StringUtils.removeFromCsvIfExists("key", "key1,key")); assertEquals("in 3 elements at position 2", "key1,key3", StringUtils.removeFromCsvIfExists("key", "key1,key,key3")); assertEquals("in 3 elements at position 1,2,3", "", StringUtils.removeFromCsvIfExists("key", "key,key,key")); assertEquals("in 5 elements at position 2,4", "key1,key3,key5", StringUtils.removeFromCsvIfExists("key", "key1,key,key3,key,key5")); } public void testCapitalizeFirstCodePoint() { assertEquals("SSaa", StringUtils.capitalizeFirstCodePoint("ßaa", Locale.GERMAN)); assertEquals("Aßa", StringUtils.capitalizeFirstCodePoint("aßa", Locale.GERMAN)); assertEquals("Iab", StringUtils.capitalizeFirstCodePoint("iab", Locale.ENGLISH)); assertEquals("CAmElCaSe", StringUtils.capitalizeFirstCodePoint("cAmElCaSe", Locale.ENGLISH)); assertEquals("İab", StringUtils.capitalizeFirstCodePoint("iab", new Locale("tr"))); assertEquals("AİB", StringUtils.capitalizeFirstCodePoint("AİB", new Locale("tr"))); assertEquals("A", StringUtils.capitalizeFirstCodePoint("a", Locale.ENGLISH)); assertEquals("A", StringUtils.capitalizeFirstCodePoint("A", Locale.ENGLISH)); } public void testCapitalizeFirstAndDowncaseRest() { assertEquals("SSaa", StringUtils.capitalizeFirstAndDowncaseRest("ßaa", Locale.GERMAN)); assertEquals("Aßa", StringUtils.capitalizeFirstAndDowncaseRest("aßa", Locale.GERMAN)); assertEquals("Iab", StringUtils.capitalizeFirstAndDowncaseRest("iab", Locale.ENGLISH)); assertEquals("Camelcase", StringUtils.capitalizeFirstAndDowncaseRest("cAmElCaSe", Locale.ENGLISH)); assertEquals("İab", StringUtils.capitalizeFirstAndDowncaseRest("iab", new Locale("tr"))); assertEquals("Aib", StringUtils.capitalizeFirstAndDowncaseRest("AİB", new Locale("tr"))); assertEquals("A", StringUtils.capitalizeFirstAndDowncaseRest("a", Locale.ENGLISH)); assertEquals("A", StringUtils.capitalizeFirstAndDowncaseRest("A", Locale.ENGLISH)); } public void testGetCapitalizationType() { assertEquals(StringUtils.CAPITALIZE_NONE, StringUtils.getCapitalizationType("capitalize")); assertEquals(StringUtils.CAPITALIZE_NONE, StringUtils.getCapitalizationType("cApITalize")); assertEquals(StringUtils.CAPITALIZE_NONE, StringUtils.getCapitalizationType("capitalizE")); assertEquals(StringUtils.CAPITALIZE_NONE, StringUtils.getCapitalizationType("__c a piu$@tali56ze")); assertEquals(StringUtils.CAPITALIZE_FIRST, StringUtils.getCapitalizationType("A__c a piu$@tali56ze")); assertEquals(StringUtils.CAPITALIZE_FIRST, StringUtils.getCapitalizationType("Capitalize")); assertEquals(StringUtils.CAPITALIZE_FIRST, StringUtils.getCapitalizationType(" Capitalize")); assertEquals(StringUtils.CAPITALIZE_ALL, StringUtils.getCapitalizationType("CAPITALIZE")); assertEquals(StringUtils.CAPITALIZE_ALL, StringUtils.getCapitalizationType(" PI26LIE")); assertEquals(StringUtils.CAPITALIZE_NONE, StringUtils.getCapitalizationType("")); } public void testIsIdenticalAfterUpcaseIsIdenticalAfterDowncase() { assertFalse(StringUtils.isIdenticalAfterUpcase("capitalize")); assertTrue(StringUtils.isIdenticalAfterDowncase("capitalize")); assertFalse(StringUtils.isIdenticalAfterUpcase("cApITalize")); assertFalse(StringUtils.isIdenticalAfterDowncase("cApITalize")); assertFalse(StringUtils.isIdenticalAfterUpcase("capitalizE")); assertFalse(StringUtils.isIdenticalAfterDowncase("capitalizE")); assertFalse(StringUtils.isIdenticalAfterUpcase("__c a piu$@tali56ze")); assertTrue(StringUtils.isIdenticalAfterDowncase("__c a piu$@tali56ze")); assertFalse(StringUtils.isIdenticalAfterUpcase("A__c a piu$@tali56ze")); assertFalse(StringUtils.isIdenticalAfterDowncase("A__c a piu$@tali56ze")); assertFalse(StringUtils.isIdenticalAfterUpcase("Capitalize")); assertFalse(StringUtils.isIdenticalAfterDowncase("Capitalize")); assertFalse(StringUtils.isIdenticalAfterUpcase(" Capitalize")); assertFalse(StringUtils.isIdenticalAfterDowncase(" Capitalize")); assertTrue(StringUtils.isIdenticalAfterUpcase("CAPITALIZE")); assertFalse(StringUtils.isIdenticalAfterDowncase("CAPITALIZE")); assertTrue(StringUtils.isIdenticalAfterUpcase(" PI26LIE")); assertFalse(StringUtils.isIdenticalAfterDowncase(" PI26LIE")); assertTrue(StringUtils.isIdenticalAfterUpcase("")); assertTrue(StringUtils.isIdenticalAfterDowncase("")); } private void checkCapitalize(final String src, final String dst, final String separators, final Locale locale) { assertEquals(dst, StringUtils.capitalizeEachWord(src, separators, locale)); assert(src.equals(dst) == StringUtils.isIdenticalAfterCapitalizeEachWord(src, separators)); } public void testCapitalizeEachWord() { checkCapitalize("", "", " ", Locale.ENGLISH); checkCapitalize("test", "Test", " ", Locale.ENGLISH); checkCapitalize(" test", " Test", " ", Locale.ENGLISH); checkCapitalize("Test", "Test", " ", Locale.ENGLISH); checkCapitalize(" Test", " Test", " ", Locale.ENGLISH); checkCapitalize(".Test", ".test", " ", Locale.ENGLISH); checkCapitalize(".Test", ".Test", " .", Locale.ENGLISH); checkCapitalize(".Test", ".Test", ". ", Locale.ENGLISH); checkCapitalize("test and retest", "Test And Retest", " .", Locale.ENGLISH); checkCapitalize("Test and retest", "Test And Retest", " .", Locale.ENGLISH); checkCapitalize("Test And Retest", "Test And Retest", " .", Locale.ENGLISH); checkCapitalize("Test And.Retest ", "Test And.Retest ", " .", Locale.ENGLISH); checkCapitalize("Test And.retest ", "Test And.Retest ", " .", Locale.ENGLISH); checkCapitalize("Test And.retest ", "Test And.retest ", " ", Locale.ENGLISH); checkCapitalize("Test And.Retest ", "Test And.retest ", " ", Locale.ENGLISH); checkCapitalize("test and ietest", "Test And İetest", " .", new Locale("tr")); checkCapitalize("test and ietest", "Test And Ietest", " .", Locale.ENGLISH); checkCapitalize("Test&Retest", "Test&Retest", " \n.!?*()&", Locale.ENGLISH); checkCapitalize("Test&retest", "Test&Retest", " \n.!?*()&", Locale.ENGLISH); checkCapitalize("test&Retest", "Test&Retest", " \n.!?*()&", Locale.ENGLISH); checkCapitalize("rest\nrecreation! And in the end...", "Rest\nRecreation! And In The End...", " \n.!?*,();&", Locale.ENGLISH); checkCapitalize("lorem ipsum dolor sit amet", "Lorem Ipsum Dolor Sit Amet", " \n.,!?*()&;", Locale.ENGLISH); checkCapitalize("Lorem!Ipsum (Dolor) Sit * Amet", "Lorem!Ipsum (Dolor) Sit * Amet", " \n,.;!?*()&", Locale.ENGLISH); checkCapitalize("Lorem!Ipsum (dolor) Sit * Amet", "Lorem!Ipsum (Dolor) Sit * Amet", " \n,.;!?*()&", Locale.ENGLISH); } public void testLooksLikeURL() { assertTrue(StringUtils.lastPartLooksLikeURL("http://www.google.")); assertFalse(StringUtils.lastPartLooksLikeURL("word wo")); assertTrue(StringUtils.lastPartLooksLikeURL("/etc/foo")); assertFalse(StringUtils.lastPartLooksLikeURL("left/right")); assertTrue(StringUtils.lastPartLooksLikeURL("www.goo")); assertTrue(StringUtils.lastPartLooksLikeURL("www.")); assertFalse(StringUtils.lastPartLooksLikeURL("U.S.A")); assertFalse(StringUtils.lastPartLooksLikeURL("U.S.A.")); assertTrue(StringUtils.lastPartLooksLikeURL("rtsp://foo.")); assertTrue(StringUtils.lastPartLooksLikeURL("://")); assertFalse(StringUtils.lastPartLooksLikeURL("abc/")); assertTrue(StringUtils.lastPartLooksLikeURL("abc.def/ghi")); assertFalse(StringUtils.lastPartLooksLikeURL("abc.def")); // TODO: ideally this would not look like a URL, but to keep down the complexity of the // code for now True is acceptable. assertTrue(StringUtils.lastPartLooksLikeURL("abc./def")); // TODO: ideally this would not look like a URL, but to keep down the complexity of the // code for now True is acceptable. assertTrue(StringUtils.lastPartLooksLikeURL(".abc/def")); } public void testFindValueOfKey() { final String nullKey = null; final String emptyKey = ""; final String[] nullArray = null; assertNull(StringUtils.findValueOfKey("anyKey", nullArray)); assertNull(StringUtils.findValueOfKey(emptyKey, nullArray)); assertNull(StringUtils.findValueOfKey(nullKey, nullArray)); final String[] emptyArray = {}; assertNull(StringUtils.findValueOfKey("anyKey", emptyArray)); assertNull(StringUtils.findValueOfKey(emptyKey, emptyArray)); assertNull(StringUtils.findValueOfKey(nullKey, emptyArray)); final String[] array = { "DEFAULT,defaultValue", "HARDWARE=grouper,0.3", "HARDWARE=mako,0.4", "HARDWARE=manta,0.2" }; assertEquals(StringUtils.findValueOfKey("HARDWARE=grouper", array), "0.3"); assertEquals(StringUtils.findValueOfKey("HARDWARE=mako", array), "0.4"); assertEquals(StringUtils.findValueOfKey("HARDWARE=manta", array), "0.2"); assertEquals(StringUtils.findValueOfKey("DEFAULT", array), "defaultValue"); assertNull(StringUtils.findValueOfKey("hardware=grouper", array)); assertNull(StringUtils.findValueOfKey("HARDWARE=MAKO", array)); assertNull(StringUtils.findValueOfKey("HARDWARE=mantaray", array)); assertNull(StringUtils.findValueOfKey(emptyKey, array)); assertNull(StringUtils.findValueOfKey(nullKey, array)); final String[] containsNullKey = { "DEFAULT,defaultValue", ",emptyValue" }; assertEquals(StringUtils.findValueOfKey(emptyKey, containsNullKey), "emptyValue"); final String[] containsMultipleSameKeys = { "key1,value1", "key2,value2", "key3,value3", "key2,value4" }; assertEquals(StringUtils.findValueOfKey("key2", containsMultipleSameKeys), "value2"); final String[] containNoCommaElement = { "key1,value1", "key2-and-value2", "key3,value3" }; assertEquals(StringUtils.findValueOfKey("key1", containNoCommaElement), "value1"); try { final String valueOfKey3 = StringUtils.findValueOfKey("key3", containNoCommaElement); fail("finding valueOfKey3=" + valueOfKey3 + " must fail"); } catch (final RuntimeException e) { assertEquals(e.getMessage(), "Element has no comma: key2-and-value2"); } } }