1f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa/* 2f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa * Copyright (C) 2013 The Android Open Source Project 3f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa * 4f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa * Licensed under the Apache License, Version 2.0 (the "License"); 5f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa * you may not use this file except in compliance with the License. 6f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa * You may obtain a copy of the License at 7f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa * 8f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa * http://www.apache.org/licenses/LICENSE-2.0 9f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa * 10f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa * Unless required by applicable law or agreed to in writing, software 11f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa * distributed under the License is distributed on an "AS IS" BASIS, 12f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa * See the License for the specific language governing permissions and 14f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa * limitations under the License. 15f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa */ 16f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa 17f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasapackage com.android.inputmethod.latin.utils; 18f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa 19f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasaimport android.test.AndroidTestCase; 20f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasaimport android.test.suitebuilder.annotation.SmallTest; 21f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasaimport android.text.style.SuggestionSpan; 22f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasaimport android.text.style.URLSpan; 23cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaokaimport android.text.SpannableString; 24f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasaimport android.text.SpannableStringBuilder; 25f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasaimport android.text.Spanned; 26cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaokaimport android.text.SpannedString; 27f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa 28f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa@SmallTest 29f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasapublic class SpannableStringUtilsTests extends AndroidTestCase { 30f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa public void testConcatWithSuggestionSpansOnly() { 31f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa SpannableStringBuilder s = new SpannableStringBuilder("test string\ntest string\n" 32f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa + "test string\ntest string\ntest string\ntest string\ntest string\ntest string\n" 33f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa + "test string\ntest string\n"); 34f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa final int N = 10; 35f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa for (int i = 0; i < N; ++i) { 36f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa // Put a PARAGRAPH-flagged span that should not be found in the result. 37f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa s.setSpan(new SuggestionSpan(getContext(), 385f00fe09e9a611b647592188316e5999465df4d3Tadashi G. Takaoka new String[] {"" + i}, Spanned.SPAN_PARAGRAPH), 395f00fe09e9a611b647592188316e5999465df4d3Tadashi G. Takaoka i * 12, i * 12 + 12, Spanned.SPAN_PARAGRAPH); 40f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa // Put a normal suggestion span that should be found in the result. 41f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa s.setSpan(new SuggestionSpan(getContext(), new String[] {"" + i}, 0), i, i * 2, 0); 42f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa // Put a URL span than should not be found in the result. 43f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa s.setSpan(new URLSpan("http://a"), i, i * 2, 0); 44f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa } 45f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa 46f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa final CharSequence a = s.subSequence(0, 15); 47f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa final CharSequence b = s.subSequence(15, s.length()); 48f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa final Spanned result = 49f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa (Spanned)SpannableStringUtils.concatWithNonParagraphSuggestionSpansOnly(a, b); 50f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa 51f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa Object[] spans = result.getSpans(0, result.length(), SuggestionSpan.class); 52f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa for (int i = 0; i < spans.length; i++) { 53f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa final int flags = result.getSpanFlags(spans[i]); 54f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa assertEquals("Should not find a span with PARAGRAPH flag", 555f00fe09e9a611b647592188316e5999465df4d3Tadashi G. Takaoka flags & Spanned.SPAN_PARAGRAPH, 0); 56f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa assertTrue("Should be a SuggestionSpan", spans[i] instanceof SuggestionSpan); 57f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa } 58f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa } 59cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka 60cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka private static void assertSpanCount(final int expectedCount, final CharSequence cs) { 61cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka final int actualCount; 62cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka if (cs instanceof Spanned) { 63cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka final Spanned spanned = (Spanned) cs; 64cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka actualCount = spanned.getSpans(0, spanned.length(), Object.class).length; 65cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka } else { 66cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka actualCount = 0; 67cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka } 68cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals(expectedCount, actualCount); 69cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka } 70cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka 71cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka private static void assertSpan(final CharSequence cs, final Object expectedSpan, 72cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka final int expectedStart, final int expectedEnd, final int expectedFlags) { 73cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertTrue(cs instanceof Spanned); 74cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka final Spanned spanned = (Spanned) cs; 75cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka final Object[] actualSpans = spanned.getSpans(0, spanned.length(), Object.class); 76cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka for (Object actualSpan : actualSpans) { 77cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka if (actualSpan == expectedSpan) { 78cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka final int actualStart = spanned.getSpanStart(actualSpan); 79cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka final int actualEnd = spanned.getSpanEnd(actualSpan); 80cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka final int actualFlags = spanned.getSpanFlags(actualSpan); 81cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals(expectedStart, actualStart); 82cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals(expectedEnd, actualEnd); 83cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals(expectedFlags, actualFlags); 84cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka return; 85cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka } 86cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka } 87cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertTrue(false); 88cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka } 89cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka 90cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka public void testSplitCharSequenceWithSpan() { 91cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // text: " a bcd efg hij " 92cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span1: ^^^^^^^ 93cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span2: ^^^^^ 94cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span3: ^ 95cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka final SpannableString spannableString = new SpannableString(" a bcd efg hij "); 96cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka final Object span1 = new Object(); 97cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka final Object span2 = new Object(); 98cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka final Object span3 = new Object(); 99cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka final int SPAN1_FLAGS = Spanned.SPAN_EXCLUSIVE_EXCLUSIVE; 100cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka final int SPAN2_FLAGS = Spanned.SPAN_EXCLUSIVE_INCLUSIVE; 101cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka final int SPAN3_FLAGS = Spanned.SPAN_INCLUSIVE_INCLUSIVE; 102cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka spannableString.setSpan(span1, 0, 7, SPAN1_FLAGS); 103cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka spannableString.setSpan(span2, 0, 5, SPAN2_FLAGS); 104cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka spannableString.setSpan(span3, 12, 13, SPAN3_FLAGS); 105cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka final CharSequence[] charSequencesFromSpanned = SpannableStringUtils.split( 106cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka spannableString, " ", true /* preserveTrailingEmptySegmengs */); 107cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka final CharSequence[] charSequencesFromString = SpannableStringUtils.split( 108cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka spannableString.toString(), " ", true /* preserveTrailingEmptySegmengs */); 109cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka 110cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka 111cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals(7, charSequencesFromString.length); 112cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals(7, charSequencesFromSpanned.length); 113cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka 114cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // text: "" 115cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span1: ^ 116cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span2: ^ 117cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span3: 118cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals("", charSequencesFromString[0].toString()); 119cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertSpanCount(0, charSequencesFromString[0]); 120cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals("", charSequencesFromSpanned[0].toString()); 121cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertSpanCount(2, charSequencesFromSpanned[0]); 122cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertSpan(charSequencesFromSpanned[0], span1, 0, 0, SPAN1_FLAGS); 123cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertSpan(charSequencesFromSpanned[0], span2, 0, 0, SPAN2_FLAGS); 124cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka 125cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // text: "a" 126cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span1: ^ 127cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span2: ^ 128cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span3: 129cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals("a", charSequencesFromString[1].toString()); 130cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertSpanCount(0, charSequencesFromString[1]); 131cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals("a", charSequencesFromSpanned[1].toString()); 132cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertSpanCount(2, charSequencesFromSpanned[1]); 133cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertSpan(charSequencesFromSpanned[1], span1, 0, 1, SPAN1_FLAGS); 134cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertSpan(charSequencesFromSpanned[1], span2, 0, 1, SPAN2_FLAGS); 135cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka 136cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // text: "bcd" 137cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span1: ^^^ 138cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span2: ^^ 139cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span3: 140cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals("bcd", charSequencesFromString[2].toString()); 141cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertSpanCount(0, charSequencesFromString[2]); 142cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals("bcd", charSequencesFromSpanned[2].toString()); 143cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertSpanCount(2, charSequencesFromSpanned[2]); 144cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertSpan(charSequencesFromSpanned[2], span1, 0, 3, SPAN1_FLAGS); 145cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertSpan(charSequencesFromSpanned[2], span2, 0, 2, SPAN2_FLAGS); 146cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka 147cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // text: "efg" 148cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span1: 149cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span2: 150cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span3: 151cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals("efg", charSequencesFromString[3].toString()); 152cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertSpanCount(0, charSequencesFromString[3]); 153cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals("efg", charSequencesFromSpanned[3].toString()); 154cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertSpanCount(0, charSequencesFromSpanned[3]); 155cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka 156cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // text: "hij" 157cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span1: 158cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span2: 159cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span3: ^ 160cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals("hij", charSequencesFromString[4].toString()); 161cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertSpanCount(0, charSequencesFromString[4]); 162cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals("hij", charSequencesFromSpanned[4].toString()); 163cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertSpanCount(1, charSequencesFromSpanned[4]); 164cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertSpan(charSequencesFromSpanned[4], span3, 1, 2, SPAN3_FLAGS); 165cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka 166cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // text: "" 167cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span1: 168cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span2: 169cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span3: 170cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals("", charSequencesFromString[5].toString()); 171cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertSpanCount(0, charSequencesFromString[5]); 172cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals("", charSequencesFromSpanned[5].toString()); 173cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertSpanCount(0, charSequencesFromSpanned[5]); 174cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka 175cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // text: "" 176cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span1: 177cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span2: 178cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka // span3: 179cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals("", charSequencesFromString[6].toString()); 180cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertSpanCount(0, charSequencesFromString[6]); 181cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals("", charSequencesFromSpanned[6].toString()); 182cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertSpanCount(0, charSequencesFromSpanned[6]); 183cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka } 184cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka 185cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka public void testSplitCharSequencePreserveTrailingEmptySegmengs() { 186cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals(1, SpannableStringUtils.split("", " ", 187cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka false /* preserveTrailingEmptySegmengs */).length); 188cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals(1, SpannableStringUtils.split(new SpannedString(""), " ", 189cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka false /* preserveTrailingEmptySegmengs */).length); 190cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka 191cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals(1, SpannableStringUtils.split("", " ", 192cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka true /* preserveTrailingEmptySegmengs */).length); 193cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals(1, SpannableStringUtils.split(new SpannedString(""), " ", 194cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka true /* preserveTrailingEmptySegmengs */).length); 195cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka 196cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals(0, SpannableStringUtils.split(" ", " ", 197cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka false /* preserveTrailingEmptySegmengs */).length); 198cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals(0, SpannableStringUtils.split(new SpannedString(" "), " ", 199cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka false /* preserveTrailingEmptySegmengs */).length); 200cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka 201cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals(2, SpannableStringUtils.split(" ", " ", 202cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka true /* preserveTrailingEmptySegmengs */).length); 203cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals(2, SpannableStringUtils.split(new SpannedString(" "), " ", 204cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka true /* preserveTrailingEmptySegmengs */).length); 205cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka 206cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals(3, SpannableStringUtils.split("a b c ", " ", 207cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka false /* preserveTrailingEmptySegmengs */).length); 208cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals(3, SpannableStringUtils.split(new SpannedString("a b c "), " ", 209cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka false /* preserveTrailingEmptySegmengs */).length); 210cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka 211cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals(5, SpannableStringUtils.split("a b c ", " ", 212cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka true /* preserveTrailingEmptySegmengs */).length); 213cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals(5, SpannableStringUtils.split(new SpannedString("a b c "), " ", 214cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka true /* preserveTrailingEmptySegmengs */).length); 215cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka 216cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals(6, SpannableStringUtils.split("a b ", " ", 217cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka false /* preserveTrailingEmptySegmengs */).length); 218cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals(6, SpannableStringUtils.split(new SpannedString("a b "), " ", 219cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka false /* preserveTrailingEmptySegmengs */).length); 220cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka 221cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals(7, SpannableStringUtils.split("a b ", " ", 222cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka true /* preserveTrailingEmptySegmengs */).length); 223cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka assertEquals(7, SpannableStringUtils.split(new SpannedString("a b "), " ", 224cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka true /* preserveTrailingEmptySegmengs */).length); 225cae324c561738c946be98e7a2fb4178e1ae08f9eTadashi G. Takaoka } 226f56b82f80961a511765df206eee36229cbee6ed8Ken Wakasa} 227