View Javadoc
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.endsWith()
39       */
40      @Test
41      public void testEndsWith() {
42          assertTrue(StringUtils.endsWith(null, null), "endsWith(null, null)");
43          assertFalse(StringUtils.endsWith(FOOBAR, null), "endsWith(FOOBAR, null)");
44          assertFalse(StringUtils.endsWith(null, FOO), "endsWith(null, FOO)");
45          assertTrue(StringUtils.endsWith(FOOBAR, ""), "endsWith(FOOBAR, \"\")");
46  
47          assertFalse(StringUtils.endsWith(foobar, foo), "endsWith(foobar, foo)");
48          assertFalse(StringUtils.endsWith(FOOBAR, FOO), "endsWith(FOOBAR, FOO)");
49          assertFalse(StringUtils.endsWith(foobar, FOO), "endsWith(foobar, FOO)");
50          assertFalse(StringUtils.endsWith(FOOBAR, foo), "endsWith(FOOBAR, foo)");
51  
52          assertFalse(StringUtils.endsWith(foo, foobar), "endsWith(foo, foobar)");
53          assertFalse(StringUtils.endsWith(bar, foobar), "endsWith(foo, foobar)");
54  
55          assertTrue(StringUtils.endsWith(foobar, bar), "endsWith(foobar, bar)");
56          assertTrue(StringUtils.endsWith(FOOBAR, BAR), "endsWith(FOOBAR, BAR)");
57          assertFalse(StringUtils.endsWith(foobar, BAR), "endsWith(foobar, BAR)");
58          assertFalse(StringUtils.endsWith(FOOBAR, bar), "endsWith(FOOBAR, bar)");
59  
60          // "alpha, beta, gamma, delta".endsWith("delta")
61          assertTrue(StringUtils.endsWith("\u03B1\u03B2\u03B3\u03B4", "\u03B4"),
62                  "endsWith(\u03B1\u03B2\u03B3\u03B4, \u03B4)");
63          // "alpha, beta, gamma, delta".endsWith("gamma, DELTA")
64          assertFalse(StringUtils.endsWith("\u03B1\u03B2\u03B3\u03B4", "\u03B3\u0394"),
65                  "endsWith(\u03B1\u03B2\u03B3\u03B4, \u03B3\u0394)");
66      }
67  
68      @Test
69      public void testEndsWithAny() {
70          assertFalse(StringUtils.endsWithAny(null, (String) null), "StringUtils.endsWithAny(null, null)");
71          assertFalse(StringUtils.endsWithAny(null, "abc"), "StringUtils.endsWithAny(null, new String[] {abc})");
72          assertFalse(StringUtils.endsWithAny("abcxyz", (String) null), "StringUtils.endsWithAny(abcxyz, null)");
73          assertTrue(StringUtils.endsWithAny("abcxyz", ""), "StringUtils.endsWithAny(abcxyz, new String[] {\"\"})");
74          assertTrue(StringUtils.endsWithAny("abcxyz", "xyz"), "StringUtils.endsWithAny(abcxyz, new String[] {xyz})");
75          assertTrue(StringUtils.endsWithAny("abcxyz", null, "xyz", "abc"), "StringUtils.endsWithAny(abcxyz, new String[] {null, xyz, abc})");
76          assertFalse(StringUtils.endsWithAny("defg", null, "xyz", "abc"), "StringUtils.endsWithAny(defg, new String[] {null, xyz, abc})");
77          assertTrue(StringUtils.endsWithAny("abcXYZ", "def", "XYZ"));
78          assertFalse(StringUtils.endsWithAny("abcXYZ", "def", "xyz"));
79          assertTrue(StringUtils.endsWithAny("abcXYZ", "def", "YZ"));
80  
81          /*
82           * Type null of the last argument to method endsWithAny(CharSequence, CharSequence...)
83           * doesn't exactly match the vararg parameter type.
84           * Cast to CharSequence[] to confirm the non-varargs invocation,
85           * or pass individual arguments of type CharSequence for a varargs invocation.
86           *
87           * assertFalse(StringUtils.endsWithAny("abcXYZ", null)); // replace with specific types to avoid warning
88           */
89          assertFalse(StringUtils.endsWithAny("abcXYZ", (CharSequence) null));
90          assertFalse(StringUtils.endsWithAny("abcXYZ", (CharSequence[]) null));
91          assertTrue(StringUtils.endsWithAny("abcXYZ", ""));
92  
93          assertTrue(StringUtils.endsWithAny("abcxyz", new StringBuilder("abc"), new StringBuffer("xyz")), "StringUtils.endsWithAny(abcxyz, StringBuilder(abc), StringBuffer(xyz))");
94          assertTrue(StringUtils.endsWithAny(new StringBuffer("abcxyz"), new StringBuilder("abc"), new StringBuffer("xyz")), "StringUtils.endsWithAny(StringBuffer(abcxyz), StringBuilder(abc), StringBuffer(xyz))");
95      }
96  
97      /**
98       * Test StringUtils.endsWithIgnoreCase()
99       */
100     @Test
101     public void testEndsWithIgnoreCase() {
102         assertTrue(StringUtils.endsWithIgnoreCase(null, null), "endsWithIgnoreCase(null, null)");
103         assertFalse(StringUtils.endsWithIgnoreCase(FOOBAR, null), "endsWithIgnoreCase(FOOBAR, null)");
104         assertFalse(StringUtils.endsWithIgnoreCase(null, FOO), "endsWithIgnoreCase(null, FOO)");
105         assertTrue(StringUtils.endsWithIgnoreCase(FOOBAR, ""), "endsWithIgnoreCase(FOOBAR, \"\")");
106 
107         assertFalse(StringUtils.endsWithIgnoreCase(foobar, foo), "endsWithIgnoreCase(foobar, foo)");
108         assertFalse(StringUtils.endsWithIgnoreCase(FOOBAR, FOO), "endsWithIgnoreCase(FOOBAR, FOO)");
109         assertFalse(StringUtils.endsWithIgnoreCase(foobar, FOO), "endsWithIgnoreCase(foobar, FOO)");
110         assertFalse(StringUtils.endsWithIgnoreCase(FOOBAR, foo), "endsWithIgnoreCase(FOOBAR, foo)");
111 
112         assertFalse(StringUtils.endsWithIgnoreCase(foo, foobar), "endsWithIgnoreCase(foo, foobar)");
113         assertFalse(StringUtils.endsWithIgnoreCase(bar, foobar), "endsWithIgnoreCase(foo, foobar)");
114 
115         assertTrue(StringUtils.endsWithIgnoreCase(foobar, bar), "endsWithIgnoreCase(foobar, bar)");
116         assertTrue(StringUtils.endsWithIgnoreCase(FOOBAR, BAR), "endsWithIgnoreCase(FOOBAR, BAR)");
117         assertTrue(StringUtils.endsWithIgnoreCase(foobar, BAR), "endsWithIgnoreCase(foobar, BAR)");
118         assertTrue(StringUtils.endsWithIgnoreCase(FOOBAR, bar), "endsWithIgnoreCase(FOOBAR, bar)");
119 
120         // javadoc
121         assertTrue(StringUtils.endsWithIgnoreCase("abcdef", "def"));
122         assertTrue(StringUtils.endsWithIgnoreCase("ABCDEF", "def"));
123         assertFalse(StringUtils.endsWithIgnoreCase("ABCDEF", "cde"));
124 
125         // "alpha, beta, gamma, delta".endsWith("DELTA")
126         assertTrue(StringUtils.endsWithIgnoreCase("\u03B1\u03B2\u03B3\u03B4", "\u0394"),
127                 "endsWith(\u03B1\u03B2\u03B3\u03B4, \u0394)");
128         // "alpha, beta, gamma, delta".endsWith("GAMMA")
129         assertFalse(StringUtils.endsWithIgnoreCase("\u03B1\u03B2\u03B3\u03B4", "\u0393"),
130                 "endsWith(\u03B1\u03B2\u03B3\u03B4, \u0393)");
131     }
132 
133 
134     /**
135      * Test StringUtils.startsWith()
136      */
137     @Test
138     public void testStartsWith() {
139         assertTrue(StringUtils.startsWith(null, null), "startsWith(null, null)");
140         assertFalse(StringUtils.startsWith(FOOBAR, null), "startsWith(FOOBAR, null)");
141         assertFalse(StringUtils.startsWith(null, FOO), "startsWith(null, FOO)");
142         assertTrue(StringUtils.startsWith(FOOBAR, ""), "startsWith(FOOBAR, \"\")");
143 
144         assertTrue(StringUtils.startsWith(foobar, foo), "startsWith(foobar, foo)");
145         assertTrue(StringUtils.startsWith(FOOBAR, FOO), "startsWith(FOOBAR, FOO)");
146         assertFalse(StringUtils.startsWith(foobar, FOO), "startsWith(foobar, FOO)");
147         assertFalse(StringUtils.startsWith(FOOBAR, foo), "startsWith(FOOBAR, foo)");
148 
149         assertFalse(StringUtils.startsWith(foo, foobar), "startsWith(foo, foobar)");
150         assertFalse(StringUtils.startsWith(bar, foobar), "startsWith(foo, foobar)");
151 
152         assertFalse(StringUtils.startsWith(foobar, bar), "startsWith(foobar, bar)");
153         assertFalse(StringUtils.startsWith(FOOBAR, BAR), "startsWith(FOOBAR, BAR)");
154         assertFalse(StringUtils.startsWith(foobar, BAR), "startsWith(foobar, BAR)");
155         assertFalse(StringUtils.startsWith(FOOBAR, bar), "startsWith(FOOBAR, bar)");
156     }
157 
158     @Test
159     public void testStartsWithAny() {
160         assertFalse(StringUtils.startsWithAny(null, (String[]) null));
161         assertFalse(StringUtils.startsWithAny(null, "abc"));
162         assertFalse(StringUtils.startsWithAny("abcxyz", (String[]) null));
163         assertFalse(StringUtils.startsWithAny("abcxyz"));
164         assertTrue(StringUtils.startsWithAny("abcxyz", "abc"));
165         assertTrue(StringUtils.startsWithAny("abcxyz", null, "xyz", "abc"));
166         assertFalse(StringUtils.startsWithAny("abcxyz", null, "xyz", "abcd"));
167         assertTrue(StringUtils.startsWithAny("abcxyz", ""));
168         assertFalse(StringUtils.startsWithAny("abcxyz", null, "xyz", "ABCX"));
169         assertFalse(StringUtils.startsWithAny("ABCXYZ", null, "xyz", "abc"));
170 
171         assertTrue(StringUtils.startsWithAny("abcxyz", new StringBuilder("xyz"), new StringBuffer("abc")), "StringUtils.startsWithAny(abcxyz, StringBuilder(xyz), StringBuffer(abc))");
172         assertTrue(StringUtils.startsWithAny(new StringBuffer("abcxyz"), new StringBuilder("xyz"), new StringBuffer("abc")), "StringUtils.startsWithAny(StringBuffer(abcxyz), StringBuilder(xyz), StringBuffer(abc))");
173     }
174 
175     /**
176      * Test StringUtils.testStartsWithIgnoreCase()
177      */
178     @Test
179     public void testStartsWithIgnoreCase() {
180         assertTrue(StringUtils.startsWithIgnoreCase(null, null), "startsWithIgnoreCase(null, null)");
181         assertFalse(StringUtils.startsWithIgnoreCase(FOOBAR, null), "startsWithIgnoreCase(FOOBAR, null)");
182         assertFalse(StringUtils.startsWithIgnoreCase(null, FOO), "startsWithIgnoreCase(null, FOO)");
183         assertTrue(StringUtils.startsWithIgnoreCase(FOOBAR, ""), "startsWithIgnoreCase(FOOBAR, \"\")");
184 
185         assertTrue(StringUtils.startsWithIgnoreCase(foobar, foo), "startsWithIgnoreCase(foobar, foo)");
186         assertTrue(StringUtils.startsWithIgnoreCase(FOOBAR, FOO), "startsWithIgnoreCase(FOOBAR, FOO)");
187         assertTrue(StringUtils.startsWithIgnoreCase(foobar, FOO), "startsWithIgnoreCase(foobar, FOO)");
188         assertTrue(StringUtils.startsWithIgnoreCase(FOOBAR, foo), "startsWithIgnoreCase(FOOBAR, foo)");
189 
190         assertFalse(StringUtils.startsWithIgnoreCase(foo, foobar), "startsWithIgnoreCase(foo, foobar)");
191         assertFalse(StringUtils.startsWithIgnoreCase(bar, foobar), "startsWithIgnoreCase(foo, foobar)");
192 
193         assertFalse(StringUtils.startsWithIgnoreCase(foobar, bar), "startsWithIgnoreCase(foobar, bar)");
194         assertFalse(StringUtils.startsWithIgnoreCase(FOOBAR, BAR), "startsWithIgnoreCase(FOOBAR, BAR)");
195         assertFalse(StringUtils.startsWithIgnoreCase(foobar, BAR), "startsWithIgnoreCase(foobar, BAR)");
196         assertFalse(StringUtils.startsWithIgnoreCase(FOOBAR, bar), "startsWithIgnoreCase(FOOBAR, bar)");
197     }
198 
199 
200 }