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