Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Willink2017-03-03 13:45:00 +0000
committerEd Willink2017-03-11 10:47:23 +0000
commit40b1c3c9d15927e27a2a1aea7455b0bc9641e101 (patch)
tree6ada36d72b830544e9ff4f01a16ae078feed0bc2
parenta6d7c60b8340107297c5aaeca76dced4bd0c234c (diff)
downloadorg.eclipse.qvtd-40b1c3c9d15927e27a2a1aea7455b0bc9641e101.tar.gz
org.eclipse.qvtd-40b1c3c9d15927e27a2a1aea7455b0bc9641e101.tar.xz
org.eclipse.qvtd-40b1c3c9d15927e27a2a1aea7455b0bc9641e101.zip
[512737] Add MiToSiSimpleWithKeys example
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrCompilerTests.java35
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/mitosi/MiToSiSimpleWithKeys.qvtr143
-rw-r--r--tests/org.eclipse.qvtd.xtext.qvtrelation.tests/test-gen/.gitignore1
3 files changed, 179 insertions, 0 deletions
diff --git a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrCompilerTests.java b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrCompilerTests.java
index f70b77bb2..311ca8c26 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrCompilerTests.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrCompilerTests.java
@@ -500,6 +500,7 @@ public class QVTrCompilerTests extends LoadTestCase
// AbstractTransformer.EXCEPTIONS.setState(true);
// AbstractTransformer.INVOCATIONS.setState(true);
// QVTm2QVTp.PARTITIONING.setState(true);
+ // QVTr2QVTc.SYNTHESIS.setState(true);
MyQVT myQVT = new MyQVT("mitosi");
try {
Class<? extends Transformer> txClass = myQVT.buildTransformation("mitosi", "MiToSiSimple.qvtr", "java",
@@ -525,6 +526,40 @@ public class QVTrCompilerTests extends LoadTestCase
}
@Test
+ public void testQVTrCompiler_MiToSiSimpleWithKeys_CG() throws Exception {
+ ToStringVisitor.SHOW_ALL_MULTIPLICITIES = true;
+ // Splitter.GROUPS.setState(true);
+ // Splitter.RESULT.setState(true);
+ // Splitter.STAGES.setState(true);
+ // AbstractTransformer.EXCEPTIONS.setState(true);
+ // AbstractTransformer.INVOCATIONS.setState(true);
+ // QVTm2QVTp.PARTITIONING.setState(true);
+ MyQVT myQVT = new MyQVT("mitosi");
+ try {
+ Class<? extends Transformer> txClass = myQVT.buildTransformation("mitosi", "MiToSiSimpleWithKeys.qvtr", "java",
+ "http://www.eclipse.org/qvtd/xtext/qvtrelation/tests/mitosi/MiToSiSimpleWithKeys", false);
+ // Class<? extends Transformer> txClass = MiToSiSimpleWithKeys.class;
+ //
+ // myQVT.assertRegionCount(BasicMappingRegionImpl.class, 0);
+ // myQVT.assertRegionCount(EarlyMerger.EarlyMergedMappingRegion.class, 0);
+ // myQVT.assertRegionCount(LateConsumerMerger.LateMergedMappingRegion.class, 0);
+ // myQVT.assertRegionCount(MicroMappingRegionImpl.class, 8);
+ myQVT.createGeneratedExecutor(txClass);
+ myQVT.loadInput("uml", "transportuml.xml");
+ myQVT.executeTransformation();
+ myQVT.saveOutput("java", "transportjava_CG.xml", "transportjava.xml", null);
+ //
+ // myQVT.createGeneratedExecutor(txClass);
+ // myQVT.loadInput("seqDgm", "SeqUM.xmi");
+ // myQVT.executeTransformation();
+ // myQVT.saveOutput("stm", "StmcUM_CG.xmi", "StmcUM_expected.xmi", null);
+ }
+ finally {
+ myQVT.dispose();
+ }
+ }
+
+ @Test
public void testQVTrCompiler_SeqToStm() throws Exception {
// AbstractTransformer.EXCEPTIONS.setState(true);
// AbstractTransformer.INVOCATIONS.setState(true);
diff --git a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/mitosi/MiToSiSimpleWithKeys.qvtr b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/mitosi/MiToSiSimpleWithKeys.qvtr
new file mode 100644
index 000000000..6382ea516
--- /dev/null
+++ b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/mitosi/MiToSiSimpleWithKeys.qvtr
@@ -0,0 +1,143 @@
+/*******************************************************************************
+ * Copyright (c) 2007,2008 Tata Consultancy Services and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * TCS - initial implementation for ModelMorf
+ * E.D.Willink - alignment with evolved specification
+ *******************************************************************************/
+import ecoreMM : 'http://www.eclipse.org/emf/2002/Ecore';
+import umlmmmi : 'umlMM.emof'::umlmmmi;
+import javammsi : 'javaMM.emof'::javammsi;
+
+/*
+ * This variant of MiToSiSimple has gratuitous keys. These should not damage execution
+ * but at the time of writing they caused a scheduling failure.
+ */
+transformation MiToSiSimpleWithKeys(uml:{umlmmmi,ecoreMM}, java:javammsi)
+{
+ key umlmmmi::Class {containingPackage, name};
+ key javammsi::Class {containingPackage, name};
+ key javammsi::Interface {containingPackage, name};
+
+ /**
+ * Return true if this class or a transitive super-class is marked as DomainRoot.
+ */
+ query isClass(c : umlmmmi::Class) : Boolean {
+ c->closure(supers)->exists(type = 'DomainRoot')
+ }
+
+ /**
+ * Create a Package for each Package.
+ */
+ top relation PackageToPackage
+ {
+ n : String;
+ domain uml p1:Package {
+ name = n
+ };
+ enforce domain java p2:Package {
+ name = n
+ };
+ }
+
+ /**
+ * Create a Class for each isClass() class.
+ */
+ top relation ClassToClass
+ {
+ n : String;
+ domain uml c1:Class {
+ containingPackage = p1:Package{},
+ name = n
+ }
+ {isClass(c1)};
+ enforce domain java c2:Class {
+ containingPackage = p2:Package{},
+ name = n
+ };
+ when {
+ PackageToPackage(p1, p2);
+ }
+ }
+
+ /**
+ * Create an Interface for each non-isClass() class.
+ */
+ top relation ClassToInterface
+ {
+ n : String;
+ domain uml c1:Class {
+ containingPackage = p1:Package{},
+ name = n
+ }
+ {not isClass(c1)};
+ enforce domain java c2:Interface {
+ containingPackage = p2:Package{},
+ name = n
+ };
+ when {
+ PackageToPackage(p1, p2);
+ }
+ }
+
+ /**
+ * Define a Class::extends relationship for each class with a super-class
+ */
+ top relation ClassExtends
+ {
+ c1sup: umlmmmi::Class;
+ c2sup: javammsi::Class;
+ domain uml c1:Class {
+ supers = s1:Set(Class){c1sup ++ _}
+ };
+ enforce domain java c2:Class {
+ extends = s2:Set(Class){c2sup ++ _}
+ };
+ when {
+ ClassToClass(c1, c2);
+ ClassToClass(c1sup, c2sup);
+ }
+ }
+
+ /**
+ * Define a Class::implements relationship for each class with a super-interface
+ */
+ top relation ClassImplements
+ {
+ c1sup: umlmmmi::Class;
+ c2sup: javammsi::Interface;
+ domain uml c1:Class {
+ supers = s1:Set(Class){c1sup ++ _}
+ };
+ enforce domain java c2:Class {
+ implements = s2:Set(Interface){c2sup ++ _}
+ };
+ when {
+ ClassToClass(c1, c2);
+ ClassToInterface(c1sup, c2sup);
+ }
+ }
+
+ /**
+ * Define a Interface::extends relationship for each interface with a super-interface
+ */
+ top relation InterfaceExtends
+ {
+ c1sup: umlmmmi::Class;
+ c2sup: javammsi::Interface;
+ domain uml c1:Class {
+ supers = s1:Set(Class){c1sup ++ _}
+ };
+ enforce domain java c2:Interface {
+ extends = s2:Set(Interface){c2sup ++ _}
+ };
+ when {
+ ClassToInterface(c1, c2);
+ ClassToInterface(c1sup, c2sup);
+ }
+ }
+}
diff --git a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/test-gen/.gitignore b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/test-gen/.gitignore
index 00d78e966..fa6a158bc 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/test-gen/.gitignore
+++ b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/test-gen/.gitignore
@@ -1,2 +1,3 @@
/_MiToSi/
/_MiToSiSimple/
+/_MiToSiSimpleWithKeys/

Back to the top