1
2
3
4
5
6
7
8
9
10
11
12
13
14 package ch.qos.logback.core.joran.util;
15
16 import java.lang.reflect.Method;
17 import java.nio.charset.Charset;
18 import java.nio.charset.UnsupportedCharsetException;
19
20 import ch.qos.logback.core.util.FileSize;
21 import org.junit.jupiter.api.AfterEach;
22 import org.junit.jupiter.api.BeforeEach;
23 import org.junit.jupiter.api.Test;
24
25 import ch.qos.logback.core.Context;
26 import ch.qos.logback.core.ContextBase;
27 import ch.qos.logback.core.joran.spi.DefaultNestedComponentRegistry;
28 import ch.qos.logback.core.joran.util.beans.BeanDescriptionCache;
29 import ch.qos.logback.core.spi.FilterReply;
30 import ch.qos.logback.core.status.testUtil.StatusChecker;
31 import ch.qos.logback.core.util.AggregationType;
32 import ch.qos.logback.core.util.StatusPrinter;
33
34 import static org.junit.jupiter.api.Assertions.assertEquals;
35 import static org.junit.jupiter.api.Assertions.assertNotNull;
36 import static org.junit.jupiter.api.Assertions.assertNull;
37 import static org.junit.jupiter.api.Assertions.assertTrue;
38
39 public class PropertySetterTest {
40
41 Context context = new ContextBase();
42 StatusChecker checker = new StatusChecker(context);
43 House house = new House();
44
45 PropertySetter setter = new PropertySetter(new BeanDescriptionCache(context), house);
46
47 @BeforeEach
48 public void setUp() {
49 setter.setContext(context);
50 }
51
52 @AfterEach
53 public void tearDown() {
54 }
55
56 @Test
57 public void testCanAggregateComponent() {
58 assertEquals(AggregationType.AS_COMPLEX_PROPERTY, setter.computeAggregationType("door"));
59
60 assertEquals(AggregationType.AS_BASIC_PROPERTY, setter.computeAggregationType("count"));
61 assertEquals(AggregationType.AS_BASIC_PROPERTY, setter.computeAggregationType("Count"));
62
63 assertEquals(AggregationType.AS_BASIC_PROPERTY, setter.computeAggregationType("name"));
64 assertEquals(AggregationType.AS_BASIC_PROPERTY, setter.computeAggregationType("Name"));
65
66 assertEquals(AggregationType.AS_BASIC_PROPERTY, setter.computeAggregationType("Duration"));
67 assertEquals(AggregationType.AS_BASIC_PROPERTY, setter.computeAggregationType("fs"));
68
69 assertEquals(AggregationType.AS_BASIC_PROPERTY, setter.computeAggregationType("open"));
70 assertEquals(AggregationType.AS_BASIC_PROPERTY, setter.computeAggregationType("Open"));
71
72 assertEquals(AggregationType.AS_COMPLEX_PROPERTY_COLLECTION, setter.computeAggregationType("Window"));
73 assertEquals(AggregationType.AS_BASIC_PROPERTY_COLLECTION, setter.computeAggregationType("adjective"));
74
75 assertEquals(AggregationType.AS_BASIC_PROPERTY, setter.computeAggregationType("filterReply"));
76 assertEquals(AggregationType.AS_BASIC_PROPERTY, setter.computeAggregationType("houseColor"));
77 }
78
79 @Test
80 public void testSetProperty() {
81 {
82 House house = new House();
83 PropertySetter setter = new PropertySetter(new BeanDescriptionCache(context), house);
84 setter.setProperty("count", "10");
85 setter.setProperty("temperature", "33.1");
86
87 setter.setProperty("name", "jack");
88 setter.setProperty("open", "true");
89
90 assertEquals(10, house.getCount());
91 assertEquals(33.1d, (double) house.getTemperature(), 0.01);
92 assertEquals("jack", house.getName());
93 assertTrue(house.isOpen());
94 }
95
96 {
97 House house = new House();
98 PropertySetter setter = new PropertySetter(new BeanDescriptionCache(context), house);
99 setter.setProperty("Count", "10");
100 setter.setProperty("Name", "jack");
101 setter.setProperty("Open", "true");
102
103 assertEquals(10, house.getCount());
104 assertEquals("jack", house.getName());
105 assertTrue(house.isOpen());
106 }
107 }
108
109 @Test
110 public void testSetCamelProperty() {
111 setter.setProperty("camelCase", "trot");
112 assertEquals("trot", house.getCamelCase());
113
114 setter.setProperty("camelCase", "gh");
115 assertEquals("gh", house.getCamelCase());
116 }
117
118 @Test
119 public void testSetComplexProperty() {
120 Door door = new Door();
121 setter.setComplexProperty("door", door);
122 assertEquals(door, house.getDoor());
123 }
124
125
126
127 @Test
128 public void testPropertyCollection() {
129 setter.addBasicProperty("adjective", "nice");
130 setter.addBasicProperty("adjective", "big");
131
132 assertEquals(2, house.adjectiveList.size());
133 assertEquals("nice", house.adjectiveList.get(0));
134 assertEquals("big", house.adjectiveList.get(1));
135 }
136
137 @Test
138 public void addValueOfTest() {
139 setter.addBasicProperty("fileSize", "1GB");
140 setter.addBasicProperty("fileSize", "10KB");
141
142 assertEquals(2, house.fileSizes.size());
143 assertEquals(FileSize.valueOf("1GB"), house.fileSizes.get(0));
144 assertEquals(FileSize.valueOf("10KB"), house.fileSizes.get(1));
145 }
146
147 @Test
148 public void testComplexCollection() {
149 Window w1 = new Window();
150 w1.handle = 10;
151 Window w2 = new Window();
152 w2.handle = 20;
153
154 setter.addComplexProperty("window", w1);
155 setter.addComplexProperty("window", w2);
156 assertEquals(2, house.windowList.size());
157 assertEquals(10, house.windowList.get(0).handle);
158 assertEquals(20, house.windowList.get(1).handle);
159 }
160
161 @Test
162 public void testSetComplexWithCamelCaseName() {
163 SwimmingPool pool = new SwimmingPoolImpl();
164 setter.setComplexProperty("swimmingPool", pool);
165 assertEquals(pool, house.getSwimmingPool());
166 }
167
168 @Test
169 public void testDuration() {
170 setter.setProperty("duration", "1.4 seconds");
171 assertEquals(1400, house.getDuration().getMilliseconds());
172 }
173
174 @Test
175 public void testFileSize() {
176 setter.setProperty("fs", "2 kb");
177 assertEquals(2 * 1024, house.getFs().getSize());
178 }
179
180 @Test
181 public void testFilterReply() {
182
183 setter.setProperty("filterReply", "ACCEPT");
184 assertEquals(FilterReply.ACCEPT, house.getFilterReply());
185 }
186
187 @Test
188 public void testEnum() {
189 setter.setProperty("houseColor", "BLUE");
190 assertEquals(HouseColor.BLUE, house.getHouseColor());
191 }
192
193
194
195 @Test
196 public void charset() {
197 setter.setProperty("charset", "UTF-8");
198 assertEquals(Charset.forName("UTF-8"), house.getCharset());
199
200 house.setCharset(null);
201 setter.setProperty("charset", "UTF");
202 assertNull(house.getCharset());
203
204 StatusChecker checker = new StatusChecker(context);
205 checker.containsException(UnsupportedCharsetException.class);
206 }
207
208
209 @Test
210 public void bridgeMethodsShouldBeIgnored() {
211 Orange orange = new Orange();
212
213 PropertySetter orangeSetter = new PropertySetter(new BeanDescriptionCache(context), orange);
214 assertEquals(AggregationType.AS_BASIC_PROPERTY,
215 orangeSetter.computeAggregationType(Citrus.PRECARP_PROPERTY_NAME));
216 assertEquals(AggregationType.AS_BASIC_PROPERTY,
217 orangeSetter.computeAggregationType(Citrus.PREFIX_PROPERTY_NAME));
218
219 StatusPrinter.print(context);
220 checker.assertIsWarningOrErrorFree();
221 }
222 }