11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2009 The Guava Authors 31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * you may not use this file except in compliance with the License. 61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * You may obtain a copy of the License at 71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * See the License for the specific language governing permissions and 141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License. 151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.base; 181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 190888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport static org.truth0.Truth.ASSERT; 200888a09821a98ac0680fad765217302858e70fa4Paul Duffin 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.ImmutableList; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.ImmutableMap; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.NullPointerTester; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 270888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.TestCase; 280888a09821a98ac0680fad765217302858e70fa4Paul Duffin 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Iterator; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.List; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.regex.Pattern; 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Julien Silland 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class SplitterTest extends TestCase { 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final Splitter COMMA_SPLITTER = Splitter.on(','); 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSplitNullString() { 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert COMMA_SPLITTER.split(null); 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCharacterSimpleSplit() { 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String simple = "a,b,c"; 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = COMMA_SPLITTER.split(simple); 540888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "b", "c"); 550888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 560888a09821a98ac0680fad765217302858e70fa4Paul Duffin 570888a09821a98ac0680fad765217302858e70fa4Paul Duffin /** 580888a09821a98ac0680fad765217302858e70fa4Paul Duffin * All of the infrastructure of split and splitToString is identical, so we 590888a09821a98ac0680fad765217302858e70fa4Paul Duffin * do one test of splitToString. All other cases should be covered by testing 600888a09821a98ac0680fad765217302858e70fa4Paul Duffin * of split. 610888a09821a98ac0680fad765217302858e70fa4Paul Duffin * 620888a09821a98ac0680fad765217302858e70fa4Paul Duffin * <p>TODO(user): It would be good to make all the relevant tests run on 630888a09821a98ac0680fad765217302858e70fa4Paul Duffin * both split and splitToString automatically. 640888a09821a98ac0680fad765217302858e70fa4Paul Duffin */ 650888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testCharacterSimpleSplitToList() { 660888a09821a98ac0680fad765217302858e70fa4Paul Duffin String simple = "a,b,c"; 670888a09821a98ac0680fad765217302858e70fa4Paul Duffin List<String> letters = COMMA_SPLITTER.splitToList(simple); 680888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "b", "c"); 697dd252788645e940eada959bdde927426e2531c9Paul Duffin } 707dd252788645e940eada959bdde927426e2531c9Paul Duffin 717dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testToString() { 727dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals("[]", Splitter.on(',').split("").toString()); 737dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals("[a, b, c]", Splitter.on(',').split("a,b,c").toString()); 747dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals("[yam, bam, jam, ham]", Splitter.on(", ").split("yam, bam, jam, ham").toString()); 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCharacterSimpleSplitWithNoDelimiter() { 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String simple = "a,b,c"; 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.on('.').split(simple); 800888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a,b,c"); 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCharacterSplitWithDoubleDelimiter() { 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String doubled = "a,,b,c"; 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = COMMA_SPLITTER.split(doubled); 860888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "", "b", "c"); 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCharacterSplitWithDoubleDelimiterAndSpace() { 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String doubled = "a,, b,c"; 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = COMMA_SPLITTER.split(doubled); 920888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "", " b", "c"); 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCharacterSplitWithTrailingDelimiter() { 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String trailing = "a,b,c,"; 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = COMMA_SPLITTER.split(trailing); 980888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "b", "c", ""); 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCharacterSplitWithLeadingDelimiter() { 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String leading = ",a,b,c"; 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = COMMA_SPLITTER.split(leading); 1040888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("", "a", "b", "c"); 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCharacterSplitWithMulitpleLetters() { 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> testCharacteringMotto = Splitter.on('-').split( 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "Testing-rocks-Debugging-sucks"); 1100888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(testCharacteringMotto).iteratesOverSequence( 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "Testing", "rocks", "Debugging", "sucks"); 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCharacterSplitWithMatcherDelimiter() { 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> testCharacteringMotto = Splitter 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .on(CharMatcher.WHITESPACE) 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .split("Testing\nrocks\tDebugging sucks"); 1180888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(testCharacteringMotto).iteratesOverSequence( 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "Testing", "rocks", "Debugging", "sucks"); 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCharacterSplitWithDoubleDelimiterOmitEmptyStrings() { 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String doubled = "a..b.c"; 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.on('.') 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .omitEmptyStrings().split(doubled); 1260888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "b", "c"); 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCharacterSplitEmptyToken() { 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String emptyToken = "a. .c"; 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.on('.').trimResults() 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .split(emptyToken); 1330888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "", "c"); 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCharacterSplitEmptyTokenOmitEmptyStrings() { 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String emptyToken = "a. .c"; 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.on('.') 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .omitEmptyStrings().trimResults().split(emptyToken); 1400888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "c"); 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCharacterSplitOnEmptyString() { 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> nothing = Splitter.on('.').split(""); 1450888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(nothing).iteratesOverSequence(""); 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCharacterSplitOnEmptyStringOmitEmptyStrings() { 1490888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(Splitter.on('.').omitEmptyStrings().split("")).isEmpty(); 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCharacterSplitOnOnlyDelimiter() { 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> blankblank = Splitter.on('.').split("."); 1540888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(blankblank).iteratesOverSequence("", ""); 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCharacterSplitOnOnlyDelimitersOmitEmptyStrings() { 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> empty = Splitter.on('.').omitEmptyStrings().split("..."); 1590888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(empty).isEmpty(); 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCharacterSplitWithTrim() { 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String jacksons = "arfo(Marlon)aorf, (Michael)orfa, afro(Jackie)orfa, " 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert + "ofar(Jemaine), aff(Tito)"; 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> family = COMMA_SPLITTER 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .trimResults(CharMatcher.anyOf("afro").or(CharMatcher.WHITESPACE)) 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .split(jacksons); 1680888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(family).iteratesOverSequence( 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "(Marlon)", "(Michael)", "(Jackie)", "(Jemaine)", "(Tito)"); 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testStringSimpleSplit() { 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String simple = "a,b,c"; 1747dd252788645e940eada959bdde927426e2531c9Paul Duffin Iterable<String> letters = Splitter.on(',').split(simple); 1750888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "b", "c"); 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testStringSimpleSplitWithNoDelimiter() { 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String simple = "a,b,c"; 1807dd252788645e940eada959bdde927426e2531c9Paul Duffin Iterable<String> letters = Splitter.on('.').split(simple); 1810888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a,b,c"); 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testStringSplitWithDoubleDelimiter() { 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String doubled = "a,,b,c"; 1867dd252788645e940eada959bdde927426e2531c9Paul Duffin Iterable<String> letters = Splitter.on(',').split(doubled); 1870888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "", "b", "c"); 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testStringSplitWithDoubleDelimiterAndSpace() { 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String doubled = "a,, b,c"; 1927dd252788645e940eada959bdde927426e2531c9Paul Duffin Iterable<String> letters = Splitter.on(',').split(doubled); 1930888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "", " b", "c"); 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testStringSplitWithTrailingDelimiter() { 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String trailing = "a,b,c,"; 1987dd252788645e940eada959bdde927426e2531c9Paul Duffin Iterable<String> letters = Splitter.on(',').split(trailing); 1990888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "b", "c", ""); 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testStringSplitWithLeadingDelimiter() { 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String leading = ",a,b,c"; 2047dd252788645e940eada959bdde927426e2531c9Paul Duffin Iterable<String> letters = Splitter.on(',').split(leading); 2050888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("", "a", "b", "c"); 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testStringSplitWithMultipleLetters() { 2097dd252788645e940eada959bdde927426e2531c9Paul Duffin Iterable<String> testStringingMotto = Splitter.on('-').split( 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "Testing-rocks-Debugging-sucks"); 2110888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(testStringingMotto).iteratesOverSequence( 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "Testing", "rocks", "Debugging", "sucks"); 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testStringSplitWithDoubleDelimiterOmitEmptyStrings() { 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String doubled = "a..b.c"; 2177dd252788645e940eada959bdde927426e2531c9Paul Duffin Iterable<String> letters = Splitter.on('.') 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .omitEmptyStrings().split(doubled); 2190888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "b", "c"); 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testStringSplitEmptyToken() { 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String emptyToken = "a. .c"; 2247dd252788645e940eada959bdde927426e2531c9Paul Duffin Iterable<String> letters = Splitter.on('.').trimResults() 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .split(emptyToken); 2260888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "", "c"); 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testStringSplitEmptyTokenOmitEmptyStrings() { 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String emptyToken = "a. .c"; 2317dd252788645e940eada959bdde927426e2531c9Paul Duffin Iterable<String> letters = Splitter.on('.') 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .omitEmptyStrings().trimResults().split(emptyToken); 2330888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "c"); 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testStringSplitWithLongDelimiter() { 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String longDelimiter = "a, b, c"; 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.on(", ").split(longDelimiter); 2390888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "b", "c"); 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testStringSplitWithLongLeadingDelimiter() { 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String longDelimiter = ", a, b, c"; 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.on(", ").split(longDelimiter); 2450888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("", "a", "b", "c"); 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testStringSplitWithLongTrailingDelimiter() { 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String longDelimiter = "a, b, c, "; 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.on(", ").split(longDelimiter); 2510888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "b", "c", ""); 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testStringSplitWithDelimiterSubstringInValue() { 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String fourCommasAndFourSpaces = ",,,, "; 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> threeCommasThenThreeSpaces = Splitter.on(", ").split( 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fourCommasAndFourSpaces); 2580888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(threeCommasThenThreeSpaces).iteratesOverSequence(",,,", " "); 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testStringSplitWithEmptyString() { 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Splitter.on(""); 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testStringSplitOnEmptyString() { 2707dd252788645e940eada959bdde927426e2531c9Paul Duffin Iterable<String> notMuch = Splitter.on('.').split(""); 2710888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(notMuch).iteratesOverSequence(""); 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testStringSplitOnEmptyStringOmitEmptyString() { 2750888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(Splitter.on('.').omitEmptyStrings().split("")).isEmpty(); 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testStringSplitOnOnlyDelimiter() { 2797dd252788645e940eada959bdde927426e2531c9Paul Duffin Iterable<String> blankblank = Splitter.on('.').split("."); 2800888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(blankblank).iteratesOverSequence("", ""); 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testStringSplitOnOnlyDelimitersOmitEmptyStrings() { 2847dd252788645e940eada959bdde927426e2531c9Paul Duffin Iterable<String> empty = Splitter.on('.').omitEmptyStrings().split("..."); 2850888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(empty).isEmpty(); 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testStringSplitWithTrim() { 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String jacksons = "arfo(Marlon)aorf, (Michael)orfa, afro(Jackie)orfa, " 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert + "ofar(Jemaine), aff(Tito)"; 2917dd252788645e940eada959bdde927426e2531c9Paul Duffin Iterable<String> family = Splitter.on(',') 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .trimResults(CharMatcher.anyOf("afro").or(CharMatcher.WHITESPACE)) 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .split(jacksons); 2940888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(family).iteratesOverSequence( 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "(Marlon)", "(Michael)", "(Jackie)", "(Jemaine)", "(Tito)"); 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("Splitter.onPattern") 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPatternSimpleSplit() { 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String simple = "a,b,c"; 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.onPattern(",").split(simple); 3020888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "b", "c"); 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("Splitter.onPattern") 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPatternSimpleSplitWithNoDelimiter() { 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String simple = "a,b,c"; 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.onPattern("foo").split(simple); 3090888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a,b,c"); 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("Splitter.onPattern") 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPatternSplitWithDoubleDelimiter() { 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String doubled = "a,,b,c"; 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.onPattern(",").split(doubled); 3160888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "", "b", "c"); 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("Splitter.onPattern") 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPatternSplitWithDoubleDelimiterAndSpace() { 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String doubled = "a,, b,c"; 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.onPattern(",").split(doubled); 3230888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "", " b", "c"); 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("Splitter.onPattern") 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPatternSplitWithTrailingDelimiter() { 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String trailing = "a,b,c,"; 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.onPattern(",").split(trailing); 3300888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "b", "c", ""); 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("Splitter.onPattern") 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPatternSplitWithLeadingDelimiter() { 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String leading = ",a,b,c"; 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.onPattern(",").split(leading); 3370888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("", "a", "b", "c"); 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // TODO(kevinb): the name of this method suggests it might not actually be testing what it 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // intends to be testing? 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("Splitter.onPattern") 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPatternSplitWithMultipleLetters() { 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> testPatterningMotto = Splitter.onPattern("-").split( 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "Testing-rocks-Debugging-sucks"); 3460888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(testPatterningMotto).iteratesOverSequence("Testing", "rocks", "Debugging", "sucks"); 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("java.util.regex.Pattern") 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static Pattern literalDotPattern() { 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Pattern.compile("\\."); 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("java.util.regex.Pattern") 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPatternSplitWithDoubleDelimiterOmitEmptyStrings() { 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String doubled = "a..b.c"; 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.on(literalDotPattern()) 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .omitEmptyStrings().split(doubled); 3590888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "b", "c"); 3607dd252788645e940eada959bdde927426e2531c9Paul Duffin } 3617dd252788645e940eada959bdde927426e2531c9Paul Duffin 3627dd252788645e940eada959bdde927426e2531c9Paul Duffin @GwtIncompatible("java.util.regex.Pattern") 3637dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testPatternSplitLookBehind() { 3647dd252788645e940eada959bdde927426e2531c9Paul Duffin String toSplit = ":foo::barbaz:"; 3657dd252788645e940eada959bdde927426e2531c9Paul Duffin String regexPattern = "(?<=:)"; 3667dd252788645e940eada959bdde927426e2531c9Paul Duffin Iterable<String> split = Splitter.onPattern(regexPattern).split(toSplit); 3670888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(split).iteratesOverSequence(":", "foo:", ":", "barbaz:"); 3687dd252788645e940eada959bdde927426e2531c9Paul Duffin // splits into chunks ending in : 3697dd252788645e940eada959bdde927426e2531c9Paul Duffin } 3707dd252788645e940eada959bdde927426e2531c9Paul Duffin 3717dd252788645e940eada959bdde927426e2531c9Paul Duffin @GwtIncompatible("java.util.regex.Pattern") 3727dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testPatternSplitWordBoundary() { 3737dd252788645e940eada959bdde927426e2531c9Paul Duffin String string = "foo<bar>bletch"; 3747dd252788645e940eada959bdde927426e2531c9Paul Duffin Iterable<String> words = Splitter.on(Pattern.compile("\\b")).split(string); 3750888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(words).iteratesOverSequence("foo", "<", "bar", ">", "bletch"); 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("java.util.regex.Pattern") 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPatternSplitEmptyToken() { 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String emptyToken = "a. .c"; 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.on(literalDotPattern()).trimResults().split(emptyToken); 3820888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "", "c"); 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("java.util.regex.Pattern") 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPatternSplitEmptyTokenOmitEmptyStrings() { 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String emptyToken = "a. .c"; 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.on(literalDotPattern()) 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .omitEmptyStrings().trimResults().split(emptyToken); 3900888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "c"); 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("java.util.regex.Pattern") 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPatternSplitOnOnlyDelimiter() { 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> blankblank = Splitter.on(literalDotPattern()).split("."); 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3970888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(blankblank).iteratesOverSequence("", ""); 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("java.util.regex.Pattern") 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPatternSplitOnOnlyDelimitersOmitEmptyStrings() { 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> empty = Splitter.on(literalDotPattern()).omitEmptyStrings() 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .split("..."); 4040888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(empty).isEmpty(); 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("java.util.regex.Pattern") 4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPatternSplitMatchingIsGreedy() { 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String longDelimiter = "a, b, c"; 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.on(Pattern.compile(",\\s*")) 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .split(longDelimiter); 4120888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "b", "c"); 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("java.util.regex.Pattern") 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPatternSplitWithLongLeadingDelimiter() { 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String longDelimiter = ", a, b, c"; 4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.on(Pattern.compile(", ")) 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .split(longDelimiter); 4200888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("", "a", "b", "c"); 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("java.util.regex.Pattern") 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPatternSplitWithLongTrailingDelimiter() { 4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String longDelimiter = "a, b, c/ "; 4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.on(Pattern.compile("[,/]\\s")) 4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .split(longDelimiter); 4280888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "b", "c", ""); 4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("java.util.regex.Pattern") 4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPatternSplitInvalidPattern() { 4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Splitter.on(Pattern.compile("a*")); 4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("java.util.regex.Pattern") 4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPatternSplitWithTrim() { 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String jacksons = "arfo(Marlon)aorf, (Michael)orfa, afro(Jackie)orfa, " 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert + "ofar(Jemaine), aff(Tito)"; 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> family = Splitter.on(Pattern.compile(",")) 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .trimResults(CharMatcher.anyOf("afro").or(CharMatcher.WHITESPACE)) 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .split(jacksons); 4470888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(family).iteratesOverSequence( 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "(Marlon)", "(Michael)", "(Jackie)", "(Jemaine)", "(Tito)"); 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSplitterIterableIsUnmodifiable_char() { 4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertIteratorIsUnmodifiable(COMMA_SPLITTER.split("a,b").iterator()); 4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSplitterIterableIsUnmodifiable_string() { 4567dd252788645e940eada959bdde927426e2531c9Paul Duffin assertIteratorIsUnmodifiable(Splitter.on(',').split("a,b").iterator()); 4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("java.util.regex.Pattern") 4601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSplitterIterableIsUnmodifiable_pattern() { 4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertIteratorIsUnmodifiable( 4621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Splitter.on(Pattern.compile(",")).split("a,b").iterator()); 4631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void assertIteratorIsUnmodifiable(Iterator<?> iterator) { 4661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.next(); 4671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 4691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) { 4711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSplitterIterableIsLazy_char() { 4751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSplitterIterableIsLazy(COMMA_SPLITTER); 4761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSplitterIterableIsLazy_string() { 4797dd252788645e940eada959bdde927426e2531c9Paul Duffin assertSplitterIterableIsLazy(Splitter.on(',')); 4801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("java.util.regex.Pattern") 4831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSplitterIterableIsLazy_pattern() { 4841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSplitterIterableIsLazy(Splitter.onPattern(",")); 4851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 4881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * This test really pushes the boundaries of what we support. In general the 4891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * splitter's behaviour is not well defined if the char sequence it's 4901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * splitting is mutated during iteration. 4911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 4921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void assertSplitterIterableIsLazy(Splitter splitter) { 4931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert StringBuilder builder = new StringBuilder(); 4941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = splitter.split(builder).iterator(); 4951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.append("A,"); 4971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("A", iterator.next()); 4981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.append("B,"); 4991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("B", iterator.next()); 5001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.append("C"); 5011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("C", iterator.next()); 5021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 5031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5057dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testFixedLengthSimpleSplit() { 5061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String simple = "abcde"; 5071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.fixedLength(2).split(simple); 5080888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("ab", "cd", "e"); 5091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5117dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testFixedLengthSplitEqualChunkLength() { 5121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String simple = "abcdef"; 5131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.fixedLength(2).split(simple); 5140888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("ab", "cd", "ef"); 5151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5177dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testFixedLengthSplitOnlyOneChunk() { 5181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String simple = "abc"; 5191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.fixedLength(3).split(simple); 5200888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("abc"); 5211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5237dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testFixedLengthSplitSmallerString() { 5241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String simple = "ab"; 5251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.fixedLength(3).split(simple); 5260888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("ab"); 5271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5297dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testFixedLengthSplitEmptyString() { 5301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String simple = ""; 5311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.fixedLength(3).split(simple); 5320888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence(""); 5331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5357dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testFixedLengthSplitEmptyStringWithOmitEmptyStrings() { 5360888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(Splitter.fixedLength(3).omitEmptyStrings().split("")).isEmpty(); 5371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5397dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testFixedLengthSplitIntoChars() { 5401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String simple = "abcd"; 5411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.fixedLength(1).split(simple); 5420888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "b", "c", "d"); 5431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5457dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testFixedLengthSplitZeroChunkLen() { 5461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 5471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Splitter.fixedLength(0); 5481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 5491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 5501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5537dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testFixedLengthSplitNegativeChunkLen() { 5541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 5551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Splitter.fixedLength(-1); 5561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 5571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 5581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLimitLarge() { 5621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String simple = "abcd"; 5631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.fixedLength(1).limit(100).split(simple); 5640888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "b", "c", "d"); 5651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLimitOne() { 5681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String simple = "abcd"; 5691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.fixedLength(1).limit(1).split(simple); 5700888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("abcd"); 5711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLimitFixedLength() { 5741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String simple = "abcd"; 5751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> letters = Splitter.fixedLength(1).limit(2).split(simple); 5760888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(letters).iteratesOverSequence("a", "bcd"); 5771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLimitSeparator() { 5801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String simple = "a,b,c,d"; 5811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> items = COMMA_SPLITTER.limit(2).split(simple); 5820888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(items).iteratesOverSequence("a", "b,c,d"); 5831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLimitExtraSeparators() { 5861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String text = "a,,,b,,c,d"; 5871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> items = COMMA_SPLITTER.limit(2).split(text); 5880888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(items).iteratesOverSequence("a", ",,b,,c,d"); 5891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLimitExtraSeparatorsOmitEmpty() { 5921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String text = "a,,,b,,c,d"; 5931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> items = COMMA_SPLITTER.limit(2).omitEmptyStrings().split(text); 5940888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(items).iteratesOverSequence("a", "b,,c,d"); 5951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLimitExtraSeparatorsOmitEmpty3() { 5981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String text = "a,,,b,,c,d"; 5991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> items = COMMA_SPLITTER.limit(3).omitEmptyStrings().split(text); 6000888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(items).iteratesOverSequence("a", "b", "c,d"); 6011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLimitExtraSeparatorsTrim() { 6041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String text = ",,a,, , b ,, c,d "; 6051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> items = COMMA_SPLITTER.limit(2).omitEmptyStrings().trimResults().split(text); 6060888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(items).iteratesOverSequence("a", "b ,, c,d"); 6071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLimitExtraSeparatorsTrim3() { 6101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String text = ",,a,, , b ,, c,d "; 6111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> items = COMMA_SPLITTER.limit(3).omitEmptyStrings().trimResults().split(text); 6120888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(items).iteratesOverSequence("a", "b", "c,d"); 6131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLimitExtraSeparatorsTrim1() { 6161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String text = ",,a,, , b ,, c,d "; 6171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> items = COMMA_SPLITTER.limit(1).omitEmptyStrings().trimResults().split(text); 6180888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(items).iteratesOverSequence("a,, , b ,, c,d"); 6191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLimitExtraSeparatorsTrim1NoOmit() { 6221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String text = ",,a,, , b ,, c,d "; 6231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> items = COMMA_SPLITTER.limit(1).trimResults().split(text); 6240888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(items).iteratesOverSequence(",,a,, , b ,, c,d"); 6251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLimitExtraSeparatorsTrim1Empty() { 6281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String text = ""; 6291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> items = COMMA_SPLITTER.limit(1).split(text); 6300888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(items).iteratesOverSequence(""); 6311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLimitExtraSeparatorsTrim1EmptyOmit() { 6341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String text = ""; 6351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<String> items = COMMA_SPLITTER.omitEmptyStrings().limit(1).split(text); 6360888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(items).isEmpty(); 6371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6390888a09821a98ac0680fad765217302858e70fa4Paul Duffin @SuppressWarnings("ReturnValueIgnored") // testing for exception 6401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testInvalidZeroLimit() { 6411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 6421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert COMMA_SPLITTER.limit(0); 6431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 6441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 6451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("NullPointerTester") 6497dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testNullPointers() { 6501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert NullPointerTester tester = new NullPointerTester(); 6511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicStaticMethods(Splitter.class); 6527dd252788645e940eada959bdde927426e2531c9Paul Duffin tester.testAllPublicInstanceMethods(Splitter.on(',')); 6537dd252788645e940eada959bdde927426e2531c9Paul Duffin tester.testAllPublicInstanceMethods(Splitter.on(',').trimResults()); 6541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6560888a09821a98ac0680fad765217302858e70fa4Paul Duffin private static <E> List<E> asList(Collection<E> collection) { 6571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableList.copyOf(collection); 6581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMapSplitter_trimmedBoth() { 6611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, String> m = COMMA_SPLITTER 6621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .trimResults() 6631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withKeyValueSeparator(Splitter.on(':').trimResults()) 6641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .split("boy : tom , girl: tina , cat : kitty , dog: tommy "); 6651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap<String, String> expected = 6661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of("boy", "tom", "girl", "tina", "cat", "kitty", "dog", "tommy"); 6670888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(m).isEqualTo(expected); 6680888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(asList(m.entrySet())).is(asList(expected.entrySet())); 6691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMapSplitter_trimmedEntries() { 6721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, String> m = COMMA_SPLITTER 6731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .trimResults() 6741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withKeyValueSeparator(":") 6751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .split("boy : tom , girl: tina , cat : kitty , dog: tommy "); 6761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap<String, String> expected = 6771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of("boy ", " tom", "girl", " tina", "cat ", " kitty", "dog", " tommy"); 6781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6790888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(m).isEqualTo(expected); 6800888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(asList(m.entrySet())).is(asList(expected.entrySet())); 6811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMapSplitter_trimmedKeyValue() { 6841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, String> m = 6851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert COMMA_SPLITTER.withKeyValueSeparator(Splitter.on(':').trimResults()).split( 6861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "boy : tom , girl: tina , cat : kitty , dog: tommy "); 6871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap<String, String> expected = 6881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of("boy", "tom", "girl", "tina", "cat", "kitty", "dog", "tommy"); 6890888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(m).isEqualTo(expected); 6900888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(asList(m.entrySet())).is(asList(expected.entrySet())); 6911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMapSplitter_notTrimmed() { 6941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, String> m = COMMA_SPLITTER.withKeyValueSeparator(":").split( 6951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert " boy:tom , girl: tina , cat :kitty , dog: tommy "); 6961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap<String, String> expected = 6971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of(" boy", "tom ", " girl", " tina ", " cat ", "kitty ", " dog", " tommy "); 6980888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(m).isEqualTo(expected); 6990888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(asList(m.entrySet())).is(asList(expected.entrySet())); 7007dd252788645e940eada959bdde927426e2531c9Paul Duffin } 7017dd252788645e940eada959bdde927426e2531c9Paul Duffin 7027dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testMapSplitter_CharacterSeparator() { 7037dd252788645e940eada959bdde927426e2531c9Paul Duffin // try different delimiters. 7047dd252788645e940eada959bdde927426e2531c9Paul Duffin Map<String, String> m = Splitter 7057dd252788645e940eada959bdde927426e2531c9Paul Duffin .on(",") 7067dd252788645e940eada959bdde927426e2531c9Paul Duffin .withKeyValueSeparator(':') 7077dd252788645e940eada959bdde927426e2531c9Paul Duffin .split("boy:tom,girl:tina,cat:kitty,dog:tommy"); 7087dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableMap<String, String> expected = 7097dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableMap.of("boy", "tom", "girl", "tina", "cat", "kitty", "dog", "tommy"); 7107dd252788645e940eada959bdde927426e2531c9Paul Duffin 7110888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(m).isEqualTo(expected); 7120888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(asList(m.entrySet())).is(asList(expected.entrySet())); 7131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMapSplitter_multiCharacterSeparator() { 7161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // try different delimiters. 7171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, String> m = Splitter 7181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .on(",") 7191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withKeyValueSeparator(":^&") 7201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .split("boy:^&tom,girl:^&tina,cat:^&kitty,dog:^&tommy"); 7211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap<String, String> expected = 7221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of("boy", "tom", "girl", "tina", "cat", "kitty", "dog", "tommy"); 7231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7240888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(m).isEqualTo(expected); 7250888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(asList(m.entrySet())).is(asList(expected.entrySet())); 7261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7280888a09821a98ac0680fad765217302858e70fa4Paul Duffin @SuppressWarnings("ReturnValueIgnored") // testing for exception 7291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMapSplitter_emptySeparator() { 7301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 7311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert COMMA_SPLITTER.withKeyValueSeparator(""); 7321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 7331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 7341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMapSplitter_malformedEntry() { 7381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 7391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert COMMA_SPLITTER.withKeyValueSeparator("=").split("a=1,b,c=2"); 7401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 7410888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (IllegalArgumentException expected) { 7421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMapSplitter_orderedResults() { 7467dd252788645e940eada959bdde927426e2531c9Paul Duffin Map<String, String> m = Splitter.on(',') 7471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withKeyValueSeparator(":") 7481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .split("boy:tom,girl:tina,cat:kitty,dog:tommy"); 7491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7500888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(m.keySet()).iteratesOverSequence("boy", "girl", "cat", "dog"); 7510888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(m).isEqualTo( 7521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of("boy", "tom", "girl", "tina", "cat", "kitty", "dog", "tommy")); 7531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // try in a different order 7557dd252788645e940eada959bdde927426e2531c9Paul Duffin m = Splitter.on(',') 7561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withKeyValueSeparator(":") 7571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .split("girl:tina,boy:tom,dog:tommy,cat:kitty"); 7581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7590888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(m.keySet()).iteratesOverSequence("girl", "boy", "dog", "cat"); 7600888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(m).isEqualTo( 7611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of("boy", "tom", "girl", "tina", "cat", "kitty", "dog", "tommy")); 7621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMapSplitter_duplicateKeys() { 7651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 7667dd252788645e940eada959bdde927426e2531c9Paul Duffin Splitter.on(',').withKeyValueSeparator(":").split("a:1,b:2,a:3"); 7671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 7681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 7691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 772