1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.configuration2.builder;
18
19 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
20 import static org.junit.jupiter.api.Assertions.assertEquals;
21 import static org.junit.jupiter.api.Assertions.assertFalse;
22 import static org.junit.jupiter.api.Assertions.assertSame;
23 import static org.junit.jupiter.api.Assertions.assertThrows;
24 import static org.junit.jupiter.api.Assertions.assertTrue;
25 import static org.mockito.Mockito.mock;
26 import static org.mockito.Mockito.verify;
27 import static org.mockito.Mockito.verifyNoInteractions;
28 import static org.mockito.Mockito.verifyNoMoreInteractions;
29 import static org.mockito.Mockito.when;
30
31 import java.util.Collection;
32
33 import org.apache.commons.configuration2.BaseHierarchicalConfiguration;
34 import org.apache.commons.configuration2.Configuration;
35 import org.apache.commons.configuration2.HierarchicalConfiguration;
36 import org.apache.commons.configuration2.PropertiesConfiguration;
37 import org.apache.commons.configuration2.builder.BuilderConfigurationWrapperFactory.EventSourceSupport;
38 import org.apache.commons.configuration2.event.ConfigurationEvent;
39 import org.apache.commons.configuration2.event.EventListener;
40 import org.apache.commons.configuration2.event.EventListenerTestImpl;
41 import org.apache.commons.configuration2.event.EventSource;
42 import org.apache.commons.configuration2.ex.ConfigurationException;
43 import org.junit.jupiter.api.Test;
44
45
46
47
48 public class TestBuilderConfigurationWrapperFactory {
49
50
51
52
53
54
55
56 private ConfigurationBuilder<BaseHierarchicalConfiguration> createBuilderMock(final BaseHierarchicalConfiguration conf) {
57 @SuppressWarnings("unchecked")
58 final ConfigurationBuilder<BaseHierarchicalConfiguration> builder = mock(ConfigurationBuilder.class);
59 assertDoesNotThrow(() -> when(builder.getConfiguration()).thenReturn(conf));
60 return builder;
61 }
62
63
64
65
66 @Test
67 void testConfigurationBuilderWrapper() {
68 final BaseHierarchicalConfiguration conf = new BaseHierarchicalConfiguration();
69 final ConfigurationBuilder<BaseHierarchicalConfiguration> builder = createBuilderMock(conf);
70 conf.addProperty("test1", "value1");
71 conf.addProperty("test2", "42");
72 final BuilderConfigurationWrapperFactory factory = new BuilderConfigurationWrapperFactory();
73 final HierarchicalConfiguration<?> wrapper = factory.createBuilderConfigurationWrapper(HierarchicalConfiguration.class, builder);
74 assertEquals("value1", wrapper.getString("test1"));
75 assertEquals(42, wrapper.getInt("test2"));
76 assertSame(conf.getNodeModel().getNodeHandler().getRootNode(), wrapper.getNodeModel().getNodeHandler().getRootNode());
77 }
78
79
80
81
82 @Test
83 void testCreateBuilderConfigurationWrapperNoBuilder() {
84 final BuilderConfigurationWrapperFactory factory = new BuilderConfigurationWrapperFactory();
85 assertThrows(IllegalArgumentException.class, () -> factory.createBuilderConfigurationWrapper(Configuration.class, null));
86 }
87
88
89
90
91 @Test
92 void testCreateBuilderConfigurationWrapperNoClass() {
93 final BuilderConfigurationWrapperFactory factory = new BuilderConfigurationWrapperFactory(EventSourceSupport.BUILDER);
94 final ConfigurationBuilder<BaseHierarchicalConfiguration> builder = createBuilderMock(new BaseHierarchicalConfiguration());
95 assertThrows(IllegalArgumentException.class, () -> factory.createBuilderConfigurationWrapper(null, builder));
96
97 verifyNoInteractions(builder);
98 }
99
100
101
102
103 @Test
104 void testDefaultEventSourceSupport() {
105 final BuilderConfigurationWrapperFactory factory = new BuilderConfigurationWrapperFactory();
106 assertEquals(EventSourceSupport.NONE, factory.getEventSourceSupport());
107 }
108
109
110
111
112 @Test
113 void testEventSourceSupportBuilder() throws ConfigurationException {
114 final BasicConfigurationBuilder<PropertiesConfiguration> builder = new BasicConfigurationBuilder<>(PropertiesConfiguration.class);
115 final EventListener<ConfigurationEvent> l1 = new EventListenerTestImpl(null);
116 final EventListener<ConfigurationEvent> l2 = new EventListenerTestImpl(null);
117 final BuilderConfigurationWrapperFactory factory = new BuilderConfigurationWrapperFactory(EventSourceSupport.BUILDER);
118 final EventSource src = (EventSource) factory.createBuilderConfigurationWrapper(Configuration.class, builder);
119
120 src.addEventListener(ConfigurationEvent.ANY, l1);
121 src.addEventListener(ConfigurationEvent.ANY_HIERARCHICAL, l2);
122 assertTrue(src.removeEventListener(ConfigurationEvent.ANY_HIERARCHICAL, l2));
123 assertFalse(src.removeEventListener(ConfigurationEvent.ANY_HIERARCHICAL, l2));
124 final PropertiesConfiguration config = builder.getConfiguration();
125 final Collection<EventListener<? super ConfigurationEvent>> listeners = config.getEventListeners(ConfigurationEvent.ANY_HIERARCHICAL);
126 assertTrue(listeners.contains(l1));
127 assertFalse(listeners.contains(l2));
128 }
129
130
131
132
133 @Test
134 void testEventSourceSupportDummy() {
135 final BaseHierarchicalConfiguration conf = new BaseHierarchicalConfiguration();
136 final ConfigurationBuilder<BaseHierarchicalConfiguration> builder = createBuilderMock(conf);
137 final BuilderConfigurationWrapperFactory factory = new BuilderConfigurationWrapperFactory(EventSourceSupport.DUMMY);
138 final EventSource src = (EventSource) factory.createBuilderConfigurationWrapper(HierarchicalConfiguration.class, builder);
139 src.addEventListener(ConfigurationEvent.ANY, null);
140
141 verifyNoInteractions(builder);
142 }
143
144
145
146
147 @Test
148 void testEventSourceSupportMockBuilder() {
149 final BaseHierarchicalConfiguration conf = new BaseHierarchicalConfiguration();
150 final ConfigurationBuilder<BaseHierarchicalConfiguration> builder = createBuilderMock(conf);
151 final EventListenerTestImpl listener = new EventListenerTestImpl(null);
152
153 final BuilderConfigurationWrapperFactory factory = new BuilderConfigurationWrapperFactory(EventSourceSupport.BUILDER);
154 final EventSource src = (EventSource) factory.createBuilderConfigurationWrapper(HierarchicalConfiguration.class, builder);
155 src.addEventListener(ConfigurationEvent.ANY, listener);
156
157 verify(builder).addEventListener(ConfigurationEvent.ANY, listener);
158 verifyNoMoreInteractions(builder);
159 }
160
161
162
163
164 @Test
165 void testEventSourceSupportNone() {
166 final BaseHierarchicalConfiguration conf = new BaseHierarchicalConfiguration();
167 final ConfigurationBuilder<BaseHierarchicalConfiguration> builder = createBuilderMock(conf);
168 final BuilderConfigurationWrapperFactory factory = new BuilderConfigurationWrapperFactory();
169 final HierarchicalConfiguration<?> wrapper = factory.createBuilderConfigurationWrapper(HierarchicalConfiguration.class, builder);
170 assertFalse(wrapper instanceof EventSource);
171 }
172 }