blob: e5159fb109f6e74fdfd1f57314f8f3515bb7c215 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.commons.lang2;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import junit.textui.TestRunner;
/**
* Unit tests {@link org.apache.commons.lang2.StringUtils} - Substring methods
*
* @author <a href="mailto:scolebourne@joda.org">Stephen Colebourne</a>
* @author <a href="mailto:ridesmet@users.sourceforge.net">Ringo De Smet</a>
* @author Phil Steitz
* @version $Id$
*/
public class StringUtilsSubstringTest extends TestCase {
private static final String FOO = "foo";
private static final String BAR = "bar";
private static final String BAZ = "baz";
private static final String FOOBAR = "foobar";
private static final String SENTENCE = "foo bar baz";
public StringUtilsSubstringTest(String name) {
super(name);
}
public static void main(String[] args) {
TestRunner.run(suite());
}
public static Test suite() {
TestSuite suite = new TestSuite(StringUtilsSubstringTest.class);
suite.setName("StringUtilsSubstring Tests");
return suite;
}
protected void setUp() throws Exception {
super.setUp();
}
protected void tearDown() throws Exception {
super.tearDown();
}
//-----------------------------------------------------------------------
public void testSubstring_StringInt() {
assertEquals(null, StringUtils.substring(null, 0));
assertEquals("", StringUtils.substring("", 0));
assertEquals("", StringUtils.substring("", 2));
assertEquals("", StringUtils.substring(SENTENCE, 80));
assertEquals(BAZ, StringUtils.substring(SENTENCE, 8));
assertEquals(BAZ, StringUtils.substring(SENTENCE, -3));
assertEquals(SENTENCE, StringUtils.substring(SENTENCE, 0));
assertEquals("abc", StringUtils.substring("abc", -4));
assertEquals("abc", StringUtils.substring("abc", -3));
assertEquals("bc", StringUtils.substring("abc", -2));
assertEquals("c", StringUtils.substring("abc", -1));
assertEquals("abc", StringUtils.substring("abc", 0));
assertEquals("bc", StringUtils.substring("abc", 1));
assertEquals("c", StringUtils.substring("abc", 2));
assertEquals("", StringUtils.substring("abc", 3));
assertEquals("", StringUtils.substring("abc", 4));
}
public void testSubstring_StringIntInt() {
assertEquals(null, StringUtils.substring(null, 0, 0));
assertEquals(null, StringUtils.substring(null, 1, 2));
assertEquals("", StringUtils.substring("", 0, 0));
assertEquals("", StringUtils.substring("", 1, 2));
assertEquals("", StringUtils.substring("", -2, -1));
assertEquals("", StringUtils.substring(SENTENCE, 8, 6));
assertEquals(FOO, StringUtils.substring(SENTENCE, 0, 3));
assertEquals("o", StringUtils.substring(SENTENCE, -9, 3));
assertEquals(FOO, StringUtils.substring(SENTENCE, 0, -8));
assertEquals("o", StringUtils.substring(SENTENCE, -9, -8));
assertEquals(SENTENCE, StringUtils.substring(SENTENCE, 0, 80));
assertEquals("", StringUtils.substring(SENTENCE, 2, 2));
assertEquals("b",StringUtils.substring("abc", -2, -1));
}
public void testLeft_String() {
assertSame(null, StringUtils.left(null, -1));
assertSame(null, StringUtils.left(null, 0));
assertSame(null, StringUtils.left(null, 2));
assertEquals("", StringUtils.left("", -1));
assertEquals("", StringUtils.left("", 0));
assertEquals("", StringUtils.left("", 2));
assertEquals("", StringUtils.left(FOOBAR, -1));
assertEquals("", StringUtils.left(FOOBAR, 0));
assertEquals(FOO, StringUtils.left(FOOBAR, 3));
assertSame(FOOBAR, StringUtils.left(FOOBAR, 80));
}
public void testRight_String() {
assertSame(null, StringUtils.right(null, -1));
assertSame(null, StringUtils.right(null, 0));
assertSame(null, StringUtils.right(null, 2));
assertEquals("", StringUtils.right("", -1));
assertEquals("", StringUtils.right("", 0));
assertEquals("", StringUtils.right("", 2));
assertEquals("", StringUtils.right(FOOBAR, -1));
assertEquals("", StringUtils.right(FOOBAR, 0));
assertEquals(BAR, StringUtils.right(FOOBAR, 3));
assertSame(FOOBAR, StringUtils.right(FOOBAR, 80));
}
public void testMid_String() {
assertSame(null, StringUtils.mid(null, -1, 0));
assertSame(null, StringUtils.mid(null, 0, -1));
assertSame(null, StringUtils.mid(null, 3, 0));
assertSame(null, StringUtils.mid(null, 3, 2));
assertEquals("", StringUtils.mid("", 0, -1));
assertEquals("", StringUtils.mid("", 0, 0));
assertEquals("", StringUtils.mid("", 0, 2));
assertEquals("", StringUtils.mid(FOOBAR, 3, -1));
assertEquals("", StringUtils.mid(FOOBAR, 3, 0));
assertEquals("b", StringUtils.mid(FOOBAR, 3, 1));
assertEquals(FOO, StringUtils.mid(FOOBAR, 0, 3));
assertEquals(BAR, StringUtils.mid(FOOBAR, 3, 3));
assertEquals(FOOBAR, StringUtils.mid(FOOBAR, 0, 80));
assertEquals(BAR, StringUtils.mid(FOOBAR, 3, 80));
assertEquals("", StringUtils.mid(FOOBAR, 9, 3));
assertEquals(FOO, StringUtils.mid(FOOBAR, -1, 3));
}
//-----------------------------------------------------------------------
public void testSubstringBefore_StringString() {
assertEquals("foo", StringUtils.substringBefore("fooXXbarXXbaz", "XX"));
assertEquals(null, StringUtils.substringBefore(null, null));
assertEquals(null, StringUtils.substringBefore(null, ""));
assertEquals(null, StringUtils.substringBefore(null, "XX"));
assertEquals("", StringUtils.substringBefore("", null));
assertEquals("", StringUtils.substringBefore("", ""));
assertEquals("", StringUtils.substringBefore("", "XX"));
assertEquals("foo", StringUtils.substringBefore("foo", null));
assertEquals("foo", StringUtils.substringBefore("foo", "b"));
assertEquals("f", StringUtils.substringBefore("foot", "o"));
assertEquals("", StringUtils.substringBefore("abc", "a"));
assertEquals("a", StringUtils.substringBefore("abcba", "b"));
assertEquals("ab", StringUtils.substringBefore("abc", "c"));
assertEquals("", StringUtils.substringBefore("abc", ""));
}
public void testSubstringAfter_StringString() {
assertEquals("barXXbaz", StringUtils.substringAfter("fooXXbarXXbaz", "XX"));
assertEquals(null, StringUtils.substringAfter(null, null));
assertEquals(null, StringUtils.substringAfter(null, ""));
assertEquals(null, StringUtils.substringAfter(null, "XX"));
assertEquals("", StringUtils.substringAfter("", null));
assertEquals("", StringUtils.substringAfter("", ""));
assertEquals("", StringUtils.substringAfter("", "XX"));
assertEquals("", StringUtils.substringAfter("foo", null));
assertEquals("ot", StringUtils.substringAfter("foot", "o"));
assertEquals("bc", StringUtils.substringAfter("abc", "a"));
assertEquals("cba", StringUtils.substringAfter("abcba", "b"));
assertEquals("", StringUtils.substringAfter("abc", "c"));
assertEquals("abc", StringUtils.substringAfter("abc", ""));
assertEquals("", StringUtils.substringAfter("abc", "d"));
}
public void testSubstringBeforeLast_StringString() {
assertEquals("fooXXbar", StringUtils.substringBeforeLast("fooXXbarXXbaz", "XX"));
assertEquals(null, StringUtils.substringBeforeLast(null, null));
assertEquals(null, StringUtils.substringBeforeLast(null, ""));
assertEquals(null, StringUtils.substringBeforeLast(null, "XX"));
assertEquals("", StringUtils.substringBeforeLast("", null));
assertEquals("", StringUtils.substringBeforeLast("", ""));
assertEquals("", StringUtils.substringBeforeLast("", "XX"));
assertEquals("foo", StringUtils.substringBeforeLast("foo", null));
assertEquals("foo", StringUtils.substringBeforeLast("foo", "b"));
assertEquals("fo", StringUtils.substringBeforeLast("foo", "o"));
assertEquals("abc\r\n", StringUtils.substringBeforeLast("abc\r\n", "d"));
assertEquals("abc", StringUtils.substringBeforeLast("abcdabc", "d"));
assertEquals("abcdabc", StringUtils.substringBeforeLast("abcdabcd", "d"));
assertEquals("a", StringUtils.substringBeforeLast("abc", "b"));
assertEquals("abc ", StringUtils.substringBeforeLast("abc \n", "\n"));
assertEquals("a", StringUtils.substringBeforeLast("a", null));
assertEquals("a", StringUtils.substringBeforeLast("a", ""));
assertEquals("", StringUtils.substringBeforeLast("a", "a"));
}
public void testSubstringAfterLast_StringString() {
assertEquals("baz", StringUtils.substringAfterLast("fooXXbarXXbaz", "XX"));
assertEquals(null, StringUtils.substringAfterLast(null, null));
assertEquals(null, StringUtils.substringAfterLast(null, ""));
assertEquals(null, StringUtils.substringAfterLast(null, "XX"));
assertEquals("", StringUtils.substringAfterLast("", null));
assertEquals("", StringUtils.substringAfterLast("", ""));
assertEquals("", StringUtils.substringAfterLast("", "a"));
assertEquals("", StringUtils.substringAfterLast("foo", null));
assertEquals("", StringUtils.substringAfterLast("foo", "b"));
assertEquals("t", StringUtils.substringAfterLast("foot", "o"));
assertEquals("bc", StringUtils.substringAfterLast("abc", "a"));
assertEquals("a", StringUtils.substringAfterLast("abcba", "b"));
assertEquals("", StringUtils.substringAfterLast("abc", "c"));
assertEquals("", StringUtils.substringAfterLast("", "d"));
assertEquals("", StringUtils.substringAfterLast("abc", ""));
}
//-----------------------------------------------------------------------
public void testSubstringBetween_StringString() {
assertEquals(null, StringUtils.substringBetween(null, "tag"));
assertEquals("", StringUtils.substringBetween("", ""));
assertEquals(null, StringUtils.substringBetween("", "abc"));
assertEquals("", StringUtils.substringBetween(" ", " "));
assertEquals(null, StringUtils.substringBetween("abc", null));
assertEquals("", StringUtils.substringBetween("abc", ""));
assertEquals(null, StringUtils.substringBetween("abc", "a"));
assertEquals("bc", StringUtils.substringBetween("abca", "a"));
assertEquals("bc", StringUtils.substringBetween("abcabca", "a"));
assertEquals("bar", StringUtils.substringBetween("\nbar\n", "\n"));
}
public void testSubstringBetween_StringStringString() {
assertEquals(null, StringUtils.substringBetween(null, "", ""));
assertEquals("", StringUtils.substringBetween("", "", ""));
assertEquals("", StringUtils.substringBetween("foo", "", ""));
assertEquals(null, StringUtils.substringBetween("foo", "", "]"));
assertEquals(null, StringUtils.substringBetween("foo", "[", "]"));
assertEquals("", StringUtils.substringBetween(" ", " ", " "));
assertEquals("bar", StringUtils.substringBetween("<foo>bar</foo>", "<foo>", "</foo>") );
}
/**
* Tests the substringsBetween method that returns an String Array of substrings.
*/
public void testSubstringsBetween_StringStringString() {
String[] results = StringUtils.substringsBetween("[one], [two], [three]", "[", "]");
assertEquals(3, results.length);
assertEquals("one", results[0]);
assertEquals("two", results[1]);
assertEquals("three", results[2]);
results = StringUtils.substringsBetween("[one], [two], three", "[", "]");
assertEquals(2, results.length);
assertEquals("one", results[0]);
assertEquals("two", results[1]);
results = StringUtils.substringsBetween("[one], [two], three]", "[", "]");
assertEquals(2, results.length);
assertEquals("one", results[0]);
assertEquals("two", results[1]);
results = StringUtils.substringsBetween("[one], two], three]", "[", "]");
assertEquals(1, results.length);
assertEquals("one", results[0]);
results = StringUtils.substringsBetween("one], two], [three]", "[", "]");
assertEquals(1, results.length);
assertEquals("three", results[0]);
// 'ab hello ba' will match, but 'ab non ba' won't
// this is because the 'a' is shared between the two and can't be matched twice
results = StringUtils.substringsBetween("aabhellobabnonba", "ab", "ba");
assertEquals(1, results.length);
assertEquals("hello", results[0]);
results = StringUtils.substringsBetween("one, two, three", "[", "]");
assertNull(results);
results = StringUtils.substringsBetween("[one, two, three", "[", "]");
assertNull(results);
results = StringUtils.substringsBetween("one, two, three]", "[", "]");
assertNull(results);
results = StringUtils.substringsBetween("[one], [two], [three]", "[", null);
assertNull(results);
results = StringUtils.substringsBetween("[one], [two], [three]", null, "]");
assertNull(results);
results = StringUtils.substringsBetween("[one], [two], [three]", "", "");
assertNull(results);
results = StringUtils.substringsBetween(null, "[", "]");
assertNull(results);
results = StringUtils.substringsBetween("", "[", "]");
assertEquals(0, results.length);
}
//-----------------------------------------------------------------------
public void testCountMatches_String() {
assertEquals(0, StringUtils.countMatches(null, null));
assertEquals(0, StringUtils.countMatches("blah", null));
assertEquals(0, StringUtils.countMatches(null, "DD"));
assertEquals(0, StringUtils.countMatches("x", ""));
assertEquals(0, StringUtils.countMatches("", ""));
assertEquals(3,
StringUtils.countMatches("one long someone sentence of one", "one"));
assertEquals(0,
StringUtils.countMatches("one long someone sentence of one", "two"));
assertEquals(4,
StringUtils.countMatches("oooooooooooo", "ooo"));
}
}