blob: 9918adb24eba9c9421d4d7366e9cbd0ed93a72ab [file] [log] [blame]
/**********************************************************************
* This file is part of "Object Teams Development Tooling"-Software
*
* Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
* for its Fraunhofer Institute and Computer Architecture and Software
* Technology (FIRST), Berlin, Germany and Technical University Berlin,
* Germany.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
* $Id$
*
* Please visit http://www.eclipse.org/objectteams for updates and contact.
*
* Contributors:
* Fraunhofer FIRST - Initial API and implementation
* Technical University Berlin - Initial API and implementation
**********************************************************************/
package org.eclipse.objectteams.otdt.ui.tests.refactoring.reorg;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IImportDeclaration;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.ui.tests.refactoring.infra.MockClipboard;
import org.eclipse.jdt.ui.tests.refactoring.infra.MockWorkbenchSite;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.widgets.Display;
import org.eclipse.objectteams.otdt.core.IMethodMapping;
import org.eclipse.objectteams.otdt.core.IRoleType;
import org.eclipse.objectteams.otdt.core.OTModelManager;
import org.eclipse.objectteams.otdt.ui.tests.refactoring.MySetup;
import org.eclipse.objectteams.otdt.ui.tests.refactoring.RefactoringTest;
import org.eclipse.jdt.internal.ui.refactoring.reorg.CopyToClipboardAction;
import org.eclipse.jdt.internal.ui.refactoring.reorg.PasteAction;
public class OTPasteActionTest extends RefactoringTest
{
private Clipboard _clipboard;
private IPackageFragment _packageQ;
private static final String REFACTORING_PATH= "Paste/";
public OTPasteActionTest(String name) {
super(name);
}
public static Test suite() {
return new MySetup(new TestSuite(OTPasteActionTest.class));
}
protected String getRefactoringPath() {
return REFACTORING_PATH;
}
protected void setUp() throws Exception {
super.setUp();
_clipboard= new MockClipboard(Display.getDefault());
_packageQ = MySetup.getDefaultSourceFolder().createPackageFragment("q", true, null);
}
protected void tearDown() throws Exception
{
if (_packageQ.exists())
{
_packageQ.delete(true, null);
}
_clipboard.dispose();
super.tearDown();
}
private static Object[] merge(Object[] array1, Object[] array2) {
Set elements= new HashSet(array1.length + array2.length);
elements.addAll(Arrays.asList(array1));
elements.addAll(Arrays.asList(array2));
return elements.toArray();
}
private PasteAction verifyEnabled(IResource[] copySelectedResources, IJavaElement[] copySelectedJavaElements, IResource[] pasteSelectedResources, IJavaElement[] pasteSelectedJavaElements) throws JavaModelException {
PasteAction pasteAction= new PasteAction(new MockWorkbenchSite(merge(pasteSelectedResources, pasteSelectedJavaElements)), _clipboard);
CopyToClipboardAction copyToClipboardAction= new CopyToClipboardAction(new MockWorkbenchSite(merge(copySelectedResources, copySelectedJavaElements)), _clipboard);
copyToClipboardAction.setAutoRepeatOnFailure(true);
copyToClipboardAction.update(copyToClipboardAction.getSelection());
assertTrue("copy not enabled", copyToClipboardAction.isEnabled());
copyToClipboardAction.run();
pasteAction.update(pasteAction.getSelection());
assertTrue("paste should be enabled", pasteAction.isEnabled());
return pasteAction;
}
private void compareContents(String cuName) throws JavaModelException, IOException {
assertEqualLines(cuName, getFileContents(getOutputTestFileName(cuName)), getPackageP().getCompilationUnit(cuName + ".java").getSource());
}
private void delete(ICompilationUnit cu) throws Exception {
try {
performDummySearch();
cu.delete(true, new NullProgressMonitor());
} catch (JavaModelException e) {
e.printStackTrace();
//ingore and keep going
}
}
public void testPasteTeamclassIntoTeamclass() throws Exception
{
ICompilationUnit cuTSource = createCUfromTestFile(getPackageP(),
"TSource");
ICompilationUnit cuTDest = createCUfromTestFile(getPackageP(),
"TDest");
try
{
IType teamTSource = cuTSource.getType("TSource");
IType teamTDest = cuTDest.getType("TDest");
assertTrue("TSource does not exist", teamTSource.exists());
assertTrue("TDest does not exist", teamTDest.exists());
IJavaElement[] copyJavaElements = { teamTSource };
IResource[] copyResources = {};
IJavaElement[] pasteJavaElements = { teamTDest };
IResource[] pasteResources = {};
PasteAction paste = verifyEnabled(copyResources,
copyJavaElements, pasteResources, pasteJavaElements);
paste.run((IStructuredSelection)paste.getSelection());
compareContents("TSource");
compareContents("TDest");
}
finally
{
delete(cuTSource);
}
}
public void testPasteNestedTeamclass() throws Exception
{
ICompilationUnit cuTSource = createCUfromTestFile(getPackageP(),
"TSource");
ICompilationUnit cuTDest = createCUfromTestFile(getPackageP(), "TDest");
try
{
IType teamTDest_TN = cuTSource.getType("TSource").getType("TN");
IType teamTDest = cuTDest.getType("TDest");
assertTrue("TSource.TN does not exist", teamTDest_TN.exists());
assertTrue("TDest does not exist", teamTDest.exists());
IJavaElement[] copyJavaElements = { teamTDest_TN };
IResource[] copyResources = {};
IJavaElement[] pasteJavaElements = { teamTDest };
IResource[] pasteResources = {};
PasteAction paste = verifyEnabled(copyResources,
copyJavaElements, pasteResources, pasteJavaElements);
paste.run((IStructuredSelection)paste.getSelection());
compareContents("TSource");
compareContents("TDest");
}
finally
{
delete(cuTSource);
delete(cuTDest);
}
}
public void testPasteRoleclass() throws Exception
{
ICompilationUnit cuTSource = createCUfromTestFile(getPackageP(),
"TSource");
ICompilationUnit cuTDest = createCUfromTestFile(getPackageP(), "TDest");
try
{
IType roleR = cuTSource.getType("TSource").getType("R");
IType teamTDest = cuTDest.getType("TDest");
assertTrue("R does not exist", roleR.exists());
assertTrue("TDest does not exist", teamTDest.exists());
IJavaElement[] copyJavaElements = { roleR };
IResource[] copyResources = {};
IJavaElement[] pasteJavaElements = { teamTDest };
IResource[] pasteResources = {};
PasteAction paste = verifyEnabled(copyResources,
copyJavaElements, pasteResources, pasteJavaElements);
paste.run((IStructuredSelection)paste.getSelection());
compareContents("TSource");
compareContents("TDest");
}
finally
{
delete(cuTSource);
delete(cuTDest);
}
}
public void testPasteCalloutMapping() throws Exception
{
ICompilationUnit cuTSource= createCUfromTestFile(getPackageP(), "TSource");
ICompilationUnit cuTDest= createCUfromTestFile(getPackageP(), "TDest");
try
{
IRoleType roleSrc = (IRoleType)OTModelManager.getOTElement(cuTSource.getType("TSource").getType("R"));
IMethodMapping calloutMapping = roleSrc.getMethodMappings()[0];
IType roleTDest_R = cuTDest.getType("TDest").getType("R");
assertTrue("callout does not exist", calloutMapping.exists());
assertTrue("R does not exist", roleTDest_R.exists());
IJavaElement[] copyJavaElements= {calloutMapping};
IResource[] copyResources= {};
IJavaElement[] pasteJavaElements= {roleTDest_R};
IResource[] pasteResources= {};
PasteAction paste= verifyEnabled(copyResources, copyJavaElements, pasteResources, pasteJavaElements);
paste.run((IStructuredSelection)paste.getSelection());
compareContents("TSource");
compareContents("TDest");
}
finally
{
delete(cuTSource);
delete(cuTDest);
}
}
public void testPasteCalloutMappingParam() throws Exception
{
ICompilationUnit cuTSource= createCUfromTestFile(getPackageP(), "TSource");
ICompilationUnit cuTDest= createCUfromTestFile(getPackageP(), "TDest");
try
{
IRoleType roleSrc = (IRoleType)OTModelManager.getOTElement(cuTSource.getType("TSource").getType("R"));
IMethodMapping calloutMapping = roleSrc.getMethodMappings()[0];
IType roleTDest_R = cuTDest.getType("TDest").getType("R");
assertTrue("callout does not exist", calloutMapping.exists());
assertTrue("R does not exist", roleTDest_R.exists());
IJavaElement[] copyJavaElements= {calloutMapping};
IResource[] copyResources= {};
IJavaElement[] pasteJavaElements= {roleTDest_R};
IResource[] pasteResources= {};
PasteAction paste= verifyEnabled(copyResources, copyJavaElements, pasteResources, pasteJavaElements);
paste.run((IStructuredSelection)paste.getSelection());
compareContents("TSource");
compareContents("TDest");
}
finally
{
delete(cuTSource);
delete(cuTDest);
}
}
public void testPasteCallinMappingParam() throws Exception
{
ICompilationUnit cuTSource= createCUfromTestFile(getPackageP(), "TSource");
ICompilationUnit cuTDest= createCUfromTestFile(getPackageP(), "TDest");
try
{
IRoleType roleSrc = (IRoleType)OTModelManager.getOTElement(cuTSource.getType("TSource").getType("R"));
IMethodMapping calloutMapping = roleSrc.getMethodMappings()[0];
IType roleTDest_R = cuTDest.getType("TDest").getType("R");
assertTrue("callout does not exist", calloutMapping.exists());
assertTrue("R does not exist", roleTDest_R.exists());
IJavaElement[] copyJavaElements= {calloutMapping};
IResource[] copyResources= {};
IJavaElement[] pasteJavaElements= {roleTDest_R};
IResource[] pasteResources= {};
PasteAction paste= verifyEnabled(copyResources, copyJavaElements, pasteResources, pasteJavaElements);
paste.run((IStructuredSelection)paste.getSelection());
compareContents("TSource");
compareContents("TDest");
}
finally
{
delete(cuTSource);
delete(cuTDest);
}
}
public void testPasteCalloutToFieldMapping() throws Exception
{
ICompilationUnit cuTSource = createCUfromTestFile(getPackageP(),
"TSource");
ICompilationUnit cuTDest = createCUfromTestFile(getPackageP(), "TDest");
try
{
IRoleType roleSrc = (IRoleType)OTModelManager
.getOTElement(cuTSource.getType("TSource").getType("R"));
IMethodMapping calloutToFieldMapping = roleSrc.getMethodMappings()[0];
IType roleTDest_R = cuTDest.getType("TDest").getType("R");
assertTrue("callout does not exist", calloutToFieldMapping.exists());
assertTrue("R does not exist", roleTDest_R.exists());
IJavaElement[] copyJavaElements = { calloutToFieldMapping };
IResource[] copyResources = {};
IJavaElement[] pasteJavaElements = { roleTDest_R };
IResource[] pasteResources = {};
PasteAction paste = verifyEnabled(copyResources,
copyJavaElements, pasteResources, pasteJavaElements);
paste.run((IStructuredSelection)paste.getSelection());
compareContents("TSource");
compareContents("TDest");
}
finally
{
delete(cuTSource);
delete(cuTDest);
}
}
public void testPasteCallinMapping() throws Exception
{
ICompilationUnit cuTSource = createCUfromTestFile(getPackageP(),
"TSource");
ICompilationUnit cuTDest = createCUfromTestFile(getPackageP(), "TDest");
try
{
IRoleType roleSrc = (IRoleType)OTModelManager
.getOTElement(cuTSource.getType("TSource").getType("R"));
IMethodMapping callinMapping = roleSrc.getMethodMappings()[0];
IType roleTDest_R = cuTDest.getType("TDest").getType("R");
assertTrue("callout does not exist", callinMapping.exists());
assertTrue("R does not exist", roleTDest_R.exists());
IJavaElement[] copyJavaElements = { callinMapping };
IResource[] copyResources = {};
IJavaElement[] pasteJavaElements = { roleTDest_R };
IResource[] pasteResources = {};
PasteAction paste = verifyEnabled(copyResources,
copyJavaElements, pasteResources, pasteJavaElements);
paste.run((IStructuredSelection)paste.getSelection());
compareContents("TSource");
compareContents("TDest");
}
finally
{
delete(cuTSource);
delete(cuTDest);
}
}
}