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.io.*;
25  
26  import org.apache.juneau.*;
27  import org.apache.juneau.json.*;
28  import org.junit.jupiter.api.*;
29  
30  @Deprecated
31  class ThrowableAssertion_Test extends TestBase {
32  
33  	//------------------------------------------------------------------------------------------------------------------
34  	// Helpers
35  	//------------------------------------------------------------------------------------------------------------------
36  
37  	private <V extends Throwable> ThrowableAssertion<V> test(V value) {
38  		return assertThrowable(value).setSilent();
39  	}
40  
41  	private Throwable throwable() {
42  		return new RuntimeException();
43  	}
44  
45  	private Throwable throwable(String msg) {
46  		return new RuntimeException(msg);
47  	}
48  
49  	private Throwable throwable(Throwable inner) {
50  		return new RuntimeException(inner);
51  	}
52  	//-----------------------------------------------------------------------------------------------------------------
53  	// Basic tests
54  	//-----------------------------------------------------------------------------------------------------------------
55  
56  	@Test void a01_msg() {
57  		assertThrows(BasicAssertionError.class, ()->test(null).setMsg("Foo {0}", 1).isExists(), "Foo 1");
58  		assertThrows(RuntimeException.class, ()->test(null).setMsg("Foo {0}", 1).setThrowable(RuntimeException.class).isExists(), "Foo 1");
59  	}
60  
61  	@Test void a02_stdout() {
62  		test(null).setStdOut();
63  	}
64  
65  	//-----------------------------------------------------------------------------------------------------------------
66  	// Transform tests
67  	//-----------------------------------------------------------------------------------------------------------------
68  
69  	@Test void ba01a_asString() {
70  		var x = throwable("1");
71  		var nil = n(Throwable.class);
72  		test(x).asString().is("java.lang.RuntimeException: 1");
73  		test(nil).asString().isNull();
74  	}
75  
76  	@Test void ba01b_asString_wSerializer() {
77  		var x = throwable("1");
78  		var nil = n(Throwable.class);
79  		var s = Json5Serializer.DEFAULT;
80  		test(x).asString(s).is("'java.lang.RuntimeException: 1'");
81  		test(nil).asString(s).is("null");
82  	}
83  
84  	@Test void ba01c_asString_wPredicate() {
85  		var x1 = throwable();
86  		test(x1).asString(x -> "foo").is("foo");
87  	}
88  
89  	@Test void ba02_asJson() {
90  		var x = throwable("1");
91  		var nil = n(Throwable.class);
92  		test(x).asJson().is("'java.lang.RuntimeException: 1'");
93  		test(nil).asJson().is("null");
94  	}
95  
96  	@Test void ba03_asJsonSorted() {
97  		var x1 = throwable("1");
98  		var nil = n(Throwable.class);
99  		test(x1).asJsonSorted().is("'java.lang.RuntimeException: 1'");
100 		test(nil).asJsonSorted().is("null");
101 	}
102 
103 	@Test void ba04_apply() {
104 		var x1 = throwable("1");
105 		var x2 = throwable("2");
106 		test(x1).asTransformed(x -> x2).is(x2);
107 	}
108 
109 	@Test void bb01_message() {
110 		var x1 = throwable("1");
111 		var x2 = throwable();
112 		var nil = n(Throwable.class);
113 		test(x1).asMessage().is("1");
114 		test(x2).asMessage().isNull();
115 		test(nil).asMessage().isNull();
116 	}
117 
118 	@Test void bb02_messages() {
119 		var x1 = throwable("1");
120 		var x2 = throwable(x1);
121 		var nil = n(Throwable.class);
122 		test(x1).asMessages().isString("[1]");
123 		test(x2).asMessages().isString("[java.lang.RuntimeException: 1, 1]");
124 		test(nil).asMessages().isNull();
125 	}
126 
127 	@Test void bb03_localizedMessage() {
128 		var x1 = throwable("1");
129 		var x2 = throwable();
130 		var nil = n(Throwable.class);
131 		test(x1).asLocalizedMessage().is("1");
132 		test(x2).asLocalizedMessage().isNull();
133 		test(nil).asLocalizedMessage().isNull();
134 	}
135 
136 	@Test void bb04_localizedMessages() {
137 		var x1 = throwable("1");
138 		var x2 = throwable(x1);
139 		var nil = n(Throwable.class);
140 		test(x1).asLocalizedMessages().isString("[1]");
141 		test(x2).asLocalizedMessages().isString("[java.lang.RuntimeException: 1, 1]");
142 		test(nil).asLocalizedMessages().isNull();
143 	}
144 
145 	@Test void bb05_stackTrace() {
146 		var x1 = throwable();
147 		var nil = n(Throwable.class);
148 		test(x1).asStackTrace().asJoin().isContains("RuntimeException");
149 		test(nil).asStackTrace().isNull();
150 	}
151 
152 	@Test void bb06a_causedBy() {
153 		var x1 = throwable(throwable("1"));
154 		var x2 = throwable();
155 		var nil = n(Throwable.class);
156 		test(x1).asCausedBy().asMessage().is("1");
157 		test(x2).asMessage().isNull();
158 		test(nil).asCausedBy().asMessage().isNull();
159 	}
160 
161 	@Test void bb06b_causedBy_wType() {
162 		var x1 = throwable(throwable("1"));
163 		var x2 = throwable();
164 		var nil = n(Throwable.class);
165 		test(x1).asCausedBy(RuntimeException.class).asMessage().is("1");
166 		test(x2).asCausedBy(RuntimeException.class).isNull();
167 		test(nil).asCausedBy(RuntimeException.class).isNull();
168 		assertThrown(()->test(x1).asCausedBy(IOException.class)).asMessage().asOneLine().is("Caused-by exception not of expected type.  Expected='java.io.IOException'.  Actual='java.lang.RuntimeException'.");
169 	}
170 
171 	@Test void bb07_find() {
172 		var x1 = throwable(new IOException());
173 		var x2 = throwable();
174 		var nil = n(Throwable.class);
175 		test(x1).asFind(RuntimeException.class).isExists();
176 		test(x1).asFind(IOException.class).isExists();
177 		test(x1).asFind(Exception.class).isExists();
178 		test(x1).asFind(FileNotFoundException.class).isNull();
179 		test(x2).asFind(RuntimeException.class).isExists();
180 		test(x2).asFind(IOException.class).isNull();
181 		test(nil).asFind(RuntimeException.class).isNull();
182 	}
183 
184 	//-----------------------------------------------------------------------------------------------------------------
185 	// Test tests
186 	//-----------------------------------------------------------------------------------------------------------------
187 
188 	@Test void ca01_exists() {
189 		var x = throwable();
190 		var nil = n(Throwable.class);
191 		test(x).isExists().isExists();
192 		assertThrows(BasicAssertionError.class, ()->test(nil).isExists(), "Exception was not thrown.");
193 	}
194 
195 	@Test void ca02_isNull() {
196 		var x = throwable();
197 		var nil = n(Throwable.class);
198 		test(nil).isNull();
199 		assertThrows(BasicAssertionError.class, ()->test(x).isNull(), "Value was not null.");
200 	}
201 
202 	@Test void ca03_isNotNull() {
203 		var x = throwable();
204 		var nil = n(Throwable.class);
205 		test(x).isNotNull();
206 		assertThrows(BasicAssertionError.class, ()->test(nil).isNotNull(), "Value was null.");
207 	}
208 
209 	@Test void ca04a_is_T() {
210 		var x1 = throwable("1");
211 		var x1a = throwable("1");
212 		var x2 = throwable("2");
213 		var nil = n(Throwable.class);
214 		test(x1).is(x1);
215 		test(x1).is(x1a);
216 		test(nil).is(nil);
217 		assertThrown(()->test(x1).is(x2)).asMessage().asOneLine().is("Unexpected value.  Expect='java.lang.RuntimeException: 2'.  Actual='java.lang.RuntimeException: 1'.");
218 		assertThrown(()->test(x1).is(nil)).asMessage().asOneLine().is("Unexpected value.  Expect='null'.  Actual='java.lang.RuntimeException: 1'.");
219 		assertThrown(()->test(nil).is(x2)).asMessage().asOneLine().is("Unexpected value.  Expect='java.lang.RuntimeException: 2'.  Actual='null'.");
220 	}
221 
222 	@Test void ca04b_is_predicate() {
223 		var x1 = throwable("1");
224 		test(x1).is(x->x.getMessage().equals("1"));
225 		assertThrown(()->test(x1).is(x->x.getMessage().length()==4)).asMessage().asOneLine().is("Unexpected value: 'java.lang.RuntimeException: 1'.");
226 		assertThrown(()->test(x1).is(ne(x1))).asMessage().asOneLine().is("Value unexpectedly matched.  Value='java.lang.RuntimeException: 1'.");
227 	}
228 
229 	@Test void ca05_isNot() {
230 		var x1 = throwable("1");
231 		var x1a = throwable("1");
232 		var x2 = throwable("2");
233 		var nil = n(Throwable.class);
234 		test(x1).isNot(x2);
235 		test(x1).isNot(nil);
236 		test(nil).isNot(x1);
237 		assertThrown(()->test(x1).isNot(x1a)).asMessage().asOneLine().is("Unexpected value.  Did not expect='java.lang.RuntimeException: 1'.  Actual='java.lang.RuntimeException: 1'.");
238 		assertThrown(()->test(nil).isNot(nil)).asMessage().asOneLine().is("Unexpected value.  Did not expect='null'.  Actual='null'.");
239 	}
240 
241 	@Test void ca06_isAny() {
242 		var x1 = throwable("1");
243 		var x1a = throwable("1");
244 		var x2 = throwable("2");
245 		var nil = n(Throwable.class);
246 		test(x1).isAny(x1a, x2);
247 		assertThrown(()->test(x1).isAny(x2)).asMessage().asOneLine().is("Expected value not found.  Expect='[java.lang.RuntimeException: 2]'.  Actual='java.lang.RuntimeException: 1'.");
248 		assertThrown(()->test(x1).isAny()).asMessage().asOneLine().is("Expected value not found.  Expect='[]'.  Actual='java.lang.RuntimeException: 1'.");
249 		assertThrown(()->test(nil).isAny(x2)).asMessage().asOneLine().is("Expected value not found.  Expect='[java.lang.RuntimeException: 2]'.  Actual='null'.");
250 	}
251 
252 	@Test void ca07_isNotAny() {
253 		var x1 = throwable("1");
254 		var x1a = throwable("1");
255 		var x2 = throwable("2");
256 		var nil = n(Throwable.class);
257 		test(x1).isNotAny(x2);
258 		test(x1).isNotAny();
259 		test(nil).isNotAny(x2);
260 		assertThrown(()->test(x1).isNotAny(x1a)).asMessage().asOneLine().is("Unexpected value found.  Unexpected='java.lang.RuntimeException: 1'.  Actual='java.lang.RuntimeException: 1'.");
261 		assertThrown(()->test(nil).isNotAny(nil)).asMessage().asOneLine().is("Unexpected value found.  Unexpected='null'.  Actual='null'.");
262 	}
263 
264 	@Test void ca08_isSame() {
265 		var x1 = throwable("1");
266 		var x1a = throwable("1");
267 		var nil = n(Throwable.class);
268 		test(x1).isSame(x1);
269 		test(nil).isSame(nil);
270 		assertThrown(()->test(x1).isSame(x1a)).asMessage().asOneLine().isMatches("Not the same value.  Expect='java.lang.RuntimeException: 1(RuntimeException@*)'.  Actual='java.lang.RuntimeException: 1(RuntimeException@*)'.");
271 		assertThrown(()->test(nil).isSame(x1a)).asMessage().asOneLine().isMatches("Not the same value.  Expect='java.lang.RuntimeException: 1(RuntimeException@*)'.  Actual='null(null)'.");
272 		assertThrown(()->test(x1).isSame(nil)).asMessage().asOneLine().isMatches("Not the same value.  Expect='null(null)'.  Actual='java.lang.RuntimeException: 1(RuntimeException@*)'.");
273 	}
274 
275 	@Test void ca09_isSameJsonAs() {
276 		var x1 = throwable("1");
277 		var x1a = throwable("1");
278 		var x2 = throwable("2");
279 		var nil = n(Throwable.class);
280 		test(x1).isSameJsonAs(x1a);
281 		test(nil).isSameJsonAs(nil);
282 		assertThrown(()->test(x1a).isSameJsonAs(x2)).asMessage().asOneLine().is("Unexpected comparison.  Expect=''java.lang.RuntimeException: 2''.  Actual=''java.lang.RuntimeException: 1''.");
283 		assertThrown(()->test(nil).isSameJsonAs(x2)).asMessage().asOneLine().is("Unexpected comparison.  Expect=''java.lang.RuntimeException: 2''.  Actual='null'.");
284 		assertThrown(()->test(x1).isSameJsonAs(nil)).asMessage().asOneLine().is("Unexpected comparison.  Expect='null'.  Actual=''java.lang.RuntimeException: 1''.");
285 	}
286 
287 	@Test void ca10_isSameSortedJsonAs() {
288 		var x1 = throwable("1");
289 		var x1a = throwable("1");
290 		var x2 = throwable("2");
291 		var nil = n(Throwable.class);
292 		test(x1).isSameSortedJsonAs(x1a);
293 		test(nil).isSameSortedJsonAs(nil);
294 		assertThrown(()->test(x1a).isSameSortedJsonAs(x2)).asMessage().asOneLine().is("Unexpected comparison.  Expect=''java.lang.RuntimeException: 2''.  Actual=''java.lang.RuntimeException: 1''.");
295 		assertThrown(()->test(nil).isSameSortedJsonAs(x2)).asMessage().asOneLine().is("Unexpected comparison.  Expect=''java.lang.RuntimeException: 2''.  Actual='null'.");
296 		assertThrown(()->test(x1).isSameSortedJsonAs(nil)).asMessage().asOneLine().is("Unexpected comparison.  Expect='null'.  Actual=''java.lang.RuntimeException: 1''.");
297 	}
298 
299 	@Test void ca11_isSameSerializedAs() {
300 		var x1 = throwable("1");
301 		var x1a = throwable("1");
302 		var x2 = throwable("2");
303 		var nil = n(Throwable.class);
304 		var s = Json5Serializer.DEFAULT;
305 		test(x1).isSameSerializedAs(x1a, s);
306 		test(nil).isSameSerializedAs(nil, s);
307 		assertThrown(()->test(x1a).isSameSerializedAs(x2, s)).asMessage().asOneLine().is("Unexpected comparison.  Expect=''java.lang.RuntimeException: 2''.  Actual=''java.lang.RuntimeException: 1''.");
308 		assertThrown(()->test(nil).isSameSerializedAs(x2, s)).asMessage().asOneLine().is("Unexpected comparison.  Expect=''java.lang.RuntimeException: 2''.  Actual='null'.");
309 		assertThrown(()->test(x1).isSameSerializedAs(nil, s)).asMessage().asOneLine().is("Unexpected comparison.  Expect='null'.  Actual=''java.lang.RuntimeException: 1''.");
310 	}
311 
312 	@Test void ca12_isType() {
313 		var x = throwable();
314 		var nil = n(Throwable.class);
315 		test(x).isType(Exception.class);
316 		test(x).isType(Object.class);
317 		assertThrown(()->test(x).isType(String.class)).asMessage().asOneLine().is("Exception was not expected type.  Expect='java.lang.String'.  Actual='java.lang.RuntimeException'.");
318 		assertThrown(()->test(nil).isType(String.class)).asMessage().asOneLine().is("Exception was not thrown.");
319 		assertThrown(()->test(x).isType(null)).asMessage().asOneLine().is("Argument 'parent' cannot be null.");
320 	}
321 
322 	@Test void ca13_isExactType() {
323 		var x = throwable();
324 		var nil = n(Throwable.class);
325 		test(x).isExactType(RuntimeException.class);
326 		assertThrown(()->test(x).isExactType(Object.class)).asMessage().asOneLine().is("Exception was not expected type.  Expect='java.lang.Object'.  Actual='java.lang.RuntimeException'.");
327 		assertThrown(()->test(x).isExactType(String.class)).asMessage().asOneLine().is("Exception was not expected type.  Expect='java.lang.String'.  Actual='java.lang.RuntimeException'.");
328 		assertThrown(()->test(nil).isExactType(String.class)).asMessage().asOneLine().is("Exception was not thrown.");
329 		assertThrown(()->test(x).isExactType(null)).asMessage().asOneLine().is("Argument 'type' cannot be null.");
330 	}
331 
332 	@Test void ca14_isString() {
333 		var x = throwable("1");
334 		var nil = n(Throwable.class);
335 		test(x).isString("java.lang.RuntimeException: 1");
336 		test(nil).isString(null);
337 		assertThrown(()->test(x).isString("bad")).asMessage().asOneLine().is("String differed at position 0.  Expect='bad'.  Actual='java.lang.RuntimeException: 1'.");
338 		assertThrown(()->test(x).isString(null)).asMessage().asOneLine().is("String differed at position 0.  Expect='null'.  Actual='java.lang.RuntimeException: 1'.");
339 		assertThrown(()->test(nil).isString("bad")).asMessage().asOneLine().is("String differed at position 0.  Expect='bad'.  Actual='null'.");
340 	}
341 
342 	@Test void ca15_isJson() {
343 		var x = throwable("1");
344 		var nil = n(Throwable.class);
345 		test(x).isJson("'java.lang.RuntimeException: 1'");
346 		test(nil).isJson("null");
347 		assertThrown(()->test(x).isJson("bad")).asMessage().asOneLine().is("String differed at position 0.  Expect='bad'.  Actual=''java.lang.RuntimeException: 1''.");
348 		assertThrown(()->test(x).isJson(null)).asMessage().asOneLine().is("String differed at position 0.  Expect='null'.  Actual=''java.lang.RuntimeException: 1''.");
349 		assertThrown(()->test(nil).isJson("bad")).asMessage().asOneLine().is("String differed at position 0.  Expect='bad'.  Actual='null'.");
350 	}
351 }