2 * Copyright 2008 the original author or authors.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org.wamblee.system.adapters;
18 import java.util.ArrayList;
19 import java.util.Collections;
20 import java.util.Comparator;
21 import java.util.List;
23 import org.wamblee.system.core.DefaultProvidedInterface;
24 import org.wamblee.system.core.ProvidedInterface;
25 import org.wamblee.system.core.RequiredInterface;
26 import org.wamblee.system.core.RequiredInterfaceComparator;
27 import org.wamblee.test.AssertionUtils;
29 public class SetterConfigurationTest extends AdapterTestCase {
31 public void testOneSetter() {
32 SetterConfiguration config = new SetterConfiguration(X5.class);
33 List<RequiredInterface> required = config.getRequiredInterfaces();
34 assertEquals(1, required.size());
35 assertEquals("value", required.get(0).getName());
37 ProvidedInterface provided = new DefaultProvidedInterface("janse",
39 required.get(0).setProvider(provided);
40 provided.publish("hello", _scope);
43 assertNull(obj.getValue());
44 config.inject(_scope, obj);
45 assertEquals("hello", obj.getValue());
48 public void testPrivateSetter() {
49 SetterConfiguration config = new SetterConfiguration(X5.class);
50 config.setNonPublic(true);
51 List<RequiredInterface> required = new ArrayList<RequiredInterface>(
52 config.getRequiredInterfaces());
53 Collections.sort(required, new Comparator<RequiredInterface>() {
55 public int compare(RequiredInterface aO1, RequiredInterface aO2) {
56 return aO1.getName().compareTo(aO2.getName());
59 assertEquals(2, required.size());
60 assertEquals("value", required.get(0).getName());
61 assertEquals("xyz", required.get(1).getName());
63 ProvidedInterface providedString = new DefaultProvidedInterface(
64 "janse", String.class);
65 assertTrue(required.get(0).implementedBy(providedString));
66 required.get(0).setProvider(providedString);
67 providedString.publish("hello", _scope);
69 ProvidedInterface providedInt = new DefaultProvidedInterface("xxx",
71 assertTrue(required.get(1).implementedBy(providedInt));
72 required.get(1).setProvider(providedInt);
73 providedInt.publish(100, _scope);
76 assertNull(obj.getValue());
77 assertNull(obj.getXyz());
78 config.inject(_scope, obj);
79 assertEquals("hello", obj.getValue());
80 assertEquals(100, obj.getXyz().intValue());
83 public void testInheritance() {
84 SetterConfiguration config = new SetterConfiguration(X9.class);
85 config.setNonPublic(true);
86 List<RequiredInterface> required = new ArrayList<RequiredInterface>(
87 config.getRequiredInterfaces());
88 Collections.sort(required, new Comparator<RequiredInterface>() {
90 public int compare(RequiredInterface aO1, RequiredInterface aO2) {
91 return aO1.getName().compareTo(aO2.getName());
94 assertEquals(3, required.size());
95 assertEquals("flag", required.get(0).getName());
96 assertEquals("value", required.get(1).getName());
97 assertEquals("xyz", required.get(2).getName());
99 ProvidedInterface providedBoolean = new DefaultProvidedInterface(
100 "janse", Boolean.class);
101 assertTrue(required.get(0).implementedBy(providedBoolean));
102 required.get(0).setProvider(providedBoolean);
103 providedBoolean.publish(true, _scope);
105 ProvidedInterface providedString = new DefaultProvidedInterface(
106 "janse", String.class);
107 assertTrue(required.get(1).implementedBy(providedString));
108 required.get(1).setProvider(providedString);
109 providedString.publish("hello", _scope);
111 ProvidedInterface providedInt = new DefaultProvidedInterface("xxx",
113 assertTrue(required.get(2).implementedBy(providedInt));
114 required.get(2).setProvider(providedInt);
115 providedInt.publish(100, _scope);
118 assertNull(obj.getValue());
119 assertNull(obj.getXyz());
120 assertFalse(obj.isFlag());
121 config.inject(_scope, obj);
122 assertEquals("hello", obj.getValue());
123 assertEquals(100, obj.getXyz().intValue());
124 assertTrue(obj.isFlag());
127 public void testMultipleSetters() {
128 SetterConfiguration config = new SetterConfiguration(X6.class);
129 List<RequiredInterface> required = config.getRequiredInterfaces();
130 Collections.sort(required, new RequiredInterfaceComparator());
131 assertEquals(2, required.size());
132 assertEquals("host", required.get(0).getName());
133 assertEquals("port", required.get(1).getName());
135 ProvidedInterface provided0 = new DefaultProvidedInterface("janse",
137 required.get(0).setProvider(provided0);
138 provided0.publish("hello", _scope);
140 ProvidedInterface provided1 = new DefaultProvidedInterface("port",
142 required.get(1).setProvider(provided1);
143 provided1.publish(10, _scope);
146 assertNull(obj.getHost());
147 assertNull(obj.getPort());
149 config.inject(_scope, obj);
150 assertEquals("hello", obj.getHost());
151 assertEquals(10, obj.getPort().intValue());
154 public void testInvokeWrongType() {
155 final SetterConfiguration config = new SetterConfiguration(X5.class);
156 List<RequiredInterface> required = config.getRequiredInterfaces();
157 assertEquals(1, required.size());
158 assertEquals("value", required.get(0).getName());
160 ProvidedInterface provided = new DefaultProvidedInterface("janse",
162 required.get(0).setProvider(provided);
163 provided.publish("hello", _scope);
165 final X6 obj = new X6();
166 AssertionUtils.assertException(new AssertionUtils.ErroneousCode() {
168 public void run() throws Exception {
169 config.inject(_scope, obj);
171 }, IllegalArgumentException.class);
174 public void testSetExplicitValue() {
175 SetterConfiguration config = new SetterConfiguration(X5.class);
176 config.values("value").setValue(0, "bladibla");
178 List<RequiredInterface> required = config.getRequiredInterfaces();
179 assertEquals(0, required.size());
182 assertNull(obj.getValue());
183 config.inject(_scope, obj);
184 assertEquals("bladibla", obj.getValue());
187 public void testClear() {
188 SetterConfiguration config = new SetterConfiguration(X6.class);
190 List<RequiredInterface> required = config.getRequiredInterfaces();
191 Collections.sort(required, new RequiredInterfaceComparator());
192 assertEquals(0, required.size());
195 assertNull(obj.getHost());
196 assertNull(obj.getPort());
198 config.inject(_scope, obj);
200 assertNull(obj.getHost());
201 assertNull(obj.getPort());
204 public void testAdd() {
205 SetterConfiguration config = new SetterConfiguration(X6.class);
206 config.clear().add("host");
207 List<RequiredInterface> required = config.getRequiredInterfaces();
208 Collections.sort(required, new RequiredInterfaceComparator());
209 assertEquals(1, required.size());
210 assertEquals("host", required.get(0).getName());
212 ProvidedInterface provided0 = new DefaultProvidedInterface("janse",
214 required.get(0).setProvider(provided0);
215 provided0.publish("hello", _scope);
218 assertNull(obj.getHost());
219 assertNull(obj.getPort());
221 config.inject(_scope, obj);
222 assertEquals("hello", obj.getHost());
223 assertNull(obj.getPort());
226 public void testAddNonExisting() {
227 final SetterConfiguration config = new SetterConfiguration(X6.class);
230 AssertionUtils.assertException(new AssertionUtils.ErroneousCode() {
232 public void run() throws Exception {
233 config.add("bladibla");
235 }, IllegalArgumentException.class);
238 public void testRemove() {
239 SetterConfiguration config = new SetterConfiguration(X6.class);
240 config.remove("port");
241 List<RequiredInterface> required = config.getRequiredInterfaces();
242 Collections.sort(required, new RequiredInterfaceComparator());
243 assertEquals(1, required.size());
244 assertEquals("host", required.get(0).getName());
246 ProvidedInterface provided0 = new DefaultProvidedInterface("janse",
248 required.get(0).setProvider(provided0);
249 provided0.publish("hello", _scope);
252 assertNull(obj.getHost());
253 assertNull(obj.getPort());
255 config.inject(_scope, obj);
256 assertEquals("hello", obj.getHost());
257 assertNull(obj.getPort());
260 public void testRemoveNonExisting() {
261 final SetterConfiguration config = new SetterConfiguration(X6.class);
263 AssertionUtils.assertException(new AssertionUtils.ErroneousCode() {
265 public void run() throws Exception {
266 config.remove("bladibla");
268 }, IllegalArgumentException.class);