Added SetterConfiguration class for configuring how setters correspond to required...
[utils] / system / general / src / test / java / org / wamblee / system / adapters / SetterConfigurationTest.java
1 /*
2  * Copyright 2008 the original author or authors.
3  * 
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
7  * 
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  * 
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.
15  */ 
16 package org.wamblee.system.adapters;
17
18 import java.util.Collections;
19 import java.util.List;
20
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;
26
27 public class SetterConfigurationTest extends AdapterTestCase {
28
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());
34         
35         ProvidedInterface provided = new DefaultProvidedInterface("janse", String.class);
36         required.get(0).setProvider(provided);
37         provided.publish("hello", _scope);
38         
39         X5 obj = new X5(); 
40         assertNull(obj.getValue());
41         config.invoke(_scope, obj);
42         assertEquals("hello", obj.getValue());
43     }
44     
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());
52      
53         ProvidedInterface provided0 = new DefaultProvidedInterface("janse", String.class);
54         required.get(0).setProvider(provided0);
55         provided0.publish("hello", _scope);
56         
57         ProvidedInterface provided1 = new DefaultProvidedInterface("port", Integer.class);
58         required.get(1).setProvider(provided1);
59         provided1.publish(10, _scope);
60         
61         X6 obj = new X6(); 
62         assertNull(obj.getHost());
63         assertNull(obj.getPort());
64         
65         config.invoke(_scope, obj);
66         assertEquals("hello", obj.getHost());
67         assertEquals(10, obj.getPort().intValue());
68     }
69     
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());
75         
76         ProvidedInterface provided = new DefaultProvidedInterface("janse", String.class);
77         required.get(0).setProvider(provided);
78         provided.publish("hello", _scope);
79        
80         final X6 obj = new X6();
81         AssertionUtils.assertException(new AssertionUtils.ErroneousCode() { 
82             @Override
83             public void run() throws Exception {
84                 config.invoke(_scope, obj);            
85             }
86         }, IllegalArgumentException.class);  
87     }
88     
89     public void testSetExplicitValue() { 
90         SetterConfiguration config = new SetterConfiguration(X5.class);
91         config.values("value").setValue(0, "bladibla");        
92         
93         List<RequiredInterface> required = config.getRequiredInterfaces();
94         assertEquals(0, required.size());
95         
96         X5 obj = new X5(); 
97         assertNull(obj.getValue());
98         config.invoke(_scope, obj);
99         assertEquals("bladibla", obj.getValue());
100     }
101     
102     public void testClear() { 
103         SetterConfiguration config = new SetterConfiguration(X6.class);
104         config.clear();
105         List<RequiredInterface> required = config.getRequiredInterfaces();
106         Collections.sort(required, new RequiredInterfaceComparator());
107         assertEquals(0, required.size());
108         
109         X6 obj = new X6(); 
110         assertNull(obj.getHost());
111         assertNull(obj.getPort());
112         
113         config.invoke(_scope, obj);
114       
115         assertNull(obj.getHost());
116         assertNull(obj.getPort());
117     }
118     
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());
126      
127         ProvidedInterface provided0 = new DefaultProvidedInterface("janse", String.class);
128         required.get(0).setProvider(provided0);
129         provided0.publish("hello", _scope);
130         
131         X6 obj = new X6(); 
132         assertNull(obj.getHost());
133         assertNull(obj.getPort());
134         
135         config.invoke(_scope, obj);
136         assertEquals("hello", obj.getHost());
137         assertNull(obj.getPort());
138     }
139     
140     public void testAddNonExisting() { 
141         final SetterConfiguration config = new SetterConfiguration(X6.class);
142         config.clear();
143         
144         AssertionUtils.assertException(new AssertionUtils.ErroneousCode() { 
145             @Override
146             public void run() throws Exception {
147                 config.add("bladibla");   
148             }
149         }, IllegalArgumentException.class);
150     }
151     
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());
159      
160         ProvidedInterface provided0 = new DefaultProvidedInterface("janse", String.class);
161         required.get(0).setProvider(provided0);
162         provided0.publish("hello", _scope);
163         
164         X6 obj = new X6(); 
165         assertNull(obj.getHost());
166         assertNull(obj.getPort());
167         
168         config.invoke(_scope, obj);
169         assertEquals("hello", obj.getHost());
170         assertNull(obj.getPort());
171     }
172     
173     public void testRemoveNonExisting() { 
174         final SetterConfiguration config = new SetterConfiguration(X6.class);
175         
176         AssertionUtils.assertException(new AssertionUtils.ErroneousCode() { 
177             @Override
178             public void run() throws Exception {
179                 config.remove("bladibla");   
180             }
181         }, IllegalArgumentException.class);
182     }
183 }