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.juneau.assertions;
18  
19  import static org.apache.juneau.assertions.AssertionPredicates.ne;
20  import static org.apache.juneau.assertions.Assertions.*;
21  import static org.apache.juneau.common.utils.Utils.*;
22  import static org.junit.jupiter.api.Assertions.*;
23  
24  import java.util.regex.*;
25  
26  import org.apache.juneau.*;
27  import org.apache.juneau.json.*;
28  import org.junit.jupiter.api.*;
29  
30  @Deprecated
31  class StringAssertion_Test extends TestBase {
32  
33  	//------------------------------------------------------------------------------------------------------------------
34  	// Helpers
35  	//------------------------------------------------------------------------------------------------------------------
36  
37  	private StringAssertion test(Object value) {
38  		return assertString(value).setSilent();
39  	}
40  
41  	//-----------------------------------------------------------------------------------------------------------------
42  	// Basic tests
43  	//-----------------------------------------------------------------------------------------------------------------
44  
45  	@Test void a01_msg() {
46  		assertThrows(BasicAssertionError.class, ()->test(null).setMsg("Foo {0}", 1).isExists(), "Foo 1");
47  		assertThrows(RuntimeException.class, ()->test(null).setMsg("Foo {0}", 1).setThrowable(RuntimeException.class).isExists(), "Foo 1");
48  	}
49  
50  	@Test void a02_stdout() {
51  		test(null).setStdOut();
52  	}
53  
54  	@Test void a03_javaStrings() {
55  		test(null).asJavaStrings();
56  	}
57  
58  	//-----------------------------------------------------------------------------------------------------------------
59  	// Transform tests
60  	//-----------------------------------------------------------------------------------------------------------------
61  
62  	@Test void ba01a_asString() {
63  		var x = "1";
64  		var nil = n(String.class);
65  		test(x).asString().is("1");
66  		test(nil).asString().isNull();
67  	}
68  
69  	@Test void ba01b_asString_wSerializer() {
70  		var x = "1";
71  		var nil = n(String.class);
72  		var s = Json5Serializer.DEFAULT;
73  		test(x).asString(s).is("'1'");
74  		test(nil).asString(s).is("null");
75  	}
76  
77  	@Test void ba01c_asString_wPredicate() {
78  		var x1 = "1";
79  		test(x1).asString(x -> "foo").is("foo");
80  	}
81  
82  	@Test void ba02_asJson() {
83  		var x = "1";
84  		var nil = n(String.class);
85  		test(x).asJson().is("'1'");
86  		test(nil).asJson().is("null");
87  	}
88  
89  	@Test void ba03_asJsonSorted() {
90  		var x = "1";
91  		var nil = n(String.class);
92  		test(x).asJsonSorted().is("'1'");
93  		test(nil).asJsonSorted().is("null");
94  	}
95  
96  	@Test void ba04_apply() {
97  		var x1 = "1";
98  		var x2 = "2";
99  		test(x1).asTransformed(x -> x2).is(x2);
100 	}
101 
102 	@Test void bb01_replaceAll() {
103 		var x = "foobar";
104 		var nil = n(String.class);
105 		test(x).asReplaceAll("fo+","bar").is("barbar").is("foobar");
106 		test(nil).asReplaceAll("fo+","bar").isNull();
107 		assertThrows(IllegalArgumentException.class, ()->test(x).asReplaceAll(null,""), "Argument 'regex' cannot be null.");
108 		assertThrows(IllegalArgumentException.class, ()->test(x).asReplaceAll("",null), "Argument 'replacement' cannot be null.");
109 	}
110 
111 	@Test void bb02_replace() {
112 		var x = "foobar";
113 		var nil = n(String.class);
114 		test(x).asReplace("foo","bar").is("barbar").is("foobar");
115 		test(nil).asReplace("foo","bar").isNull();
116 		assertThrows(IllegalArgumentException.class, ()->test(x).asReplace(null,"bar").isNull(), "Argument 'target' cannot be null.");
117 		assertThrows(IllegalArgumentException.class, ()->test(x).asReplace("foo",null).isNull(), "Argument 'replacement' cannot be null.");
118 	}
119 
120 	@Test void bb03_urlDecode() {
121 		var x = "foo%20bar";
122 		var nil = n(String.class);
123 		test(x).asUrlDecode().is("foo bar").is("foo%20bar");
124 		test(nil).asUrlDecode().isNull();
125 	}
126 
127 	@Test void bb04_lc() {
128 		var x = "FOOBAR";
129 		var nil = n(String.class);
130 		test(x).asLc().is("foobar").is("FOOBAR");
131 		test(nil).asLc().isNull();
132 	}
133 
134 	@Test void bb05_uc() {
135 		var x = "foobar";
136 		var nil = n(String.class);
137 		test(x).asUc().is("FOOBAR").is("foobar");
138 		test(nil).asUc().isNull();
139 	}
140 
141 	@Test void bb06_lines() {
142 		var x = "foo\nbar";
143 		var nil = n(String.class);
144 		test(x).asLines().isHas("foo","bar");
145 		test(nil).asLines().isNull();
146 	}
147 
148 	@Test void bb07_oneLine() {
149 		var x = "foo  bar";
150 		var nil = n(String.class);
151 		test(x).asOneLine().is("foo  bar");
152 		test(nil).asOneLine().isNull();
153 	}
154 
155 	//-----------------------------------------------------------------------------------------------------------------
156 	// Test tests
157 	//-----------------------------------------------------------------------------------------------------------------
158 
159 	@Test void ca01_exists() {
160 		var x = "1";
161 		var nil = n(String.class);
162 		test(x).isExists().isExists();
163 		assertThrows(BasicAssertionError.class, ()->test(nil).isExists(), "Value was null.");
164 	}
165 
166 	@Test void ca02_isNull() {
167 		var x = "1";
168 		var nil = n(String.class);
169 		test(nil).isNull();
170 		assertThrows(BasicAssertionError.class, ()->test(x).isNull(), "Value was not null.");
171 	}
172 
173 	@Test void ca03_isNotNull() {
174 		var x = "1";
175 		var nil = n(String.class);
176 		test(x).isNotNull();
177 		assertThrows(BasicAssertionError.class, ()->test(nil).isNotNull(), "Value was null.");
178 	}
179 
180 	@Test void ca04a_is_T() {
181 		var x1 = "1";
182 		var x1a = "1";
183 		var x2 = "2";
184 		var nil = n(String.class);
185 		test(x1).is(x1);
186 		test(x1).is(x1a);
187 		test(nil).is(nil);
188 		assertThrown(()->test(x1).is(x2)).asMessage().asOneLine().is("String differed at position 0.  Expect='2'.  Actual='1'.");
189 		assertThrown(()->test(x1).is(nil)).asMessage().asOneLine().is("String differed at position 0.  Expect='null'.  Actual='1'.");
190 		assertThrown(()->test(nil).is(x2)).asMessage().asOneLine().is("String differed at position 0.  Expect='2'.  Actual='null'.");
191 	}
192 
193 	@Test void ca04b_is_predicate() {
194 		var x1 = "1";
195 		test(x1).is(x->x.length()==1);
196 		assertThrown(()->test(x1).is(x->x.length()==2)).asMessage().asOneLine().is("Unexpected value: '1'.");
197 		assertThrown(()->test(x1).is(ne(x1))).asMessage().asOneLine().is("Value unexpectedly matched.  Value='1'.");
198 	}
199 
200 	@Test void ca05_isNot() {
201 		var x1 = "1";
202 		var x1a = "1";
203 		var x2 = "2";
204 		var nil = n(String.class);
205 		test(x1).isNot(x2);
206 		test(x1).isNot(nil);
207 		test(nil).isNot(x1);
208 		assertThrown(()->test(x1).isNot(x1a)).asMessage().asOneLine().is("String equaled unexpected.  Value='1'.");
209 		assertThrown(()->test(nil).isNot(nil)).asMessage().asOneLine().is("String equaled unexpected.  Value='null'.");
210 	}
211 
212 	@Test void ca06_isAny() {
213 		var x1 = "1";
214 		var x1a = "1";
215 		var x2 = "2";
216 		var nil = n(String.class);
217 		test(x1).isAny(x1a, x2);
218 		assertThrown(()->test(x1).isAny(x2)).asMessage().asOneLine().is("Expected value not found.  Expect='[2]'.  Actual='1'.");
219 		assertThrown(()->test(x1).isAny()).asMessage().asOneLine().is("Expected value not found.  Expect='[]'.  Actual='1'.");
220 		assertThrown(()->test(nil).isAny(x2)).asMessage().asOneLine().is("Expected value not found.  Expect='[2]'.  Actual='null'.");
221 	}
222 
223 	@Test void ca07_isNotAny() {
224 		var x1 = "1";
225 		var x1a = "1";
226 		var x2 = "2";
227 		var nil = n(String.class);
228 		test(x1).isNotAny(x2);
229 		test(x1).isNotAny();
230 		test(nil).isNotAny(x2);
231 		assertThrown(()->test(x1).isNotAny(x1a)).asMessage().asOneLine().is("Unexpected value found.  Unexpected='1'.  Actual='1'.");
232 		assertThrown(()->test(nil).isNotAny(nil)).asMessage().asOneLine().is("Unexpected value found.  Unexpected='null'.  Actual='null'.");
233 	}
234 
235 	@Test void ca08_isSame() {
236 		var x1 = new String("1");
237 		var x1a = new String("1");
238 		var nil = n(String.class);
239 		test(x1).isSame(x1);
240 		test(nil).isSame(nil);
241 		assertThrown(()->test(x1).isSame(x1a)).asMessage().asOneLine().isMatches("Not the same value.  Expect='1(String@*)'.  Actual='1(String@*)'.");
242 		assertThrown(()->test(nil).isSame(x1a)).asMessage().asOneLine().isMatches("Not the same value.  Expect='1(String@*)'.  Actual='null(null)'.");
243 		assertThrown(()->test(x1).isSame(nil)).asMessage().asOneLine().isMatches("Not the same value.  Expect='null(null)'.  Actual='1(String@*)'.");
244 	}
245 
246 	@Test void ca09_isSameJsonAs() {
247 		var x1 = "1";
248 		var x1a = "1";
249 		var x2 = "2";
250 		var nil = n(String.class);
251 		test(x1).isSameJsonAs(x1a);
252 		test(nil).isSameJsonAs(nil);
253 		assertThrown(()->test(x1a).isSameJsonAs(x2)).asMessage().asOneLine().is("Unexpected comparison.  Expect=''2''.  Actual=''1''.");
254 		assertThrown(()->test(nil).isSameJsonAs(x2)).asMessage().asOneLine().is("Unexpected comparison.  Expect=''2''.  Actual='null'.");
255 		assertThrown(()->test(x1).isSameJsonAs(nil)).asMessage().asOneLine().is("Unexpected comparison.  Expect='null'.  Actual=''1''.");
256 	}
257 
258 	@Test void ca10_isSameSortedJsonAs() {
259 		var x1 = "1";
260 		var x1a = "1";
261 		var x2 = "2";
262 		var nil = n(String.class);
263 		test(x1).isSameSortedJsonAs(x1a);
264 		test(nil).isSameSortedJsonAs(nil);
265 		assertThrown(()->test(x1a).isSameSortedJsonAs(x2)).asMessage().asOneLine().is("Unexpected comparison.  Expect=''2''.  Actual=''1''.");
266 		assertThrown(()->test(nil).isSameSortedJsonAs(x2)).asMessage().asOneLine().is("Unexpected comparison.  Expect=''2''.  Actual='null'.");
267 		assertThrown(()->test(x1).isSameSortedJsonAs(nil)).asMessage().asOneLine().is("Unexpected comparison.  Expect='null'.  Actual=''1''.");
268 	}
269 
270 	@Test void ca11_isSameSerializedAs() {
271 		var x1 = "1";
272 		var x1a = "1";
273 		var x2 = "2";
274 		var nil = n(String.class);
275 		var s = Json5Serializer.DEFAULT;
276 		test(x1).isSameSerializedAs(x1a, s);
277 		test(nil).isSameSerializedAs(nil, s);
278 		assertThrown(()->test(x1a).isSameSerializedAs(x2, s)).asMessage().asOneLine().is("Unexpected comparison.  Expect=''2''.  Actual=''1''.");
279 		assertThrown(()->test(nil).isSameSerializedAs(x2, s)).asMessage().asOneLine().is("Unexpected comparison.  Expect=''2''.  Actual='null'.");
280 		assertThrown(()->test(x1).isSameSerializedAs(nil, s)).asMessage().asOneLine().is("Unexpected comparison.  Expect='null'.  Actual=''1''.");
281 	}
282 
283 	@Test void ca12_isType() {
284 		var x = "1";
285 		var nil = n(String.class);
286 		test(x).isType(String.class);
287 		test(x).isType(Object.class);
288 		assertThrown(()->test(x).isType(Integer.class)).asMessage().asOneLine().is("Unexpected type.  Expect='java.lang.Integer'.  Actual='java.lang.String'.");
289 		assertThrown(()->test(nil).isType(Integer.class)).asMessage().asOneLine().is("Value was null.");
290 		assertThrown(()->test(x).isType(null)).asMessage().asOneLine().is("Argument 'parent' cannot be null.");
291 	}
292 
293 	@Test void ca13_isExactType() {
294 		var x = "1";
295 		var nil = n(String.class);
296 		test(x).isExactType(String.class);
297 		assertThrown(()->test(x).isExactType(Object.class)).asMessage().asOneLine().is("Unexpected type.  Expect='java.lang.Object'.  Actual='java.lang.String'.");
298 		assertThrown(()->test(x).isExactType(Integer.class)).asMessage().asOneLine().is("Unexpected type.  Expect='java.lang.Integer'.  Actual='java.lang.String'.");
299 		assertThrown(()->test(nil).isExactType(Integer.class)).asMessage().asOneLine().is("Value was null.");
300 		assertThrown(()->test(x).isExactType(null)).asMessage().asOneLine().is("Argument 'parent' cannot be null.");
301 	}
302 
303 	@Test void ca14_isString() {
304 		var x = "1";
305 		var nil = n(String.class);
306 
307 		test(x).isString("1");
308 		test(nil).isString(null);
309 		assertThrown(()->test(x).isString("bad")).asMessage().asOneLine().is("String differed at position 0.  Expect='bad'.  Actual='1'.");
310 		assertThrown(()->test(x).isString(null)).asMessage().asOneLine().is("String differed at position 0.  Expect='null'.  Actual='1'.");
311 		assertThrown(()->test(nil).isString("bad")).asMessage().asOneLine().is("String differed at position 0.  Expect='bad'.  Actual='null'.");
312 	}
313 
314 	@Test void ca15_isJson() {
315 		var x = "1";
316 		var nil = n(String.class);
317 
318 		test(x).isJson("'1'");
319 		test(nil).isJson("null");
320 		assertThrown(()->test(x).isJson("bad")).asMessage().asOneLine().is("String differed at position 0.  Expect='bad'.  Actual=''1''.");
321 		assertThrown(()->test(x).isJson(null)).asMessage().asOneLine().is("String differed at position 0.  Expect='null'.  Actual=''1''.");
322 		assertThrown(()->test(nil).isJson("bad")).asMessage().asOneLine().is("String differed at position 0.  Expect='bad'.  Actual='null'.");
323 	}
324 
325 	@Test void cb01_isIc() {
326 		var x = "foobar";
327 		var nil = n(String.class);
328 
329 		test(x).isIc("FOOBAR");
330 		assertThrown(()->test(x).isIc("FOOBAZ")).asMessage().asOneLine().is("String differed at position 5.  Expect='FOOBAZ'.  Actual='foobar'.");
331 		assertThrown(()->test(nil).isIc("FOOBAZ")).asMessage().asOneLine().is("String differed at position 0.  Expect='FOOBAZ'.  Actual='null'.");
332 		assertThrown(()->test(x).isIc(null)).asMessage().asOneLine().is("String differed at position 0.  Expect='null'.  Actual='foobar'.");
333 	}
334 
335 	@Test void cb02_isNotIc() {
336 		var x = "foobar";
337 		var nil = n(String.class);
338 
339 		test(x).isNotIc("foobaz");
340 		assertThrown(()->test(x).isNotIc("Foobar")).asMessage().asOneLine().is("String equaled unexpected.  Value='foobar'.");
341 		assertThrown(()->test(nil).isNotIc(null)).asMessage().asOneLine().is("String equaled unexpected.  Value='null'.");
342 		test(x).isNotIc(null);
343 		test(nil).isNotIc("foobar");
344 	}
345 
346 	@Test void cb03_isLines() {
347 		var x = "foo\nbar\nbaz";
348 		var nil = n(String.class);
349 
350 		test(x).isLines("foo","bar","baz");
351 		assertThrows(IllegalArgumentException.class, ()->test(nil).isLines((String[])null), "Argument 'lines' cannot be null.");
352 		assertThrows(BasicAssertionError.class, ()->test(nil).isLines((String)null), "Value was null.");
353 		assertThrown(()->test(x).asJavaStrings().isLines("foo","bar","bar")).asMessage().asOneLine().is("String differed at position 10.  Expect='foo\\nbar\\nbar'.  Actual='foo\\nbar\\nbaz'.");
354 	}
355 
356 	@Test void cb04_isSortedLines() {
357 		var x1 = "foo\nbar\nbaz";
358 		var x2 = "foo";
359 		var empty = "";
360 		var nil = n(String.class);
361 
362 		test(x1).isSortedLines("bar","foo","baz");
363 		assertThrows(IllegalArgumentException.class, ()->test(nil).isSortedLines((String[])null), "Argument 'lines' cannot be null.");
364 		test(empty).isSortedLines((String)null);
365 		assertThrows(BasicAssertionError.class, ()->test(nil).isSortedLines(), "Value was null.");
366 		assertThrown(()->test(x1).isSortedLines("bar","foo","bar")).asMessage().asOneLine().is("Expected string had different values at line 2.  Expect='bar'.  Actual='baz'.");
367 		assertThrown(()->test(x1).isSortedLines("bar","foo")).asMessage().asOneLine().is("Expected string had different numbers of lines.  Expect='2'.  Actual='3'.");
368 		assertThrows(BasicAssertionError.class, ()->test(nil).isSortedLines("foo"), "Value was null.");
369 		assertThrown(()->test(x2).isSortedLines((String)null)).asMessage().asOneLine().is("Expected string had different values at line 1.  Expect=''.  Actual='foo'.");
370 	}
371 
372 	@Test void cb05_contains() {
373 		var x = "foobar";
374 		var nil = n(String.class);
375 		test(x).isContains("foo","bar");
376 		assertThrown(()->test(x).isContains("foo","baz")).asMessage().asOneLine().is("String did not contain expected substring.  Substring='baz'.  Value='foobar'.");
377 		test(nil).isContains();
378 		assertThrows(IllegalArgumentException.class, ()->test(x).isContains((String[])null), "Argument 'values' cannot be null.");
379 		test(x).isContains((String)null);
380 		assertThrown(()->test(nil).isContains("foobar")).asMessage().asOneLine().is("String did not contain expected substring.  Substring='foobar'.  Value='null'.");
381 	}
382 
383 	@Test void cb06_doesNotContain() {
384 		var x = "foobar";
385 		var nil = n(String.class);
386 		test(x).isNotContains("baz","qux");
387 		assertThrown(()->test(x).isNotContains("foo","baz")).asMessage().asOneLine().is("String contained unexpected substring.  Substring='foo'.  Value='foobar'.");
388 		test(nil).isNotContains();
389 		assertThrows(IllegalArgumentException.class, ()->test(x).isNotContains((String[])null), "Argument 'values' cannot be null.");
390 		test(x).isNotContains((String)null);
391 		test(nil).isNotContains("foobar");
392 	}
393 
394 	@Test void cb07_isEmpty() {
395 		var x = "1";
396 		var empty = "";
397 		var nil = n(String.class);
398 		test(empty).isEmpty();
399 		test(nil).isEmpty();
400 		assertThrown(()->test(x).isEmpty()).asMessage().asOneLine().is("String was not empty.  Value='1'.");
401 	}
402 
403 	@Test void cb08_isNotEmpty() {
404 		var x = "1";
405 		var empty = "";
406 		var nil = n(String.class);
407 		test(x).isNotEmpty();
408 		assertThrows(BasicAssertionError.class, ()->test(empty).isNotEmpty(), "String was empty.");
409 		assertThrows(BasicAssertionError.class, ()->test(nil).isNotEmpty(), "String was null.");
410 	}
411 
412 	@Test void cb09_matches() {
413 		var x = "foo";
414 		var empty = "";
415 		var nil = n(String.class);
416 		test(x).isMatches("fo*");
417 		assertThrown(()->test(x).isMatches("b*")).asMessage().asOneLine().is("String did not match expected pattern.  Pattern='\\Qb\\E.*\\Q\\E'.  Value='foo'.");
418 		assertThrows(BasicAssertionError.class, ()->test(nil).isMatches("b*"), "Value was null.");
419 		assertThrows(IllegalArgumentException.class, ()->test(empty).isMatches(null), "Argument 'searchPattern' cannot be null.");
420 	}
421 
422 	@Test void cb10_regex() {
423 		var x = "foo";
424 		var empty = "";
425 		var nil = n(String.class);
426 		test(x).isPattern("fo+");
427 		assertThrown(()->test(x).isPattern("bar")).asMessage().asOneLine().is("String did not match expected pattern.  Pattern='bar'.  Value='foo'.");
428 		assertThrows(BasicAssertionError.class, ()->test(nil).isPattern("fo+"), "Value was null.");
429 		assertThrows(IllegalArgumentException.class, ()->test(empty).isPattern((String)null), "Argument 'regex' cannot be null.");
430 	}
431 
432 	@Test void cb10b_regex_wFlags() {
433 		var x = "foo";
434 		var empty = "";
435 		var nil = n(String.class);
436 		test(x).isPattern("FO+", Pattern.CASE_INSENSITIVE);
437 		assertThrown(()->test(x).isPattern("bar")).asMessage().asOneLine().is("String did not match expected pattern.  Pattern='bar'.  Value='foo'.");
438 		assertThrows(BasicAssertionError.class, ()->test(nil).isPattern("fo+"), "Value was null.");
439 		assertThrows(IllegalArgumentException.class, ()->test(empty).isPattern((String)null), "Argument 'regex' cannot be null.");
440 	}
441 
442 	@Test void cb10c_regex_wPattern() {
443 		var x = "foo";
444 		var empty = "";
445 		var nil = n(String.class);
446 		test(x).isPattern(Pattern.compile("FO+", Pattern.CASE_INSENSITIVE));
447 		assertThrown(()->test(x).isPattern("bar")).asMessage().asOneLine().is("String did not match expected pattern.  Pattern='bar'.  Value='foo'.");
448 		assertThrows(BasicAssertionError.class, ()->test(nil).isPattern("fo+"), "Value was null.");
449 		assertThrows(IllegalArgumentException.class, ()->test(empty).isPattern((String)null), "Argument 'regex' cannot be null.");
450 	}
451 
452 	@Test void cb12_startsWith() {
453 		var x = "foo";
454 		var nil = n(String.class);
455 		test(x).isStartsWith("fo");
456 		assertThrown(()->test(x).isStartsWith("x")).asMessage().asOneLine().is("String did not start with expected substring.  Substring='x'.  Value='foo'.");
457 		assertThrows(BasicAssertionError.class, ()->test(nil).isStartsWith("x"), "Value was null.");
458 	}
459 
460 	@Test void cb13_endsWith() {
461 		var x = "foo";
462 		var nil = n(String.class);
463 		test(x).isEndsWith("oo");
464 		assertThrown(()->test(x).isEndsWith("x")).asMessage().asOneLine().is("String did not end with expected substring.  Substring='x'.  Value='foo'.");
465 		assertThrows(BasicAssertionError.class, ()->test(nil).isEndsWith("x"), "Value was null.");
466 	}
467 }