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.*;
20  import static org.apache.juneau.assertions.AssertionPredicates.eq;
21  import static org.apache.juneau.assertions.AssertionPredicates.ne;
22  import static org.apache.juneau.assertions.Assertions.*;
23  import static org.apache.juneau.commons.utils.CollectionUtils.*;
24  import static org.apache.juneau.commons.utils.Utils.*;
25  import static org.junit.jupiter.api.Assertions.*;
26  
27  import java.util.*;
28  import java.util.function.*;
29  
30  import org.apache.juneau.*;
31  import org.apache.juneau.json.*;
32  import org.junit.jupiter.api.*;
33  
34  @Deprecated
35  public class ArrayAssertion_Test extends TestBase {
36  
37  	//------------------------------------------------------------------------------------------------------------------
38  	// Helpers
39  	//------------------------------------------------------------------------------------------------------------------
40  
41  	public static final A A = new A();
42  	public static class A {
43  		public int a = 1, b = 2;
44  		@Override public String toString() { return "a="+a+",b="+b; }
45  	}
46  
47  	private static <E> ArrayAssertion<E> test(E[] value) {
48  		return assertArray(value).setSilent();
49  	}
50  
51  	//-----------------------------------------------------------------------------------------------------------------
52  	// Basic tests
53  	//-----------------------------------------------------------------------------------------------------------------
54  
55  	@Test void a01_msg() {
56  		assertThrows(BasicAssertionError.class, ()->test(null).setMsg("Foo {0}", 1).isExists(), "Foo 1");
57  		assertThrows(RuntimeException.class, ()->test(null).setMsg("Foo {0}", 1).setThrowable(RuntimeException.class).isExists(), "Foo 1");
58  	}
59  
60  	@Test void a02_stdout() {
61  		test(null).setStdOut();
62  	}
63  
64  	//-----------------------------------------------------------------------------------------------------------------
65  	// Transform tests
66  	//-----------------------------------------------------------------------------------------------------------------
67  
68  	@Test void ba01a_asString() {
69  		var x = a(1,2);
70  		var nil = na(Integer.class);
71  		test(x).asString().is("[1,2]");
72  		test(nil).asString().isNull();
73  	}
74  
75  	@Test void ba01b_asString_wSerializer() {
76  		var x = a(1,2);
77  		var nil = na(Integer.class);
78  		var s = Json5Serializer.DEFAULT;
79  		test(x).asString(s).is("[1,2]");
80  		test(nil).asString(s).is("null");
81  	}
82  
83  	@Test void ba01c_asString_wPredicate() {
84  		var x1 = a(1,2);
85  		test(x1).asString(x -> "foo").is("foo");
86  	}
87  
88  	@Test void ba02_asJson() {
89  		var x = a(1,2);
90  		var nil = na(Integer.class);
91  		test(x).asJson().is("[1,2]");
92  		test(nil).asJson().is("null");
93  	}
94  
95  	@Test void ba03_asJsonSorted() {
96  		var x1 = a(2,1);
97  		var nil = na(Integer.class);
98  		test(x1).asJsonSorted().is("[1,2]");
99  		test(nil).asJsonSorted().is("null");
100 	}
101 
102 	@Test void ba04_apply() {
103 		var x1 = a(1,2);
104 		var x2 = a(3,4);
105 		test(x1).asTransformed(x -> x2).is(x2);
106 	}
107 
108 	@Test void bb01_asStrings() {
109 		var x1 = a(1,2);
110 		var nil = na(Integer.class);
111 		test(x1).asStrings().asJoin().is("12");
112 		test(nil).asStrings().isNull();
113 	}
114 
115 	@Test void bb02_asBeanList() {
116 		var x = a(A,A);
117 		var nil = na(Integer.class);
118 		test(x).asBeanList().asProperty("a").asJson().is("[1,1]");
119 		test(nil).asBeanList().isNull();
120 	}
121 
122 	@Test void bb03_item() {
123 		var x = a(A,A);
124 		var nil = na(Integer.class);
125 		test(x).asItem(0).asBean().asProperty("a").is(1);
126 		test(x).asItem(-1).isNull();
127 		test(x).asItem(2).isNull();
128 		test(nil).asItem(0).isNull();
129 	}
130 
131 	@Test void bb04a_sorted() {
132 		var x = a(2,3,1);
133 		var nil = na(Integer.class);
134 		test(x).asSorted().asJson().is("[1,2,3]");
135 		test(x).asSorted(Comparator.reverseOrder()).asJson().is("[3,2,1]");
136 		test(x).asSorted(null).asJson().is("[1,2,3]");
137 		test(nil).asSorted().isNull();
138 	}
139 
140 	@Test void bb04b_sorted_wComparator() {
141 		var x = a(2,3,1);
142 		var nil = na(Integer.class);
143 		test(x).asSorted().asJson().is("[1,2,3]");
144 		test(x).asSorted(Comparator.reverseOrder()).asJson().is("[3,2,1]");
145 		test(x).asSorted(null).asJson().is("[1,2,3]");
146 		test(nil).asSorted().isNull();
147 	}
148 
149 	//-----------------------------------------------------------------------------------------------------------------
150 	// Test tests
151 	//-----------------------------------------------------------------------------------------------------------------
152 
153 	@Test void ca01_exists() {
154 		var x = ea(Integer.class);
155 		var nil = na(Integer.class);
156 		test(x).isExists().isExists();
157 		assertThrows(BasicAssertionError.class, ()->test(nil).isExists(), "Value was null.");
158 	}
159 
160 	@Test void ca02_isNull() {
161 		var x = ea(Integer.class);
162 		var nil = na(Integer.class);
163 		test(nil).isNull();
164 		assertThrows(BasicAssertionError.class, ()->test(x).isNull(), "Value was not null.");
165 	}
166 
167 	@Test void ca03_isNotNull() {
168 		var x = ea(Integer.class);
169 		var nil = na(Integer.class);
170 		test(x).isNotNull();
171 		assertThrows(BasicAssertionError.class, ()->test(nil).isNotNull(), "Value was null.");
172 	}
173 
174 	@Test void ca04a_is_T() {
175 		var x1 = a(null,1,2);
176 		var x1a = a(null,1,2);
177 		var x1b = a(null,1,3);
178 		var nil = na(Integer.class);
179 		test(x1).is(x1);
180 		test(x1).is(x1a);
181 		test(nil).is(nil);
182 		assertThrown(()->test(x1).is(x1b)).asMessage().asOneLine().is("Unexpected value.  Expect='[null,1,3]'.  Actual='[null,1,2]'.");
183 		assertThrown(()->test(x1).is(nil)).asMessage().asOneLine().is("Unexpected value.  Expect='null'.  Actual='[null,1,2]'.");
184 		assertThrown(()->test(nil).is(x1b)).asMessage().asOneLine().is("Unexpected value.  Expect='[null,1,3]'.  Actual='null'.");
185 	}
186 
187 	@Test void ca04b_is_predicate() {
188 		var x1 = a(null,1,2);
189 		test(x1).is(x->x.length==3);
190 		assertThrown(()->test(x1).is(x->x.length==2)).asMessage().asOneLine().is("Unexpected value: '[null,1,2]'.");
191 		assertThrown(()->test(x1).is(ne(x1))).asMessage().asOneLine().is("Value unexpectedly matched.  Value='[null,1,2]'.");
192 	}
193 
194 	@Test void ca05_isNot() {
195 		var x1 = a(null,1,2);
196 		var x1a = a(null,1,2);
197 		var x2 = a(null,1,3);
198 		var nil = na(Integer.class);
199 		test(x1).isNot(x2);
200 		test(x1).isNot(nil);
201 		test(nil).isNot(x1);
202 		assertThrown(()->test(x1).isNot(x1a)).asMessage().asOneLine().is("Unexpected value.  Did not expect='[null,1,2]'.  Actual='[null,1,2]'.");
203 		assertThrown(()->test(nil).isNot(nil)).asMessage().asOneLine().is("Unexpected value.  Did not expect='null'.  Actual='null'.");
204 	}
205 
206 	@Test void ca06_isAny() {
207 		var x1 = a(null,1,2);
208 		var x1a = a(null,1,2);
209 		var x2 = a(null,1,3);
210 		var nil = na(Integer.class);
211 		test(x1).isAny(x1a, x2);
212 		assertThrown(()->test(x1).isAny(x2)).asMessage().asOneLine().is("Expected value not found.  Expect='[[null,1,3]]'.  Actual='[null,1,2]'.");
213 		assertThrown(()->test(x1).isAny()).asMessage().asOneLine().is("Expected value not found.  Expect='[]'.  Actual='[null,1,2]'.");
214 		assertThrown(()->test(nil).isAny(x2)).asMessage().asOneLine().is("Expected value not found.  Expect='[[null,1,3]]'.  Actual='null'.");
215 	}
216 
217 	@Test void ca07_isNotAny() {
218 		var x1 = a(null,1,2);
219 		var x1a = a(null,1,2);
220 		var x2 = a(null,1,3);
221 		var nil = na(Integer.class);
222 		test(x1).isNotAny(x2);
223 		test(x1).isNotAny();
224 		test(nil).isNotAny(x2);
225 		assertThrown(()->test(x1).isNotAny(x1a)).asMessage().asOneLine().is("Unexpected value found.  Unexpected='[null,1,2]'.  Actual='[null,1,2]'.");
226 		assertThrown(()->test(nil).isNotAny(nil)).asMessage().asOneLine().is("Unexpected value found.  Unexpected='null'.  Actual='null'.");
227 	}
228 
229 	@Test void ca08_isSame() {
230 		var x1 = a(null,1,2);
231 		var x1a = a(null,1,2);
232 		var nil = na(Integer.class);
233 		test(x1).isSame(x1);
234 		test(nil).isSame(nil);
235 		assertThrown(()->test(x1).isSame(x1a)).asMessage().asOneLine().isMatches("Not the same value.  Expect='[null,1,2](Integer[]@*)'.  Actual='[null,1,2](Integer[]@*)'.");
236 		assertThrown(()->test(nil).isSame(x1a)).asMessage().asOneLine().isMatches("Not the same value.  Expect='[null,1,2](Integer[]@*)'.  Actual='null(null)'.");
237 		assertThrown(()->test(x1).isSame(nil)).asMessage().asOneLine().isMatches("Not the same value.  Expect='null(null)'.  Actual='[null,1,2](Integer[]@*)'.");
238 	}
239 
240 	@Test void ca09_isSameJsonAs() {
241 		var x1 = a(null,1,2);
242 		var x1a = a(null,1,2);
243 		var x2 = a(null,1,3);
244 		var nil = na(Integer.class);
245 		test(x1).isSameJsonAs(x1a);
246 		test(nil).isSameJsonAs(nil);
247 		assertThrown(()->test(x1a).isSameJsonAs(x2)).asMessage().asOneLine().is("Unexpected comparison.  Expect='[null,1,3]'.  Actual='[null,1,2]'.");
248 		assertThrown(()->test(nil).isSameJsonAs(x2)).asMessage().asOneLine().is("Unexpected comparison.  Expect='[null,1,3]'.  Actual='null'.");
249 		assertThrown(()->test(x1).isSameJsonAs(nil)).asMessage().asOneLine().is("Unexpected comparison.  Expect='null'.  Actual='[null,1,2]'.");
250 	}
251 
252 	@Test void ca10_isSameSortedJsonAs() {
253 		var x1 = a(1,2);
254 		var x1a = a(2,1);
255 		var x2 = a(1,3);
256 		var nil = na(Integer.class);
257 		test(x1).isSameSortedJsonAs(x1a);
258 		test(nil).isSameSortedJsonAs(nil);
259 		assertThrown(()->test(x1a).isSameSortedJsonAs(x2)).asMessage().asOneLine().is("Unexpected comparison.  Expect='[1,3]'.  Actual='[1,2]'.");
260 		assertThrown(()->test(nil).isSameSortedJsonAs(x2)).asMessage().asOneLine().is("Unexpected comparison.  Expect='[1,3]'.  Actual='null'.");
261 		assertThrown(()->test(x1).isSameSortedJsonAs(nil)).asMessage().asOneLine().is("Unexpected comparison.  Expect='null'.  Actual='[1,2]'.");
262 	}
263 
264 	@Test void ca11_isSameSerializedAs() {
265 		var x1 = a(null,1,2);
266 		var x1a = a(null,1,2);
267 		var x2 = a(null,1,3);
268 		var nil = na(Integer.class);
269 		var s = Json5Serializer.DEFAULT;
270 		test(x1).isSameSerializedAs(x1a, s);
271 		test(nil).isSameSerializedAs(nil, s);
272 		assertThrown(()->test(x1a).isSameSerializedAs(x2, s)).asMessage().asOneLine().is("Unexpected comparison.  Expect='[null,1,3]'.  Actual='[null,1,2]'.");
273 		assertThrown(()->test(nil).isSameSerializedAs(x2, s)).asMessage().asOneLine().is("Unexpected comparison.  Expect='[null,1,3]'.  Actual='null'.");
274 		assertThrown(()->test(x1).isSameSerializedAs(nil, s)).asMessage().asOneLine().is("Unexpected comparison.  Expect='null'.  Actual='[null,1,2]'.");
275 	}
276 
277 	@Test void ca12_isType() {
278 		var x = ea(Integer.class);
279 		var nil = na(Integer.class);
280 		test(x).isType(Integer[].class);
281 		test(x).isType(Object[].class);
282 		test(x).isType(Object.class);
283 		assertThrown(()->test(x).isType(String[].class)).asMessage().asOneLine().is("Unexpected type.  Expect='[Ljava.lang.String;'.  Actual='[Ljava.lang.Integer;'.");
284 		assertThrown(()->test(nil).isType(Integer[].class)).asMessage().asOneLine().is("Value was null.");
285 		assertThrown(()->test(x).isType(null)).asMessage().asOneLine().is("Argument 'parent' cannot be null.");
286 	}
287 
288 	@Test void ca13_isExactType() {
289 		var x = ea(Integer.class);
290 		var nil = na(Integer.class);
291 		test(x).isExactType(Integer[].class);
292 		assertThrown(()->test(x).isExactType(String.class)).asMessage().asOneLine().is("Unexpected type.  Expect='java.lang.String'.  Actual='[Ljava.lang.Integer;'.");
293 		assertThrown(()->test(nil).isExactType(String.class)).asMessage().asOneLine().is("Value was null.");
294 		assertThrown(()->test(x).isExactType(null)).asMessage().asOneLine().is("Argument 'parent' cannot be null.");
295 	}
296 
297 	@Test void ca14_isString() {
298 		var x = a(null,1,2);
299 		var nil = na(Integer.class);
300 		test(x).isString("[null,1,2]");
301 		test(nil).isString(null);
302 		assertThrown(()->test(x).isString("bad")).asMessage().asOneLine().is("String differed at position 0.  Expect='bad'.  Actual='[null,1,2]'.");
303 		assertThrown(()->test(x).isString(null)).asMessage().asOneLine().is("String differed at position 0.  Expect='null'.  Actual='[null,1,2]'.");
304 		assertThrown(()->test(nil).isString("bad")).asMessage().asOneLine().is("String differed at position 0.  Expect='bad'.  Actual='null'.");
305 	}
306 
307 	@Test void ca15_isJson() {
308 		var x = a(null,1,2);
309 		var nil = na(Integer.class);
310 		test(x).isJson("[null,1,2]");
311 		test(nil).isJson("null");
312 		assertThrown(()->test(x).isJson("bad")).asMessage().asOneLine().is("String differed at position 0.  Expect='bad'.  Actual='[null,1,2]'.");
313 		assertThrown(()->test(x).isJson(null)).asMessage().asOneLine().is("String differed at position 0.  Expect='null'.  Actual='[null,1,2]'.");
314 		assertThrown(()->test(nil).isJson("bad")).asMessage().asOneLine().is("String differed at position 0.  Expect='bad'.  Actual='null'.");
315 	}
316 
317 	@Test void cb01_is_predicates() {
318 		var x1 = a(null,1,2);
319 		var nil = na(Integer.class);
320 		test(x1).is(isNull(),eq("1"),eq("2"));
321 		test(x1).is(isNull(),eq(1),eq(2));
322 		assertThrown(()->test(x1).is(isNull(),eq("1"),eq("3"))).asMessage().asOneLine().is("Array did not contain expected value at index 2.  Value did not match expected.  Expect='3'.  Actual='2'.");
323 		assertThrows(BasicAssertionError.class, ()->test(nil).is(isNull(),eq("1"),eq("3")), "Value was null.");
324 		test(x1).is((Predicate<Integer>)null,null,null);
325 	}
326 
327 	@Test void cb02_any() {
328 		var x1 = a(2,3,1);
329 		var nil = na(Integer.class);
330 		test(x1).isAny(x -> x .equals(3));
331 		test(x1).isAny(eq(3));
332 		assertThrown(()->test(x1).isAny(x -> x.equals(4))).asMessage().asOneLine().is("Array did not contain any matching value.  Value='[2,3,1]'.");
333 		assertThrows(IllegalArgumentException.class, ()->test(x1).isAny((Predicate<Integer>)null), "Argument 'test' cannot be null.");
334 		assertThrows(BasicAssertionError.class, ()->test(nil).isAny(x->true), "Value was null.");
335 	}
336 
337 	@Test void cb03_all() {
338 		var x1 = a(2,3,1);
339 		var nil = na(Integer.class);
340 		test(x1).isAll(x -> x < 4);
341 		assertThrown(()->test(x1).isAll(x -> x < 3)).asMessage().asOneLine().is("Array contained non-matching value at index 1.  Unexpected value: '3'.");
342 		assertThrown(()->test(x1).isAll(ne(3))).asMessage().asOneLine().is("Array contained non-matching value at index 1.  Value unexpectedly matched.  Value='3'.");
343 		assertThrows(IllegalArgumentException.class, ()->test(x1).isAll(null), "Argument 'test' cannot be null.");
344 		assertThrows(BasicAssertionError.class, ()->test(nil).isAll(x->true), "Value was null.");
345 	}
346 
347 	@Test void cb04_isEmpty() {
348 		var x1 = ea(String.class);
349 		var x2 = a("foo","bar");
350 		var nil = na(String.class);
351 		test(x1).isEmpty();
352 		assertThrows(BasicAssertionError.class, ()->test(x2).isEmpty(), "Array was not empty.");
353 		assertThrows(BasicAssertionError.class, ()->test(nil).isEmpty(), "Value was null.");
354 	}
355 
356 	@Test void cb05_isNotEmpty() {
357 		var x1 = ea(String.class);
358 		var x2 = a("foo","bar");
359 		var nil = na(String.class);
360 		test(x2).isNotEmpty();
361 		assertThrows(BasicAssertionError.class, ()->test(x1).isNotEmpty(), "Array was empty.");
362 		assertThrows(BasicAssertionError.class, ()->test(nil).isNotEmpty(), "Value was null.");
363 	}
364 
365 	@Test void cb06_contains() {
366 		var x1 = a(null,1,2);
367 		var nil = na(Integer.class);
368 		test(x1).isContains(null);
369 		test(x1).isContains(1);
370 		assertThrown(()->test(x1).isContains(3)).asMessage().asOneLine().is("Array did not contain expected value.  Expect='3'.  Actual='[null,1,2]'.");
371 		assertThrows(BasicAssertionError.class, ()->test(nil).isContains(3), "Value was null.");
372 		assertThrows(BasicAssertionError.class, ()->test(nil).isContains(null), "Value was null.");
373 	}
374 
375 	@Test void cb07_doesNotContain() {
376 		var x1 = a(null,1,2);
377 		var nil = na(Integer.class);
378 		test(x1).isNotContains(3);
379 		assertThrown(()->test(x1).isNotContains(1)).asMessage().asOneLine().is("Array contained unexpected value.  Unexpected='1'.  Actual='[null,1,2]'.");
380 		assertThrown(()->test(x1).isNotContains(null)).asMessage().asOneLine().is("Array contained unexpected value.  Unexpected='null'.  Actual='[null,1,2]'.");
381 		assertThrows(BasicAssertionError.class, ()->test(nil).isNotContains(3), "Value was null.");
382 	}
383 
384 	@Test void cb08_isSize() {
385 		var x1 = ea(String.class);
386 		var x2 = a("foo","bar");
387 		var nil = na(String.class);
388 		test(x1).isSize(0);
389 		test(x2).isSize(2);
390 		assertThrown(()->test(x1).isSize(2)).asMessage().asOneLine().is("Array did not have the expected size.  Expect=2.  Actual=0.");
391 		assertThrown(()->test(x2).isSize(0)).asMessage().asOneLine().is("Array did not have the expected size.  Expect=0.  Actual=2.");
392 		assertThrows(BasicAssertionError.class, ()->test(nil).isSize(0), "Value was null.");
393 	}
394 
395 	@Test void cb09_has() {
396 		var x= a("foo","bar");
397 		var nil = na(String.class);
398 		test(x).isHas("foo","bar");
399 		assertThrown(()->test(x).isHas("foo","baz")).asMessage().asOneLine().is("Array did not contain expected value at index 1.  Value did not match expected.  Expect='baz'.  Actual='bar'.");
400 		assertThrown(()->test(x).isHas("foo")).asMessage().asOneLine().is("Array did not have the expected size.  Expect=1.  Actual=2.");
401 		assertThrown(()->test(x).isHas(nil)).asMessage().asOneLine().is("Argument 'entries' cannot be null.");
402 		assertThrown(()->test(nil).isHas("foo")).asMessage().asOneLine().is("Value was null.");
403 	}
404 }