diff options
author | Remi Schnekenburger | 2016-08-12 14:38:47 +0000 |
---|---|---|
committer | Remi Schnekenburger | 2016-08-12 14:39:58 +0000 |
commit | 6e2b93db94b389bce2d6d3030c4797aecc0689b2 (patch) | |
tree | 405836ab8edce129916e4ab186467dfc5ee9d6b7 /tests/junit | |
parent | a8f4e4a5b27c5805d378835749844f912721f0d5 (diff) | |
download | org.eclipse.papyrus-6e2b93db94b389bce2d6d3030c4797aecc0689b2.tar.gz org.eclipse.papyrus-6e2b93db94b389bce2d6d3030c4797aecc0689b2.tar.xz org.eclipse.papyrus-6e2b93db94b389bce2d6d3030c4797aecc0689b2.zip |
Bug 485342: [Layout] Integrate ELK with Papyrus
This contribution works on the release 0.1 from ELK.
It provides JUnit tests on ELK integration (mainly based on an export of
the diagram using SVG export facility from Papyrus, and compare with a
reference diagram).
- add a syserr of the current file to understand better errors in junit
report
Signed-off-by: Remi Schnekenburger <remi.schnekenburger@cea.fr>
Diffstat (limited to 'tests/junit')
-rw-r--r-- | tests/junit/extraplugins/elk/org.eclipse.papyrus.infra.gmfdiag.elk.tests/META-INF/MANIFEST.MF | 4 | ||||
-rw-r--r-- | tests/junit/extraplugins/elk/org.eclipse.papyrus.infra.gmfdiag.elk.tests/resource/simple-classdiag/expected/Advanced-expected.svg (renamed from tests/junit/extraplugins/elk/org.eclipse.papyrus.infra.gmfdiag.elk.tests/resource/simple-classdiag/expected/Advanced-expected.SVG) | 4 | ||||
-rw-r--r-- | tests/junit/extraplugins/elk/org.eclipse.papyrus.infra.gmfdiag.elk.tests/resource/simple-classdiag/expected/Basic-expected.svg (renamed from tests/junit/extraplugins/elk/org.eclipse.papyrus.infra.gmfdiag.elk.tests/resource/simple-classdiag/expected/Basic-expected.SVG) | 6 | ||||
-rw-r--r-- | tests/junit/extraplugins/elk/org.eclipse.papyrus.infra.gmfdiag.elk.tests/src/org/eclipse/papyrus/infra/gmfdiag/elk/tests/classdiag/ClassDiagramLayoutTests.java | 371 |
4 files changed, 326 insertions, 59 deletions
diff --git a/tests/junit/extraplugins/elk/org.eclipse.papyrus.infra.gmfdiag.elk.tests/META-INF/MANIFEST.MF b/tests/junit/extraplugins/elk/org.eclipse.papyrus.infra.gmfdiag.elk.tests/META-INF/MANIFEST.MF index db400dc3307..884a9b7a2cd 100644 --- a/tests/junit/extraplugins/elk/org.eclipse.papyrus.infra.gmfdiag.elk.tests/META-INF/MANIFEST.MF +++ b/tests/junit/extraplugins/elk/org.eclipse.papyrus.infra.gmfdiag.elk.tests/META-INF/MANIFEST.MF @@ -42,7 +42,9 @@ Require-Bundle: org.eclipse.ui, org.eclipse.papyrus.infra.gmfdiag.export;bundle-version="1.2.0", org.eclipse.compare.core;bundle-version="3.6.0", org.eclipse.compare;bundle-version="3.6.0", - org.eclipse.elk.conn.gmf;bundle-version="0.1.0" + org.eclipse.elk.conn.gmf;bundle-version="0.1.0", + org.eclipse.gmf.runtime.diagram.ui.render;bundle-version="1.7.0", + org.eclipse.gmf.runtime.draw2d.ui.render.awt;bundle-version="1.8.0" Bundle-Vendor: Eclipse Modeling Project Export-Package: org.eclipse.papyrus.infra.gmfdiag.elk.tests, org.eclipse.papyrus.infra.gmfdiag.elk.tests.classdiag diff --git a/tests/junit/extraplugins/elk/org.eclipse.papyrus.infra.gmfdiag.elk.tests/resource/simple-classdiag/expected/Advanced-expected.SVG b/tests/junit/extraplugins/elk/org.eclipse.papyrus.infra.gmfdiag.elk.tests/resource/simple-classdiag/expected/Advanced-expected.svg index 7261da6f564..9289ba00e58 100644 --- a/tests/junit/extraplugins/elk/org.eclipse.papyrus.infra.gmfdiag.elk.tests/resource/simple-classdiag/expected/Advanced-expected.SVG +++ b/tests/junit/extraplugins/elk/org.eclipse.papyrus.infra.gmfdiag.elk.tests/resource/simple-classdiag/expected/Advanced-expected.svg @@ -62,7 +62,7 @@ </defs> <g font-size="15" fill="url(#linearGradient1)" font-family="'Segoe UI'" stroke-linejoin="round" stroke="url(#linearGradient1)" stroke-width="0" stroke-miterlimit="0"> <rect x="10" y="130" clip-path="url(#clipPath1)" width="100" height="100" stroke="none"/> -<image stroke="black" width="16" xlink:show="embed" xlink:type="simple" fill="black" clip-path="url(#clipPath2)" preserveAspectRatio="none" height="16" x="30" y="135" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAr0lEQVR42mNkgIKC BUf+P3jyCchiBOL/QMgIYTFCREDg/38GOFCU4WWYkGDDyAITuP/4E8OkNDsGYkHu rINgGm7Av7//GNjZmIk2gOHff1QDwBxmJgZSAZoBjJQZwEqRC4BBzEqCC/6hh8H/ //8YmJmIN+D/fyyB6NewCZwO/qORMIBIIUA2IyOmAUsrvIh2QUzndjBNeqjhiwWY qWQbsKTccwC9oKIkTJIXQOqpAgBzFjJ6SnHW0gAAAABJRU5ErkJggg==" xlink:actuate="onLoad"/> +<image stroke="black" width="16" xlink:show="embed" xlink:type="simple" fill="black" clip-path="url(#clipPath2)" preserveAspectRatio="none" height="16" x="30" y="135" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAr0lEQVR42mNkgIKC BUf+P3jyCchiBOL/QMgIYTFCREDg/38GOFCU4WWYkGDDyAITuP/4E8OkNDsGYkHu rINgGm7Av7//GNjZmIk2gOHff1QDwBxmJgZSAZoBjJQZwEqRC4BBzEqCC/6hh8H/ //8YmJmIN+D/fyyB6NewCZwO/qORMIBIIUA2IyOmAUsrvIh2QUzndjBNeqjhiwWY qWQbsKTccwC9oKIkTJIXQOqpAgBzFjJ6SnHW0gAAAABJRU5ErkJggg==" xlink:actuate="onLoad"/> <text x="49" y="150" clip-path="url(#clipPath3)" fill="black" stroke="none" xml:space="preserve">Class1</text> </g> <g stroke-width="1.1" font-size="15" font-family="'Segoe UI'" stroke-linecap="butt"> @@ -71,7 +71,7 @@ <line clip-path="url(#clipPath6)" fill="none" x1="10" x2="110" y1="204" y2="204"/> <rect x="10" y="130" clip-path="url(#clipPath7)" fill="none" width="99" rx="0" ry="0" height="99"/> <rect x="10" y="10" clip-path="url(#clipPath8)" fill="url(#linearGradient2)" width="100" height="100" stroke="none"/> -<image x="30" y="15" clip-path="url(#clipPath9)" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAr0lEQVR42mNkgIKC BUf+P3jyCchiBOL/QMgIYTFCREDg/38GOFCU4WWYkGDDyAITuP/4E8OkNDsGYkHu rINgGm7Av7//GNjZmIk2gOHff1QDwBxmJgZSAZoBjJQZwEqRC4BBzEqCC/6hh8H/ //8YmJmIN+D/fyyB6NewCZwO/qORMIBIIUA2IyOmAUsrvIh2QUzndjBNeqjhiwWY qWQbsKTccwC9oKIkTJIXQOqpAgBzFjJ6SnHW0gAAAABJRU5ErkJggg==" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed"/> +<image x="30" y="15" clip-path="url(#clipPath9)" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAr0lEQVR42mNkgIKC BUf+P3jyCchiBOL/QMgIYTFCREDg/38GOFCU4WWYkGDDyAITuP/4E8OkNDsGYkHu rINgGm7Av7//GNjZmIk2gOHff1QDwBxmJgZSAZoBjJQZwEqRC4BBzEqCC/6hh8H/ //8YmJmIN+D/fyyB6NewCZwO/qORMIBIIUA2IyOmAUsrvIh2QUzndjBNeqjhiwWY qWQbsKTccwC9oKIkTJIXQOqpAgBzFjJ6SnHW0gAAAABJRU5ErkJggg==" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed"/> <text xml:space="preserve" x="49" y="30" clip-path="url(#clipPath10)" stroke="none">Class2</text> <line clip-path="url(#clipPath11)" fill="none" x1="10" x2="110" y1="34" y2="34"/> <line clip-path="url(#clipPath12)" fill="none" x1="10" x2="110" y1="59" y2="59"/> diff --git a/tests/junit/extraplugins/elk/org.eclipse.papyrus.infra.gmfdiag.elk.tests/resource/simple-classdiag/expected/Basic-expected.SVG b/tests/junit/extraplugins/elk/org.eclipse.papyrus.infra.gmfdiag.elk.tests/resource/simple-classdiag/expected/Basic-expected.svg index 036f3dacc3f..d1aa5167a21 100644 --- a/tests/junit/extraplugins/elk/org.eclipse.papyrus.infra.gmfdiag.elk.tests/resource/simple-classdiag/expected/Basic-expected.SVG +++ b/tests/junit/extraplugins/elk/org.eclipse.papyrus.infra.gmfdiag.elk.tests/resource/simple-classdiag/expected/Basic-expected.svg @@ -102,7 +102,7 @@ </defs> <g font-size="15" fill="url(#linearGradient1)" font-family="'Segoe UI'" stroke-linejoin="round" stroke="url(#linearGradient1)" stroke-width="0" stroke-miterlimit="0"> <rect x="10" y="19" clip-path="url(#clipPath1)" width="202" height="179" stroke="none"/> -<image stroke="black" width="16" xlink:show="embed" xlink:type="simple" fill="black" clip-path="url(#clipPath2)" preserveAspectRatio="none" height="16" x="81" y="24" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAr0lEQVR42mNkgIKC BUf+P3jyCchiBOL/QMgIYTFCREDg/38GOFCU4WWYkGDDyAITuP/4E8OkNDsGYkHu rINgGm7Av7//GNjZmIk2gOHff1QDwBxmJgZSAZoBjJQZwEqRC4BBzEqCC/6hh8H/ //8YmJmIN+D/fyyB6NewCZwO/qORMIBIIUA2IyOmAUsrvIh2QUzndjBNeqjhiwWY qWQbsKTccwC9oKIkTJIXQOqpAgBzFjJ6SnHW0gAAAABJRU5ErkJggg==" xlink:actuate="onLoad"/> +<image stroke="black" width="16" xlink:show="embed" xlink:type="simple" fill="black" clip-path="url(#clipPath2)" preserveAspectRatio="none" height="16" x="81" y="24" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAr0lEQVR42mNkgIKC BUf+P3jyCchiBOL/QMgIYTFCREDg/38GOFCU4WWYkGDDyAITuP/4E8OkNDsGYkHu rINgGm7Av7//GNjZmIk2gOHff1QDwBxmJgZSAZoBjJQZwEqRC4BBzEqCC/6hh8H/ //8YmJmIN+D/fyyB6NewCZwO/qORMIBIIUA2IyOmAUsrvIh2QUzndjBNeqjhiwWY qWQbsKTccwC9oKIkTJIXQOqpAgBzFjJ6SnHW0gAAAABJRU5ErkJggg==" xlink:actuate="onLoad"/> <text x="100" y="39" clip-path="url(#clipPath3)" fill="black" stroke="none" xml:space="preserve">Class1</text> </g> <g stroke-width="1.1" font-size="15" font-family="'Segoe UI'" stroke-linecap="butt"> @@ -111,14 +111,14 @@ <line clip-path="url(#clipPath6)" fill="none" x1="10" x2="212" y1="147" y2="147"/> <rect x="10" y="19" clip-path="url(#clipPath7)" fill="none" width="201" rx="0" ry="0" height="178"/> <rect x="232" y="10" clip-path="url(#clipPath8)" fill="url(#linearGradient2)" width="207" height="198" stroke="none"/> -<image x="306" y="15" clip-path="url(#clipPath9)" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAr0lEQVR42mNkgIKC BUf+P3jyCchiBOL/QMgIYTFCREDg/38GOFCU4WWYkGDDyAITuP/4E8OkNDsGYkHu rINgGm7Av7//GNjZmIk2gOHff1QDwBxmJgZSAZoBjJQZwEqRC4BBzEqCC/6hh8H/ //8YmJmIN+D/fyyB6NewCZwO/qORMIBIIUA2IyOmAUsrvIh2QUzndjBNeqjhiwWY qWQbsKTccwC9oKIkTJIXQOqpAgBzFjJ6SnHW0gAAAABJRU5ErkJggg==" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed"/> +<image x="306" y="15" clip-path="url(#clipPath9)" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAr0lEQVR42mNkgIKC BUf+P3jyCchiBOL/QMgIYTFCREDg/38GOFCU4WWYkGDDyAITuP/4E8OkNDsGYkHu rINgGm7Av7//GNjZmIk2gOHff1QDwBxmJgZSAZoBjJQZwEqRC4BBzEqCC/6hh8H/ //8YmJmIN+D/fyyB6NewCZwO/qORMIBIIUA2IyOmAUsrvIh2QUzndjBNeqjhiwWY qWQbsKTccwC9oKIkTJIXQOqpAgBzFjJ6SnHW0gAAAABJRU5ErkJggg==" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed"/> <text xml:space="preserve" x="325" y="30" clip-path="url(#clipPath10)" stroke="none">Class2</text> <line clip-path="url(#clipPath11)" fill="none" x1="232" x2="439" y1="34" y2="34"/> <line clip-path="url(#clipPath12)" fill="none" x1="232" x2="439" y1="92" y2="92"/> <line clip-path="url(#clipPath13)" fill="none" x1="232" x2="439" y1="150" y2="150"/> <rect x="232" y="10" clip-path="url(#clipPath14)" fill="none" width="206" rx="0" ry="0" height="197"/> <rect x="575" y="29" clip-path="url(#clipPath15)" fill="url(#linearGradient3)" width="180" height="159" stroke="none"/> -<image x="635" y="34" clip-path="url(#clipPath16)" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAr0lEQVR42mNkgIKC BUf+P3jyCchiBOL/QMgIYTFCREDg/38GOFCU4WWYkGDDyAITuP/4E8OkNDsGYkHu rINgGm7Av7//GNjZmIk2gOHff1QDwBxmJgZSAZoBjJQZwEqRC4BBzEqCC/6hh8H/ //8YmJmIN+D/fyyB6NewCZwO/qORMIBIIUA2IyOmAUsrvIh2QUzndjBNeqjhiwWY qWQbsKTccwC9oKIkTJIXQOqpAgBzFjJ6SnHW0gAAAABJRU5ErkJggg==" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed"/> +<image x="635" y="34" clip-path="url(#clipPath16)" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAr0lEQVR42mNkgIKC BUf+P3jyCchiBOL/QMgIYTFCREDg/38GOFCU4WWYkGDDyAITuP/4E8OkNDsGYkHu rINgGm7Av7//GNjZmIk2gOHff1QDwBxmJgZSAZoBjJQZwEqRC4BBzEqCC/6hh8H/ //8YmJmIN+D/fyyB6NewCZwO/qORMIBIIUA2IyOmAUsrvIh2QUzndjBNeqjhiwWY qWQbsKTccwC9oKIkTJIXQOqpAgBzFjJ6SnHW0gAAAABJRU5ErkJggg==" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed"/> <text xml:space="preserve" x="654" y="49" clip-path="url(#clipPath17)" stroke="none">Class3</text> <line clip-path="url(#clipPath18)" fill="none" x1="575" x2="755" y1="53" y2="53"/> <line clip-path="url(#clipPath19)" fill="none" x1="575" x2="755" y1="98" y2="98"/> diff --git a/tests/junit/extraplugins/elk/org.eclipse.papyrus.infra.gmfdiag.elk.tests/src/org/eclipse/papyrus/infra/gmfdiag/elk/tests/classdiag/ClassDiagramLayoutTests.java b/tests/junit/extraplugins/elk/org.eclipse.papyrus.infra.gmfdiag.elk.tests/src/org/eclipse/papyrus/infra/gmfdiag/elk/tests/classdiag/ClassDiagramLayoutTests.java index 79670b6fe5d..1c1dcc19b25 100644 --- a/tests/junit/extraplugins/elk/org.eclipse.papyrus.infra.gmfdiag.elk.tests/src/org/eclipse/papyrus/infra/gmfdiag/elk/tests/classdiag/ClassDiagramLayoutTests.java +++ b/tests/junit/extraplugins/elk/org.eclipse.papyrus.infra.gmfdiag.elk.tests/src/org/eclipse/papyrus/infra/gmfdiag/elk/tests/classdiag/ClassDiagramLayoutTests.java @@ -14,56 +14,83 @@ package org.eclipse.papyrus.infra.gmfdiag.elk.tests.classdiag; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import java.io.BufferedReader; +import java.awt.Image; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.io.InputStreamReader; +import java.io.OutputStream; import java.net.URL; -import java.util.Arrays; -import java.util.stream.Collectors; +import java.util.List; -import org.eclipse.compare.contentmergeviewer.TokenComparator; -import org.eclipse.compare.rangedifferencer.IRangeComparator; -import org.eclipse.compare.rangedifferencer.RangeDifference; -import org.eclipse.compare.rangedifferencer.RangeDifferencer; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.eclipse.compare.ITypedElement; +import org.eclipse.compare.internal.BufferedResourceNode; +import org.eclipse.compare.structuremergeviewer.DiffNode; +import org.eclipse.compare.structuremergeviewer.Differencer; +import org.eclipse.compare.structuremergeviewer.IDiffContainer; +import org.eclipse.compare.structuremergeviewer.IStructureComparator; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.IHandler; import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Path; +import org.eclipse.draw2d.Graphics; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.elk.core.service.DiagramLayoutEngine; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.common.util.WrappedException; +import org.eclipse.emf.mwe.core.monitor.NullProgressMonitor; import org.eclipse.gef.EditPart; import org.eclipse.gef.GraphicalEditPart; +import org.eclipse.gmf.runtime.common.core.util.Log; +import org.eclipse.gmf.runtime.common.core.util.Trace; +import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart; +import org.eclipse.gmf.runtime.diagram.ui.image.ImageFileFormat; +import org.eclipse.gmf.runtime.diagram.ui.l10n.SharedImages; +import org.eclipse.gmf.runtime.diagram.ui.render.clipboard.DiagramGenerator; +import org.eclipse.gmf.runtime.diagram.ui.render.clipboard.DiagramImageGenerator; +import org.eclipse.gmf.runtime.diagram.ui.render.clipboard.DiagramSVGGenerator; +import org.eclipse.gmf.runtime.diagram.ui.render.internal.DiagramUIRenderDebugOptions; +import org.eclipse.gmf.runtime.diagram.ui.render.internal.DiagramUIRenderPlugin; +import org.eclipse.gmf.runtime.diagram.ui.render.util.CopyToImageUtil; +import org.eclipse.gmf.runtime.draw2d.ui.render.RenderedImage; +import org.eclipse.gmf.runtime.draw2d.ui.render.awt.internal.image.ImageConverter; +import org.eclipse.gmf.runtime.draw2d.ui.render.awt.internal.svg.export.GraphicsSVG; +import org.eclipse.gmf.runtime.draw2d.ui.render.factory.RenderedImageFactory; +import org.eclipse.gmf.runtime.draw2d.ui.render.internal.RenderedImageDescriptor; +import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.papyrus.infra.gmfdiag.export.actions.ExportAllDiagramsParameter; -import org.eclipse.papyrus.infra.gmfdiag.export.engine.ExportAllDiagramsEngine; import org.eclipse.papyrus.junit.framework.classification.tests.AbstractPapyrusTest; -import org.eclipse.papyrus.junit.utils.rules.ActiveDiagram; import org.eclipse.papyrus.junit.utils.rules.PapyrusEditorFixture; import org.eclipse.papyrus.junit.utils.rules.PluginResource; import org.eclipse.papyrus.junit.utils.rules.UIThreadRule; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.commands.ICommandService; -import org.junit.Before; -import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Test; import org.junit.rules.TestRule; import org.osgi.framework.Bundle; import org.osgi.framework.FrameworkUtil; +import org.w3c.dom.Element; /** * Basic tests for Class diagram layout by ELK */ -@PluginResource(ClassDiagramLayoutTests.SOURCE_FOLDER+"model.di") +@PluginResource(ClassDiagramLayoutTests.SOURCE_FOLDER + "model.di") public class ClassDiagramLayoutTests extends AbstractPapyrusTest { static final String SOURCE_FOLDER = "/resource/simple-classdiag/"; @@ -89,68 +116,81 @@ public class ClassDiagramLayoutTests extends AbstractPapyrusTest { public ClassDiagramLayoutTests() { // Empty constructor. } - + @Test public void testELKAdvancedLayout() { editor.openDiagram(ADVANCED_DIAGRAM_NAME); - assertThat("Active diagram is not the one expected" , editor.getActiveDiagram().getDiagramView().getName(), equalTo(ADVANCED_DIAGRAM_NAME)); + assertThat("Active diagram is not the one expected", editor.getActiveDiagram().getDiagramView().getName(), equalTo(ADVANCED_DIAGRAM_NAME)); runLayout(editor.getEditor().getSite().getPart()); IFile currentFile = exportDiagramToFile(); IFile expectedFile = retrieveReferenceFile(editor.getActiveDiagram().getDiagramView().getName()); compareResult(expectedFile, currentFile); editor.undo(); } - + @Test public void testELKBasicLayout() { editor.openDiagram(BASIC_DIAGRAM_NAME); - assertThat("Active diagram is not the one expected" , editor.getActiveDiagram().getDiagramView().getName(), equalTo(BASIC_DIAGRAM_NAME)); + assertThat("Active diagram is not the one expected", editor.getActiveDiagram().getDiagramView().getName(), equalTo(BASIC_DIAGRAM_NAME)); runLayout(editor.getEditor().getSite().getPart()); EditPart class1EditPart = editor.requireEditPart(editor.getActiveDiagram().getChildBySemanticHint("Class_Shape"), editor.getModel().getPackagedElement("Class1")); - Rectangle class1NewBounds = ((GraphicalEditPart)class1EditPart).getFigure().getBounds(); + Rectangle class1NewBounds = ((GraphicalEditPart) class1EditPart).getFigure().getBounds(); assertThat("Class position after layout is not the expected one", class1NewBounds, equalTo(this.class1BoundsAfterLayout)); IFile currentFile = exportDiagramToFile(); IFile expectedFile = retrieveReferenceFile(editor.getActiveDiagram().getDiagramView().getName()); compareResult(expectedFile, currentFile); editor.undo(); } - + @Test public void checkInitialConditions() { EditPart class1EditPart = editor.requireEditPart(editor.getActiveDiagram().getChildBySemanticHint("Class_Shape"), editor.getModel().getPackagedElement("Class1")); assertThat("Impossible to find Class1 edit part or is not a GraphicalEditPart", class1EditPart, instanceOf(GraphicalEditPart.class)); // get class1 position (no layout yet) - Rectangle class1Bounds = ((GraphicalEditPart)class1EditPart).getFigure().getBounds(); + Rectangle class1Bounds = ((GraphicalEditPart) class1EditPart).getFigure().getBounds(); assertThat("Initial condition does not match test configuration", class1Bounds, equalTo(this.class1Bounds)); // check status of the ELK layout handler ICommandService commandService = PlatformUI.getWorkbench().getService(ICommandService.class); org.eclipse.core.commands.Command cmd = commandService.getCommand("org.eclipse.elk.core.ui.command.layout"); //$NON-NLS-1$ IHandler handler = cmd.getHandler(); - ((AbstractHandler)handler).setEnabled("org.eclipse.elk.core.ui.command.layout"); //$NON-NLS-1$ + ((AbstractHandler) handler).setEnabled("org.eclipse.elk.core.ui.command.layout"); //$NON-NLS-1$ boolean res = handler.isEnabled(); assertTrue("Layout must be enable", res); //$NON-NLS-1$ } - + private IFile retrieveReferenceFile(String diagramName) { Bundle bundle = FrameworkUtil.getBundle(ClassDiagramLayoutTests.class); - URL url = bundle.getResource(SOURCE_FOLDER+"expected/"+diagramName+"-expected.SVG"); + URL url = bundle.getResource(SOURCE_FOLDER + "expected/" + diagramName + "-expected.svg"); try (InputStream contents = url.openStream()) { IFile expectedFile = editor.getProject().getProject().getFile(URI.createURI(url.toExternalForm()).lastSegment()); expectedFile.create(contents, false, null); } catch (Exception e) { throw new WrappedException(e); } - return editor.getProject().getProject().getFile(diagramName+"-expected.SVG"); } + return editor.getProject().getProject().getFile(diagramName + "-expected.svg"); + } private IFile exportDiagramToFile() { - ExportAllDiagramsEngine engine = new ExportAllDiagramsEngine(); - ExportAllDiagramsParameter parameter = new ExportAllDiagramsParameter(editor.getModelSet()); - parameter.setExportFormat("SVG"); - parameter.setOutputDirectory(editor.getProject().getProject()); - parameter.setDisplayStatus(false); // avoid popup at the end of the export - engine.initialise(parameter); - engine.export(new NullProgressMonitor(), Arrays.asList(editor.getActiveDiagram().getDiagramView())); - return editor.getProject().getProject().getFile(editor.getActiveDiagram().getDiagramView().getName() + "." + parameter.getExportFormat()); + + CopyToImageUtil copyImageUtil = new TestCopyToImageUtil(); + + ExportAllDiagramsParameter exportParameter = new ExportAllDiagramsParameter(editor.getModelSet()); + exportParameter.setExportFormat("SVG"); + exportParameter.setOutputDirectory(editor.getProject().getProject()); + exportParameter.setDisplayStatus(false); // avoid popup at the end of the export + + IPath imagePath = new Path(exportParameter.getOutputDirectoryPath() + File.separator + editor.getActiveDiagram().getDiagramView().getName()); + imagePath = imagePath.addFileExtension(exportParameter.getExportFormat().getName().toLowerCase()); + + try { + System.setProperty("line.separator", "\n"); + copyImageUtil.copyToImage(editor.getActiveDiagram(), imagePath, exportParameter.getExportFormat(), new org.eclipse.core.runtime.NullProgressMonitor()); + } catch (Throwable e) { + e.printStackTrace(); + fail(e.getMessage()); + } + + return editor.getProject().getProject().getFile(editor.getActiveDiagram().getDiagramView().getName() + "." + exportParameter.getExportFormat().getName().toLowerCase()); } public void runLayout(IWorkbenchPart part) { @@ -159,26 +199,251 @@ public class ClassDiagramLayoutTests extends AbstractPapyrusTest { } public void compareResult(IFile expected, IFile current) { - IRangeComparator expectedContent = new TokenComparator(readFile(expected)); - IRangeComparator currentContent = new TokenComparator(readFile(current)); - RangeDifference[] diffs = RangeDifferencer.findDifferences(expectedContent, currentContent); - if(diffs.length > 0) { - System.err.println("current file:"); - System.err.println(readFile(expected)); + IStructureComparator currentStructureComparator = new BufferedResourceNode(current); + IStructureComparator expectedStructureComparator = new BufferedResourceNode(expected); + + Differencer d = new Differencer() { + protected Object visit(Object parent, int description, Object ancestor, Object left, Object right) { + return new DebugDiffNode((IDiffContainer) parent, description, (ITypedElement) ancestor, (ITypedElement) left, (ITypedElement) right); + } + }; + + Object fRoot = d.findDifferences(false, null, null, null, currentStructureComparator, expectedStructureComparator); + if (fRoot != null) { + System.err.println(fRoot); } - assertThat("There should not be any difference, but some diffs were found.", diffs.length, equalTo(0)); + assertThat("There should not be any difference, but some diffs were found.", fRoot, nullValue()); + } - private static String readFile(IFile file) { - try (BufferedReader buffer = new BufferedReader(new InputStreamReader(file.getContents()))) { - return buffer.lines().collect(Collectors.joining("\n")); - } catch (IOException e) { - fail(e.getMessage()); - e.printStackTrace(); - } catch (CoreException e) { - fail(e.getMessage()); - e.printStackTrace(); + public class DebugDiffNode extends DiffNode { + + /** + * Constructor. + * + * @param parent + * @param kind + * @param ancestor + * @param left + * @param right + */ + public DebugDiffNode(IDiffContainer parent, int kind, ITypedElement ancestor, ITypedElement left, ITypedElement right) { + super(parent, kind, ancestor, left, right); + } + + /** + * @see java.lang.Object#toString() + * + * @return + */ + @Override + public String toString() { + String name = null; + if (getAncestor() != null) + name = getAncestor().getName(); + if (name == null && getLeft() != null) + name = getLeft().getName(); + if (name == null && getRight() != null) + name = getRight().getName(); + if (name == null) + name = "???"; //$NON-NLS-1$ + + return (getDiffType(getKind()) + name); + } + + + private String getDiffType(int code) { + String dir = " "; //$NON-NLS-1$ + switch (code & Differencer.DIRECTION_MASK) { + case Differencer.LEFT: + dir = ">"; //$NON-NLS-1$ + break; + case Differencer.RIGHT: + dir = "<"; //$NON-NLS-1$ + break; + case Differencer.CONFLICTING: + dir = "!"; //$NON-NLS-1$ + break; + } + String change = "="; //$NON-NLS-1$ + switch (code & Differencer.CHANGE_TYPE_MASK) { + case Differencer.ADDITION: + change = "+"; //$NON-NLS-1$ + break; + case Differencer.DELETION: + change = "-"; //$NON-NLS-1$ + break; + case Differencer.CHANGE: + change = "#"; //$NON-NLS-1$ + break; + } + return dir + change + " "; //$NON-NLS-1$ + } + + } + + + public class TestCopyToImageUtil extends CopyToImageUtil { + /** + * Creates the appropriate <code>DiagramGenerator</code> from <code>DiagramEditPart</code> + * based on the supplied <code>ImageFileFormat</code> + * + * @param diagramEP + * diagram editpart + * @param format + * image file format + * @return appropriate diagram generator + */ + protected DiagramGenerator getDiagramGenerator(DiagramEditPart diagramEP, ImageFileFormat format) { + if (format.equals(ImageFileFormat.SVG) || format.equals(ImageFileFormat.PDF)) { + return new TestDiagramSVGGenerator(diagramEP); + } else { + return new DiagramImageGenerator(diagramEP); + } + } + } + + + public static class TestDiagramSVGGenerator extends DiagramSVGGenerator { + + private RenderedImage renderedImage = null; + + private Element svgRoot = null; + + private Rectangle viewBox = null; + + /** + * Creates a new instance. + * + * @param diagramEditPart + * the diagram editpart + */ + public TestDiagramSVGGenerator(DiagramEditPart diagramEditPart) { + super(diagramEditPart); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.gmf.runtime.diagram.ui.render.clipboard.DiagramGenerator#setUpGraphics(int, int) + */ + protected Graphics setUpGraphics(int width, int height) { + viewBox = new Rectangle(0, 0, width, height); + return GraphicsSVG.getInstance(viewBox); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.gmf.runtime.diagram.ui.render.clipboard.DiagramGenerator#getImageDescriptor(org.eclipse.draw2d.Graphics) + */ + protected ImageDescriptor getImageDescriptor(Graphics g) { + try { + GraphicsSVG svgG = (GraphicsSVG) g; + // Get the root element (the svg element) + svgRoot = svgG.getRoot(); + + ByteArrayOutputStream os = new ByteArrayOutputStream(5000); // 5K + // buffer + stream(os); + os.close(); + + setRenderedImage(RenderedImageFactory.getInstance(os.toByteArray())); + + return RenderedImageDescriptor + .createFromRenderedImage(getRenderedImage()); + } catch (IOException ex) { + Log.error(DiagramUIRenderPlugin.getInstance(), IStatus.ERROR, ex + .getMessage(), ex); + } + + return null; + } + + /** + * Writes the SVG Model out to a file. + * + * @param outputStream + * output stream to store the SVG Model + */ + public void stream(OutputStream outputStream) { + try { + + // Define the view box + svgRoot.setAttributeNS(null, + "viewBox", String.valueOf(viewBox.x) + " " + //$NON-NLS-1$ //$NON-NLS-2$ + String.valueOf(viewBox.y) + " " + //$NON-NLS-1$ + String.valueOf(viewBox.width) + " " + //$NON-NLS-1$ + String.valueOf(viewBox.height)); + + // Write the document to the stream + Transformer transformer = TransformerFactory.newInstance() + .newTransformer(); + transformer.setOutputProperty(OutputKeys.METHOD, "xml"); //$NON-NLS-1$ + transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); //$NON-NLS-1$ + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$ + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$ + transformer.setOutputProperty( "{http://xml.apache.org/xalan}line-separator", "\n"); + + DOMSource source = new DOMSource(svgRoot); + StreamResult result = new StreamResult(outputStream); + transformer.transform(source, result); + } catch (Exception ex) { + Log.error(DiagramUIRenderPlugin.getInstance(), IStatus.ERROR, ex + .getMessage(), ex); + } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.gmf.runtime.diagram.ui.internal.clipboard.DiagramGenerator#createAWTImageForParts(java.util.List) + */ + public Image createAWTImageForParts(List editparts, org.eclipse.swt.graphics.Rectangle sourceRect) { + createSWTImageDescriptorForParts(editparts, sourceRect); + if (getRenderedImage() != null) { + try { + BufferedImage bufImg = (BufferedImage) getRenderedImage().getAdapter(BufferedImage.class); + if (bufImg == null) + bufImg = ImageConverter.convert(getRenderedImage().getSWTImage()); + return bufImg; + } catch (Error e) { + // log the Error but allow execution to continue + Trace.catching(DiagramUIRenderPlugin.getInstance(), + DiagramUIRenderDebugOptions.EXCEPTIONS_THROWING, getClass(), + "createAWTImageForParts() failed to generate image", //$NON-NLS-1$ + e); + return ImageConverter.convert(SharedImages + .get(SharedImages.IMG_ERROR)); + + } catch (Exception ex) { + // log the Exception but allow execution to continue + Trace.catching(DiagramUIRenderPlugin.getInstance(), + DiagramUIRenderDebugOptions.EXCEPTIONS_THROWING, getClass(), + "createAWTImageForParts() failed to generate image", //$NON-NLS-1$ + ex); + return ImageConverter.convert(SharedImages + .get(SharedImages.IMG_ERROR)); + } + } + + return ImageConverter.convert(SharedImages.get(SharedImages.IMG_ERROR)); + } + + /** + * @return Returns the rendered image created by previous + * call to createSWTImageDescriptorForParts + */ + public RenderedImage getRenderedImage() { + return renderedImage; + } + + /** + * @param svgImage + * The svgImage to set. + */ + private void setRenderedImage(RenderedImage renderedImage) { + this.renderedImage = renderedImage; } - return "ERROR"; } -} +}
\ No newline at end of file |