ClipboardServiceTest
diff --git a/plugins/org.eclipse.wst.sse.sieditor.test/api/org/eclipse/wst/sse/sieditor/test/all/UITestsSuite.java b/plugins/org.eclipse.wst.sse.sieditor.test/api/org/eclipse/wst/sse/sieditor/test/all/UITestsSuite.java
index a91c1a0..c41dd54 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.test/api/org/eclipse/wst/sse/sieditor/test/all/UITestsSuite.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.test/api/org/eclipse/wst/sse/sieditor/test/all/UITestsSuite.java
@@ -59,6 +59,7 @@
 import org.eclipse.wst.sse.sieditor.test.ui.v2.dt.StructureNodeDetailsPageTest;

 import org.eclipse.wst.sse.sieditor.test.ui.v2.dt.TestElementNodeDetailsPage;

 import org.eclipse.wst.sse.sieditor.test.ui.v2.dt.TestTypeNullNameAttribute;

+import org.eclipse.wst.sse.sieditor.test.ui.v2.dt.clipboard.ClipboardServiceTest;

 import org.eclipse.wst.sse.sieditor.test.ui.v2.dt.dnd.SiEditorTransferTest;

 import org.eclipse.wst.sse.sieditor.test.ui.v2.dt.dnd.TreeViewerDropAdapterTest;

 import org.eclipse.wst.sse.sieditor.test.ui.v2.dt.extract.ExtractNamespaceWizardTest;

@@ -284,6 +285,7 @@
     PageChangedListenersManagerTest.class,

     SiEditorTransferTest.class,

     TreeViewerDropAdapterTest.class,

