blob: fb042fe67bd02bf8e10991c355d858d5da8bb6a9 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2017 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
* Alexander Kurtakov <akurtako@redhat.com> - Bug 459343
*******************************************************************************/
package org.eclipse.core.tests.resources;
import java.net.URI;
import java.net.URISyntaxException;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.internal.resources.TestingSupport;
import org.eclipse.core.internal.resources.Workspace;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.*;
import org.eclipse.core.tests.internal.resources.TestActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
public class IWorkspaceTest extends ResourceTest {
public IWorkspaceTest() {
super();
}
public IWorkspaceTest(String name) {
super(name);
}
@Override
public String[] defineHierarchy() {
return new String[] {"/", "/Project/", "/Project/Folder/", "/Project/Folder/File",};
}
/**
* Returns the nature descriptor with the given Id, or null if not found
*/
protected IProjectNatureDescriptor findNature(IProjectNatureDescriptor[] descriptors, String id) {
for (IProjectNatureDescriptor descriptor : descriptors) {
if (descriptor.getNatureId().equals(id)) {
return descriptor;
}
}
return null;
}
public static Test suite() {
return new TestSuite(IWorkspaceTest.class);
// TestSuite suite = new TestSuite();
// suite.addTest(new IWorkspaceTest("testValidateProjectLocation"));
// return suite;
}
@Override
protected void setUp() throws Exception {
super.setUp();
}
@Override
protected void tearDown() throws Exception {
getWorkspace().getRoot().refreshLocal(IResource.DEPTH_INFINITE, null);
ensureDoesNotExistInWorkspace(getWorkspace().getRoot());
super.tearDown();
}
/**
* Tests handling of runnables that throw OperationCanceledException.
*/
public void testCancelRunnable() {
boolean cancelled = false;
try {
getWorkspace().run((IWorkspaceRunnable) monitor -> {
throw new OperationCanceledException();
}, getMonitor());
} catch (CoreException e) {
fail("1.0", e);
} catch (OperationCanceledException e) {
cancelled = true;
}
assertTrue("2.0", cancelled);
}
/**
* Performs black box testing of the following method:
* IStatus copy([IResource, IPath, boolean, IProgressMonitor)
* See also testMultiCopy()
*/
public void testCopy() throws CoreException {
IResource[] resources = buildResources();
IProject project = (IProject) resources[1];
IFolder folder = (IFolder) resources[2];
IFile file = (IFile) resources[3];
IFile file2 = folder.getFile("File2");
IFile file3 = folder.getFile("File3");
IFolder folder2 = project.getFolder("Folder2");
IFolder folderCopy = folder2.getFolder("Folder");
IFile fileCopy = folder2.getFile("File");
IFile file2Copy = folder2.getFile("File2");
/********** FAILURE CASES ***********/
//project not open
try {
getWorkspace().copy(new IResource[] {file}, folder.getFullPath(), false, getMonitor());
fail("0.0");
} catch (CoreException e) {
// should fail
}
createHierarchy();
//copy to bogus destination
try {
getWorkspace().copy(new IResource[] {file}, folder2.getFullPath().append("figment"), false, getMonitor());
fail("1.0");
} catch (CoreException e) {
// should fail
}
//copy to non-existent destination
try {
getWorkspace().copy(new IResource[] {file}, folder2.getFullPath(), false, getMonitor());
fail("1.1");
} catch (CoreException e) {
// should fail
}
//create the destination
try {
folder2.create(false, true, getMonitor());
} catch (CoreException e) {
fail("1.2", e);
}
//source file doesn't exist
try {
getWorkspace().copy(new IResource[] {file2}, folder2.getFullPath(), false, getMonitor());
fail("1.3");
} catch (CoreException e) {
// should fail
}
//some source files don't exist
try {
getWorkspace().copy(new IResource[] {file, file2}, folder2.getFullPath(), false, getMonitor());
fail("1.4");
} catch (CoreException e) {
// should fail
}
//make sure the first copy worked
assertTrue("1.5", fileCopy.exists());
try {
fileCopy.delete(true, getMonitor());
} catch (CoreException e) {
fail("1.6", e);
}
// create the files
IFile projectFile = project.getFile("ProjectPhile");
try {
file2.create(getRandomContents(), false, getMonitor());
file3.create(getRandomContents(), false, getMonitor());
projectFile.create(getRandomContents(), false, getMonitor());
} catch (CoreException e) {
fail("1.7", e);
}
//source files aren't siblings
try {
getWorkspace().copy(new IResource[] {file, projectFile}, folder2.getFullPath(), false, getMonitor());
fail("1.8");
} catch (CoreException e) {
// should fail
}
//source files contains duplicates
try {
getWorkspace().copy(new IResource[] {file, file2, file}, folder2.getFullPath(), false, getMonitor());
fail("1.9");
} catch (CoreException e) {
// should fail
}
//source can't be prefix of destination
try {
IFolder folder3 = folder2.getFolder("Folder3");
folder3.create(false, true, getMonitor());
getWorkspace().copy(new IResource[] {folder2}, folder3.getFullPath(), false, getMonitor());
fail("2.0");
} catch (CoreException e) {
// should fail
}
//target exists
try {
file2Copy.create(getRandomContents(), false, getMonitor());
getWorkspace().copy(new IResource[] {file, file2}, folder2.getFullPath(), false, getMonitor());
fail("2.1");
} catch (CoreException e) {
// should fail
}
ensureDoesNotExistInWorkspace(file2Copy);
ensureDoesNotExistInFileSystem(file2Copy);
//make sure the first copy worked
fileCopy = folder2.getFile("File");
assertTrue("2.2", fileCopy.exists());
try {
fileCopy.delete(true, getMonitor());
} catch (CoreException e) {
fail("2.3", e);
}
//resource out of sync with filesystem
ensureOutOfSync(file);
try {
getWorkspace().copy(new IResource[] {file}, folder2.getFullPath(), false, getMonitor());
fail("2.5");
} catch (CoreException e) {
// should fail
}
// make sure "file" is in sync.
file.refreshLocal(IResource.DEPTH_ZERO, null);
/********** NON FAILURE CASES ***********/
//empty resource list
try {
getWorkspace().copy(new IResource[] {}, folder2.getFullPath(), false, getMonitor());
} catch (CoreException e) {
fail("3.0", e);
} catch (ArrayIndexOutOfBoundsException e) {
fail("Fails because of 1FTXL69", e);
}
//copy single file
try {
getWorkspace().copy(new IResource[] {file}, folder2.getFullPath(), false, getMonitor());
} catch (CoreException e) {
fail("3.1", e);
}
assertTrue("3.2", fileCopy.exists());
ensureDoesNotExistInWorkspace(fileCopy);
ensureDoesNotExistInFileSystem(fileCopy);
//copy two files
try {
getWorkspace().copy(new IResource[] {file, file2}, folder2.getFullPath(), false, getMonitor());
} catch (CoreException e) {
fail("3.3", e);
}
assertTrue("3.4", fileCopy.exists());
assertTrue("3.5", file2Copy.exists());
ensureDoesNotExistInWorkspace(fileCopy);
ensureDoesNotExistInWorkspace(file2Copy);
ensureDoesNotExistInFileSystem(fileCopy);
ensureDoesNotExistInFileSystem(file2Copy);
//copy a folder
try {
getWorkspace().copy(new IResource[] {folder}, folder2.getFullPath(), false, getMonitor());
} catch (CoreException e) {
fail("3.6", e);
}
assertTrue("3.7", folderCopy.exists());
try {
assertTrue("3.8", folderCopy.members().length > 0);
} catch (CoreException e) {
fail("3.9", e);
}
ensureDoesNotExistInWorkspace(folderCopy);
ensureDoesNotExistInFileSystem(folderCopy);
}
/**
* Performs black box testing of the following method:
* IStatus delete([IResource, boolean, IProgressMonitor)
*/
public void testDelete() throws CoreException {
IResource[] resources = buildResources();
IProject project = (IProject) resources[1];
IFolder folder = (IFolder) resources[2];
IFile file = (IFile) resources[3];
//delete non-existent resources
assertTrue(getWorkspace().delete(new IResource[] {project, folder, file}, false, getMonitor()).isOK());
assertTrue(getWorkspace().delete(new IResource[] {file}, false, getMonitor()).isOK());
assertTrue(getWorkspace().delete(new IResource[] {}, false, getMonitor()).isOK());
createHierarchy();
//delete existing resources
resources = new IResource[] {file, project, folder};
assertTrue(getWorkspace().delete(resources, false, getMonitor()).isOK());
// assertDoesNotExistInFileSystem(resources);
assertDoesNotExistInWorkspace(resources);
createHierarchy();
resources = new IResource[] {file};
assertTrue(getWorkspace().delete(resources, false, getMonitor()).isOK());
assertDoesNotExistInFileSystem(resources);
assertDoesNotExistInWorkspace(resources);
file.create(getRandomContents(), false, getMonitor());
resources = new IResource[] {};
assertTrue(getWorkspace().delete(resources, false, getMonitor()).isOK());
assertDoesNotExistInFileSystem(resources);
assertDoesNotExistInWorkspace(resources);
createHierarchy();
//delete a combination of existing and non-existent resources
IProject fakeProject = getWorkspace().getRoot().getProject("pigment");
IFolder fakeFolder = fakeProject.getFolder("ligament");
resources = new IResource[] {file, folder, fakeFolder, project, fakeProject};
assertTrue(getWorkspace().delete(resources, false, getMonitor()).isOK());
// assertDoesNotExistInFileSystem(resources);
assertDoesNotExistInWorkspace(resources);
createHierarchy();
resources = new IResource[] {fakeProject, file};
assertTrue(getWorkspace().delete(resources, false, getMonitor()).isOK());
assertDoesNotExistInFileSystem(resources);
assertDoesNotExistInWorkspace(resources);
file.create(getRandomContents(), false, getMonitor());
resources = new IResource[] {fakeProject};
assertTrue(getWorkspace().delete(resources, false, getMonitor()).isOK());
// assertDoesNotExistInFileSystem(resources);
assertDoesNotExistInWorkspace(resources);
createHierarchy();
}
/**
* Performs black box testing of the following method:
* {@link IWorkspace#forgetSavedTree(String)}.
*/
public void testForgetSavedTree() {
try {
//according to javadoc spec, null means forget all plugin trees
getWorkspace().forgetSavedTree(null);
} catch (RuntimeException e) {
fail("4.99", e);
}
}
/**
* Performs black box testing of the following method:
* IProjectNatureDescriptor[] getNatureDescriptors()
*/
public void testGetNatureDescriptors() {
//NOTE: see static fields for description of available test natures
IProjectNatureDescriptor[] descriptors = getWorkspace().getNatureDescriptors();
IProjectNatureDescriptor current = findNature(descriptors, NATURE_SIMPLE);
assertTrue("2.0", current != null);
assertEquals("2.1", NATURE_SIMPLE, current.getNatureId());
assertEquals("2.2", "Simple", current.getLabel());
assertEquals("2.3", 0, current.getRequiredNatureIds().length);
assertEquals("2.4", 0, current.getNatureSetIds().length);
current = findNature(descriptors, NATURE_SNOW);
assertTrue("3.0", current != null);
assertEquals("3.1", NATURE_SNOW, current.getNatureId());
assertEquals("3.2", "Snow", current.getLabel());
String[] required = current.getRequiredNatureIds();
assertEquals("3.3", 1, required.length);
assertEquals("3.4", NATURE_WATER, required[0]);
String[] sets = current.getNatureSetIds();
assertEquals("3.5", 1, sets.length);
assertEquals("3.6", SET_OTHER, sets[0]);
current = findNature(descriptors, NATURE_WATER);
assertTrue("4.0", current != null);
assertEquals("4.1", NATURE_WATER, current.getNatureId());
assertEquals("4.2", "Water", current.getLabel());
required = current.getRequiredNatureIds();
assertEquals("4.3", 0, required.length);
sets = current.getNatureSetIds();
assertEquals("4.4", 1, sets.length);
assertEquals("4.5", SET_STATE, sets[0]);
current = findNature(descriptors, NATURE_EARTH);
assertTrue("5.0", current != null);
assertEquals("5.1", NATURE_EARTH, current.getNatureId());
assertEquals("5.2", "Earth", current.getLabel());
required = current.getRequiredNatureIds();
assertEquals("5.3", 0, required.length);
sets = current.getNatureSetIds();
assertEquals("5.4", 1, sets.length);
assertEquals("5.5", SET_STATE, sets[0]);
current = findNature(descriptors, NATURE_MUD);
assertTrue("6.0", current != null);
assertEquals("6.1", NATURE_MUD, current.getNatureId());
assertEquals("6.2", "Mud", current.getLabel());
required = current.getRequiredNatureIds();
assertEquals("6.3", 2, required.length);
//water and earth are required for mud
if (required[0].equals(NATURE_WATER)) {
assertEquals("6.4", NATURE_EARTH, required[1]);
} else {
assertEquals("6.5", NATURE_EARTH, required[0]);
assertEquals("6.6", NATURE_WATER, required[0]);
}
sets = current.getNatureSetIds();
assertEquals("6.7", 1, sets.length);
assertEquals("6.8", SET_OTHER, sets[0]);
current = findNature(descriptors, NATURE_INVALID);
assertTrue("7.0", current != null);
assertEquals("7.1", NATURE_INVALID, current.getNatureId());
assertEquals("7.2", "", current.getLabel());
required = current.getRequiredNatureIds();
assertEquals("7.3", 0, required.length);
sets = current.getNatureSetIds();
assertEquals("7.4", 0, sets.length);
current = findNature(descriptors, NATURE_CYCLE1);
assertTrue("8.0", current != null);
assertEquals("8.1", NATURE_CYCLE1, current.getNatureId());
assertEquals("8.2", "Cycle1", current.getLabel());
required = current.getRequiredNatureIds();
assertEquals("8.3", 1, required.length);
assertEquals("8.4", NATURE_CYCLE2, required[0]);
sets = current.getNatureSetIds();
assertEquals("8.5", 0, sets.length);
current = findNature(descriptors, NATURE_CYCLE2);
assertTrue("5.0", current != null);
assertEquals("9.1", NATURE_CYCLE2, current.getNatureId());
assertEquals("9.2", "Cycle2", current.getLabel());
required = current.getRequiredNatureIds();
assertEquals("9.3", 1, required.length);
assertEquals("9.4", NATURE_CYCLE3, required[0]);
sets = current.getNatureSetIds();
assertEquals("9.5", 0, sets.length);
current = findNature(descriptors, NATURE_CYCLE3);
assertTrue("10.0", current != null);
assertEquals("10.1", NATURE_CYCLE3, current.getNatureId());
assertEquals("10.2", "Cycle3", current.getLabel());
required = current.getRequiredNatureIds();
assertEquals("10.3", 1, required.length);
assertEquals("10.4", NATURE_CYCLE1, required[0]);
sets = current.getNatureSetIds();
assertEquals("10.5", 0, sets.length);
}
/**
* Performs black box testing of the following method:
* IProjectNatureDescriptor getNatureDescriptor(String)
*/
public void testGetNatureDescriptor() {
//NOTE: see static fields for description of available test natures
IWorkspace ws = getWorkspace();
IProjectNatureDescriptor current = ws.getNatureDescriptor(NATURE_SIMPLE);
assertTrue("2.0", current != null);
assertEquals("2.1", NATURE_SIMPLE, current.getNatureId());
assertEquals("2.2", "Simple", current.getLabel());
assertEquals("2.3", 0, current.getRequiredNatureIds().length);
assertEquals("2.4", 0, current.getNatureSetIds().length);
current = ws.getNatureDescriptor(NATURE_SNOW);
assertTrue("3.0", current != null);
assertEquals("3.1", NATURE_SNOW, current.getNatureId());
assertEquals("3.2", "Snow", current.getLabel());
String[] required = current.getRequiredNatureIds();
assertEquals("3.3", 1, required.length);
assertEquals("3.4", NATURE_WATER, required[0]);
String[] sets = current.getNatureSetIds();
assertEquals("3.5", 1, sets.length);
assertEquals("3.6", SET_OTHER, sets[0]);
current = ws.getNatureDescriptor(NATURE_WATER);
assertTrue("4.0", current != null);
assertEquals("4.1", NATURE_WATER, current.getNatureId());
assertEquals("4.2", "Water", current.getLabel());
required = current.getRequiredNatureIds();
assertEquals("4.3", 0, required.length);
sets = current.getNatureSetIds();
assertEquals("4.4", 1, sets.length);
assertEquals("4.5", SET_STATE, sets[0]);
current = ws.getNatureDescriptor(NATURE_EARTH);
assertTrue("5.0", current != null);
assertEquals("5.1", NATURE_EARTH, current.getNatureId());
assertEquals("5.2", "Earth", current.getLabel());
required = current.getRequiredNatureIds();
assertEquals("5.3", 0, required.length);
sets = current.getNatureSetIds();
assertEquals("5.4", 1, sets.length);
assertEquals("5.5", SET_STATE, sets[0]);
current = ws.getNatureDescriptor(NATURE_MUD);
assertTrue("6.0", current != null);
assertEquals("6.1", NATURE_MUD, current.getNatureId());
assertEquals("6.2", "Mud", current.getLabel());
required = current.getRequiredNatureIds();
assertEquals("6.3", 2, required.length);
//water and earth are required for mud
if (required[0].equals(NATURE_WATER)) {
assertEquals("6.4", NATURE_EARTH, required[1]);
} else {
assertEquals("6.5", NATURE_EARTH, required[0]);
assertEquals("6.6", NATURE_WATER, required[0]);
}
sets = current.getNatureSetIds();
assertEquals("6.7", 1, sets.length);
assertEquals("6.8", SET_OTHER, sets[0]);
current = ws.getNatureDescriptor(NATURE_INVALID);
assertTrue("7.0", current != null);
assertEquals("7.1", NATURE_INVALID, current.getNatureId());
assertEquals("7.2", "", current.getLabel());
required = current.getRequiredNatureIds();
assertEquals("7.3", 0, required.length);
sets = current.getNatureSetIds();
assertEquals("7.4", 0, sets.length);
current = ws.getNatureDescriptor(NATURE_CYCLE1);
assertTrue("8.0", current != null);
assertEquals("8.1", NATURE_CYCLE1, current.getNatureId());
assertEquals("8.2", "Cycle1", current.getLabel());
required = current.getRequiredNatureIds();
assertEquals("8.3", 1, required.length);
assertEquals("8.4", NATURE_CYCLE2, required[0]);
sets = current.getNatureSetIds();
assertEquals("8.5", 0, sets.length);
current = ws.getNatureDescriptor(NATURE_CYCLE2);
assertTrue("5.0", current != null);
assertEquals("9.1", NATURE_CYCLE2, current.getNatureId());
assertEquals("9.2", "Cycle2", current.getLabel());
required = current.getRequiredNatureIds();
assertEquals("9.3", 1, required.length);
assertEquals("9.4", NATURE_CYCLE3, required[0]);
sets = current.getNatureSetIds();
assertEquals("9.5", 0, sets.length);
current = ws.getNatureDescriptor(NATURE_CYCLE3);
assertTrue("10.0", current != null);
assertEquals("10.1", NATURE_CYCLE3, current.getNatureId());
assertEquals("10.2", "Cycle3", current.getLabel());
required = current.getRequiredNatureIds();
assertEquals("10.3", 1, required.length);
assertEquals("10.4", NATURE_CYCLE1, required[0]);
sets = current.getNatureSetIds();
assertEquals("10.5", 0, sets.length);
}
/**
* Performs black box testing of the following method:
* IStatus move([IResource, IPath, boolean, IProgressMonitor)
*/
public void testMove() throws CoreException {
/* create folders and files */
IProject project = getWorkspace().getRoot().getProject("Project");
IFolder folder = project.getFolder("folder");
IFile file = project.getFile("file.txt");
IFile anotherFile = project.getFile("anotherFile.txt");
IFile oneMoreFile = project.getFile("oneMoreFile.txt");
ensureExistsInWorkspace(new IResource[] {project, folder, file, anotherFile, oneMoreFile}, true);
/* normal case */
IResource[] resources = {file, anotherFile, oneMoreFile};
getWorkspace().move(resources, folder.getFullPath(), true, getMonitor());
assertTrue("1.1", !file.exists());
assertTrue("1.2", !anotherFile.exists());
assertTrue("1.3", !oneMoreFile.exists());
assertTrue("1.4", folder.getFile(file.getName()).exists());
assertTrue("1.5", folder.getFile(anotherFile.getName()).exists());
assertTrue("1.6", folder.getFile(oneMoreFile.getName()).exists());
/* test duplicates */
resources = new IResource[] {folder.getFile(file.getName()), folder.getFile(anotherFile.getName()), folder.getFile(oneMoreFile.getName()), folder.getFile(oneMoreFile.getName())};
IStatus status = getWorkspace().move(resources, project.getFullPath(), true, getMonitor());
assertTrue("2.1", status.isOK());
assertTrue("2.3", file.exists());
assertTrue("2.4", anotherFile.exists());
assertTrue("2.5", oneMoreFile.exists());
assertTrue("2.6", !folder.getFile(file.getName()).exists());
assertTrue("2.7", !folder.getFile(anotherFile.getName()).exists());
assertTrue("2.8", !folder.getFile(oneMoreFile.getName()).exists());
/* test no simblings */
resources = new IResource[] {file, anotherFile, oneMoreFile, project};
boolean ok = false;
try {
getWorkspace().move(resources, folder.getFullPath(), true, getMonitor());
} catch (CoreException e) {
ok = true;
status = e.getStatus();
}
assertTrue("3.0", ok);
assertTrue("3.1", !status.isOK());
assertTrue("3.2", status.getChildren().length == 1);
assertTrue("3.3", !file.exists());
assertTrue("3.4", !anotherFile.exists());
assertTrue("3.5", !oneMoreFile.exists());
assertTrue("3.6", folder.getFile(file.getName()).exists());
assertTrue("3.7", folder.getFile(anotherFile.getName()).exists());
assertTrue("3.8", folder.getFile(oneMoreFile.getName()).exists());
/* inexisting resource */
resources = new IResource[] {folder.getFile(file.getName()), folder.getFile(anotherFile.getName()), folder.getFile("inexisting"), folder.getFile(oneMoreFile.getName())};
ok = false;
try {
getWorkspace().move(resources, project.getFullPath(), true, getMonitor());
} catch (CoreException e) {
ok = true;
status = e.getStatus();
}
assertTrue("4.0", ok);
assertTrue("4.1", !status.isOK());
assertTrue("4.3", file.exists());
assertTrue("4.4", anotherFile.exists());
assertTrue("4.5", oneMoreFile.exists());
assertTrue("4.6", !folder.getFile(file.getName()).exists());
assertTrue("4.7", !folder.getFile(anotherFile.getName()).exists());
assertTrue("4.8", !folder.getFile(oneMoreFile.getName()).exists());
}
/**
* Another test method for IWorkspace.copy(). See also testCopy
*/
public void testMultiCopy() throws CoreException {
/* create common objects */
IResource[] resources = buildResources();
IProject project = (IProject) resources[1];
IFolder folder = (IFolder) resources[2];
/* create folder and file */
ensureExistsInWorkspace(folder, true);
ensureExistsInFileSystem(folder);
IFile file1 = project.getFile("file.txt");
ensureExistsInWorkspace(file1, true);
ensureExistsInFileSystem(file1);
IFile anotherFile = project.getFile("anotherFile.txt");
ensureExistsInWorkspace(anotherFile, true);
ensureExistsInFileSystem(anotherFile);
IFile oneMoreFile = project.getFile("oneMoreFile.txt");
ensureExistsInWorkspace(oneMoreFile, true);
ensureExistsInFileSystem(oneMoreFile);
/* normal case */
resources = new IResource[] {file1, anotherFile, oneMoreFile};
getWorkspace().copy(resources, folder.getFullPath(), true, getMonitor());
assertTrue("1.1", file1.exists());
assertTrue("1.2", anotherFile.exists());
assertTrue("1.3", oneMoreFile.exists());
assertTrue("1.4", folder.getFile(file1.getName()).exists());
assertTrue("1.5", folder.getFile(anotherFile.getName()).exists());
assertTrue("1.6", folder.getFile(oneMoreFile.getName()).exists());
ensureDoesNotExistInWorkspace(folder.getFile(file1.getName()));
ensureDoesNotExistInWorkspace(folder.getFile(anotherFile.getName()));
ensureDoesNotExistInWorkspace(folder.getFile(oneMoreFile.getName()));
ensureDoesNotExistInFileSystem(folder.getFile(file1.getName()));
ensureDoesNotExistInFileSystem(folder.getFile(anotherFile.getName()));
ensureDoesNotExistInFileSystem(folder.getFile(oneMoreFile.getName()));
/* test duplicates */
resources = new IResource[] {file1, anotherFile, oneMoreFile, file1};
getWorkspace().copy(resources, folder.getFullPath(), true, getMonitor());
assertTrue("2.2", file1.exists());
assertTrue("2.3", anotherFile.exists());
assertTrue("2.4", oneMoreFile.exists());
assertTrue("2.5", folder.getFile(file1.getName()).exists());
assertTrue("2.6", folder.getFile(anotherFile.getName()).exists());
assertTrue("2.7", folder.getFile(oneMoreFile.getName()).exists());
ensureDoesNotExistInWorkspace(folder.getFile(file1.getName()));
ensureDoesNotExistInWorkspace(folder.getFile(anotherFile.getName()));
ensureDoesNotExistInWorkspace(folder.getFile(oneMoreFile.getName()));
ensureDoesNotExistInFileSystem(folder.getFile(file1.getName()));
ensureDoesNotExistInFileSystem(folder.getFile(anotherFile.getName()));
ensureDoesNotExistInFileSystem(folder.getFile(oneMoreFile.getName()));
/* test no siblings */
resources = new IResource[] {file1, anotherFile, oneMoreFile, project};
IStatus status = null;
boolean ok = false;
try {
getWorkspace().copy(resources, folder.getFullPath(), true, getMonitor());
} catch (CoreException e) {
ok = true;
status = e.getStatus();
}
assertTrue("3.0", ok);
assertTrue("3.1", !status.isOK());
assertTrue("3.2", status.getChildren().length == 1);
assertTrue("3.3", file1.exists());
assertTrue("3.4", anotherFile.exists());
assertTrue("3.5", oneMoreFile.exists());
assertTrue("3.6", folder.getFile(file1.getName()).exists());
assertTrue("3.7", folder.getFile(anotherFile.getName()).exists());
assertTrue("3.8", folder.getFile(oneMoreFile.getName()).exists());
ensureDoesNotExistInWorkspace(folder.getFile(file1.getName()));
ensureDoesNotExistInWorkspace(folder.getFile(anotherFile.getName()));
ensureDoesNotExistInWorkspace(folder.getFile(oneMoreFile.getName()));
ensureDoesNotExistInFileSystem(folder.getFile(file1.getName()));
ensureDoesNotExistInFileSystem(folder.getFile(anotherFile.getName()));
ensureDoesNotExistInFileSystem(folder.getFile(oneMoreFile.getName()));
/* inexisting resource */
resources = new IResource[] {file1, anotherFile, project.getFile("inexisting"), oneMoreFile};
ok = false;
try {
getWorkspace().copy(resources, folder.getFullPath(), true, getMonitor());
} catch (CoreException e) {
ok = true;
status = e.getStatus();
}
assertTrue("4.0", ok);
assertTrue("4.1", !status.isOK());
assertTrue("4.2", file1.exists());
assertTrue("4.3", anotherFile.exists());
assertTrue("4.4", oneMoreFile.exists());
assertTrue("4.5", folder.getFile(file1.getName()).exists());
assertTrue("4.6", folder.getFile(anotherFile.getName()).exists());
assertTrue("4.7 Fails because of 1FVFOOQ", folder.getFile(oneMoreFile.getName()).exists());
/* copy projects should not be allowed */
IResource destination = getWorkspace().getRoot().getProject("destination");
ok = false;
try {
getWorkspace().copy(new IResource[] {project}, destination.getFullPath(), true, getMonitor());
} catch (CoreException e) {
ok = true;
status = e.getStatus();
}
assertTrue("5.0", ok);
assertTrue("5.1", !status.isOK());
assertTrue("5.2", status.getChildren().length == 1);
}
public void testMultiCreation() throws Throwable {
final IProject project = getWorkspace().getRoot().getProject("bar");
final IResource[] resources = buildResources(project, new String[] {"a/", "a/b"});
IWorkspaceRunnable body = monitor -> {
project.create(null);
project.open(null);
// define an operation which will create a bunch of resources including a project.
for (IResource resource : resources) {
switch (resource.getType()) {
case IResource.FILE :
((IFile) resource).create(null, false, getMonitor());
break;
case IResource.FOLDER :
((IFolder) resource).create(false, true, getMonitor());
break;
case IResource.PROJECT :
((IProject) resource).create(getMonitor());
break;
}
}
};
getWorkspace().run(body, getMonitor());
assertExistsInWorkspace(project);
assertExistsInWorkspace(resources);
}
public void testMultiDeletion() throws Throwable {
IProject project = getWorkspace().getRoot().getProject("testProject");
IResource[] before = buildResources(project, new String[] {"c/", "c/b/", "c/x", "c/b/y", "c/b/z"});
ensureExistsInWorkspace(before, true);
//
assertExistsInWorkspace(before);
getWorkspace().delete(before, true, getMonitor());
assertDoesNotExistInWorkspace(before);
}
/**
* Test thread safety of the API method IWorkspace.setDescription.
*/
public void testMultiSetDescription() {
final int THREAD_COUNT = 2;
final CoreException[] errorPointer = new CoreException[1];
Thread[] threads = new Thread[THREAD_COUNT];
for (int i = 0; i < THREAD_COUNT; i++) {
threads[i] = new Thread((Runnable) () -> {
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IWorkspaceDescription description = workspace.getDescription();
for (int j = 0; j < 100; j++) {
description.setAutoBuilding(false);
try {
workspace.setDescription(description);
} catch (CoreException e1) {
errorPointer[0] = e1;
return;
}
description.setAutoBuilding(true);
try {
workspace.setDescription(description);
} catch (CoreException e2) {
errorPointer[0] = e2;
return;
}
}
}, "Autobuild " + i);
threads[i].start();
}
for (Thread thread : threads) {
try {
thread.join();
} catch (InterruptedException e) {
}
}
if (errorPointer[0] != null) {
fail("1.0", errorPointer[0]);
}
}
/**
* Test API method IWorkspace.setDescription.
*/
public void testSave() {
//ensure save returns a warning if a project's .project file is deleted.
IProject project = getWorkspace().getRoot().getProject("Broken");
ensureExistsInWorkspace(project, true);
//wait for snapshot before modifying file
TestingSupport.waitForSnapshot();
IFile descriptionFile = project.getFile(IProjectDescription.DESCRIPTION_FILE_NAME);
try {
descriptionFile.delete(IResource.NONE, null);
IStatus result = getWorkspace().save(true, getMonitor());
assertEquals("1.0", IStatus.WARNING, result.getSeverity());
} catch (CoreException e) {
fail("1.99", e);
}
}
/**
* Performs black box testing of the following method:
* String[] sortNatureSet(String[])
*/
public void testSortNatureSet() {
//NOTE: see static fields for description of available test natures
IWorkspace ws = getWorkspace();
//invalid sets shouldn't fail
String[][] invalid = getInvalidNatureSets();
for (String[] element : invalid) {
String[] sorted = ws.sortNatureSet(element);
assertTrue("0.0", sorted != null);
//set may grow if it contained duplicates
assertTrue("0.1", sorted.length <= element.length);
}
String[] sorted = ws.sortNatureSet(new String[] {});
assertEquals("1.0", 0, sorted.length);
sorted = ws.sortNatureSet(new String[] {NATURE_SIMPLE});
assertEquals("2.0", 1, sorted.length);
assertEquals("2.1", NATURE_SIMPLE, sorted[0]);
sorted = ws.sortNatureSet(new String[] {NATURE_SNOW, NATURE_WATER});
assertEquals("3.0", 2, sorted.length);
assertEquals("3.1", NATURE_WATER, sorted[0]);
assertEquals("3.2", NATURE_SNOW, sorted[1]);
sorted = ws.sortNatureSet(new String[] {NATURE_WATER, NATURE_SIMPLE, NATURE_SNOW});
assertEquals("4.0", 3, sorted.length);
//three valid sorts: water, snow, simple; water, simple, snow; simple, water, snow
boolean first = sorted[0].equals(NATURE_WATER) && sorted[1].equals(NATURE_SNOW) && sorted[2].equals(NATURE_SIMPLE);
boolean second = sorted[0].equals(NATURE_WATER) && sorted[1].equals(NATURE_SIMPLE) && sorted[2].equals(NATURE_SNOW);
boolean third = sorted[0].equals(NATURE_SIMPLE) && sorted[1].equals(NATURE_WATER) && sorted[2].equals(NATURE_SNOW);
assertTrue("4.1", first || second || third);
}
public void testValidateEdit() {
// We need to know whether or not we can unset the read-only flag
// in order to perform this test.
if (!isReadOnlySupported()) {
return;
}
IProject project = getWorkspace().getRoot().getProject("MyProject");
IFile file = project.getFile("myfile.txt");
ensureExistsInWorkspace(new IResource[] {project, file}, true);
IStatus result = getWorkspace().validateEdit(new IFile[] {file}, null);
assertTrue("1.0", result.isOK());
file.setReadOnly(true);
result = getWorkspace().validateEdit(new IFile[] {file}, null);
assertEquals("1.1", IStatus.ERROR, result.getSeverity());
// assertEquals("1.2", IResourceStatus.READ_ONLY_LOCAL, result.getCode());
// remove the read-only status so test cleanup will work ok
file.setReadOnly(false);
}
public void testValidateLinkLocation() {
//TODO
//see also: some tests in LinkedResourceWithPathVariableTest
}
/**
* Performs black box testing of the following method:
* IStatus validateName(String, int)
*/
public void testValidateName() {
/* normal name */
assertTrue("1.1", getWorkspace().validateName("abcdef", IResource.FILE).isOK());
/* invalid characters (windows only) */
if (isWindows()) {
assertTrue("2.1", !getWorkspace().validateName("dsa:sf", IResource.FILE).isOK());
assertTrue("2.2", !getWorkspace().validateName("*dsasf", IResource.FILE).isOK());
assertTrue("2.3", !getWorkspace().validateName("?dsasf", IResource.FILE).isOK());
assertTrue("2.4", !getWorkspace().validateName("\"dsasf", IResource.FILE).isOK());
assertTrue("2.5", !getWorkspace().validateName("<dsasf", IResource.FILE).isOK());
assertTrue("2.6", !getWorkspace().validateName(">dsasf", IResource.FILE).isOK());
assertTrue("2.7", !getWorkspace().validateName("|dsasf", IResource.FILE).isOK());
assertTrue("2.8", !getWorkspace().validateName("\"dsasf", IResource.FILE).isOK());
assertTrue("2.10", !getWorkspace().validateName("\\dsasf", IResource.FILE).isOK());
assertTrue("2.11", !getWorkspace().validateName("...", IResource.PROJECT).isOK());
assertTrue("2.12", !getWorkspace().validateName("foo.", IResource.FILE).isOK());
} else {
//trailing dots are ok on other platforms
assertTrue("3.3", getWorkspace().validateName("...", IResource.FILE).isOK());
assertTrue("3.4", getWorkspace().validateName("....", IResource.PROJECT).isOK());
assertTrue("3.7", getWorkspace().validateName("abc.", IResource.FILE).isOK());
}
/* invalid characters on all platforms */
assertTrue("2.9", !getWorkspace().validateName("/dsasf", IResource.FILE).isOK());
assertTrue("2.9", !getWorkspace().validateName("", IResource.FILE).isOK());
/* dots */
assertTrue("3.1", !getWorkspace().validateName(".", IResource.FILE).isOK());
assertTrue("3.2", !getWorkspace().validateName("..", IResource.FILE).isOK());
assertTrue("3.3", getWorkspace().validateName("...z", IResource.FILE).isOK());
assertTrue("3.4", getWorkspace().validateName("....z", IResource.FILE).isOK());
assertTrue("3.5", getWorkspace().validateName("....abc", IResource.FILE).isOK());
assertTrue("3.6", getWorkspace().validateName("abc....def", IResource.FILE).isOK());
assertTrue("3.7", getWorkspace().validateName("abc.d...z", IResource.FILE).isOK());
}
/**
* Performs black box testing of the following method:
* IStatus validateNatureSet(String[])
*/
public void testValidateNatureSet() {
//NOTE: see static fields for description of available test natures
IWorkspace ws = getWorkspace();
String[][] invalid = getInvalidNatureSets();
for (int i = 0; i < invalid.length; i++) {
IStatus result = ws.validateNatureSet(invalid[i]);
assertTrue("invalid (severity): " + i, !result.isOK());
assertTrue("invalid (code): " + i, result.getCode() != IStatus.OK);
}
String[][] valid = getValidNatureSets();
for (int i = 0; i < valid.length; i++) {
IStatus result = ws.validateNatureSet(valid[i]);
assertTrue("valid (severity): " + i, result.isOK());
assertTrue("valid (code): " + i, result.getCode() == IStatus.OK);
}
}
/**
* Performs black box testing of the following method:
* IStatus validatePath(String, int)
*/
public void testValidatePath() {
/* normal path */
assertTrue("1.1", getWorkspace().validatePath("/one/two/three/four/", IResource.FILE | IResource.FOLDER).isOK());
/* invalid characters (windows only) */
final boolean WINDOWS = isWindows();
if (WINDOWS) {
assertTrue("2.1", !(getWorkspace().validatePath("\\dsa:sf", IResource.FILE).isOK()));
assertTrue("2.2", !(getWorkspace().validatePath("/abc/*dsasf", IResource.FILE).isOK()));
assertTrue("2.3", !(getWorkspace().validatePath("/abc/?dsasf", IResource.FILE).isOK()));
assertTrue("2.4", !(getWorkspace().validatePath("/abc/\"dsasf", IResource.FILE).isOK()));
assertTrue("2.5", !(getWorkspace().validatePath("/abc/<dsasf", IResource.FILE).isOK()));
assertTrue("2.6", !(getWorkspace().validatePath("/abc/>dsasf", IResource.FILE).isOK()));
assertTrue("2.7", !(getWorkspace().validatePath("/abc/|dsasf", IResource.FILE).isOK()));
assertTrue("2.8", !(getWorkspace().validatePath("/abc/\"dsasf", IResource.FILE).isOK()));
assertTrue("5.2", !(getWorkspace().validatePath("\\", IResource.FILE).isOK()));
assertTrue("5.4", !(getWorkspace().validatePath("device:/abc/123", IResource.FILE).isOK()));
//trailing dots in segments names not allowed on Windows
assertTrue("3.1", !getWorkspace().validatePath("/abc/.../defghi", IResource.FILE).isOK());
assertTrue("3.2", !getWorkspace().validatePath("/abc/..../defghi", IResource.FILE).isOK());
assertTrue("3.3", !getWorkspace().validatePath("/abc/def..../ghi", IResource.FILE).isOK());
} else {
assertTrue("3.1", getWorkspace().validatePath("/abc/.../defghi", IResource.FILE).isOK());
assertTrue("3.2", getWorkspace().validatePath("/abc/..../defghi", IResource.FILE).isOK());
assertTrue("3.3", getWorkspace().validatePath("/abc/def..../ghi", IResource.FILE).isOK());
}
/* dots */
assertTrue("3.4", getWorkspace().validatePath("/abc/../ghi/j", IResource.FILE).isOK());
assertTrue("3.5", getWorkspace().validatePath("/abc/....def/ghi", IResource.FILE).isOK());
assertTrue("3.6", getWorkspace().validatePath("/abc/def....ghi/jkl", IResource.FILE).isOK());
/* test hiding incorrect characters using .. and device separator : */
assertTrue("4.1", getWorkspace().validatePath("/abc/.?./../def/as", IResource.FILE).isOK());
assertTrue("4.2", getWorkspace().validatePath("/abc/;*?\"'/../def/safd", IResource.FILE).isOK());
assertTrue("4.3", getWorkspace().validatePath("/abc;*?\"':/def/asdf/sadf", IResource.FILE).isOK() != WINDOWS);
/* other invalid paths */
assertTrue("5.1", !(getWorkspace().validatePath("/", IResource.FILE).isOK()));
assertTrue("5.3", !(getWorkspace().validatePath("", IResource.FILE).isOK()));
/* test types / segments */
assertTrue("6.6", getWorkspace().validatePath("/asf", IResource.PROJECT).isOK());
assertTrue("6.7", !(getWorkspace().validatePath("/asf", IResource.FILE).isOK()));
// note this is value for a file OR project (note the logical OR)
assertTrue("6.8", getWorkspace().validatePath("/asf", IResource.PROJECT | IResource.FILE).isOK());
assertTrue("6.10", getWorkspace().validatePath("/project/.metadata", IResource.FILE).isOK());
// FIXME: Should this be valid?
assertTrue("6.11", getWorkspace().validatePath("/.metadata/project", IResource.FILE).isOK());
}
/**
* Performs black box testing of the following method:
* IStatus validateProjectLocation(IProject, IPath)
*/
public void testValidateProjectLocation() {
IWorkspace workspace = getWorkspace();
IProject project = workspace.getRoot().getProject("Project");
/* normal path */
assertTrue("1.1", workspace.validateProjectLocation(project, new Path("/one/two/three/four/")).isOK());
/* invalid characters (windows only) */
final boolean WINDOWS = isWindows();
if (WINDOWS) {
assertTrue("2.1", !workspace.validateProjectLocation(project, new Path("d:\\dsa:sf")).isOK());
assertTrue("2.2", !workspace.validateProjectLocation(project, new Path("/abc/*dsasf")).isOK());
assertTrue("2.3", !workspace.validateProjectLocation(project, new Path("/abc/?dsasf")).isOK());
assertTrue("2.4", !workspace.validateProjectLocation(project, new Path("/abc/\"dsasf")).isOK());
assertTrue("2.5", !workspace.validateProjectLocation(project, new Path("/abc/<dsasf")).isOK());
assertTrue("2.6", !workspace.validateProjectLocation(project, new Path("/abc/>dsasf")).isOK());
assertTrue("2.7", !workspace.validateProjectLocation(project, new Path("/abc/|dsasf")).isOK());
assertTrue("2.8", !workspace.validateProjectLocation(project, new Path("/abc/\"dsasf")).isOK());
//trailing dots invalid on Windows
assertTrue("3.1", !workspace.validateProjectLocation(project, new Path("/abc/.../defghi")).isOK());
assertTrue("3.2", !workspace.validateProjectLocation(project, new Path("/abc/..../defghi")).isOK());
assertTrue("3.3", !workspace.validateProjectLocation(project, new Path("/abc/def..../ghi")).isOK());
} else {
assertTrue("3.1", workspace.validateProjectLocation(project, new Path("/abc/.../defghi")).isOK());
assertTrue("3.2", workspace.validateProjectLocation(project, new Path("/abc/..../defghi")).isOK());
assertTrue("3.3", workspace.validateProjectLocation(project, new Path("/abc/def..../ghi")).isOK());
}
/* dots */
assertTrue("3.4", workspace.validateProjectLocation(project, new Path("/abc/....def/ghi")).isOK());
assertTrue("3.5", workspace.validateProjectLocation(project, new Path("/abc/def....ghi/jkl")).isOK());
/* test hiding incorrect characters using .. and device separator : */
assertTrue("4.1", workspace.validateProjectLocation(project, new Path("/abc/.?./../def/as")).isOK());
assertTrue("4.2", workspace.validateProjectLocation(project, new Path("/abc/;*?\"'/../def/safd")).isOK());
assertTrue("4.3", !(workspace.validateProjectLocation(project, new Path("c:/abc;*?\"':/def/asdf/sadf")).isOK()));
// cannot overlap the platform directory
IPath platformLocation = Platform.getLocation();
assertTrue("5.1", !(workspace.validateProjectLocation(project, new Path(platformLocation.getDevice(), "/")).isOK()));
assertTrue("5.2", !(workspace.validateProjectLocation(project, new Path(platformLocation.getDevice(), "\\")).isOK()));
assertTrue("5.3", !(workspace.validateProjectLocation(project, new Path(platformLocation.getDevice(), "")).isOK()));
assertTrue("5.4", !(workspace.validateProjectLocation(project, platformLocation).isOK()));
assertTrue("5.5", !(workspace.validateProjectLocation(project, platformLocation.append("foo")).isOK()));
//can overlap platform directory on another device
IPath anotherDevice = platformLocation.setDevice("u:");
assertTrue("6.1", workspace.validateProjectLocation(project, new Path("u:", "/")).isOK());
if (WINDOWS) {
assertTrue("6.2", workspace.validateProjectLocation(project, new Path("u:", "\\")).isOK());
}
assertTrue("6.4", workspace.validateProjectLocation(project, anotherDevice).isOK());
assertTrue("6.5", workspace.validateProjectLocation(project, anotherDevice.append("foo")).isOK());
//cannot be a relative path
assertTrue("7.1", !workspace.validateProjectLocation(project, new Path("u:", "")).isOK());
assertTrue("7.2", !workspace.validateProjectLocation(project, new Path("c:")).isOK());
assertTrue("7.3", !workspace.validateProjectLocation(project, new Path("c:foo")).isOK());
assertTrue("7.4", !workspace.validateProjectLocation(project, new Path("foo/bar")).isOK());
assertTrue("7.5", !workspace.validateProjectLocation(project, new Path("c:foo/bar")).isOK());
//may be relative to an existing path variable
final String PATH_VAR_NAME = "FOOVAR";
final IPath PATH_VAR_VALUE = getRandomLocation();
try {
try {
IPath varPath = new Path(PATH_VAR_NAME);
workspace.getPathVariableManager().setValue(PATH_VAR_NAME, PATH_VAR_VALUE);
assertTrue("8.1", workspace.validateProjectLocation(project, varPath).isOK());
assertTrue("8.2", workspace.validateProjectLocation(project, varPath.append("test")).isOK());
assertTrue("8.3", workspace.validateProjectLocation(project, varPath.append("test/ing")).isOK());
} finally {
workspace.getPathVariableManager().setValue(PATH_VAR_NAME, null);
}
} catch (CoreException e) {
fail("8.99", e);
}
//cannot overlap with another project's location
IPath openProjectLocation = getTempDir().append("OpenProject");
IProject open = workspace.getRoot().getProject("OpenProject");
IProjectDescription openDesc = workspace.newProjectDescription(open.getName());
openDesc.setLocation(openProjectLocation);
IPath closedProjectLocation = getTempDir().append("ClosedProject");
IProject closed = workspace.getRoot().getProject("ClosedProject");
IProjectDescription closedDesc = workspace.newProjectDescription(closed.getName());
closedDesc.setLocation(closedProjectLocation);
try {
open.create(openDesc, null);
open.open(null);
closed.create(closedDesc, null);
} catch (CoreException e) {
fail("9.99", e);
}
IPath linkLocation = getRandomLocation();
try {
//indirect test: setting the project description may validate location, which shouldn't complain
IProjectDescription desc = open.getDescription();
desc.setReferencedProjects(new IProject[] {project});
open.setDescription(desc, IResource.FORCE, getMonitor());
assertTrue("9.1", !workspace.validateProjectLocation(project, openProjectLocation).isOK());
assertTrue("9.2", !workspace.validateProjectLocation(project, closedProjectLocation).isOK());
//for an existing project, it cannot overlap itself, but its own location is valid
assertTrue("9.3", workspace.validateProjectLocation(open, openProjectLocation).isOK());
assertTrue("9.4", !workspace.validateProjectLocation(open, openProjectLocation.append("sub")).isOK());
//an existing project cannot overlap the location of any linked resource in that project
linkLocation.toFile().mkdirs();
assertTrue("10.1", workspace.validateProjectLocation(open, linkLocation).isOK());
IFolder link = open.getFolder("link");
link.createLink(linkLocation, IResource.NONE, getMonitor());
assertTrue("10.2", !workspace.validateProjectLocation(open, linkLocation).isOK());
assertTrue("10.3", !workspace.validateProjectLocation(open, linkLocation.append("sub")).isOK());
//however another project can overlap an existing link location
assertTrue("10.4", workspace.validateProjectLocation(project, linkLocation).isOK());
// A new project cannot overlap the default locations of other projects, but its own location is valid
IPath defaultProjectLocation = workspace.getRoot().getLocation();
assertTrue("11.1", workspace.validateProjectLocation(project, defaultProjectLocation.append(project.getName())).isOK());
assertTrue("11.2", !workspace.validateProjectLocation(project, defaultProjectLocation.append("foo")).isOK());
} catch (CoreException e) {
fail("11.99", e);
} finally {
Workspace.clear(linkLocation.toFile());
//make sure we clean up project directories
try {
open.delete(IResource.ALWAYS_DELETE_PROJECT_CONTENT, getMonitor());
open.delete(IResource.ALWAYS_DELETE_PROJECT_CONTENT, getMonitor());
} catch (CoreException e) {
}
ensureDoesNotExistInFileSystem(openProjectLocation.toFile());
ensureDoesNotExistInFileSystem(closedProjectLocation.toFile());
}
// cannot overlap .metadata folder from the current workspace
assertTrue("12.1", !(workspace.validateProjectLocation(project, platformLocation.addTrailingSeparator().append(".metadata"))).isOK());
IProject metadataProject = workspace.getRoot().getProject(".metadata");
assertTrue("12.2", !(workspace.validateProjectLocation(metadataProject, null)).isOK());
// FIXME: Should this be valid?
assertTrue("23.1", workspace.validateProjectLocation(project, new Path("/asf")).isOK());
assertTrue("23.2", workspace.validateProjectLocation(project, new Path("/project/.metadata")).isOK());
// FIXME: Should this be valid?
assertTrue("23.3", workspace.validateProjectLocation(project, new Path("/.metadata/project")).isOK());
}
/**
* Performs black box testing of the following method:
* IStatus validateProjectLocationURI(IProject, URI)
*/
public void testValidateProjectLocationURI() {
IWorkspace workspace = getWorkspace();
IProject project = workspace.getRoot().getProject("Project");
try {
//URI with no scheme
URI uri = new URI("eferfsdfwer");
assertTrue("1.0", !workspace.validateProjectLocationURI(project, uri).isOK());
//URI with unknown scheme
uri = new URI("blorts://foo.com?bad");
assertTrue("1.1", !workspace.validateProjectLocationURI(project, uri).isOK());
} catch (URISyntaxException e) {
fail("1.99", e);
}
}
public void testWorkspaceService() {
final BundleContext context = TestActivator.getContext();
ServiceReference<IWorkspace> ref = context.getServiceReference(IWorkspace.class);
assertNotNull("1.0", ref);
IWorkspace ws = context.getService(ref);
assertNotNull("1.1", ws);
}
public void testGetFilterMatcherDescriptor() {
IFilterMatcherDescriptor descriptor = getWorkspace().getFilterMatcherDescriptor("");
assertNull("1.0", descriptor);
descriptor = getWorkspace().getFilterMatcherDescriptor("org.eclipse.core.resources.regexFilterMatcher");
assertNotNull("1.1", descriptor);
}
}