blob: fd39589c3f4d345078151fe96267cebe58823093 [file] [log] [blame]
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
]
}
}