1 package org.andromda.core.mappings;
2
3 import junit.framework.TestCase;
4 import org.andromda.core.mapping.Mapping;
5 import org.andromda.core.mapping.Mappings;
6 import org.andromda.core.mapping.MappingsException;
7
8 import java.net.URL;
9 import java.util.Collection;
10 import java.util.Iterator;
11
12
13 /***
14 * Tests {@link org.andromda.core.mapping.Mappings)
15 *
16 * @author Chad Brandon
17 * @author Wouter Zoons
18 */
19 public class MappingsTest
20 extends TestCase
21 {
22 /***
23 * Constructor for MappingsTest.
24 *
25 * @param name the name for this test case
26 */
27 public MappingsTest(String name)
28 {
29 super(name);
30 }
31
32 private static final String TO_1 = "base64Binary";
33 private static final String FROM_1 = "datatype.Blob";
34 private static final String FROM_2 = "datatype.byte[]";
35 private static final String FROM_3 = "datatype.Byte[]";
36 private static final String FROM_4 = "datatype.Clob";
37 private static final String TO_2 = "java.lang.String";
38 private static final String FROM_5 = "datatype.String";
39 private static final String NOT_MAPPED_1 = "datatype.byte";
40 private static final String NOT_MAPPED_2 = "datatype.String[]";
41 private static final String TO_3 = "Class<? extends ToType>";
42 private static final String FROM_6 = "Class<? extends FromType>";
43
44 public void testGetTo()
45 {
46 Mappings mappings1 = new Mappings();
47 Mapping mapping1 = new Mapping();
48 mapping1.setTo(TO_1);
49 mapping1.addFrom(FROM_1);
50 mapping1.addFrom(FROM_2);
51 mapping1.addFrom(FROM_3);
52 mapping1.addFrom(FROM_4);
53 mappings1.addMapping(mapping1);
54
55
56 assertNotNull(mappings1.getTo(NOT_MAPPED_1));
57 assertEquals(
58 NOT_MAPPED_1,
59 mappings1.getTo(NOT_MAPPED_1));
60 assertEquals(
61 mappings1.getTo(NOT_MAPPED_2),
62 mappings1.getTo(NOT_MAPPED_2));
63
64
65 assertNotNull(mappings1.getTo(FROM_1));
66 assertEquals(
67 TO_1,
68 mappings1.getTo(FROM_1));
69
70
71 assertEquals(
72 TO_1,
73 mappings1.getTo(FROM_4));
74
75 Mappings mappings2 = new Mappings();
76 Mapping mapping2 = new Mapping();
77 mapping2.setTo(TO_2);
78 mapping2.addFrom(FROM_5);
79 mappings2.addMapping(mapping2);
80 assertEquals(
81 TO_2,
82 mappings2.getTo(FROM_5));
83
84 Mappings mappings3 = new Mappings();
85 Mapping mapping3 = new Mapping();
86 mapping3.setTo(TO_3);
87 mapping3.addFrom(FROM_6);
88 mappings3.addMapping(mapping3);
89
90 assertEquals(
91 TO_3,
92 mappings3.getTo(FROM_6));
93 }
94
95 public void testMappingsInheritance()
96 {
97 final URL testMappingsParentUri = MappingsTest.class.getResource("TestMappingsParent.xml");
98 assertNotNull(testMappingsParentUri);
99 final Mappings testMappingsParent = Mappings.getInstance(testMappingsParentUri);
100 assertNotNull(testMappingsParent);
101 final Collection mappings1 = testMappingsParent.getMappings();
102 assertEquals(
103 3,
104 mappings1.size());
105 final Iterator mappings1Iterator = mappings1.iterator();
106 Mapping mapping1 = (Mapping)mappings1Iterator.next();
107 assertEquals(
108 "datatype::typeOne",
109 mapping1.getFroms().iterator().next());
110 assertEquals(
111 "Type_One",
112 mapping1.getTo());
113 Mapping mapping2 = (Mapping)mappings1Iterator.next();
114 assertEquals(
115 "datatype::typeTwo",
116 mapping2.getFroms().iterator().next());
117 assertEquals(
118 "Type_Two",
119 mapping2.getTo());
120 Mapping mapping3 = (Mapping)mappings1Iterator.next();
121 assertEquals(
122 "datatype::typeThree",
123 mapping3.getFroms().iterator().next());
124 assertEquals(
125 "Type_Three",
126 mapping3.getTo());
127
128 final URL testMappingsUri = MappingsTest.class.getResource("TestMappings.xml");
129 assertNotNull(testMappingsUri);
130 Mappings testMappings = Mappings.getInstance(testMappingsUri);
131 assertNotNull(testMappings);
132 final Collection mappings2 = testMappings.getMappings();
133 assertEquals(
134 4,
135 mappings2.size());
136 final Iterator mappings2Iterator = mappings2.iterator();
137 mapping1 = (Mapping)mappings2Iterator.next();
138 assertEquals(
139 "datatype::typeOne",
140 mapping1.getFroms().iterator().next());
141 assertEquals(
142 "Type_One",
143 mapping1.getTo());
144 mapping2 = (Mapping)mappings2Iterator.next();
145 assertEquals(
146 "datatype::typeTwo",
147 mapping2.getFroms().iterator().next());
148 assertEquals(
149 "Overridden",
150 mapping2.getTo());
151 mapping3 = (Mapping)mappings2Iterator.next();
152 assertEquals(
153 "datatype::typeThree",
154 mapping3.getFroms().iterator().next());
155 assertEquals(
156 "Type_Three",
157 mapping3.getTo());
158 Mapping mapping4 = (Mapping)mappings2Iterator.next();
159 assertEquals(
160 "datatype::typeFour",
161 mapping4.getFroms().iterator().next());
162 assertEquals(
163 "Type_Four",
164 mapping4.getTo());
165 }
166
167 public void testEmptyMappings()
168 {
169 final URL testEmptyMappingsUri = MappingsTest.class.getResource("TestMappingsEmpty.xml");
170 assertNotNull(testEmptyMappingsUri);
171
172 final Mappings mappings = Mappings.getInstance(testEmptyMappingsUri);
173 assertNotNull(mappings);
174
175 final Collection mappingCollection = mappings.getMappings();
176 assertEquals(0, mappingCollection.size());
177 }
178
179 public void testTransitivelyExtendingLogicalMappings()
180 {
181
182 Mappings.addLogicalMappings(MappingsTest.class.getResource("TestMappingsExtendsLevelA.xml"));
183 Mappings.addLogicalMappings(MappingsTest.class.getResource("TestMappingsExtendsLevelD.xml"));
184 Mappings.addLogicalMappings(MappingsTest.class.getResource("TestMappingsExtendsLevelC.xml"));
185 Mappings.addLogicalMappings(MappingsTest.class.getResource("TestMappingsExtendsLevelB.xml"));
186
187 Mappings.initializeLogicalMappings();
188
189 final Mappings mappings = Mappings.getInstance("TestMappingsExtendsLevelD");
190 assertNotNull(mappings);
191
192 final Mapping aaa = mappings.getMapping("datatype::aaa");
193 assertNotNull(aaa);
194 assertEquals("AAA", aaa.getTo());
195
196 final Mapping bbb = mappings.getMapping("datatype::bbb");
197 assertNotNull(bbb);
198 assertEquals("BBB", bbb.getTo());
199
200 final Mapping ccc = mappings.getMapping("datatype::ccc");
201 assertNotNull(ccc);
202 assertEquals("CCC", ccc.getTo());
203
204 final Mapping ddd = mappings.getMapping("datatype::ddd");
205 assertNotNull(ddd);
206 assertEquals("DDD", ddd.getTo());
207 }
208
209 public void testCyclicInheritanceLogicalMappingsException()
210 {
211 Mappings.addLogicalMappings(MappingsTest.class.getResource("TestMappingsCyclicA.xml"));
212 Mappings.addLogicalMappings(MappingsTest.class.getResource("TestMappingsCyclicB.xml"));
213
214 try
215 {
216 Mappings.initializeLogicalMappings();
217 fail("Expected exception");
218 }
219 catch (MappingsException mappingsException)
220 {
221 final String message = mappingsException.getMessage();
222 assertTrue(message.startsWith("Logical mappings cannot be initialized due to invalid inheritance"));
223 assertTrue(message.indexOf("TestMappingsCyclicA") != -1);
224 assertTrue(message.indexOf("TestMappingsCyclicB") != -1);
225 }
226 finally
227 {
228
229
230 Mappings.clearLogicalMappings();
231 }
232 }
233 }