| package org.eclipse.emf.parsley.dsl.tests |
| |
| import java.util.List |
| import org.eclipse.emf.parsley.dsl.pluginxml.PluginXmlLoader |
| import org.eclipse.pde.internal.core.text.plugin.PluginAttribute |
| import org.eclipse.pde.internal.core.text.plugin.PluginElementNode |
| import org.junit.Test |
| |
| import static extension org.junit.Assert.* |
| import org.eclipse.xtend2.lib.StringConcatenation |
| import org.eclipse.emf.parsley.dsl.pluginxml.PluginXmlUtils |
| |
| class EmfParsleyDslPluginXmlLoaderTests { |
| |
| new() { |
| // to avoid missed code coverage for the protected constructor |
| new PluginXmlUtils() { |
| |
| } |
| } |
| |
| val EDITOR_POINT = "org.eclipse.ui.editors" |
| val VIEW_POINT = "org.eclipse.ui.views" |
| |
| val s1 = ''' |
| <?xml version="1.0" encoding="UTF-8"?> |
| <?eclipse version="3.4"?> |
| <plugin> |
| <extension |
| point="org.eclipse.ui.views"> |
| <view |
| category="org.eclipse.emf.parsley" |
| class="org.eclipse.emf.parsley.tests.views.ViewsExecutableExtensionFactory:org.eclipse.emf.parsley.tests.views.ViewsSaveableTreeFormView" |
| id="org.eclipse.emf.parsley.tests.views" |
| name="Test Model Tree Form View" |
| restorable="true"> |
| </view> |
| <view |
| category="org.eclipse.emf.parsley" |
| class="org.eclipse.emf.parsley.tests.views.ViewsExecutableExtensionFactory:org.eclipse.emf.parsley.tests.views.ViewsSaveableTreeView" |
| id="org.eclipse.emf.parsley.tests.treeviews" |
| name="Test Model Tree View" |
| restorable="true"> |
| </view> |
| </extension> |
| <extension |
| point="org.eclipse.ui.editors"> |
| <editor |
| class="org.eclipse.emf.parsley.tests.factories.OpenDialogMouseEventExecutableExtensionFactory:org.eclipse.emf.parsley.editors.EmfTreeEditor" |
| contributorClass="org.eclipse.emf.parsley.tests.factories.OpenDialogMouseEventExecutableExtensionFactory:org.eclipse.emf.parsley.editors.EmfParsleyEditorActionBarContributor" |
| default="false" |
| id="org.eclipse.emf.parsley.openDialogOnDoubleClick" |
| name="EMF Tree Editor Opening Dialog"> |
| <contentTypeBinding |
| contentTypeId="org.eclipse.emf.ecore.xmi"> |
| </contentTypeBinding> |
| </editor> |
| </extension> |
| </plugin> |
| ''' |
| |
| val singleView = ''' |
| <?xml version="1.0" encoding="UTF-8"?> |
| <?eclipse version="3.4"?> |
| <plugin> |
| <extension |
| point="org.eclipse.ui.views"> |
| <view |
| category="org.eclipse.emf.parsley" |
| class="org.eclipse.emf.parsley.tests.views.ViewsExecutableExtensionFactory:org.eclipse.emf.parsley.tests.views.ViewsSaveableTreeFormView" |
| id="viewId" |
| name="Test Model Tree Form View" |
| restorable="true"> |
| </view> |
| </extension> |
| </plugin> |
| ''' |
| |
| val singleView2 = ''' |
| <?xml version="1.0" encoding="UTF-8"?> |
| <?eclipse version="3.4"?> |
| <plugin> |
| <extension |
| point="org.eclipse.ui.views"> |
| <view |
| category="org.eclipse.emf.parsley" |
| class="MyClass" |
| id="viewId" |
| name="My View"> |
| </view> |
| </extension> |
| </plugin> |
| ''' |
| |
| val singleEditor = ''' |
| <?xml version="1.0" encoding="UTF-8"?> |
| <?eclipse version="3.4"?> |
| <plugin> |
| <extension |
| point="org.eclipse.ui.editors"> |
| <editor |
| class="EditorClass" |
| contributorClass="ContributorClass" |
| default="false" |
| id="editorId" |
| name="EMF Tree Editor"> |
| <contentTypeBinding |
| contentTypeId="myType"> |
| </contentTypeBinding> |
| </editor> |
| </extension> |
| </plugin> |
| ''' |
| |
| val emptyPlugin = ''' |
| <?xml version="1.0" encoding="UTF-8"?> |
| <?eclipse version="3.4"?> |
| ''' |
| |
| val emptyView = ''' |
| <?xml version="1.0" encoding="UTF-8"?> |
| <?eclipse version="3.4"?> |
| <plugin> |
| <extension |
| point="org.eclipse.ui.views"> |
| <view |
| > |
| </view> |
| </extension> |
| </plugin> |
| ''' |
| |
| @Test |
| def void testLoad() { |
| val extension loader = load(s1) |
| val extensions = loader.extensionNodes |
| ''' |
| <extension |
| point="org.eclipse.ui.views"> |
| <view |
| category="org.eclipse.emf.parsley" |
| class="org.eclipse.emf.parsley.tests.views.ViewsExecutableExtensionFactory:org.eclipse.emf.parsley.tests.views.ViewsSaveableTreeFormView" |
| id="org.eclipse.emf.parsley.tests.views" |
| name="Test Model Tree Form View" |
| restorable="true"> |
| </view> |
| <view |
| category="org.eclipse.emf.parsley" |
| class="org.eclipse.emf.parsley.tests.views.ViewsExecutableExtensionFactory:org.eclipse.emf.parsley.tests.views.ViewsSaveableTreeView" |
| id="org.eclipse.emf.parsley.tests.treeviews" |
| name="Test Model Tree View" |
| restorable="true"> |
| </view> |
| </extension>'''.toString.assertEquals(extensions.head.toString) |
| val elements = loader.extensionElements |
| ''' |
| <view |
| category="org.eclipse.emf.parsley" |
| class="org.eclipse.emf.parsley.tests.views.ViewsExecutableExtensionFactory:org.eclipse.emf.parsley.tests.views.ViewsSaveableTreeFormView" |
| id="org.eclipse.emf.parsley.tests.views" |
| name="Test Model Tree Form View" |
| restorable="true"> |
| </view> |
| tag: view |
| category=org.eclipse.emf.parsley, class=org.eclipse.emf.parsley.tests.views.ViewsExecutableExtensionFactory:org.eclipse.emf.parsley.tests.views.ViewsSaveableTreeFormView, id=org.eclipse.emf.parsley.tests.views, name=Test Model Tree Form View, restorable=true |
| |
| <view |
| category="org.eclipse.emf.parsley" |
| class="org.eclipse.emf.parsley.tests.views.ViewsExecutableExtensionFactory:org.eclipse.emf.parsley.tests.views.ViewsSaveableTreeView" |
| id="org.eclipse.emf.parsley.tests.treeviews" |
| name="Test Model Tree View" |
| restorable="true"> |
| </view> |
| tag: view |
| category=org.eclipse.emf.parsley, class=org.eclipse.emf.parsley.tests.views.ViewsExecutableExtensionFactory:org.eclipse.emf.parsley.tests.views.ViewsSaveableTreeView, id=org.eclipse.emf.parsley.tests.treeviews, name=Test Model Tree View, restorable=true |
| |
| <editor |
| class="org.eclipse.emf.parsley.tests.factories.OpenDialogMouseEventExecutableExtensionFactory:org.eclipse.emf.parsley.editors.EmfTreeEditor" |
| contributorClass="org.eclipse.emf.parsley.tests.factories.OpenDialogMouseEventExecutableExtensionFactory:org.eclipse.emf.parsley.editors.EmfParsleyEditorActionBarContributor" |
| default="false" |
| id="org.eclipse.emf.parsley.openDialogOnDoubleClick" |
| name="EMF Tree Editor Opening Dialog"> |
| <contentTypeBinding |
| contentTypeId="org.eclipse.emf.ecore.xmi"> |
| </contentTypeBinding> |
| </editor> |
| tag: editor |
| class=org.eclipse.emf.parsley.tests.factories.OpenDialogMouseEventExecutableExtensionFactory:org.eclipse.emf.parsley.editors.EmfTreeEditor, contributorClass=org.eclipse.emf.parsley.tests.factories.OpenDialogMouseEventExecutableExtensionFactory:org.eclipse.emf.parsley.editors.EmfParsleyEditorActionBarContributor, default=false, id=org.eclipse.emf.parsley.openDialogOnDoubleClick, name=EMF Tree Editor Opening Dialog |
| <contentTypeBinding |
| contentTypeId="org.eclipse.emf.ecore.xmi"> |
| </contentTypeBinding> |
| tag: contentTypeBinding |
| contentTypeId=org.eclipse.emf.ecore.xmi |
| '''.toString. |
| assertEquals(elements.repr(loader)) |
| } |
| |
| @Test |
| def void testComputedOnlyTheFirstTime() { |
| val loader = load(s1) |
| loader.extensionNodes.assertSame(loader.extensionNodes) |
| loader.extensionElements.assertSame(loader.extensionElements) |
| } |
| |
| @Test |
| def void testWrite() { |
| val loader = load(s1) |
| s1.assertEquals(loader.contentsAsString) |
| } |
| |
| @Test |
| def void testGetExtensionByPoint() { |
| val loader = load(singleView) |
| loader.getExtensionByPoint(EDITOR_POINT).assertNull |
| loader.getExtensionByPoint(VIEW_POINT).assertNotNull |
| } |
| |
| @Test |
| def void testGetElementExtension() { |
| val loader = load(s1) |
| val elements = loader.extensionElements |
| VIEW_POINT.assertEquals(loader.getElementExtension(elements.head)) |
| EDITOR_POINT.assertEquals(loader.getElementExtension(elements.last)) |
| } |
| |
| @Test |
| def void testElementByTagAndId() { |
| val loader = load(s1) |
| loader. |
| getElementByTagAndId("view", "org.eclipse.emf.parsley.tests.treeviews"). |
| assertSame(loader.extensionElements.get(1)) |
| } |
| |
| @Test |
| def void testElementByTagAndIdNotFound() { |
| val loader = load( |
| ''' |
| <?xml version="1.0" encoding="UTF-8"?> |
| <?eclipse version="3.4"?> |
| <plugin> |
| <extension |
| point="org.eclipse.ui.views"> |
| <view |
| category="org.eclipse.emf.parsley" |
| name="Test Model Tree Form View" |
| restorable="true"> |
| </view> |
| </extension> |
| </plugin> |
| ''' |
| ) |
| loader. |
| getElementByTagAndId("view", "foo"). |
| assertNull |
| } |
| |
| @Test |
| def void testInsertExtension() { |
| val loader = load(singleView) |
| loader.insertExtension(EDITOR_POINT) |
| ''' |
| <extension |
| point="org.eclipse.ui.editors"> |
| </extension>'''.toString. |
| assertEquals(loader.extensionNodes.last.toString) |
| } |
| |
| @Test |
| def void testInsertExtensionInEmptyPlugin() { |
| val loader = load(emptyPlugin) |
| loader.insertExtension(EDITOR_POINT) |
| ''' |
| <?xml version="1.0" encoding="UTF-8"?> |
| <?eclipse version="3.4"?> |
| <plugin> |
| <extension |
| point="org.eclipse.ui.editors"> |
| </extension> |
| </plugin> |
| '''.toString. |
| assertEquals(loader.contentsAsString) |
| } |
| |
| @Test |
| def void testInsertExtensionInEmptyPluginFile() { |
| val loader = load("") |
| loader.insertExtension(EDITOR_POINT) |
| ''' |
| <?xml version="1.0" encoding="UTF-8"?> |
| <?eclipse version="3.4"?> |
| <plugin> |
| <extension |
| point="org.eclipse.ui.editors"> |
| </extension> |
| </plugin> |
| '''.toString. |
| assertEquals(loader.contentsAsString) |
| } |
| |
| @Test |
| def void testCopySourceIntoTarget() { |
| val source = load(singleView) |
| val sourceView = source.extensionElements.head |
| val target = load(singleView2) |
| val targetView = target.extensionElements.head |
| target.copy(sourceView, targetView) |
| sourceView.toString.assertEquals(targetView.toString) |
| } |
| |
| @Test |
| def void testCopySourceIntoEmptyView() { |
| val source = load(singleView) |
| val sourceView = source.extensionElements.head |
| val target = load(emptyView) |
| val targetView = target.extensionElements.head |
| target.copy(sourceView, targetView) |
| sourceView.toString.assertEquals(targetView.toString) |
| } |
| |
| @Test |
| def void testCopyIntoExistingView() { |
| val source = load(singleView) |
| val sourceView = source.extensionElements.head |
| val target = load(singleView2) |
| target.copy(sourceView) |
| sourceView.toString.assertEquals(target.extensionElements.head.toString) |
| } |
| |
| @Test |
| def void testCopyIntoEmptyPlugin() { |
| val source = load(singleView) |
| val sourceView = source.extensionElements.head |
| val target = load(emptyPlugin) |
| target.copy(sourceView) |
| source.contentsAsString.assertEquals(target.contentsAsString) |
| } |
| |
| @Test |
| def void testCopyIntoEmptyPluginFile() { |
| val source = load(singleView) |
| val sourceView = source.extensionElements.head |
| val target = load("") |
| target.copy(sourceView) |
| source.contentsAsString.assertEquals(target.contentsAsString) |
| } |
| |
| @Test |
| def void testCopyFromPluginFileIntoExistingOne() { |
| val target = load(singleView2) |
| target.copyFromPluginXml(singleView) |
| // note that the string contents are different, but only for |
| // indentation |
| ''' |
| <?xml version="1.0" encoding="UTF-8"?> |
| <?eclipse version="3.4"?> |
| <plugin> |
| <extension |
| point="org.eclipse.ui.views"> |
| <view |
| category="org.eclipse.emf.parsley" |
| class="org.eclipse.emf.parsley.tests.views.ViewsExecutableExtensionFactory:org.eclipse.emf.parsley.tests.views.ViewsSaveableTreeFormView" |
| id="viewId" |
| name="Test Model Tree Form View" |
| restorable="true"> |
| </view> |
| </extension> |
| </plugin> |
| '''.toString.assertEquals(target.contentsAsString) |
| } |
| |
| @Test |
| def void testCopyFromPluginFileIntoEmptyPlugin() { |
| val target = load(emptyPlugin) |
| target.copyFromPluginXml(s1) |
| s1.toString.assertEquals(target.contentsAsString) |
| } |
| |
| @Test |
| def void testCopyFromPluginFileIntoEmptyPluginFile() { |
| val target = load("") |
| target.copyFromPluginXml(s1) |
| s1.toString.assertEquals(target.contentsAsString) |
| } |
| |
| @Test |
| def void testCopyFromPluginFileIntoExtensionWithExistingChild() { |
| // the editor already has the contentTypeBinding child |
| val target = load(''' |
| <?xml version="1.0" encoding="UTF-8"?> |
| <?eclipse version="3.4"?> |
| <plugin> |
| <extension |
| point="org.eclipse.ui.editors"> |
| <editor |
| class="EditorClass" |
| contributorClass="ContributorClass" |
| default="false" |
| id="editorId" |
| name="EMF Tree Editor"> |
| <contentTypeBinding |
| contentTypeId="myDifferentType"> |
| </contentTypeBinding> |
| </editor> |
| </extension> |
| </plugin>''') |
| target.copyFromPluginXml(singleEditor) |
| singleEditor.toString.assertEquals(target.contentsAsString) |
| } |
| |
| @Test |
| def void testCopyFromPluginFileIntoExtensionWithoutExistingChild() { |
| // the editor does not have the contentTypeBinding child |
| val target = load(''' |
| <?xml version="1.0" encoding="UTF-8"?> |
| <?eclipse version="3.4"?> |
| <plugin> |
| <extension |
| point="org.eclipse.ui.editors"> |
| <editor |
| class="EditorClass" |
| contributorClass="ContributorClass" |
| default="false" |
| id="editorId" |
| name="EMF Tree Editor"> |
| </editor> |
| </extension> |
| </plugin>''') |
| target.copyFromPluginXml(singleEditor) |
| singleEditor.toString.assertEquals(target.contentsAsString) |
| } |
| |
| @Test |
| def void testInsertExtensionElement() { |
| val loader = load(singleView) |
| loader.insertExtensionElement(VIEW_POINT, "view") |
| '''<view></view>'''.toString. |
| assertEquals(loader.extensionElements.last.toString) |
| } |
| |
| @Test |
| def void testInsertExtensionElementInEmptyPlugin() { |
| val loader = load(emptyPlugin) |
| loader.insertExtensionElement(VIEW_POINT, "view") |
| '''<view></view>'''.toString. |
| assertEquals(loader.extensionElements.last.toString) |
| } |
| |
| @Test |
| def void testModification() { |
| val loader = load(singleView) |
| val e = loader.getExtensionElements().head |
| |
| ''' |
| <view |
| category="org.eclipse.emf.parsley" |
| class="org.eclipse.emf.parsley.tests.views.ViewsExecutableExtensionFactory:org.eclipse.emf.parsley.tests.views.ViewsSaveableTreeFormView" |
| id="viewId" |
| name="Test Model Tree Form View" |
| restorable="true"> |
| </view>'''.toString.assertEquals(e.toString) |
| |
| e.setAttribute("category", "modified-category") |
| e.setAttribute("class", "modified-class") |
| |
| ''' |
| <?xml version="1.0" encoding="UTF-8"?> |
| <?eclipse version="3.4"?> |
| <plugin> |
| <extension |
| point="org.eclipse.ui.views"> |
| <view |
| category="modified-category" |
| class="modified-class" |
| id="viewId" |
| name="Test Model Tree Form View" |
| restorable="true"> |
| </view> |
| </extension> |
| </plugin> |
| '''.toString.assertEquals(loader.contentsAsString) |
| } |
| |
| def CharSequence repr(List<PluginElementNode> nodes, PluginXmlLoader loader) { |
| nodes.map[repr(loader)].join(StringConcatenation.DEFAULT_LINE_DELIMITER) |
| } |
| |
| def repr(PluginElementNode node, PluginXmlLoader loader) { |
| val entrySet = loader.getPluginAttributesEntrySet(node) |
| val extensionChildren = loader.getExtensionChildren(node) |
| ''' |
| «node» |
| tag: «node.XMLTagName» |
| «entrySet.map[ |
| key + "=" + (value as PluginAttribute).value |
| ].join(", ")» |
| «if (!extensionChildren.empty) { |
| extensionChildren.repr(loader) |
| }» |
| ''' |
| } |
| |
| def private load(String s) { |
| new PluginXmlLoader(s) => [ |
| load |
| ] |
| } |
| |
| } |