blob: 46ca1a82945034d827bb3e759594b1470dba3197 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2015 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.core.tests.resources;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.filesystem.*;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.tests.internal.filesystem.bogus.BogusFileSystem;
import org.eclipse.core.tests.internal.filesystem.ram.MemoryFileSystem;
import org.eclipse.core.tests.internal.filesystem.ram.MemoryTree;
/**
* Tests behaviour of manipulating linked resources that are not linked into
* the local file system.
*/
public class NonLocalLinkedResourceTest extends ResourceTest {
private int nextFolder = 0;
public static Test suite() {
return new TestSuite(NonLocalLinkedResourceTest.class);
}
public NonLocalLinkedResourceTest() {
}
public NonLocalLinkedResourceTest(String name) {
super(name);
}
/**
* Creates a folder in the test file system with the given name
*/
protected IFileStore createFolderStore(String name) {
IFileSystem system = getFileSystem();
IFileStore store = system.getStore(Path.ROOT.append(name));
try {
store.mkdir(EFS.NONE, getMonitor());
} catch (CoreException e) {
fail("createFolderStore", e);
}
return store;
}
protected IFileSystem getFileSystem() {
try {
return EFS.getFileSystem(MemoryFileSystem.SCHEME_MEMORY);
} catch (CoreException e) {
fail("Test file system missing", e);
}
//can't get here
return null;
}
@Override
protected IFileStore getTempStore() {
IFileSystem system = getFileSystem();
IFileStore store;
do {
store = system.getStore(Path.ROOT.append(Integer.toString(nextFolder++)));
} while (store.fetchInfo().exists());
return store;
}
@Override
protected void tearDown() throws Exception {
MemoryTree.TREE.deleteAll();
super.tearDown();
}
public void testCopyFile() {
IFileStore sourceStore = createFolderStore("source");
IFileStore destinationStore = createFolderStore("destination");
IProject project = getWorkspace().getRoot().getProject("project");
IFolder source = project.getFolder("source");
IFolder destination = project.getFolder("destination");
IFile sourceFile = source.getFile("file.txt");
IFile destinationFile = destination.getFile(sourceFile.getName());
IFile localFile = project.getFile(sourceFile.getName());
//setup initial resources
ensureExistsInWorkspace(project, true);
try {
source.createLink(sourceStore.toURI(), IResource.NONE, getMonitor());
destination.createLink(destinationStore.toURI(), IResource.NONE, getMonitor());
sourceFile.create(getRandomContents(), IResource.NONE, getMonitor());
} catch (CoreException e) {
fail("0.99", e);
}
//copy to linked destination should succeed
try {
sourceFile.copy(destinationFile.getFullPath(), IResource.NONE, getMonitor());
} catch (CoreException e) {
fail("1.0", e);
}
//copy to local destination should succeed
try {
sourceFile.copy(localFile.getFullPath(), IResource.NONE, getMonitor());
} catch (CoreException e) {
fail("2.0", e);
}
//copy from local to non local
ensureDoesNotExistInWorkspace(destinationFile);
//copy from local to non local
try {
localFile.copy(destinationFile.getFullPath(), IResource.NONE, getMonitor());
} catch (CoreException e) {
fail("3.0", e);
}
//copy to self should fail
try {
localFile.copy(localFile.getFullPath(), IResource.NONE, getMonitor());
fail("4.0");
} catch (CoreException e) {
//should fail
}
}
public void testCopyFolder() {
IFileStore sourceStore = createFolderStore("source");
IProject project = getWorkspace().getRoot().getProject("project");
IFolder parentFolder = project.getFolder("parent");
IFolder source = parentFolder.getFolder("source");
IFolder destination = project.getFolder("destination");
//setup initial resources
ensureExistsInWorkspace(project, true);
try {
parentFolder.create(IResource.NONE, true, getMonitor());
source.createLink(sourceStore.toURI(), IResource.NONE, getMonitor());
} catch (CoreException e) {
fail("0.99", e);
}
//shallow copy to destination should succeed
try {
source.copy(destination.getFullPath(), IResource.SHALLOW, getMonitor());
} catch (CoreException e) {
fail("1.0", e);
}
assertTrue("1.1", destination.exists());
//deep copy to destination should succeed
try {
destination.delete(IResource.NONE, getMonitor());
source.copy(destination.getFullPath(), IResource.NONE, getMonitor());
} catch (CoreException e) {
fail("2.0", e);
}
assertTrue("2.1", destination.exists());
//should fail when destination is occupied
try {
source.copy(destination.getFullPath(), IResource.NONE, getMonitor());
fail("3.0");
} catch (CoreException e) {
//should fail
}
//copy to self should fail
try {
source.copy(source.getFullPath(), IResource.NONE, getMonitor());
fail("4.0");
} catch (CoreException e) {
//should fail
}
}
public void testMoveFile() {
IFileStore sourceStore = createFolderStore("source");
IFileStore destinationStore = createFolderStore("destination");
IProject project = getWorkspace().getRoot().getProject("project");
IFolder source = project.getFolder("source");
IFolder destination = project.getFolder("destination");
IFile sourceFile = source.getFile("file.txt");
IFile destinationFile = destination.getFile(sourceFile.getName());
IFile localFile = project.getFile(sourceFile.getName());
//setup initial resources
ensureExistsInWorkspace(project, true);
try {
source.createLink(sourceStore.toURI(), IResource.NONE, getMonitor());
destination.createLink(destinationStore.toURI(), IResource.NONE, getMonitor());
sourceFile.create(getRandomContents(), IResource.NONE, getMonitor());
} catch (CoreException e) {
fail("0.99", e);
}
//move to linked destination should succeed
try {
sourceFile.move(destinationFile.getFullPath(), IResource.NONE, getMonitor());
} catch (CoreException e) {
fail("1.0", e);
}
//move back to source location
//move to linked destination should succeed
try {
destinationFile.move(sourceFile.getFullPath(), IResource.NONE, getMonitor());
} catch (CoreException e) {
fail("1.1", e);
}
//move to local destination should succeed
try {
sourceFile.move(localFile.getFullPath(), IResource.NONE, getMonitor());
} catch (CoreException e) {
fail("2.0", e);
}
//movefrom local to non local
try {
localFile.move(destinationFile.getFullPath(), IResource.NONE, getMonitor());
} catch (CoreException e) {
fail("3.0", e);
}
//copy to self should fail
try {
localFile.copy(localFile.getFullPath(), IResource.NONE, getMonitor());
fail("4.0");
} catch (CoreException e) {
//should fail
}
}
// Test for Bug 342060 - Renaming a project failing with custom EFS
public void test342060() {
IFileStore sourceStore = createBogusFolderStore("source");
IFileStore destinationStore = createBogusFolderStore("destination");
IProject project = getWorkspace().getRoot().getProject("project");
IFolder source = project.getFolder("source");
IFolder destination = project.getFolder("destination");
IFile sourceFile = source.getFile("file.txt");
//setup initial resources
ensureExistsInWorkspace(project, true);
try {
source.createLink(sourceStore.toURI(), IResource.NONE, getMonitor());
destination.createLink(destinationStore.toURI(), IResource.NONE, getMonitor());
sourceFile.create(getRandomContents(), IResource.NONE, getMonitor());
} catch (CoreException e) {
fail("0.99", e);
}
//move to linked destination should succeed
try {
project.move(Path.fromPortableString("movedProject"), IResource.NONE, getMonitor());
} catch (CoreException e) {
fail("1.0", e);
}
}
protected IFileStore createBogusFolderStore(String name) {
IFileSystem system = getBogusFileSystem();
IFileStore store = system.getStore(Path.ROOT.append(name));
try {
store.mkdir(EFS.NONE, getMonitor());
} catch (CoreException e) {
fail("createFolderStore", e);
}
return store;
}
protected IFileSystem getBogusFileSystem() {
try {
return EFS.getFileSystem(BogusFileSystem.SCHEME_BOGUS);
} catch (CoreException e) {
fail("Test file system missing", e);
}
//can't get here
return null;
}
}