(no commit message)
[utils] / system / general / src / test / java / org / wamblee / system / core / DefaultInterfaceDescriptorTest.java
1 /*
2  * Copyright 2005-2010 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.core;
17
18 import junit.framework.TestCase;
19
20 import org.wamblee.system.core.DefaultProvidedInterface;
21 import org.wamblee.system.core.DefaultRequiredInterface;
22 import org.wamblee.system.core.ProvidedInterface;
23 import org.wamblee.system.core.RequiredInterface;
24
25 import java.io.Serializable;
26
27 /**
28  * 
29  * @author $author$
30  * @version $Revision$
31  */
32 public class DefaultInterfaceDescriptorTest extends TestCase {
33     public void testOneRequiredOneProvidedMatch() {
34         ProvidedInterface provided = new DefaultProvidedInterface("name",
35             String.class);
36         RequiredInterface required = new DefaultRequiredInterface("name",
37             String.class);
38         assertTrue(required.implementedBy(provided));
39     }
40
41     public void testOneRequiredOneProvidedMatchSubClass() {
42         ProvidedInterface provided = new DefaultProvidedInterface("name",
43             Integer.class);
44         RequiredInterface required = new DefaultRequiredInterface("name",
45             Number.class);
46         assertTrue(required.implementedBy(provided));
47     }
48
49     public void testOneRequiredOneProvidedNoMatch() {
50         ProvidedInterface provided = new DefaultProvidedInterface("name",
51             String.class);
52         RequiredInterface required = new DefaultRequiredInterface("name",
53             Number.class);
54         assertFalse(required.implementedBy(provided));
55     }
56
57     public void testOneRequiredMultipleProvidedMatch() {
58         ProvidedInterface provided = new DefaultProvidedInterface("name",
59             new Class[] { String.class, Integer.class });
60         RequiredInterface required = new DefaultRequiredInterface("name",
61             String.class);
62         assertTrue(required.implementedBy(provided));
63     }
64
65     public void testMultipleRequiredOneProvidedMatch() {
66         ProvidedInterface provided = new DefaultProvidedInterface("name",
67             MyMultiple.class);
68         RequiredInterface required = new DefaultRequiredInterface("name",
69             new Class[] { Runnable.class, Serializable.class });
70         assertTrue(required.implementedBy(provided));
71     }
72
73     public void testMultipleRequiredOneProvidedNoMatch() {
74         ProvidedInterface provided = new DefaultProvidedInterface("name",
75             MyMultiple.class);
76         RequiredInterface required = new DefaultRequiredInterface("name",
77             new Class[] { String.class, Runnable.class });
78         assertFalse(required.implementedBy(provided));
79     }
80
81     public void testMultipleRequiredMultipleProvidedMatch() {
82         ProvidedInterface provided = new DefaultProvidedInterface("name",
83             new Class[] { Runnable.class, Serializable.class, String.class });
84         RequiredInterface required = new DefaultRequiredInterface("name",
85             new Class[] { Runnable.class, Serializable.class });
86         assertTrue(required.implementedBy(provided));
87     }
88
89     public void testPrimitiveAndWrapperType() {
90         RequiredInterface req1 = new DefaultRequiredInterface("req1", int.class);
91         RequiredInterface req2 = new DefaultRequiredInterface("req1",
92             Integer.class);
93         ProvidedInterface prov1 = new DefaultProvidedInterface("prov1",
94             int.class);
95         ProvidedInterface prov2 = new DefaultProvidedInterface("prov2",
96             Integer.class);
97         assertTrue(req1.implementedBy(prov1));
98         assertTrue(req2.implementedBy(prov1));
99         assertTrue(req1.implementedBy(prov2));
100         assertTrue(req2.implementedBy(prov2));
101     }
102
103     private static class MyMultiple implements Runnable, Serializable {
104         @Override
105         public void run() {
106             // Empty
107         }
108     }
109 }