+    ClipboardServiceTest.class,

 })

 public class UITestsSuite {

 

diff --git a/plugins/org.eclipse.wst.sse.sieditor.test/api/org/eclipse/wst/sse/sieditor/test/ui/v2/dt/clipboard/ClipboardServiceTest.java b/plugins/org.eclipse.wst.sse.sieditor.test/api/org/eclipse/wst/sse/sieditor/test/ui/v2/dt/clipboard/ClipboardServiceTest.java
new file mode 100644
index 0000000..c212576
--- /dev/null
+++ b/plugins/org.eclipse.wst.sse.sieditor.test/api/org/eclipse/wst/sse/sieditor/test/ui/v2/dt/clipboard/ClipboardServiceTest.java
@@ -0,0 +1,122 @@
+package org.eclipse.wst.sse.sieditor.test.ui.v2.dt.clipboard;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.wst.sse.sieditor.model.api.IWsdlModelRoot;
+import org.eclipse.wst.sse.sieditor.model.api.IXSDModelRoot;
+import org.eclipse.wst.sse.sieditor.model.impl.WSDLFactory;
+import org.eclipse.wst.sse.sieditor.model.impl.XSDFactory;
+import org.eclipse.wst.sse.sieditor.model.wsdl.api.IDescription;
+import org.eclipse.wst.sse.sieditor.model.xsd.api.ISchema;
+import org.eclipse.wst.sse.sieditor.model.xsd.api.IType;
+import org.eclipse.wst.sse.sieditor.test.util.ProjectBasedTest;
+import org.eclipse.wst.sse.sieditor.test.util.ResourceUtils;
+import org.eclipse.wst.sse.sieditor.test.util.SIEditorBaseTest;
+import org.eclipse.wst.sse.sieditor.ui.v2.dt.clipboard.ClipboardService;
+import org.eclipse.wst.sse.sieditor.ui.v2.dt.nodes.IDataTypesTreeNode;
+import org.eclipse.wst.wsdl.Definition;
+import org.eclipse.wst.wsdl.util.WSDLResourceImpl;
+import org.eclipse.xsd.XSDSchema;
+import org.eclipse.xsd.util.XSDResourceImpl;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+@SuppressWarnings("nls")
+public class ClipboardServiceTest extends ProjectBasedTest {
+
+    private static final String NEW_OPERATION = "NewOperation";
+    private static final String ELEMENT1 = "Element1";
+    private IFile xsdFile;
+    private IFile wsdlFile;
+
+    @Before
+    public void setUp() throws Exception {
+        super.setUp();
+
+        xsdFile = ResourceUtils.copyFileIntoTestProject("pub/extract/NewXMLSchema1.xsd", SIEditorBaseTest.Document_FOLDER_NAME,
+                this.getProject(), "NewXMLSchema1.xsd");
+        wsdlFile = ResourceUtils.copyFileIntoTestProject("pub/simple/NewWSDLFileCyclingTypes.wsdl",
+                SIEditorBaseTest.Document_FOLDER_NAME, this.getProject(), "ECC_CUSTOMER002QR.wsdl");
+
+        setDeleteProjectOnTearDown();
+    }
+
+    @Test
+    public void testIsCopyEnabled() {
+        Assert.assertFalse(ClipboardService.isCopyEnabled(null));
+        Assert.assertFalse(ClipboardService.isCopyEnabled(new Object[0]));
+
+        Object[] selection = { new Object(), new Object() };
+        Assert.assertFalse(ClipboardService.isCopyEnabled(selection));
+
+        IDataTypesTreeNode dataTypesTreeNode = Mockito.mock(IDataTypesTreeNode.class);
+        selection[0] = dataTypesTreeNode;
+        selection[1] = new Object();
+
+        Mockito.when(dataTypesTreeNode.getModelObject()).thenReturn(Mockito.mock(IDescription.class));
+        Assert.assertFalse(ClipboardService.isCopyEnabled(selection));
+
+        Mockito.when(dataTypesTreeNode.getModelObject()).thenReturn(Mockito.mock(IType.class));
+        Assert.assertFalse(ClipboardService.isCopyEnabled(selection));
+
+        selection = new IDataTypesTreeNode[1];
+        selection[0] = dataTypesTreeNode;
+        Mockito.when(dataTypesTreeNode.getModelObject()).thenReturn(Mockito.mock(IType.class));
+        Assert.assertTrue(ClipboardService.isCopyEnabled(selection));
+    }
+
+    @Test
+    public void testCopyModelObject() {
+        ResourceSet resourceSet = new ResourceSetImpl();
+
+        XSDResourceImpl xsdResource = (XSDResourceImpl) resourceSet.getResource(createFileUri(xsdFile), true);
+        XSDSchema schema = xsdResource.getSchema();
+        IXSDModelRoot xsdModelRoot = XSDFactory.getInstance().createXSDModelRoot(schema);
+
+        IType typeFromSchema = xsdModelRoot.getSchema().getType(true, ELEMENT1);
+
+        WSDLResourceImpl resource = (WSDLResourceImpl) resourceSet.getResource(createFileUri(wsdlFile), true);
+        Definition definition = resource.getDefinition();
+
+        IWsdlModelRoot wsdlModelRoot = WSDLFactory.getInstance().createWSDLModelRoot(definition);
+        ISchema schemaFromWsdl = wsdlModelRoot.getDescription().getSchema("http://www.example.org/NewWSDLFile1/")[0];
+        IType elementFromWsdl = schemaFromWsdl.getType(true, NEW_OPERATION);
+
+        Object[] selection = new Object[3];
+        selection[0] = new Object();
+        IDataTypesTreeNode dataTypesTreeNode = Mockito.mock(IDataTypesTreeNode.class);
+        Mockito.when(dataTypesTreeNode.getModelObject()).thenReturn(typeFromSchema);
+        IDataTypesTreeNode dataTypesTreeNode2 = Mockito.mock(IDataTypesTreeNode.class);
+        Mockito.when(dataTypesTreeNode2.getModelObject()).thenReturn(elementFromWsdl);
+        selection[1] = dataTypesTreeNode;
+        selection[2] = dataTypesTreeNode2;
+
+        ClipboardService.copyModelObjectsToClipboard(selection);
+        Object[] modelObjectsFromClipboard = ClipboardService.getModelObjectsFromClipboard();
+        Assert.assertEquals(modelObjectsFromClipboard.length, 2);
+        Assert.assertSame(modelObjectsFromClipboard[0], typeFromSchema);
+        Assert.assertSame(modelObjectsFromClipboard[1], elementFromWsdl);
+
+        Clipboard clipboard = new Clipboard(Display.getCurrent());
+        String modelObjectAsText = (String) clipboard.getContents(TextTransfer.getInstance());
+        assertTrue(modelObjectAsText.contains("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"));
+        assertTrue(modelObjectAsText.contains(ELEMENT1));
+        assertTrue(modelObjectAsText.contains(NEW_OPERATION));
+    }
+
+    @Override
+    protected String getProjectName() {
+        return "ClibboardServiceTest";
+    }
+
+    protected URI createFileUri(IFile file) {
+        return URI.createFileURI(file.getLocation().toFile().getAbsolutePath());
+    }
+}