• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements.  See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License.  You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 package org.apache.commons.lang3;
18 
19 import static org.junit.jupiter.api.Assertions.assertFalse;
20 import static org.junit.jupiter.api.Assertions.assertTrue;
21 
22 import org.junit.jupiter.api.Test;
23 
24 
25 /**
26  * Unit tests {@link org.apache.commons.lang3.StringUtils} - StartsWith/EndsWith methods
27  */
28 public class StringUtilsStartsEndsWithTest extends AbstractLangTest {
29     private static final String foo    = "foo";
30     private static final String bar    = "bar";
31     private static final String foobar = "foobar";
32     private static final String FOO    = "FOO";
33     private static final String BAR    = "BAR";
34     private static final String FOOBAR = "FOOBAR";
35 
36 
37     /**
38      * Test StringUtils.startsWith()
39      */
40     @Test
testStartsWith()41     public void testStartsWith() {
42         assertTrue(StringUtils.startsWith(null, null), "startsWith(null, null)");
43         assertFalse(StringUtils.startsWith(FOOBAR, null), "startsWith(FOOBAR, null)");
44         assertFalse(StringUtils.startsWith(null, FOO), "startsWith(null, FOO)");
45         assertTrue(StringUtils.startsWith(FOOBAR, ""), "startsWith(FOOBAR, \"\")");
46 
47         assertTrue(StringUtils.startsWith(foobar, foo), "startsWith(foobar, foo)");
48         assertTrue(StringUtils.startsWith(FOOBAR, FOO), "startsWith(FOOBAR, FOO)");
49         assertFalse(StringUtils.startsWith(foobar, FOO), "startsWith(foobar, FOO)");
50         assertFalse(StringUtils.startsWith(FOOBAR, foo), "startsWith(FOOBAR, foo)");
51 
52         assertFalse(StringUtils.startsWith(foo, foobar), "startsWith(foo, foobar)");
53         assertFalse(StringUtils.startsWith(bar, foobar), "startsWith(foo, foobar)");
54 
55         assertFalse(StringUtils.startsWith(foobar, bar), "startsWith(foobar, bar)");
56         assertFalse(StringUtils.startsWith(FOOBAR, BAR), "startsWith(FOOBAR, BAR)");
57         assertFalse(StringUtils.startsWith(foobar, BAR), "startsWith(foobar, BAR)");
58         assertFalse(StringUtils.startsWith(FOOBAR, bar), "startsWith(FOOBAR, bar)");
59     }
60 
61     /**
62      * Test StringUtils.testStartsWithIgnoreCase()
63      */
64     @Test
testStartsWithIgnoreCase()65     public void testStartsWithIgnoreCase() {
66         assertTrue(StringUtils.startsWithIgnoreCase(null, null), "startsWithIgnoreCase(null, null)");
67         assertFalse(StringUtils.startsWithIgnoreCase(FOOBAR, null), "startsWithIgnoreCase(FOOBAR, null)");
68         assertFalse(StringUtils.startsWithIgnoreCase(null, FOO), "startsWithIgnoreCase(null, FOO)");
69         assertTrue(StringUtils.startsWithIgnoreCase(FOOBAR, ""), "startsWithIgnoreCase(FOOBAR, \"\")");
70 
71         assertTrue(StringUtils.startsWithIgnoreCase(foobar, foo), "startsWithIgnoreCase(foobar, foo)");
72         assertTrue(StringUtils.startsWithIgnoreCase(FOOBAR, FOO), "startsWithIgnoreCase(FOOBAR, FOO)");
73         assertTrue(StringUtils.startsWithIgnoreCase(foobar, FOO), "startsWithIgnoreCase(foobar, FOO)");
74         assertTrue(StringUtils.startsWithIgnoreCase(FOOBAR, foo), "startsWithIgnoreCase(FOOBAR, foo)");
75 
76         assertFalse(StringUtils.startsWithIgnoreCase(foo, foobar), "startsWithIgnoreCase(foo, foobar)");
77         assertFalse(StringUtils.startsWithIgnoreCase(bar, foobar), "startsWithIgnoreCase(foo, foobar)");
78 
79         assertFalse(StringUtils.startsWithIgnoreCase(foobar, bar), "startsWithIgnoreCase(foobar, bar)");
80         assertFalse(StringUtils.startsWithIgnoreCase(FOOBAR, BAR), "startsWithIgnoreCase(FOOBAR, BAR)");
81         assertFalse(StringUtils.startsWithIgnoreCase(foobar, BAR), "startsWithIgnoreCase(foobar, BAR)");
82         assertFalse(StringUtils.startsWithIgnoreCase(FOOBAR, bar), "startsWithIgnoreCase(FOOBAR, bar)");
83     }
84 
85     @Test
testStartsWithAny()86     public void testStartsWithAny() {
87         assertFalse(StringUtils.startsWithAny(null, (String[]) null));
88         assertFalse(StringUtils.startsWithAny(null, "abc"));
89         assertFalse(StringUtils.startsWithAny("abcxyz", (String[]) null));
90         assertFalse(StringUtils.startsWithAny("abcxyz"));
91         assertTrue(StringUtils.startsWithAny("abcxyz", "abc"));
92         assertTrue(StringUtils.startsWithAny("abcxyz", null, "xyz", "abc"));
93         assertFalse(StringUtils.startsWithAny("abcxyz", null, "xyz", "abcd"));
94         assertTrue(StringUtils.startsWithAny("abcxyz", ""));
95         assertFalse(StringUtils.startsWithAny("abcxyz", null, "xyz", "ABCX"));
96         assertFalse(StringUtils.startsWithAny("ABCXYZ", null, "xyz", "abc"));
97 
98         assertTrue(StringUtils.startsWithAny("abcxyz", new StringBuilder("xyz"), new StringBuffer("abc")), "StringUtils.startsWithAny(abcxyz, StringBuilder(xyz), StringBuffer(abc))");
99         assertTrue(StringUtils.startsWithAny(new StringBuffer("abcxyz"), new StringBuilder("xyz"), new StringBuffer("abc")), "StringUtils.startsWithAny(StringBuffer(abcxyz), StringBuilder(xyz), StringBuffer(abc))");
100     }
101 
102 
103     /**
104      * Test StringUtils.endsWith()
105      */
106     @Test
testEndsWith()107     public void testEndsWith() {
108         assertTrue(StringUtils.endsWith(null, null), "endsWith(null, null)");
109         assertFalse(StringUtils.endsWith(FOOBAR, null), "endsWith(FOOBAR, null)");
110         assertFalse(StringUtils.endsWith(null, FOO), "endsWith(null, FOO)");
111         assertTrue(StringUtils.endsWith(FOOBAR, ""), "endsWith(FOOBAR, \"\")");
112 
113         assertFalse(StringUtils.endsWith(foobar, foo), "endsWith(foobar, foo)");
114         assertFalse(StringUtils.endsWith(FOOBAR, FOO), "endsWith(FOOBAR, FOO)");
115         assertFalse(StringUtils.endsWith(foobar, FOO), "endsWith(foobar, FOO)");
116         assertFalse(StringUtils.endsWith(FOOBAR, foo), "endsWith(FOOBAR, foo)");
117 
118         assertFalse(StringUtils.endsWith(foo, foobar), "endsWith(foo, foobar)");
119         assertFalse(StringUtils.endsWith(bar, foobar), "endsWith(foo, foobar)");
120 
121         assertTrue(StringUtils.endsWith(foobar, bar), "endsWith(foobar, bar)");
122         assertTrue(StringUtils.endsWith(FOOBAR, BAR), "endsWith(FOOBAR, BAR)");
123         assertFalse(StringUtils.endsWith(foobar, BAR), "endsWith(foobar, BAR)");
124         assertFalse(StringUtils.endsWith(FOOBAR, bar), "endsWith(FOOBAR, bar)");
125 
126         // "alpha, beta, gamma, delta".endsWith("delta")
127         assertTrue(StringUtils.endsWith("\u03B1\u03B2\u03B3\u03B4", "\u03B4"),
128                 "endsWith(\u03B1\u03B2\u03B3\u03B4, \u03B4)");
129         // "alpha, beta, gamma, delta".endsWith("gamma, DELTA")
130         assertFalse(StringUtils.endsWith("\u03B1\u03B2\u03B3\u03B4", "\u03B3\u0394"),
131                 "endsWith(\u03B1\u03B2\u03B3\u03B4, \u03B3\u0394)");
132     }
133 
134     /**
135      * Test StringUtils.endsWithIgnoreCase()
136      */
137     @Test
testEndsWithIgnoreCase()138     public void testEndsWithIgnoreCase() {
139         assertTrue(StringUtils.endsWithIgnoreCase(null, null), "endsWithIgnoreCase(null, null)");
140         assertFalse(StringUtils.endsWithIgnoreCase(FOOBAR, null), "endsWithIgnoreCase(FOOBAR, null)");
141         assertFalse(StringUtils.endsWithIgnoreCase(null, FOO), "endsWithIgnoreCase(null, FOO)");
142         assertTrue(StringUtils.endsWithIgnoreCase(FOOBAR, ""), "endsWithIgnoreCase(FOOBAR, \"\")");
143 
144         assertFalse(StringUtils.endsWithIgnoreCase(foobar, foo), "endsWithIgnoreCase(foobar, foo)");
145         assertFalse(StringUtils.endsWithIgnoreCase(FOOBAR, FOO), "endsWithIgnoreCase(FOOBAR, FOO)");
146         assertFalse(StringUtils.endsWithIgnoreCase(foobar, FOO), "endsWithIgnoreCase(foobar, FOO)");
147         assertFalse(StringUtils.endsWithIgnoreCase(FOOBAR, foo), "endsWithIgnoreCase(FOOBAR, foo)");
148 
149         assertFalse(StringUtils.endsWithIgnoreCase(foo, foobar), "endsWithIgnoreCase(foo, foobar)");
150         assertFalse(StringUtils.endsWithIgnoreCase(bar, foobar), "endsWithIgnoreCase(foo, foobar)");
151 
152         assertTrue(StringUtils.endsWithIgnoreCase(foobar, bar), "endsWithIgnoreCase(foobar, bar)");
153         assertTrue(StringUtils.endsWithIgnoreCase(FOOBAR, BAR), "endsWithIgnoreCase(FOOBAR, BAR)");
154         assertTrue(StringUtils.endsWithIgnoreCase(foobar, BAR), "endsWithIgnoreCase(foobar, BAR)");
155         assertTrue(StringUtils.endsWithIgnoreCase(FOOBAR, bar), "endsWithIgnoreCase(FOOBAR, bar)");
156 
157         // javadoc
158         assertTrue(StringUtils.endsWithIgnoreCase("abcdef", "def"));
159         assertTrue(StringUtils.endsWithIgnoreCase("ABCDEF", "def"));
160         assertFalse(StringUtils.endsWithIgnoreCase("ABCDEF", "cde"));
161 
162         // "alpha, beta, gamma, delta".endsWith("DELTA")
163         assertTrue(StringUtils.endsWithIgnoreCase("\u03B1\u03B2\u03B3\u03B4", "\u0394"),
164                 "endsWith(\u03B1\u03B2\u03B3\u03B4, \u0394)");
165         // "alpha, beta, gamma, delta".endsWith("GAMMA")
166         assertFalse(StringUtils.endsWithIgnoreCase("\u03B1\u03B2\u03B3\u03B4", "\u0393"),
167                 "endsWith(\u03B1\u03B2\u03B3\u03B4, \u0393)");
168     }
169 
170     @Test
testEndsWithAny()171     public void testEndsWithAny() {
172         assertFalse(StringUtils.endsWithAny(null, (String) null), "StringUtils.endsWithAny(null, null)");
173         assertFalse(StringUtils.endsWithAny(null, "abc"), "StringUtils.endsWithAny(null, new String[] {abc})");
174         assertFalse(StringUtils.endsWithAny("abcxyz", (String) null), "StringUtils.endsWithAny(abcxyz, null)");
175         assertTrue(StringUtils.endsWithAny("abcxyz", ""), "StringUtils.endsWithAny(abcxyz, new String[] {\"\"})");
176         assertTrue(StringUtils.endsWithAny("abcxyz", "xyz"), "StringUtils.endsWithAny(abcxyz, new String[] {xyz})");
177         assertTrue(StringUtils.endsWithAny("abcxyz", null, "xyz", "abc"), "StringUtils.endsWithAny(abcxyz, new String[] {null, xyz, abc})");
178         assertFalse(StringUtils.endsWithAny("defg", null, "xyz", "abc"), "StringUtils.endsWithAny(defg, new String[] {null, xyz, abc})");
179         assertTrue(StringUtils.endsWithAny("abcXYZ", "def", "XYZ"));
180         assertFalse(StringUtils.endsWithAny("abcXYZ", "def", "xyz"));
181         assertTrue(StringUtils.endsWithAny("abcXYZ", "def", "YZ"));
182 
183         /*
184          * Type null of the last argument to method endsWithAny(CharSequence, CharSequence...)
185          * doesn't exactly match the vararg parameter type.
186          * Cast to CharSequence[] to confirm the non-varargs invocation,
187          * or pass individual arguments of type CharSequence for a varargs invocation.
188          *
189          * assertFalse(StringUtils.endsWithAny("abcXYZ", null)); // replace with specific types to avoid warning
190          */
191         assertFalse(StringUtils.endsWithAny("abcXYZ", (CharSequence) null));
192         assertFalse(StringUtils.endsWithAny("abcXYZ", (CharSequence[]) null));
193         assertTrue(StringUtils.endsWithAny("abcXYZ", ""));
194 
195         assertTrue(StringUtils.endsWithAny("abcxyz", new StringBuilder("abc"), new StringBuffer("xyz")), "StringUtils.endsWithAny(abcxyz, StringBuilder(abc), StringBuffer(xyz))");
196         assertTrue(StringUtils.endsWithAny(new StringBuffer("abcxyz"), new StringBuilder("abc"), new StringBuffer("xyz")), "StringUtils.endsWithAny(StringBuffer(abcxyz), StringBuilder(abc), StringBuffer(xyz))");
197     }
198 
199 
200 }
201