diff options
Diffstat (limited to 'src/test/java/org/apache/commons/lang3/StringUtilsSubstringTest.java')
-rw-r--r-- | src/test/java/org/apache/commons/lang3/StringUtilsSubstringTest.java | 386 |
1 files changed, 386 insertions, 0 deletions
diff --git a/src/test/java/org/apache/commons/lang3/StringUtilsSubstringTest.java b/src/test/java/org/apache/commons/lang3/StringUtilsSubstringTest.java new file mode 100644 index 000000000..a6f6bf5d0 --- /dev/null +++ b/src/test/java/org/apache/commons/lang3/StringUtilsSubstringTest.java @@ -0,0 +1,386 @@ +/* + * 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.lang3; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertSame; + +import org.junit.jupiter.api.Test; + +/** + * Unit tests {@link org.apache.commons.lang3.StringUtils} - Substring methods + */ +public class StringUtilsSubstringTest extends AbstractLangTest { + 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"; + + + @Test + public void testSubstring_StringInt() { + assertNull(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)); + } + + @Test + public void testSubstring_StringIntInt() { + assertNull(StringUtils.substring(null, 0, 0)); + assertNull(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)); + } + + @Test + 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)); + } + + @Test + 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)); + } + + @Test + 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)); + } + + @Test + public void testSubstringBefore_StringInt() { + assertEquals("foo", StringUtils.substringBefore("fooXXbarXXbaz", 'X')); + + assertNull(StringUtils.substringBefore(null, 0)); + assertNull(StringUtils.substringBefore(null, 'X')); + assertEquals("", StringUtils.substringBefore("", 0)); + assertEquals("", StringUtils.substringBefore("", 'X')); + + assertEquals("foo", StringUtils.substringBefore("foo", 0)); + 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("abc", StringUtils.substringBefore("abc", 0)); + } + + @Test + public void testSubstringBefore_StringString() { + assertEquals("foo", StringUtils.substringBefore("fooXXbarXXbaz", "XX")); + + assertNull(StringUtils.substringBefore(null, null)); + assertNull(StringUtils.substringBefore(null, "")); + assertNull(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", "")); + assertEquals("abc", StringUtils.substringBefore("abc", "X")); + } + + @Test + public void testSubstringAfter_StringString() { + assertEquals("barXXbaz", StringUtils.substringAfter("fooXXbarXXbaz", "XX")); + + assertNull(StringUtils.substringAfter(null, null)); + assertNull(StringUtils.substringAfter(null, "")); + assertNull(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")); + } + + @Test + public void testSubstringAfter_StringInt() { + assertNull(StringUtils.substringAfter(null, 0)); + assertNull(StringUtils.substringAfter(null, 'X')); + assertEquals("", StringUtils.substringAfter("", 0)); + assertEquals("", StringUtils.substringAfter("", 'X')); + + assertEquals("", StringUtils.substringAfter("foo", 0)); + assertEquals("ot", StringUtils.substringAfter("foot", 'o')); + assertEquals("bc", StringUtils.substringAfter("abc", 'a')); + assertEquals("cba", StringUtils.substringAfter("abcba", 'b')); + assertEquals("", StringUtils.substringAfter("abc", 'c')); + assertEquals("", StringUtils.substringAfter("abc", 'd')); + } + + @Test + public void testSubstringBeforeLast_StringString() { + assertEquals("fooXXbar", StringUtils.substringBeforeLast("fooXXbarXXbaz", "XX")); + + assertNull(StringUtils.substringBeforeLast(null, null)); + assertNull(StringUtils.substringBeforeLast(null, "")); + assertNull(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")); + } + + @Test + public void testSubstringAfterLast_StringString() { + assertEquals("baz", StringUtils.substringAfterLast("fooXXbarXXbaz", "XX")); + + assertNull(StringUtils.substringAfterLast(null, null)); + assertNull(StringUtils.substringAfterLast(null, "")); + assertNull(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", "")); + } + + @Test + public void testSubstringAfterLast_StringInt() { + assertNull(StringUtils.substringAfterLast(null, 0)); + assertNull(StringUtils.substringAfterLast(null, 'X')); + assertEquals("", StringUtils.substringAfterLast("", 0)); + assertEquals("", StringUtils.substringAfterLast("", 'a')); + + assertEquals("", StringUtils.substringAfterLast("foo", 0)); + 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')); + } + + @Test + public void testSubstringBetween_StringString() { + assertNull(StringUtils.substringBetween(null, "tag")); + assertEquals("", StringUtils.substringBetween("", "")); + assertNull(StringUtils.substringBetween("", "abc")); + assertEquals("", StringUtils.substringBetween(" ", " ")); + assertNull(StringUtils.substringBetween("abc", null)); + assertEquals("", StringUtils.substringBetween("abc", "")); + assertNull(StringUtils.substringBetween("abc", "a")); + assertEquals("bc", StringUtils.substringBetween("abca", "a")); + assertEquals("bc", StringUtils.substringBetween("abcabca", "a")); + assertEquals("bar", StringUtils.substringBetween("\nbar\n", "\n")); + } + + @Test + public void testSubstringBetween_StringStringString() { + assertNull(StringUtils.substringBetween(null, "", "")); + assertNull(StringUtils.substringBetween("", null, "")); + assertNull(StringUtils.substringBetween("", "", null)); + assertEquals("", StringUtils.substringBetween("", "", "")); + assertEquals("", StringUtils.substringBetween("foo", "", "")); + assertNull(StringUtils.substringBetween("foo", "", "]")); + assertNull(StringUtils.substringBetween("foo", "[", "]")); + assertEquals("", StringUtils.substringBetween(" ", " ", " ")); + assertEquals("bar", StringUtils.substringBetween("<foo>bar</foo>", "<foo>", "</foo>") ); + assertEquals("abc", StringUtils.substringBetween("yabczyabcz", "y", "z")); + } + + /** + * Tests the substringsBetween method that returns a String Array of substrings. + */ + @Test + 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); + } + + @Test + 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")); + assertEquals(0, StringUtils.countMatches(null, "?")); + assertEquals(0, StringUtils.countMatches("", "?")); + assertEquals(0, StringUtils.countMatches("abba", null)); + assertEquals(0, StringUtils.countMatches("abba", "")); + assertEquals(2, StringUtils.countMatches("abba", "a")); + assertEquals(1, StringUtils.countMatches("abba", "ab")); + assertEquals(0, StringUtils.countMatches("abba", "xxx")); + assertEquals(1, StringUtils.countMatches("ababa", "aba")); + } + + @Test + public void testCountMatches_char() { + assertEquals(0, StringUtils.countMatches(null, 'D')); + assertEquals(5, StringUtils.countMatches("one long someone sentence of one", ' ')); + assertEquals(6, StringUtils.countMatches("one long someone sentence of one", 'o')); + assertEquals(4, StringUtils.countMatches("oooooooooooo", "ooo")); + } + +} |