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.Collections;
19 import java.util.List;
21 import org.wamblee.system.core.DefaultProvidedInterface;
22 import org.wamblee.system.core.ProvidedInterface;
23 import org.wamblee.system.core.RequiredInterface;
24 import org.wamblee.system.core.RequiredInterfaceComparator;
25 import org.wamblee.test.AssertionUtils;
27 public class SetterConfigurationTest extends AdapterTestCase {
29 public void testOneSetter() {
30 SetterConfiguration config = new SetterConfiguration(X5.class);
31 List<RequiredInterface> required = config.getRequiredInterfaces();
32 assertEquals(1, required.size());
33 assertEquals("value", required.get(0).getName());
35 ProvidedInterface provided = new DefaultProvidedInterface("janse", String.class);
36 required.get(0).setProvider(provided);
37 provided.publish("hello", _scope);
40 assertNull(obj.getValue());
41 config.inject(_scope, obj);
42 assertEquals("hello", obj.getValue());
45 public void testMultipleSetters() {
46 SetterConfiguration config = new SetterConfiguration(X6.class);
47 List<RequiredInterface> required = config.getRequiredInterfaces();
48 Collections.sort(required, new RequiredInterfaceComparator());
49 assertEquals(2, required.size());
50 assertEquals("host", required.get(0).getName());
51 assertEquals("port", required.get(1).getName());
53 ProvidedInterface provided0 = new DefaultProvidedInterface("janse", String.class);
54 required.get(0).setProvider(provided0);
55 provided0.publish("hello", _scope);
57 ProvidedInterface provided1 = new DefaultProvidedInterface("port", Integer.class);
58 required.get(1).setProvider(provided1);
59 provided1.publish(10, _scope);
62 assertNull(obj.getHost());
63 assertNull(obj.getPort());
65 config.inject(_scope, obj);
66 assertEquals("hello", obj.getHost());
67 assertEquals(10, obj.getPort().intValue());
70 public void testInvokeWrongType() {
71 final SetterConfiguration config = new SetterConfiguration(X5.class);
72 List<RequiredInterface> required = config.getRequiredInterfaces();
73 assertEquals(1, required.size());
74 assertEquals("value", required.get(0).getName());
76 ProvidedInterface provided = new DefaultProvidedInterface("janse", String.class);
77 required.get(0).setProvider(provided);
78 provided.publish("hello", _scope);
80 final X6 obj = new X6();
81 AssertionUtils.assertException(new AssertionUtils.ErroneousCode() {
83 public void run() throws Exception {
84 config.inject(_scope, obj);
86 }, IllegalArgumentException.class);
89 public void testSetExplicitValue() {
90 SetterConfiguration config = new SetterConfiguration(X5.class);
91 config.values("value").setValue(0, "bladibla");
93 List<RequiredInterface> required = config.getRequiredInterfaces();
94 assertEquals(0, required.size());
97 assertNull(obj.getValue());
98 config.inject(_scope, obj);
99 assertEquals("bladibla", obj.getValue());
102 public void testClear() {
103 SetterConfiguration config = new SetterConfiguration(X6.class);
105 List<RequiredInterface> required = config.getRequiredInterfaces();
106 Collections.sort(required, new RequiredInterfaceComparator());
107 assertEquals(0, required.size());
110 assertNull(obj.getHost());
111 assertNull(obj.getPort());
113 config.inject(_scope, obj);
115 assertNull(obj.getHost());
116 assertNull(obj.getPort());
119 public void testAdd() {
120 SetterConfiguration config = new SetterConfiguration(X6.class);
121 config.clear().add("host");
122 List<RequiredInterface> required = config.getRequiredInterfaces();
123 Collections.sort(required, new RequiredInterfaceComparator());
124 assertEquals(1, required.size());
125 assertEquals("host", required.get(0).getName());
127 ProvidedInterface provided0 = new DefaultProvidedInterface("janse", String.class);
128 required.get(0).setProvider(provided0);
129 provided0.publish("hello", _scope);
132 assertNull(obj.getHost());
133 assertNull(obj.getPort());
135 config.inject(_scope, obj);
136 assertEquals("hello", obj.getHost());
137 assertNull(obj.getPort());
140 public void testAddNonExisting() {
141 final SetterConfiguration config = new SetterConfiguration(X6.class);
144 AssertionUtils.assertException(new AssertionUtils.ErroneousCode() {
146 public void run() throws Exception {
147 config.add("bladibla");
149 }, IllegalArgumentException.class);
152 public void testRemove() {
153 SetterConfiguration config = new SetterConfiguration(X6.class);
154 config.remove("port");
155 List<RequiredInterface> required = config.getRequiredInterfaces();
156 Collections.sort(required, new RequiredInterfaceComparator());
157 assertEquals(1, required.size());
158 assertEquals("host", required.get(0).getName());
160 ProvidedInterface provided0 = new DefaultProvidedInterface("janse", String.class);
161 required.get(0).setProvider(provided0);
162 provided0.publish("hello", _scope);
165 assertNull(obj.getHost());
166 assertNull(obj.getPort());
168 config.inject(_scope, obj);
169 assertEquals("hello", obj.getHost());
170 assertNull(obj.getPort());
173 public void testRemoveNonExisting() {
174 final SetterConfiguration config = new SetterConfiguration(X6.class);
176 AssertionUtils.assertException(new AssertionUtils.ErroneousCode() {
178 public void run() throws Exception {
179 config.remove("bladibla");
181 }, IllegalArgumentException.class);