1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.beanutils2;
19
20 import static org.junit.jupiter.api.Assertions.assertFalse;
21 import static org.junit.jupiter.api.Assertions.assertThrows;
22 import static org.junit.jupiter.api.Assertions.assertTrue;
23
24 import org.junit.jupiter.api.Test;
25
26
27
28
29 public class BeanPropertyValueEqualsPredicateTest {
30
31 private static final Integer expectedIntegerValue = Integer.valueOf(123);
32 private static final Float expectedFloatValue = Float.valueOf(123.123f);
33 private static final Double expectedDoubleValue = Double.valueOf(567879.12344d);
34 private static final Boolean expectedBooleanValue = Boolean.TRUE;
35 private static final Byte expectedByteValue = Byte.valueOf("12");
36
37
38
39
40 @Test
41 public void testEvaluateWithBooleanProperty() {
42 final BeanPropertyValueEqualsPredicate<TestBean, Boolean> predicate = new BeanPropertyValueEqualsPredicate<>("booleanProperty", expectedBooleanValue);
43 assertTrue(predicate.test(new TestBean(expectedBooleanValue.booleanValue())));
44 assertFalse(predicate.test(new TestBean(!expectedBooleanValue.booleanValue())));
45 }
46
47
48
49
50 @Test
51 public void testEvaluateWithByteProperty() {
52 final BeanPropertyValueEqualsPredicate<TestBean, Byte> predicate = new BeanPropertyValueEqualsPredicate<>("byteProperty", expectedByteValue);
53 final TestBean testBean = new TestBean();
54 testBean.setByteProperty(expectedByteValue.byteValue());
55 assertTrue(predicate.test(testBean));
56 testBean.setByteProperty((byte) (expectedByteValue.byteValue() - 1));
57 assertFalse(predicate.test(testBean));
58 }
59
60
61
62
63 @Test
64 public void testEvaluateWithDoubleProperty() {
65 final BeanPropertyValueEqualsPredicate<TestBean, Double> predicate = new BeanPropertyValueEqualsPredicate<>("doubleProperty", expectedDoubleValue);
66 assertTrue(predicate.test(new TestBean(expectedDoubleValue.doubleValue())));
67 assertFalse(predicate.test(new TestBean(expectedDoubleValue.doubleValue() - 1)));
68 }
69
70
71
72
73 @Test
74 public void testEvaluateWithFloatProperty() {
75 final BeanPropertyValueEqualsPredicate<TestBean, Float> predicate = new BeanPropertyValueEqualsPredicate<>("floatProperty", expectedFloatValue);
76 assertTrue(predicate.test(new TestBean(expectedFloatValue.floatValue())));
77 assertFalse(predicate.test(new TestBean(expectedFloatValue.floatValue() - 1)));
78 }
79
80
81
82
83 @Test
84 public void testEvaluateWithIndexedProperty() {
85
86 BeanPropertyValueEqualsPredicate<TestBean, Object> predicate = new BeanPropertyValueEqualsPredicate<>("intIndexed[0]", expectedIntegerValue);
87 final TestBean testBean = new TestBean();
88 testBean.setIntIndexed(0, expectedIntegerValue.intValue());
89 assertTrue(predicate.test(testBean));
90 testBean.setIntIndexed(0, expectedIntegerValue.intValue() - 1);
91 assertFalse(predicate.test(testBean));
92
93
94 predicate = new BeanPropertyValueEqualsPredicate<>("intIndexed[999]", "exception-ahead");
95
96 try {
97 assertFalse(predicate.test(testBean));
98 } catch (final ArrayIndexOutOfBoundsException e) {
99
100 }
101 }
102
103
104
105
106 @Test
107 public void testEvaluateWithIntProperty() {
108 final BeanPropertyValueEqualsPredicate<TestBean, Integer> predicate = new BeanPropertyValueEqualsPredicate<>("intProperty", expectedIntegerValue);
109 assertTrue(predicate.test(new TestBean(expectedIntegerValue.intValue())));
110 assertFalse(predicate.test(new TestBean(expectedIntegerValue.intValue() - 1)));
111 }
112
113
114
115
116 @Test
117 public void testEvaluateWithInvalidPropertyName() {
118 try {
119 new BeanPropertyValueEqualsPredicate<TestBean, Object>("bogusProperty", null).test(new TestBean());
120 } catch (final IllegalArgumentException e) {
121
122 }
123 }
124
125
126
127
128 @Test
129 public void testEvaluateWithMappedProperty() {
130
131 BeanPropertyValueEqualsPredicate<TestBean, String> predicate = new BeanPropertyValueEqualsPredicate<>("mappedProperty(test-key)", "match");
132 final TestBean testBean = new TestBean();
133 testBean.setMappedProperty("test-key", "match");
134 assertTrue(predicate.test(testBean));
135 testBean.setMappedProperty("test-key", "no-match");
136 assertFalse(predicate.test(testBean));
137
138
139 predicate = new BeanPropertyValueEqualsPredicate<>("mappedProperty(invalid-key)", "match");
140 assertFalse(predicate.test(testBean));
141 }
142
143
144
145
146 @Test
147 public void testEvaluateWithNestedMappedProperty() {
148 final BeanPropertyValueEqualsPredicate<TestBean, String> predicate = new BeanPropertyValueEqualsPredicate<>("anotherNested.mappedProperty(test-key)",
149 "match");
150 final TestBean testBean = new TestBean();
151 final TestBean nestedBean = new TestBean();
152 nestedBean.setMappedProperty("test-key", "match");
153 testBean.setAnotherNested(nestedBean);
154 assertTrue(predicate.test(testBean));
155 nestedBean.setMappedProperty("test-key", "no-match");
156 assertFalse(predicate.test(testBean));
157 }
158
159
160
161
162 @Test
163 public void testEvaluateWithNestedProperty() {
164 final BeanPropertyValueEqualsPredicate<TestBean, String> predicate = new BeanPropertyValueEqualsPredicate<>("anotherNested.stringProperty", "match");
165 final TestBean testBean = new TestBean();
166 final TestBean nestedBean = new TestBean("match");
167 testBean.setAnotherNested(nestedBean);
168 assertTrue(predicate.test(testBean));
169 testBean.setAnotherNested(new TestBean("no-match"));
170 assertFalse(predicate.test(testBean));
171 }
172
173
174
175
176 @Test
177 public void testEvaluateWithNullInPath() {
178 final BeanPropertyValueEqualsPredicate<TestBean, String> predicate = new BeanPropertyValueEqualsPredicate<>("anotherNested.stringProperty", "foo");
179 assertThrows(IllegalArgumentException.class, () -> predicate.test(new TestBean()));
180 }
181
182
183
184
185 @Test
186 public void testEvaluateWithNullInPathAndIgnoreTrue() {
187 final BeanPropertyValueEqualsPredicate<TestBean, String> predicate = new BeanPropertyValueEqualsPredicate<>("anotherNested.stringProperty", "foo",
188 true);
189 assertFalse(predicate.test(new TestBean()));
190 }
191
192
193
194
195 @Test
196 public void testEvaluateWithPrimitiveAndNull() {
197 BeanPropertyValueEqualsPredicate<TestBean, Object> predicate = new BeanPropertyValueEqualsPredicate<>("intProperty", null);
198 assertFalse(predicate.test(new TestBean(0)));
199
200 predicate = new BeanPropertyValueEqualsPredicate<>("booleanProperty", null);
201 assertFalse(predicate.test(new TestBean(true)));
202
203 predicate = new BeanPropertyValueEqualsPredicate<>("floatProperty", null);
204 assertFalse(predicate.test(new TestBean(expectedFloatValue.floatValue())));
205 }
206
207
208
209
210 @Test
211 public void testEvaluateWithReadOnlyProperty() {
212 final TestBean testBean = new TestBean();
213 final BeanPropertyValueEqualsPredicate<TestBean, String> predicate = new BeanPropertyValueEqualsPredicate<>("readOnlyProperty",
214 testBean.getReadOnlyProperty());
215 assertTrue(predicate.test(new TestBean()));
216 }
217
218
219
220
221 @Test
222 public void testEvaluateWithSimpleStringProperty() {
223 final BeanPropertyValueEqualsPredicate<TestBean, String> predicate = new BeanPropertyValueEqualsPredicate<>("stringProperty", "foo");
224 assertTrue(predicate.test(new TestBean("foo")));
225 assertFalse(predicate.test(new TestBean("bar")));
226 }
227
228
229
230
231 @Test
232 public void testEvaluateWithSimpleStringPropertyWithNullValues() {
233 final BeanPropertyValueEqualsPredicate<TestBean, String> predicate = new BeanPropertyValueEqualsPredicate<>("stringProperty", null);
234 assertTrue(predicate.test(new TestBean((String) null)));
235 assertFalse(predicate.test(new TestBean("bar")));
236 }
237
238
239
240
241 @Test
242 public void testEvaluateWithWriteOnlyProperty() {
243 try {
244 new BeanPropertyValueEqualsPredicate<TestBean, String>("writeOnlyProperty", null).test(new TestBean());
245 } catch (final IllegalArgumentException e) {
246
247 }
248 }
249 }