1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.juneau.commons.reflect;
18
19 import static org.junit.jupiter.api.Assertions.*;
20
21 import org.apache.juneau.*;
22 import org.junit.jupiter.api.*;
23
24
25
26
27 class BeanRuntimeException_Test extends TestBase {
28
29
30
31
32
33 @Test
34 void a01_constructor_withClassAndMessage_formatsMessage() {
35 var ex = new BeanRuntimeException(String.class, "Test message");
36 assertNotNull(ex);
37 assertTrue(ex.getMessage().contains("String"));
38 assertTrue(ex.getMessage().contains("Test message"));
39 assertNull(ex.getCause());
40 }
41
42 @Test
43 void a02_constructor_withClassAndMessageWithArgs_formatsMessage() {
44 var ex = new BeanRuntimeException(Integer.class, "Value is {0}", 42);
45 assertNotNull(ex);
46 assertTrue(ex.getMessage().contains("Integer"));
47 assertTrue(ex.getMessage().contains("42"));
48 assertNull(ex.getCause());
49 }
50
51 @Test
52 void a03_constructor_withClassAndNullMessage_handlesNull() {
53 String nullMessage = null;
54 var ex = new BeanRuntimeException(String.class, nullMessage);
55 assertNotNull(ex);
56 assertNull(ex.getMessage());
57 assertNull(ex.getCause());
58 }
59
60
61
62
63
64 @Test
65 void b01_constructor_withMessage_createsException() {
66 var ex = new BeanRuntimeException("Simple message");
67 assertNotNull(ex);
68 assertEquals("Simple message", ex.getMessage());
69 assertNull(ex.getCause());
70 }
71
72 @Test
73 void b02_constructor_withMessageAndArgs_formatsMessage() {
74 var ex = new BeanRuntimeException("Value is {0}", 123);
75 assertNotNull(ex);
76 assertTrue(ex.getMessage().contains("123"));
77 assertNull(ex.getCause());
78 }
79
80 @Test
81 void b03_constructor_withNullMessage_handlesNull() {
82 String nullMessage = null;
83 var ex = new BeanRuntimeException(nullMessage);
84 assertNotNull(ex);
85 assertNull(ex.getMessage());
86 assertNull(ex.getCause());
87 }
88
89
90
91
92
93 @Test
94 void c01_constructor_withThrowable_wrapsException() {
95 var cause = new IllegalArgumentException("Original error");
96 var ex = new BeanRuntimeException(cause);
97 assertNotNull(ex);
98 assertSame(cause, ex.getCause());
99 assertTrue(ex.getMessage().contains("Original error"));
100 }
101
102 @Test
103 void c02_constructor_withNullThrowable_handlesNull() {
104 Throwable nullCause = null;
105 var ex = new BeanRuntimeException(nullCause);
106 assertNotNull(ex);
107 assertNull(ex.getCause());
108 assertNull(ex.getMessage());
109 }
110
111
112
113
114
115 @Test
116 void d01_constructor_withCauseClassAndMessage_formatsMessage() {
117 var cause = new RuntimeException("Underlying error");
118 var ex = new BeanRuntimeException(cause, String.class, "Wrapper message");
119 assertNotNull(ex);
120 assertSame(cause, ex.getCause());
121 assertTrue(ex.getMessage().contains("String"));
122 assertTrue(ex.getMessage().contains("Wrapper message"));
123 }
124
125 @Test
126 void d02_constructor_withCauseClassAndMessageWithArgs_formatsMessage() {
127 var cause = new RuntimeException("Underlying error");
128 var ex = new BeanRuntimeException(cause, Integer.class, "Value {0} failed", 99);
129 assertNotNull(ex);
130 assertSame(cause, ex.getCause());
131 assertTrue(ex.getMessage().contains("Integer"));
132 assertTrue(ex.getMessage().contains("99"));
133 }
134
135 @Test
136 void d03_constructor_withCauseClassAndNullMessage_usesCauseMessage() {
137 var cause = new RuntimeException("Underlying error");
138 var ex = new BeanRuntimeException(cause, String.class, null);
139 assertNotNull(ex);
140 assertSame(cause, ex.getCause());
141 assertTrue(ex.getMessage().contains("String"));
142 assertTrue(ex.getMessage().contains("Underlying error"));
143 }
144
145 @Test
146 void d04_constructor_withCauseNullClassAndMessage_formatsMessage() {
147 var cause = new RuntimeException("Underlying error");
148 var ex = new BeanRuntimeException(cause, null, "Wrapper message");
149 assertNotNull(ex);
150 assertSame(cause, ex.getCause());
151 assertTrue(ex.getMessage().contains("Wrapper message"));
152 assertFalse(ex.getMessage().contains(": "), "Should not have class prefix when class is null");
153 }
154
155 @Test
156 void d05_constructor_withNullCauseClassAndMessage_formatsMessage() {
157 Throwable nullCause = null;
158 var ex = new BeanRuntimeException(nullCause, String.class, "Test message");
159 assertNotNull(ex);
160 assertNull(ex.getCause());
161 assertTrue(ex.getMessage().contains("String"));
162 assertTrue(ex.getMessage().contains("Test message"));
163 }
164
165 @Test
166 void d06_constructor_withNullCauseNullClassAndNullMessage_handlesNulls() {
167 var ex = new BeanRuntimeException((Class<?>)null, null, (Object)null);
168 assertNotNull(ex);
169 assertNull(ex.getCause());
170 assertNull(ex.getMessage());
171 }
172
173
174
175
176
177 @Test
178 void e01_constructor_preservesStackTrace() {
179 var cause = new RuntimeException("Original");
180 var ex = new BeanRuntimeException(cause, String.class, "Wrapped");
181 assertSame(cause, ex.getCause());
182 assertNotNull(ex.getStackTrace());
183 assertTrue(ex.getStackTrace().length > 0);
184 }
185
186 @Test
187 void e02_constructor_withReflectionException_wrapsCorrectly() {
188 var cause = new IllegalAccessException("Access denied");
189 var ex = new BeanRuntimeException(cause, TestClass.class, "Failed to access");
190 assertSame(cause, ex.getCause());
191 assertTrue(ex.getMessage().contains("TestClass"));
192 assertTrue(ex.getMessage().contains("Failed to access"));
193 }
194
195
196
197
198
199 public static class TestClass {
200
201 }
202 }
203