001: package org.andromda.core.mappings;
002:
003: import junit.framework.TestCase;
004: import org.andromda.core.mapping.Mapping;
005: import org.andromda.core.mapping.Mappings;
006: import org.andromda.core.mapping.MappingsException;
007:
008: import java.net.URL;
009: import java.util.Collection;
010: import java.util.Iterator;
011:
012: /**
013: * Tests {@link org.andromda.core.mapping.Mappings)
014: *
015: * @author Chad Brandon
016: * @author Wouter Zoons
017: */
018: public class MappingsTest extends TestCase {
019: /**
020: * Constructor for MappingsTest.
021: *
022: * @param name the name for this test case
023: */
024: public MappingsTest(String name) {
025: super (name);
026: }
027:
028: private static final String TO_1 = "base64Binary";
029: private static final String FROM_1 = "datatype.Blob";
030: private static final String FROM_2 = "datatype.byte[]";
031: private static final String FROM_3 = "datatype.Byte[]";
032: private static final String FROM_4 = "datatype.Clob";
033: private static final String TO_2 = "java.lang.String";
034: private static final String FROM_5 = "datatype.String";
035: private static final String NOT_MAPPED_1 = "datatype.byte";
036: private static final String NOT_MAPPED_2 = "datatype.String[]";
037: private static final String TO_3 = "Class<? extends ToType>";
038: private static final String FROM_6 = "Class<? extends FromType>";
039:
040: public void testGetTo() {
041: Mappings mappings1 = new Mappings();
042: Mapping mapping1 = new Mapping();
043: mapping1.setTo(TO_1);
044: mapping1.addFrom(FROM_1);
045: mapping1.addFrom(FROM_2);
046: mapping1.addFrom(FROM_3);
047: mapping1.addFrom(FROM_4);
048: mappings1.addMapping(mapping1);
049:
050: // make sure the to == from when passing in a mappings1 that don't exist
051: assertNotNull(mappings1.getTo(NOT_MAPPED_1));
052: assertEquals(NOT_MAPPED_1, mappings1.getTo(NOT_MAPPED_1));
053: assertEquals(mappings1.getTo(NOT_MAPPED_2), mappings1
054: .getTo(NOT_MAPPED_2));
055:
056: // make sure we can retrieve the to using a from array.
057: assertNotNull(mappings1.getTo(FROM_1));
058: assertEquals(TO_1, mappings1.getTo(FROM_1));
059:
060: // make sure we can retrieve the to using a from non array.
061: assertEquals(TO_1, mappings1.getTo(FROM_4));
062:
063: Mappings mappings2 = new Mappings();
064: Mapping mapping2 = new Mapping();
065: mapping2.setTo(TO_2);
066: mapping2.addFrom(FROM_5);
067: mappings2.addMapping(mapping2);
068: assertEquals(TO_2, mappings2.getTo(FROM_5));
069:
070: Mappings mappings3 = new Mappings();
071: Mapping mapping3 = new Mapping();
072: mapping3.setTo(TO_3);
073: mapping3.addFrom(FROM_6);
074: mappings3.addMapping(mapping3);
075: // make sure whitespace isn't deleted, only trimmed (Java generics would fail compilation otherwise for example)
076: assertEquals(TO_3, mappings3.getTo(FROM_6));
077: }
078:
079: public void testMappingsInheritance() {
080: final URL testMappingsParentUri = MappingsTest.class
081: .getResource("TestMappingsParent.xml");
082: assertNotNull(testMappingsParentUri);
083: final Mappings testMappingsParent = Mappings
084: .getInstance(testMappingsParentUri);
085: assertNotNull(testMappingsParent);
086: final Collection mappings1 = testMappingsParent.getMappings();
087: assertEquals(3, mappings1.size());
088: final Iterator mappings1Iterator = mappings1.iterator();
089: Mapping mapping1 = (Mapping) mappings1Iterator.next();
090: assertEquals("datatype::typeOne", mapping1.getFroms()
091: .iterator().next());
092: assertEquals("Type_One", mapping1.getTo());
093: Mapping mapping2 = (Mapping) mappings1Iterator.next();
094: assertEquals("datatype::typeTwo", mapping2.getFroms()
095: .iterator().next());
096: assertEquals("Type_Two", mapping2.getTo());
097: Mapping mapping3 = (Mapping) mappings1Iterator.next();
098: assertEquals("datatype::typeThree", mapping3.getFroms()
099: .iterator().next());
100: assertEquals("Type_Three", mapping3.getTo());
101:
102: final URL testMappingsUri = MappingsTest.class
103: .getResource("TestMappings.xml");
104: assertNotNull(testMappingsUri);
105: Mappings testMappings = Mappings.getInstance(testMappingsUri);
106: assertNotNull(testMappings);
107: final Collection mappings2 = testMappings.getMappings();
108: assertEquals(4, mappings2.size());
109: final Iterator mappings2Iterator = mappings2.iterator();
110: mapping1 = (Mapping) mappings2Iterator.next();
111: assertEquals("datatype::typeOne", mapping1.getFroms()
112: .iterator().next());
113: assertEquals("Type_One", mapping1.getTo());
114: mapping2 = (Mapping) mappings2Iterator.next();
115: assertEquals("datatype::typeTwo", mapping2.getFroms()
116: .iterator().next());
117: assertEquals("Overridden", mapping2.getTo());
118: mapping3 = (Mapping) mappings2Iterator.next();
119: assertEquals("datatype::typeThree", mapping3.getFroms()
120: .iterator().next());
121: assertEquals("Type_Three", mapping3.getTo());
122: Mapping mapping4 = (Mapping) mappings2Iterator.next();
123: assertEquals("datatype::typeFour", mapping4.getFroms()
124: .iterator().next());
125: assertEquals("Type_Four", mapping4.getTo());
126: }
127:
128: public void testEmptyMappings() {
129: final URL testEmptyMappingsUri = MappingsTest.class
130: .getResource("TestMappingsEmpty.xml");
131: assertNotNull(testEmptyMappingsUri);
132:
133: final Mappings mappings = Mappings
134: .getInstance(testEmptyMappingsUri);
135: assertNotNull(mappings);
136:
137: final Collection mappingCollection = mappings.getMappings();
138: assertEquals(0, mappingCollection.size());
139: }
140:
141: public void testTransitivelyExtendingLogicalMappings() {
142: // the order has been mixed up on purpose
143: Mappings.addLogicalMappings(MappingsTest.class
144: .getResource("TestMappingsExtendsLevelA.xml"));
145: Mappings.addLogicalMappings(MappingsTest.class
146: .getResource("TestMappingsExtendsLevelD.xml"));
147: Mappings.addLogicalMappings(MappingsTest.class
148: .getResource("TestMappingsExtendsLevelC.xml"));
149: Mappings.addLogicalMappings(MappingsTest.class
150: .getResource("TestMappingsExtendsLevelB.xml"));
151:
152: Mappings.initializeLogicalMappings();
153:
154: final Mappings mappings = Mappings
155: .getInstance("TestMappingsExtendsLevelD");
156: assertNotNull(mappings);
157:
158: final Mapping aaa = mappings.getMapping("datatype::aaa");
159: assertNotNull(aaa);
160: assertEquals("AAA", aaa.getTo());
161:
162: final Mapping bbb = mappings.getMapping("datatype::bbb");
163: assertNotNull(bbb);
164: assertEquals("BBB", bbb.getTo());
165:
166: final Mapping ccc = mappings.getMapping("datatype::ccc");
167: assertNotNull(ccc);
168: assertEquals("CCC", ccc.getTo());
169:
170: final Mapping ddd = mappings.getMapping("datatype::ddd");
171: assertNotNull(ddd);
172: assertEquals("DDD", ddd.getTo());
173: }
174:
175: public void testCyclicInheritanceLogicalMappingsException() {
176: Mappings.addLogicalMappings(MappingsTest.class
177: .getResource("TestMappingsCyclicA.xml"));
178: Mappings.addLogicalMappings(MappingsTest.class
179: .getResource("TestMappingsCyclicB.xml"));
180:
181: try {
182: Mappings.initializeLogicalMappings();
183: fail("Expected exception");
184: } catch (MappingsException mappingsException) {
185: final String message = mappingsException.getMessage();
186: assertTrue(message
187: .startsWith("Logical mappings cannot be initialized due to invalid inheritance"));
188: assertTrue(message.indexOf("TestMappingsCyclicA") != -1);
189: assertTrue(message.indexOf("TestMappingsCyclicB") != -1);
190: } finally {
191: // clear out the cached entries so that the other tests won't fail because if the invalid
192: // ones we have entered here
193: Mappings.clearLogicalMappings();
194: }
195: }
196: }
|