diff options
| author | Mickael LANOE | 2015-03-13 15:55:29 +0000 |
|---|---|---|
| committer | Mickael LANOE | 2015-03-19 15:04:39 +0000 |
| commit | acedc8f898da575e8b74c838ec4a80135ce0c509 (patch) | |
| tree | f2f00d685c2b7242dea682bd1be8b2a28f11a2fb | |
| parent | bf0c67f1f57ac2310fe330fc0f21f3aeeff2cb4f (diff) | |
| download | org.eclipse.sirius-acedc8f898da575e8b74c838ec4a80135ce0c509.tar.gz org.eclipse.sirius-acedc8f898da575e8b74c838ec4a80135ce0c509.tar.xz org.eclipse.sirius-acedc8f898da575e8b74c838ec4a80135ce0c509.zip | |
[432133] Add test XSDSemanticResourceTests
Add tests about a semantic resource that conforms to a MM generated with
an XSD.
Ensure that the semantic model is detected after the addition of the
semantic resource or an Aird resource referencing the semantic resource.
Ensure that the session is dirty after a modification on the semantic
model.
Bug: 432133
Change-Id: I1769b4db1c9eece58b01a8288333168251044bc4
Signed-off-by: Mickael LANOE <mickael.lanoe@obeo.fr>
5 files changed, 495 insertions, 3 deletions
diff --git a/plugins/org.eclipse.sirius.tests.junit/META-INF/MANIFEST.MF b/plugins/org.eclipse.sirius.tests.junit/META-INF/MANIFEST.MF index 4a731cb49e..fa9b1e15c5 100644 --- a/plugins/org.eclipse.sirius.tests.junit/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.sirius.tests.junit/META-INF/MANIFEST.MF @@ -64,7 +64,8 @@ Require-Bundle: org.eclipse.sirius.tests.sample.benchmark, org.eclipse.sirius.diagram.ui;bundle-version="1.0.0", org.eclipse.sdk, org.eclipse.platform, - org.eclipse.sirius.tests.sample.component + org.eclipse.sirius.tests.sample.component, + org.eclipse.sirius.tests.sample.scxml Bundle-Activator: org.eclipse.sirius.tests.SiriusTestsPlugin Eclipse-LazyStart: true Bundle-Localization: plugin diff --git a/plugins/org.eclipse.sirius.tests.junit/data/unit/semantic/xsd/representation.aird b/plugins/org.eclipse.sirius.tests.junit/data/unit/semantic/xsd/representation.aird new file mode 100644 index 0000000000..b000759b4d --- /dev/null +++ b/plugins/org.eclipse.sirius.tests.junit/data/unit/semantic/xsd/representation.aird @@ -0,0 +1,194 @@ +<?xml version="1.0" encoding="UTF-8"?> +<viewpoint:DAnalysis xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:scxml="http://www.w3.org/2005/07/scxml" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" xsi:schemaLocation="http://www.eclipse.org/sirius/description/1.1.0 http://www.eclipse.org/sirius/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/style/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description/style" xmi:id="_Dl5ZEMu5EeSBa8vetVe4iA" selectedViews="_GOYeQMu5EeSBa8vetVe4iA" version="10.0.10.201502231700"> + <models xmi:type="scxml:scxml.scxml.type" href="test.scxml#//@scxml"/> + <models xmi:type="scxml" href="test.scxml#/"/> + <ownedViews xmi:type="viewpoint:DRepresentationContainer" xmi:id="_GOYeQMu5EeSBa8vetVe4iA" initialized="true"> + <ownedRepresentations xmi:type="diagram:DSemanticDiagram" xmi:id="_xW41gMu5EeSBa8vetVe4iA" name="new Diagram"> + <ownedAnnotationEntries xmi:type="description:AnnotationEntry" xmi:id="_xW41gcu5EeSBa8vetVe4iA" source="DANNOTATION_CUSTOMIZATION_KEY"> + <data xmi:type="diagram:ComputedStyleDescriptionRegistry" xmi:id="_xW41gsu5EeSBa8vetVe4iA"/> + </ownedAnnotationEntries> + <ownedAnnotationEntries xmi:type="description:AnnotationEntry" xmi:id="_xW5ckMu5EeSBa8vetVe4iA" source="GMF_DIAGRAMS"> + <data xmi:type="notation:Diagram" xmi:id="_xW5ckcu5EeSBa8vetVe4iA" type="Sirius" element="_xW41gMu5EeSBa8vetVe4iA" measurementUnit="Pixel"> + <children xmi:type="notation:Node" xmi:id="_xW6DoMu5EeSBa8vetVe4iA" type="2001" element="_xW41g8u5EeSBa8vetVe4iA"> + <children xmi:type="notation:Node" xmi:id="_xW6qsMu5EeSBa8vetVe4iA" type="5002"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_xW6qscu5EeSBa8vetVe4iA" x="-1"/> + </children> + <children xmi:type="notation:Node" xmi:id="_xW-8IMu5EeSBa8vetVe4iA" type="3016" element="_xW41hMu5EeSBa8vetVe4iA"> + <styles xmi:type="notation:ShapeStyle" xmi:id="_xW-8Icu5EeSBa8vetVe4iA" fontName="Cantarell"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_xW-8Isu5EeSBa8vetVe4iA"/> + </children> + <styles xmi:type="notation:ShapeStyle" xmi:id="_xW6Docu5EeSBa8vetVe4iA" fontName="Cantarell" fontHeight="8"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_xW6Dosu5EeSBa8vetVe4iA" width="30" height="30"/> + </children> + <children xmi:type="notation:Node" xmi:id="_xW9uBMu5EeSBa8vetVe4iA" type="2002" element="_xW41icu5EeSBa8vetVe4iA"> + <children xmi:type="notation:Node" xmi:id="_xW-VEMu5EeSBa8vetVe4iA" type="5006"/> + <children xmi:type="notation:Node" xmi:id="_xW-VEcu5EeSBa8vetVe4iA" type="7001"> + <styles xmi:type="notation:SortingStyle" xmi:id="_xW-VEsu5EeSBa8vetVe4iA"/> + <styles xmi:type="notation:FilteringStyle" xmi:id="_xW-VE8u5EeSBa8vetVe4iA"/> + </children> + <styles xmi:type="notation:ShapeStyle" xmi:id="_xW9uBcu5EeSBa8vetVe4iA" fontName="Cantarell" fontHeight="8"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_xW9uBsu5EeSBa8vetVe4iA" x="348" y="36"/> + </children> + <children xmi:type="notation:Node" xmi:id="_yxo8QMu5EeSBa8vetVe4iA" type="2001" element="_ywDA0Mu5EeSBa8vetVe4iA"> + <children xmi:type="notation:Node" xmi:id="_yxpjUMu5EeSBa8vetVe4iA" type="5002"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_yxpjUcu5EeSBa8vetVe4iA" x="31"/> + </children> + <children xmi:type="notation:Node" xmi:id="_yxqxcMu5EeSBa8vetVe4iA" type="3016" element="_ywDA0cu5EeSBa8vetVe4iA"> + <styles xmi:type="notation:ShapeStyle" xmi:id="_yxqxccu5EeSBa8vetVe4iA" fontName="Cantarell"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yxqxcsu5EeSBa8vetVe4iA"/> + </children> + <styles xmi:type="notation:ShapeStyle" xmi:id="_yxo8Qcu5EeSBa8vetVe4iA" fontName="Cantarell" fontHeight="8"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yxo8Qsu5EeSBa8vetVe4iA" x="12" y="67" width="30" height="30"/> + </children> + <children xmi:type="notation:Node" xmi:id="_zMfsQMu5EeSBa8vetVe4iA" type="2003" element="_zK5JwMu5EeSBa8vetVe4iA"> + <children xmi:type="notation:Node" xmi:id="_zMgTUMu5EeSBa8vetVe4iA" type="5007"/> + <children xmi:type="notation:Node" xmi:id="_zMg6YMu5EeSBa8vetVe4iA" type="7004"> + <styles xmi:type="notation:SortingStyle" xmi:id="_zMg6Ycu5EeSBa8vetVe4iA"/> + <styles xmi:type="notation:FilteringStyle" xmi:id="_zMg6Ysu5EeSBa8vetVe4iA"/> + </children> + <styles xmi:type="notation:ShapeStyle" xmi:id="_zMfsQcu5EeSBa8vetVe4iA" fontName="Cantarell" fontHeight="8"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zMfsQsu5EeSBa8vetVe4iA" x="156" y="29"/> + </children> + <children xmi:type="notation:Node" xmi:id="_0Bn9cMu5EeSBa8vetVe4iA" type="2002" element="_0Adf0Mu5EeSBa8vetVe4iA"> + <children xmi:type="notation:Node" xmi:id="_0BokgMu5EeSBa8vetVe4iA" type="5006"/> + <children xmi:type="notation:Node" xmi:id="_0Bokgcu5EeSBa8vetVe4iA" type="7001"> + <styles xmi:type="notation:SortingStyle" xmi:id="_0Bokgsu5EeSBa8vetVe4iA"/> + <styles xmi:type="notation:FilteringStyle" xmi:id="_0Bokg8u5EeSBa8vetVe4iA"/> + </children> + <styles xmi:type="notation:ShapeStyle" xmi:id="_0Bn9ccu5EeSBa8vetVe4iA" fontName="Cantarell" fontHeight="8"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0Bn9csu5EeSBa8vetVe4iA" x="480" y="168"/> + </children> + <children xmi:type="notation:Node" xmi:id="_15IRoMu5EeSBa8vetVe4iA" type="2002" element="_14ta4Mu5EeSBa8vetVe4iA"> + <children xmi:type="notation:Node" xmi:id="_15I4sMu5EeSBa8vetVe4iA" type="5006"/> + <children xmi:type="notation:Node" xmi:id="_15I4scu5EeSBa8vetVe4iA" type="7001"> + <styles xmi:type="notation:SortingStyle" xmi:id="_15I4ssu5EeSBa8vetVe4iA"/> + <styles xmi:type="notation:FilteringStyle" xmi:id="_15I4s8u5EeSBa8vetVe4iA"/> + </children> + <styles xmi:type="notation:ShapeStyle" xmi:id="_15IRocu5EeSBa8vetVe4iA" fontName="Cantarell" fontHeight="8"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_15IRosu5EeSBa8vetVe4iA" x="192" y="168"/> + </children> + <styles xmi:type="notation:DiagramStyle" xmi:id="_xW5cksu5EeSBa8vetVe4iA"/> + <edges xmi:type="notation:Edge" xmi:id="_0YDgcMu5EeSBa8vetVe4iA" type="4001" element="_0XYLAMu5EeSBa8vetVe4iA" source="_xW9uBMu5EeSBa8vetVe4iA" target="_0Bn9cMu5EeSBa8vetVe4iA"> + <children xmi:type="notation:Node" xmi:id="_0YEHgMu5EeSBa8vetVe4iA" type="6001"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0YEHgcu5EeSBa8vetVe4iA" y="-10"/> + </children> + <children xmi:type="notation:Node" xmi:id="_0YEHgsu5EeSBa8vetVe4iA" type="6002"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0YEHg8u5EeSBa8vetVe4iA" y="10"/> + </children> + <children xmi:type="notation:Node" xmi:id="_0YEHhMu5EeSBa8vetVe4iA" type="6003"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0YEHhcu5EeSBa8vetVe4iA" y="10"/> + </children> + <styles xmi:type="notation:ConnectorStyle" xmi:id="_0YDgccu5EeSBa8vetVe4iA"/> + <styles xmi:type="notation:FontStyle" xmi:id="_0YDgcsu5EeSBa8vetVe4iA" fontName="Cantarell" fontHeight="8"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_0YDgc8u5EeSBa8vetVe4iA" points="[40, -8, -8, -72]$[48, 64, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0YEukMu5EeSBa8vetVe4iA" id="(0.7297297297297297,1.0)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0YEukcu5EeSBa8vetVe4iA" id="(0.16216216216216217,0.0)"/> + </edges> + <edges xmi:type="notation:Edge" xmi:id="_15JfwMu5EeSBa8vetVe4iA" type="4001" element="_15FOUMu5EeSBa8vetVe4iA" source="_xW9uBMu5EeSBa8vetVe4iA" target="_15IRoMu5EeSBa8vetVe4iA"> + <children xmi:type="notation:Node" xmi:id="_15JfxMu5EeSBa8vetVe4iA" type="6001"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_15Jfxcu5EeSBa8vetVe4iA" y="-10"/> + </children> + <children xmi:type="notation:Node" xmi:id="_15Jfxsu5EeSBa8vetVe4iA" type="6002"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_15Jfx8u5EeSBa8vetVe4iA" y="10"/> + </children> + <children xmi:type="notation:Node" xmi:id="_15KG0Mu5EeSBa8vetVe4iA" type="6003"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_15KG0cu5EeSBa8vetVe4iA" y="10"/> + </children> + <styles xmi:type="notation:ConnectorStyle" xmi:id="_15Jfwcu5EeSBa8vetVe4iA"/> + <styles xmi:type="notation:FontStyle" xmi:id="_15Jfwsu5EeSBa8vetVe4iA" fontName="Cantarell" fontHeight="8"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_15Jfw8u5EeSBa8vetVe4iA" points="[-34, 34, 122, -98]$[-114, 98, 42, -34]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_15KG0su5EeSBa8vetVe4iA" id="(0.5,0.5)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_15KG08u5EeSBa8vetVe4iA" id="(0.5,0.5)"/> + </edges> + </data> + </ownedAnnotationEntries> + <ownedDiagramElements xmi:type="diagram:DNode" xmi:id="_xW41g8u5EeSBa8vetVe4iA" width="3" height="3" resizeKind="NSEW"> + <target xmi:type="scxml:scxml.scxml.type" href="test.scxml#//@scxml"/> + <semanticElements xmi:type="scxml:scxml.scxml.type" href="test.scxml#//@scxml"/> + <ownedStyle xmi:type="diagram:Ellipse" xmi:id="_xW41hMu5EeSBa8vetVe4iA" showIcon="false"> + <description xmi:type="style:EllipseNodeDescription" href="platform:/plugin/org.eclipse.sirius.tests.sample.scxml.design/description/scxml.odesign#//@ownedViewpoints[name='SCXML%20Diagram']/@ownedRepresentations[name='Diagram']/@defaultLayer/@nodeMappings[name='Initial']/@style"/> + </ownedStyle> + <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.sirius.tests.sample.scxml.design/description/scxml.odesign#//@ownedViewpoints[name='SCXML%20Diagram']/@ownedRepresentations[name='Diagram']/@defaultLayer/@nodeMappings[name='Initial']"/> + </ownedDiagramElements> + <ownedDiagramElements xmi:type="diagram:DNodeContainer" xmi:id="_xW41icu5EeSBa8vetVe4iA" outgoingEdges="_0XYLAMu5EeSBa8vetVe4iA _15FOUMu5EeSBa8vetVe4iA"> + <target xmi:type="scxml:scxml.state.type" href="test.scxml#//@scxml/@state.0"/> + <semanticElements xmi:type="scxml:scxml.state.type" href="test.scxml#//@scxml/@state.0"/> + <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> + <arrangeConstraints>KEEP_SIZE</arrangeConstraints> + <arrangeConstraints>KEEP_RATIO</arrangeConstraints> + <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_xW41isu5EeSBa8vetVe4iA" borderSize="1" borderSizeComputationExpression="1" foregroundColor="255,255,255"> + <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.sirius.tests.sample.scxml.design/description/scxml.odesign#//@ownedViewpoints[name='SCXML%20Diagram']/@ownedRepresentations[name='Diagram']/@defaultLayer/@containerMappings[name='State']/@style"/> + </ownedStyle> + <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.sirius.tests.sample.scxml.design/description/scxml.odesign#//@ownedViewpoints[name='SCXML%20Diagram']/@ownedRepresentations[name='Diagram']/@defaultLayer/@containerMappings[name='State']"/> + </ownedDiagramElements> + <ownedDiagramElements xmi:type="diagram:DNode" xmi:id="_ywDA0Mu5EeSBa8vetVe4iA" name="final1" width="3" height="3" resizeKind="NSEW"> + <target xmi:type="scxml:scxml.final.type" href="test.scxml#final1"/> + <semanticElements xmi:type="scxml:scxml.final.type" href="test.scxml#final1"/> + <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> + <arrangeConstraints>KEEP_SIZE</arrangeConstraints> + <arrangeConstraints>KEEP_RATIO</arrangeConstraints> + <ownedStyle xmi:type="diagram:Ellipse" xmi:id="_ywDA0cu5EeSBa8vetVe4iA" color="138,226,52"> + <description xmi:type="style:EllipseNodeDescription" href="platform:/plugin/org.eclipse.sirius.tests.sample.scxml.design/description/scxml.odesign#//@ownedViewpoints[name='SCXML%20Diagram']/@ownedRepresentations[name='Diagram']/@defaultLayer/@nodeMappings[name='Final']/@style"/> + </ownedStyle> + <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.sirius.tests.sample.scxml.design/description/scxml.odesign#//@ownedViewpoints[name='SCXML%20Diagram']/@ownedRepresentations[name='Diagram']/@defaultLayer/@nodeMappings[name='Final']"/> + </ownedDiagramElements> + <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_zK5JwMu5EeSBa8vetVe4iA" name="Datamodel"> + <target xmi:type="scxml:scxml.datamodel.type" href="test.scxml#//@scxml/@datamodel.0"/> + <semanticElements xmi:type="scxml:scxml.datamodel.type" href="test.scxml#//@scxml/@datamodel.0"/> + <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> + <arrangeConstraints>KEEP_SIZE</arrangeConstraints> + <arrangeConstraints>KEEP_RATIO</arrangeConstraints> + <ownedStyle xmi:type="diagram:ShapeContainerStyle" xmi:id="_zK5w0Mu5EeSBa8vetVe4iA" backgroundColor="255,245,181"> + <description xmi:type="style:ShapeContainerStyleDescription" href="platform:/plugin/org.eclipse.sirius.tests.sample.scxml.design/description/scxml.odesign#//@ownedViewpoints[name='SCXML%20Diagram']/@ownedRepresentations[name='Diagram']/@defaultLayer/@containerMappings[name='Datamodel']/@style"/> + </ownedStyle> + <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.sirius.tests.sample.scxml.design/description/scxml.odesign#//@ownedViewpoints[name='SCXML%20Diagram']/@ownedRepresentations[name='Diagram']/@defaultLayer/@containerMappings[name='Datamodel']"/> + </ownedDiagramElements> + <ownedDiagramElements xmi:type="diagram:DNodeContainer" xmi:id="_0Adf0Mu5EeSBa8vetVe4iA" name="State4" incomingEdges="_0XYLAMu5EeSBa8vetVe4iA"> + <target xmi:type="scxml:scxml.state.type" href="test.scxml#State4"/> + <semanticElements xmi:type="scxml:scxml.state.type" href="test.scxml#State4"/> + <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> + <arrangeConstraints>KEEP_SIZE</arrangeConstraints> + <arrangeConstraints>KEEP_RATIO</arrangeConstraints> + <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_0AeG4Mu5EeSBa8vetVe4iA" borderSize="1" borderSizeComputationExpression="1" foregroundColor="255,255,255"> + <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.sirius.tests.sample.scxml.design/description/scxml.odesign#//@ownedViewpoints[name='SCXML%20Diagram']/@ownedRepresentations[name='Diagram']/@defaultLayer/@containerMappings[name='State']/@style"/> + </ownedStyle> + <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.sirius.tests.sample.scxml.design/description/scxml.odesign#//@ownedViewpoints[name='SCXML%20Diagram']/@ownedRepresentations[name='Diagram']/@defaultLayer/@containerMappings[name='State']"/> + </ownedDiagramElements> + <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_0XYLAMu5EeSBa8vetVe4iA" sourceNode="_xW41icu5EeSBa8vetVe4iA" targetNode="_0Adf0Mu5EeSBa8vetVe4iA"> + <target xmi:type="scxml:scxml.transition.type" href="test.scxml#//@scxml/@state.0/@transition.1"/> + <semanticElements xmi:type="scxml:scxml.transition.type" href="test.scxml#//@scxml/@state.0/@transition.1"/> + <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_0XYLAcu5EeSBa8vetVe4iA" targetArrow="InputFillClosedArrow" size="2"> + <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.sirius.tests.sample.scxml.design/description/scxml.odesign#//@ownedViewpoints[name='SCXML%20Diagram']/@ownedRepresentations[name='Diagram']/@defaultLayer/@edgeMappings[name='Transition']/@style"/> + <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_0XYyEMu5EeSBa8vetVe4iA"/> + </ownedStyle> + <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.sirius.tests.sample.scxml.design/description/scxml.odesign#//@ownedViewpoints[name='SCXML%20Diagram']/@ownedRepresentations[name='Diagram']/@defaultLayer/@edgeMappings[name='Transition']"/> + </ownedDiagramElements> + <ownedDiagramElements xmi:type="diagram:DNodeContainer" xmi:id="_14ta4Mu5EeSBa8vetVe4iA" name="State4" incomingEdges="_15FOUMu5EeSBa8vetVe4iA"> + <target xmi:type="scxml:scxml.state.type" href="test.scxml#State4"/> + <semanticElements xmi:type="scxml:scxml.state.type" href="test.scxml#State4"/> + <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> + <arrangeConstraints>KEEP_SIZE</arrangeConstraints> + <arrangeConstraints>KEEP_RATIO</arrangeConstraints> + <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_14ta4cu5EeSBa8vetVe4iA" borderSize="1" borderSizeComputationExpression="1" foregroundColor="255,255,255"> + <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.sirius.tests.sample.scxml.design/description/scxml.odesign#//@ownedViewpoints[name='SCXML%20Diagram']/@ownedRepresentations[name='Diagram']/@defaultLayer/@containerMappings[name='State']/@style"/> + </ownedStyle> + <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.sirius.tests.sample.scxml.design/description/scxml.odesign#//@ownedViewpoints[name='SCXML%20Diagram']/@ownedRepresentations[name='Diagram']/@defaultLayer/@containerMappings[name='State']"/> + </ownedDiagramElements> + <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_15FOUMu5EeSBa8vetVe4iA" sourceNode="_xW41icu5EeSBa8vetVe4iA" targetNode="_14ta4Mu5EeSBa8vetVe4iA"> + <target xmi:type="scxml:scxml.transition.type" href="test.scxml#//@scxml/@state.0/@transition.1"/> + <semanticElements xmi:type="scxml:scxml.transition.type" href="test.scxml#//@scxml/@state.0/@transition.1"/> + <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_15F1YMu5EeSBa8vetVe4iA" targetArrow="InputFillClosedArrow" size="2"> + <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.sirius.tests.sample.scxml.design/description/scxml.odesign#//@ownedViewpoints[name='SCXML%20Diagram']/@ownedRepresentations[name='Diagram']/@defaultLayer/@edgeMappings[name='Transition']/@style"/> + <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_15F1Ycu5EeSBa8vetVe4iA"/> + </ownedStyle> + <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.sirius.tests.sample.scxml.design/description/scxml.odesign#//@ownedViewpoints[name='SCXML%20Diagram']/@ownedRepresentations[name='Diagram']/@defaultLayer/@edgeMappings[name='Transition']"/> + </ownedDiagramElements> + <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.sirius.tests.sample.scxml.design/description/scxml.odesign#//@ownedViewpoints[name='SCXML%20Diagram']/@ownedRepresentations[name='Diagram']"/> + <filterVariableHistory xmi:type="diagram:FilterVariableHistory" xmi:id="_xW41i8u5EeSBa8vetVe4iA"/> + <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.sirius.tests.sample.scxml.design/description/scxml.odesign#//@ownedViewpoints[name='SCXML%20Diagram']/@ownedRepresentations[name='Diagram']/@defaultLayer"/> + <target xmi:type="scxml:scxml.scxml.type" href="test.scxml#//@scxml"/> + </ownedRepresentations> + <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.sirius.tests.sample.scxml.design/description/scxml.odesign#//@ownedViewpoints[name='SCXML%20Diagram']"/> + </ownedViews> + <models xmi:type="scxml" href="calc.scxml#/"/> +</viewpoint:DAnalysis> diff --git a/plugins/org.eclipse.sirius.tests.junit/data/unit/semantic/xsd/test.scxml b/plugins/org.eclipse.sirius.tests.junit/data/unit/semantic/xsd/test.scxml new file mode 100644 index 0000000000..125d48a5aa --- /dev/null +++ b/plugins/org.eclipse.sirius.tests.junit/data/unit/semantic/xsd/test.scxml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<scxml xmlns="http://www.w3.org/2005/07/scxml" datamodel="ecmascript" exmode="strict" initial="init" name="test" version="1.0"> + <state> + <transition/> + <transition target="State4"/> + </state> + <final id="final1"/> + <datamodel/> + <state id="State4"/> + <state id="State4"/> +</scxml>
\ No newline at end of file diff --git a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/suite/common/AllCommonPluginTests.java b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/suite/common/AllCommonPluginTests.java index f1a4be8e31..7ced5fa491 100644 --- a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/suite/common/AllCommonPluginTests.java +++ b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/suite/common/AllCommonPluginTests.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010, 2014 THALES GLOBAL SERVICES. + * Copyright (c) 2010, 2015 THALES GLOBAL SERVICES. * 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 @@ -41,6 +41,7 @@ import org.eclipse.sirius.tests.unit.api.resource.WorkspaceDragAndDropSupportTes import org.eclipse.sirius.tests.unit.api.routing.EdgeRoutingStyleEdgeConditionalStyleTest; import org.eclipse.sirius.tests.unit.api.routing.EdgeRoutingStyleEndUserOverrideTest; import org.eclipse.sirius.tests.unit.api.routing.EdgeRoutingStyleTests; +import org.eclipse.sirius.tests.unit.api.semantic.XSDSemanticResourceTests; import org.eclipse.sirius.tests.unit.api.session.DAnalysisSessionTests; import org.eclipse.sirius.tests.unit.api.session.ReloadSessionTest; import org.eclipse.sirius.tests.unit.api.session.SampleSessionTest; @@ -94,6 +95,7 @@ import org.eclipse.sirius.tests.unit.common.migration.DiagramMigrationTestCampai import org.eclipse.sirius.tests.unit.common.migration.MigrationFromSirius0_9Test; import org.eclipse.sirius.tests.unit.common.migration.MigrationFromSirius1_0_0_M5Test; import org.eclipse.sirius.tests.unit.diagram.filter.EObjectSelectionFilterTest; +import org.eclipse.sirius.tests.unit.diagram.migration.ComputedStyleDescriptionCachePackingFileMigrationParticipantTests; import org.eclipse.sirius.tests.unit.diagram.migration.CorruptedViewsMigrationTests; import org.eclipse.sirius.tests.unit.diagram.migration.DDiagramSetRemovalMigrationTest; import org.eclipse.sirius.tests.unit.diagram.migration.DiagramSplitMigrationTest; @@ -107,7 +109,6 @@ import org.eclipse.sirius.tests.unit.diagram.migration.MigrationLabelBoundsToLoc import org.eclipse.sirius.tests.unit.diagram.migration.MigrationOfCollapsedBorderedNodeTest; import org.eclipse.sirius.tests.unit.diagram.migration.MigrationOfHideLabelFilterInconsistencyTest; import org.eclipse.sirius.tests.unit.diagram.migration.MigrationRoutingStyleEndUserOverrideTest; -import org.eclipse.sirius.tests.unit.diagram.migration.ComputedStyleDescriptionCachePackingFileMigrationParticipantTests; import org.eclipse.sirius.tests.unit.diagram.migration.OptionalLayerToAdditionalLayerMigrationTest; import org.eclipse.sirius.tests.unit.diagram.migration.ReferencedModelResourceMigrationTest; import org.eclipse.sirius.tests.unit.diagram.migration.RemoveAcceleoReferencesMigrationTest; @@ -267,6 +268,7 @@ public class AllCommonPluginTests extends TestCase { suite.addTestSuite(RestoreSessionFromEditorInputTests.class); suite.addTestSuite(SiriusCrossReferenceAdapterTests.class); suite.addTestSuite(SaverTest.class); + suite.addTestSuite(XSDSemanticResourceTests.class); } /** diff --git a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/semantic/XSDSemanticResourceTests.java b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/semantic/XSDSemanticResourceTests.java new file mode 100644 index 0000000000..d4fa9b5751 --- /dev/null +++ b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/semantic/XSDSemanticResourceTests.java @@ -0,0 +1,284 @@ +/******************************************************************************* + * Copyright (c) 2015 Obeo. + * 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: + * Obeo - initial API and implementation + *******************************************************************************/ +package org.eclipse.sirius.tests.unit.api.semantic; + +import java.util.Iterator; + +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.emf.common.command.Command; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.util.ECrossReferenceAdapter; +import org.eclipse.emf.ecore.util.EcoreUtil; +import org.eclipse.emf.transaction.RecordingCommand; +import org.eclipse.emf.transaction.TransactionalEditingDomain; +import org.eclipse.sirius.business.api.session.SessionManager; +import org.eclipse.sirius.business.api.session.SessionStatus; +import org.eclipse.sirius.business.api.session.danalysis.DAnalysisSession; +import org.eclipse.sirius.tests.SiriusTestsPlugin; +import org.eclipse.sirius.tests.sample.scxml.DocumentRoot; +import org.eclipse.sirius.tests.sample.scxml.ScxmlScxmlType; +import org.eclipse.sirius.tests.support.api.EclipseTestsSupportHelper; +import org.eclipse.sirius.tests.support.api.ICondition; +import org.eclipse.sirius.tests.support.api.SiriusDiagramTestCase; +import org.eclipse.sirius.tests.support.api.TestsUtil; +import org.eclipse.sirius.tools.api.command.semantic.AddSemanticResourceCommand; +import org.eclipse.sirius.tools.api.command.semantic.RemoveSemanticResourceCommand; +import org.eclipse.sirius.ui.business.api.preferences.SiriusUIPreferencesKeys; +import org.eclipse.sirius.ui.tools.api.project.ModelingProjectManager; +import org.eclipse.sirius.viewpoint.DAnalysis; + +/** + * Tests with a semantic resource that conforms to a MM generated with an XSD. + * + * @author <a href="mailto:mickael.lanoe@obeo.fr">Mickael LANOE</a> + */ +public class XSDSemanticResourceTests extends SiriusDiagramTestCase { + + private static final String PATH = "/data/unit/semantic/xsd/"; + + private String SEMANTIC_RESOURCE_NAME = "test.scxml"; + + private String AIRD_RESOURCE_NAME = "representation.aird"; + + @Override + protected void setUp() throws Exception { + super.setUp(); + genericSetUp(); + assertEquals("The created session should not have semantic resources", 0, session.getSemanticResources().size()); + + // Set the preference PREF_SAVE_WHEN_NO_EDITOR to false in order to + // verify that the session is dirty after semantic modification without + // opened editor + changeSiriusUIPreference(SiriusUIPreferencesKeys.PREF_SAVE_WHEN_NO_EDITOR.name(), false); + changeSiriusUIPreference(SiriusUIPreferencesKeys.PREF_RELOAD_ON_LAST_EDITOR_CLOSE.name(), false); + } + + /** + * Test the semantic resource addition in a non modeling project. + */ + public void testSemanticResourceAdditionInNonModelingProject() { + addSemanticResourceInNonModelingProject(); + doTestSemanticResource(session.getSessionResource().getURI()); + } + + /** + * Test the semantic resource addition in a modeling project + * + * @throws Exception + */ + public void testSemanticResourceDetectionInModelingProject() throws Exception { + addSemanticResourceInModelingProject(); + doTestSemanticResource(session.getSessionResource().getURI()); + } + + /** + * Test the Aird resource addition referencing the semantic resource. + */ + public void testAirResourceAddition() { + Resource airdResource = addAirdResource(); + doTestSemanticResource(airdResource.getURI()); + } + + /** + * Do the test. + * + * @param airdURI + * Aird resource uri containing the semantic model to test + */ + private void doTestSemanticResource(URI airdURI) { + // Check semantic modification + checkSemanticModel(airdURI); + + // Save, close and reload the session + saveCloseAndReloadSession(); + + // Check semantic modification + checkSemanticModel(airdURI); + + // Remove the semantic resource + removeSemanticResource(); + assertEquals("The session should have 0 semantic resource", 0, session.getSemanticResources().size()); + } + + /** + * Check the semantic model. + * + * @param airdURI + * the Aird resource URI containing the semantic model to test + */ + private void checkSemanticModel(URI airdURI) { + waitUntilOneSemanticResource(); + checkCrossReferencer(); + + Resource airdResource = session.getTransactionalEditingDomain().getResourceSet().getResource(airdURI, false); + + // Step 1: Check the DAnalysis content + DAnalysis mainDAnalysis = (DAnalysis) airdResource.getContents().get(0); + assertEquals("The analysis should have 1 semantic element", 1, mainDAnalysis.getModels().size()); + + // Step 2: Check the type of the semantic element + EObject semanticElement = mainDAnalysis.getModels().get(0); + assertTrue("The semantic element should be an instance of ScxmlScxmlType", semanticElement instanceof ScxmlScxmlType); + assertTrue("The container should be an instance of DocumentRoot", semanticElement.eContainer() instanceof DocumentRoot); + + // Step 3: Rename the semantic element and ensure that the session is + // dirty + renameSemanticElement((ScxmlScxmlType) semanticElement); + assertTrue("The session should be dirty", session.getStatus() == SessionStatus.DIRTY); + + // Step 4: Save and ensure that the session is sync + session.save(new NullProgressMonitor()); + assertTrue("The session should be dirty", session.getStatus() == SessionStatus.SYNC); + } + + /** + * Add an Aird resource. + * + * @return the added Aird resource + */ + private Resource addAirdResource() { + copyFilesToTestProject(SiriusTestsPlugin.PLUGIN_ID, PATH, SEMANTIC_RESOURCE_NAME, AIRD_RESOURCE_NAME); + + TransactionalEditingDomain domain = session.getTransactionalEditingDomain(); + URI airdResourceURI = URI.createPlatformResourceURI("/" + TEMPORARY_PROJECT_NAME + "/" + AIRD_RESOURCE_NAME, true); + + Resource airdResource = domain.getResourceSet().getResource(airdResourceURI, true); + final DAnalysis dAnalysis = (DAnalysis) airdResource.getContents().get(0); + + Command addDAnalysisCmd = new RecordingCommand(domain) { + + @Override + protected void doExecute() { + ((DAnalysisSession) session).addReferencedAnalysis(dAnalysis); + } + }; + + domain.getCommandStack().execute(addDAnalysisCmd); + + return airdResource; + } + + /** + * Add the semantic resource in a non modeling project + */ + private void addSemanticResourceInNonModelingProject() { + EclipseTestsSupportHelper.INSTANCE.copyFile(SiriusTestsPlugin.PLUGIN_ID, PATH + "/" + SEMANTIC_RESOURCE_NAME, "/" + TEMPORARY_PROJECT_NAME + "/" + SEMANTIC_RESOURCE_NAME); + TransactionalEditingDomain domain = session.getTransactionalEditingDomain(); + URI semanticResource4URI = URI.createPlatformResourceURI("/" + TEMPORARY_PROJECT_NAME + "/" + SEMANTIC_RESOURCE_NAME, true); + Command addSemanticResourceCmd = new AddSemanticResourceCommand(session, semanticResource4URI, new NullProgressMonitor()); + domain.getCommandStack().execute(addSemanticResourceCmd); + } + + /** + * Add the semantic resource a modeling project + * + * @throws CoreException + */ + private void addSemanticResourceInModelingProject() throws CoreException { + IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(TEMPORARY_PROJECT_NAME); + ModelingProjectManager.INSTANCE.convertToModelingProject(project, new NullProgressMonitor()); + EclipseTestsSupportHelper.INSTANCE.copyFile(SiriusTestsPlugin.PLUGIN_ID, PATH + "/" + SEMANTIC_RESOURCE_NAME, "/" + TEMPORARY_PROJECT_NAME + "/" + SEMANTIC_RESOURCE_NAME); + } + + /** + * Remove the semantic resource. + */ + private void removeSemanticResource() { + TransactionalEditingDomain domain = session.getTransactionalEditingDomain(); + Resource addedSemanticResource = session.getSemanticResources().iterator().next(); + Command removeSemanticResourceCmd = new RemoveSemanticResourceCommand(session, addedSemanticResource, true, new NullProgressMonitor()); + domain.getCommandStack().execute(removeSemanticResourceCmd); + } + + /** + * Rename the semantic element. + * + * @param semanticElement + * semantic element to rename + */ + private void renameSemanticElement(final ScxmlScxmlType semanticElement) { + TransactionalEditingDomain domain = session.getTransactionalEditingDomain(); + domain.getCommandStack().execute(new RecordingCommand(domain) { + @Override + protected void doExecute() { + semanticElement.setName(semanticElement.getName() + "_renamed"); + } + }); + } + + /** + * Ensure that the cross referencer is on all semantic resources and their + * content. + */ + private void checkCrossReferencer() { + ECrossReferenceAdapter crossReferencer = session.getSemanticCrossReferencer(); + + // Call the method {@link ECrossReferenceAdapter.getTarget()} only to + // force the initialization of the {@link LazyCrossReferencer} + crossReferencer.getTarget(); + + for (Resource semanticResource : session.getSemanticResources()) { + // Check the resource + assertTrue("The semantic resource '" + semanticResource.getURI() + "' should have the cross referencer", semanticResource.eAdapters().contains(crossReferencer)); + + // Check the content + Iterator<EObject> semanticElementIterator = semanticResource.getAllContents(); + while (semanticElementIterator.hasNext()) { + EObject semanticElement = semanticElementIterator.next(); + assertTrue("The semantic element '" + EcoreUtil.getURI(semanticElement) + "' should have the cross referencer", semanticElement.eAdapters().contains(crossReferencer)); + } + } + } + + /** + * Save, Close and reload the session. + */ + private void saveCloseAndReloadSession() { + // Save + assertTrue("The session must be opened", session.isOpen()); + session.save(new NullProgressMonitor()); + assertEquals("The session should be sync", SessionStatus.SYNC, session.getStatus()); + + // Close + URI mainAnalysisURI = session.getSessionResource().getURI(); + session.close(new NullProgressMonitor()); + assertFalse("The session should be closed", session.isOpen()); + + // Open + session = SessionManager.INSTANCE.getSession(mainAnalysisURI, new NullProgressMonitor()); + assertFalse("The session should not be opened", session.isOpen()); + session.open(new NullProgressMonitor()); + assertTrue("The session should be opened", session.isOpen()); + } + + /** + * Wait until there is one semantic resource. + */ + private void waitUntilOneSemanticResource() { + TestsUtil.waitUntil(new ICondition() { + + @Override + public boolean test() throws Exception { + return session.getSemanticResources().size() == 1; + } + + @Override + public String getFailureMessage() { + return "The session should have only one semantic resource"; + } + }); + } +} |
