/******************************************************************************* * 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.io.ByteArrayInputStream; import java.util.HashSet; import java.util.Set; import junit.framework.Test; import junit.framework.TestSuite; import org.eclipse.core.filesystem.IFileStore; import org.eclipse.core.internal.resources.Resource; import org.eclipse.core.internal.resources.Workspace; import org.eclipse.core.resources.*; import org.eclipse.core.runtime.*; import org.eclipse.core.runtime.preferences.InstanceScope; import org.osgi.service.prefs.BackingStoreException; import org.osgi.service.prefs.Preferences; public class IProjectTest extends ResourceTest { public static Test suite() { return new TestSuite(IProjectTest.class); // TestSuite suite = new TestSuite(); // suite.addTest(new IProjectTest("testReplaceLocation")); // return suite; } public IProjectTest() { super(); } public IProjectTest(String name) { super(name); } public void ensureExistsInWorkspace(final IProject project, final IProjectDescription description) { if (project == null) { return; } IWorkspaceRunnable body = monitor -> { project.create(description, monitor); project.open(monitor); }; try { getWorkspace().run(body, null); } catch (CoreException e) { fail("#ensureExistsInWorkspace(IProject, IProjectDescription): " + project.getFullPath(), e); } } public void setGetPersistentProperty(IResource target) throws CoreException { String value = "this is a test property value"; QualifiedName name = new QualifiedName("itp-test", "testProperty"); target.setPersistentProperty(name, value); // see if we can get the property assertTrue("get not equal set", target.getPersistentProperty(name).equals(value)); // see what happens if we get a non-existant property name = new QualifiedName("eclipse-test", "testNonProperty"); assertNull("non-existant persistent property not missing", target.getPersistentProperty(name)); } @Override protected void setUp() throws Exception { super.setUp(); } /** * Note that project copying is tested more thoroughly by IResourceTest#testCopy. */ public void testCopy() { IProject project = getWorkspace().getRoot().getProject("Source"); try { project.create(getMonitor()); project.open(getMonitor()); project.createMarker(IMarker.TASK); IProject destination = getWorkspace().getRoot().getProject("Destination"); assertTrue("1.0", !destination.exists()); project.copy(destination.getFullPath(), IResource.NONE, getMonitor()); assertTrue("1.1", destination.exists()); assertEquals("1.2", 0, destination.findMarkers(IMarker.TASK, true, IResource.DEPTH_INFINITE).length); } catch (CoreException e) { fail("1.99", e); } } /** * Tests the API method IProject#getNature */ public void testGetNature() { IWorkspace ws = ResourcesPlugin.getWorkspace(); IProject project = ws.getRoot().getProject("Project"); //getNature on non-existent project should fail try { project.getNature(NATURE_SIMPLE); fail("1.0"); } catch (CoreException e) { // expected } try { project.getNature(NATURE_MISSING); fail("1.1"); } catch (CoreException e) { // expected } try { project.create(getMonitor()); } catch (CoreException e) { fail("1.99", e); } //getNature on closed project should fail try { project.getNature(NATURE_SIMPLE); fail("2.0"); } catch (CoreException e) { // expected } try { project.getNature(NATURE_MISSING); fail("2.1"); } catch (CoreException e) { // expected } try { project.open(getMonitor()); } catch (CoreException e) { fail("2.99", e); } //getNature on open project with no natures try { assertNull("3.0", project.getNature(NATURE_SIMPLE)); assertNull("3.1", project.getNature(NATURE_MISSING)); assertNull("3.2", project.getNature(NATURE_EARTH)); } catch (CoreException e) { fail("3.99", e); } try { IProjectDescription desc = project.getDescription(); desc.setNatureIds(new String[] {NATURE_SIMPLE}); project.setDescription(desc, getMonitor()); } catch (CoreException e) { fail("4.99", e); } //getNature on open project with natures IProjectNature nature = null; try { nature = project.getNature(NATURE_SIMPLE); assertNotNull("5.0", nature); assertNull("5.1", project.getNature(NATURE_MISSING)); assertNull("5.2", project.getNature(NATURE_EARTH)); } catch (CoreException e) { fail("5.99", e); return; } assertEquals("6.0", project, nature.getProject()); //ensure nature is preserved on copy IProject project2 = getWorkspace().getRoot().getProject("testGetNature.Destination"); IProjectNature nature2 = null; try { project.copy(project2.getFullPath(), IResource.NONE, getMonitor()); nature2 = project2.getNature(NATURE_SIMPLE); } catch (CoreException e) { fail("6.99", e); return; } assertNotNull("7.0", nature2); assertEquals("7.1", project2, nature2.getProject()); assertEquals("7.2", project, nature.getProject()); } /** * Tests the API method IProject#hasNature. */ public void testHasNature() { IWorkspace ws = ResourcesPlugin.getWorkspace(); IProject project = ws.getRoot().getProject("Project"); //hasNature on non-existent project should fail try { project.hasNature(NATURE_SIMPLE); fail("1.0"); } catch (CoreException e) { // expected } try { project.hasNature(NATURE_MISSING); fail("1.1"); } catch (CoreException e) { // expected } try { project.create(getMonitor()); } catch (CoreException e) { fail("1.99", e); } //hasNature on closed project should fail try { project.hasNature(NATURE_SIMPLE); fail("2.0"); } catch (CoreException e) { // expected } try { project.hasNature(NATURE_MISSING); fail("2.1"); } catch (CoreException e) { // expected } try { project.open(getMonitor()); } catch (CoreException e) { fail("2.99", e); } //hasNature on open project with no natures try { assertTrue("3.0", !project.hasNature(NATURE_SIMPLE)); assertTrue("3.1", !project.hasNature(NATURE_MISSING)); assertTrue("3.2", !project.hasNature(NATURE_EARTH)); } catch (CoreException e) { fail("3.99", e); } try { IProjectDescription desc = project.getDescription(); desc.setNatureIds(new String[] {NATURE_SIMPLE}); project.setDescription(desc, getMonitor()); } catch (CoreException e) { fail("4.99", e); } //hasNature on open project with natures try { assertTrue("5.0", project.hasNature(NATURE_SIMPLE)); assertTrue("5.1", !project.hasNature(NATURE_MISSING)); assertTrue("5.2", !project.hasNature(NATURE_EARTH)); } catch (CoreException e) { fail("5.99", e); } } /** * Tests creation and manipulation of projects names that are reserved on some platforms. */ public void testInvalidProjectNames() { IWorkspaceRoot root = getWorkspace().getRoot(); //should not be able to create a project with invalid path on any platform String[] names = new String[] {"", "/"}; for (String name : names) { try { root.getProject(name); fail("0.99"); } catch (RuntimeException e) { //should fail } } //do some tests with invalid names names = new String[0]; if (isWindows()) { //invalid windows names names = new String[] {"foo:bar", "prn", "nul", "con", "aux", "clock$", "com1", "com2", "com3", "com4", "com5", "com6", "com7", "com8", "com9", "lpt1", "lpt2", "lpt3", "lpt4", "lpt5", "lpt6", "lpt7", "lpt8", "lpt9", "AUX", "con.foo", "LPT4.txt", "*", "?", "\"", "<", ">", "|", "::"}; } else { //invalid names on non-windows platforms names = new String[] {}; } for (String name : names) { IProject project = root.getProject(name); assertTrue("1.0 " + name, !project.exists()); try { project.create(getMonitor()); project.open(getMonitor()); fail("1.1 " + name); } catch (CoreException e) { // expected } assertTrue("1.2 " + name, !project.exists()); assertTrue("1.3 " + name, !project.isOpen()); } //do some tests with valid names that are *almost* invalid if (isWindows()) { //these names are valid on windows names = new String[] {"hello.prn.txt", "null", "con3", "foo.aux", "lpt0", "com0", "com10", "lpt10", ",", "'", ";"}; } else { //these names are valid on non-windows platforms names = new String[] {"foo:bar", "prn", "nul", "con", "aux", "clock$", "com1", "com2", "com3", "com4", "com5", "com6", "com7", "com8", "com9", "lpt1", "lpt2", "lpt3", "lpt4", "lpt5", "lpt6", "lpt7", "lpt8", "lpt9", "con.foo", "LPT4.txt", "*", "?", "\"", "<", ">", "|", "hello.prn.txt", "null", "con3", "foo.aux", "lpt0", "com0", "com10", "lpt10", ",", "'", ";"}; } for (String name : names) { IProject project = root.getProject(name); assertTrue("2.0 " + name, !project.exists()); try { project.create(getMonitor()); project.open(getMonitor()); } catch (CoreException e) { fail("2.1 " + name, e); } assertTrue("2.2 " + name, project.exists()); assertTrue("2.3 " + name, project.isOpen()); } } /** * Tests the API method IProject#isNatureEnabled. */ public void testIsNatureEnabled() { IWorkspace ws = ResourcesPlugin.getWorkspace(); IProject project = ws.getRoot().getProject("Project"); //isNatureEnabled on non-existent project should fail try { project.isNatureEnabled(NATURE_SIMPLE); fail("1.0"); } catch (CoreException e) { // expected } try { project.isNatureEnabled(NATURE_MISSING); fail("1.1"); } catch (CoreException e) { // expected } try { project.create(getMonitor()); } catch (CoreException e) { fail("1.99", e); } //isNatureEnabled on closed project should fail try { project.isNatureEnabled(NATURE_SIMPLE); fail("2.0"); } catch (CoreException e) { // expected } try { project.isNatureEnabled(NATURE_MISSING); fail("2.1"); } catch (CoreException e) { // expected } try { project.open(getMonitor()); } catch (CoreException e) { fail("2.99", e); } //isNatureEnabled on open project with no natures try { assertTrue("3.0", !project.isNatureEnabled(NATURE_SIMPLE)); assertTrue("3.1", !project.isNatureEnabled(NATURE_MISSING)); assertTrue("3.2", !project.isNatureEnabled(NATURE_EARTH)); } catch (CoreException e) { fail("3.99", e); } try { IProjectDescription desc = project.getDescription(); desc.setNatureIds(new String[] {NATURE_SIMPLE}); project.setDescription(desc, getMonitor()); } catch (CoreException e) { fail("4.99", e); } //isNatureEnabled on open project with natures try { assertTrue("5.0", project.isNatureEnabled(NATURE_SIMPLE)); assertTrue("5.1", !project.isNatureEnabled(NATURE_MISSING)); assertTrue("5.2", !project.isNatureEnabled(NATURE_EARTH)); } catch (CoreException e) { fail("5.99", e); } } /** * Tests creation of a project whose location is specified by * a path variable. See bug 56274. */ public void testPathVariableLocation() { final String projectName = "Project"; final String varName = "ProjectLocatio"; IPath varValue = Platform.getLocation().removeLastSegments(1); IPath rawLocation = new Path(varName).append("ProjectLocation"); //define the variable try { getWorkspace().getPathVariableManager().setValue(varName, varValue); } catch (CoreException e) { fail("1.0", e); } IProject project = getWorkspace().getRoot().getProject(projectName); IProjectDescription description = getWorkspace().newProjectDescription(projectName); description.setLocation(rawLocation); //create the project try { project.create(description, getMonitor()); project.open(getMonitor()); } catch (CoreException e) { fail("9.99", e); } assertEquals("1.0", varValue, getWorkspace().getPathVariableManager().getValue(varName)); assertTrue("1.1", project.exists()); assertTrue("1.2", project.isOpen()); assertEquals("1.3", rawLocation, project.getRawLocation()); assertEquals("1.4", varValue.append(rawLocation.lastSegment()), project.getLocation()); } public void testProjectCloseOpen() { IProject target = getWorkspace().getRoot().getProject("Project"); ensureExistsInWorkspace(target, true); IFolder folder = target.getFolder("Folder"); ensureExistsInWorkspace(folder, true); try { target.close(getMonitor()); } catch (CoreException e) { fail("1.0", e); } assertTrue("1.1", target.exists()); assertTrue("1.2", !target.isOpen()); assertTrue("1.3", !folder.exists()); try { target.open(getMonitor()); } catch (CoreException e) { fail("2.0", e); } assertTrue("2.1", target.isOpen()); assertTrue("2.2", folder.exists()); } public void testProjectCopyVariations() { IProject project, destProject; IResource[] resources; IResource destination, source, sourceChild, destChild; String[] children; QualifiedName qname = new QualifiedName("com.example", "myProperty"); String actual = null; String value = "this is my property value."; // copy a project via the copy(IPath) API project = getWorkspace().getRoot().getProject("SourceProject"); source = project; children = new String[] {"/1/", "/1/2"}; resources = buildResources(project, children); ensureExistsInWorkspace(project, true); ensureExistsInWorkspace(resources, true); destination = getWorkspace().getRoot().getProject("DestProject"); assertDoesNotExistInWorkspace("1.0", destination); // set a property to copy sourceChild = resources[1]; try { sourceChild.setPersistentProperty(qname, value); } catch (CoreException e) { fail("1.1", e); } try { source.copy(destination.getFullPath(), false, getMonitor()); } catch (CoreException e) { fail("1.2", e); } assertExistsInWorkspace("1.3", project); assertExistsInWorkspace("1.4", resources); resources = buildResources((IProject) destination, children); assertExistsInWorkspace("1.5", destination); assertExistsInWorkspace("1.6", resources); // ensure the properties were copied ok destChild = resources[1]; try { actual = destChild.getPersistentProperty(qname); } catch (CoreException e) { fail("1.7", e); } assertNotNull("1.8", actual); assertEquals("1.9", value, actual); // cleanup try { getWorkspace().getRoot().delete(false, getMonitor()); } catch (CoreException e) { fail("1.10", e); } // copy a project via the copy(IProjectDescription) API project = getWorkspace().getRoot().getProject("SourceProject"); source = project; children = new String[] {"/1/", "/1/2"}; resources = buildResources(project, children); ensureExistsInWorkspace(project, true); ensureExistsInWorkspace(resources, true); destination = getWorkspace().getRoot().getProject("DestProject"); IProjectDescription description = getWorkspace().newProjectDescription(destination.getName()); assertDoesNotExistInWorkspace("2.0", destination); // set a property to copy sourceChild = resources[1]; try { sourceChild.setPersistentProperty(qname, value); } catch (CoreException e) { fail("2.1", e); } try { ((IProject) source).copy(description, false, getMonitor()); } catch (CoreException e) { fail("2.2", e); } assertExistsInWorkspace("2.3", project); assertExistsInWorkspace("2.4", resources); resources = buildResources((IProject) destination, children); assertExistsInWorkspace("2.5", destination); assertExistsInWorkspace("2.6", resources); // ensure the properties were copied ok destChild = resources[1]; try { actual = destChild.getPersistentProperty(qname); } catch (CoreException e) { fail("2.7", e); } assertNotNull("2.8", actual); assertEquals("2.9", value, actual); // cleanup try { getWorkspace().getRoot().delete(false, getMonitor()); } catch (CoreException e) { fail("2.10", e); } // create the source project, copy it to a be a folder under another project. // This isn't allowed so catch the exception. project = getWorkspace().getRoot().getProject("SourceProject"); source = project; children = new String[] {"/1/", "/1/2"}; resources = buildResources(project, children); destProject = getWorkspace().getRoot().getProject("DestProject"); destination = destProject.getFolder("MyFolder"); ensureExistsInWorkspace(new IResource[] {project, destProject}, true); ensureExistsInWorkspace(resources, true); assertDoesNotExistInWorkspace("3.0", destination); try { source.copy(destination.getFullPath(), true, getMonitor()); fail("3.1"); } catch (CoreException e) { // expected } try { getWorkspace().getRoot().delete(false, getMonitor()); } catch (CoreException e) { fail("3.99", e); } // create a source folder and copy it to be a project. // This isn't allowed so catch the exception project = getWorkspace().getRoot().getProject("SourceProject"); children = new String[] {"/1/", "/1/2"}; source = project.getFolder("1"); resources = buildResources(project, children); destination = getWorkspace().getRoot().getProject("DestProject"); ensureExistsInWorkspace(project, true); ensureExistsInWorkspace(resources, true); assertDoesNotExistInWorkspace("4.0", destination); try { source.copy(destination.getFullPath(), true, getMonitor()); fail("4.1"); } catch (CoreException e) { // expected } // cleanup try { getWorkspace().getRoot().delete(true, getMonitor()); } catch (CoreException e) { fail("4.99", e); } } public void testProjectCreateOpenCloseDelete() { IProject target = getWorkspace().getRoot().getProject("Project"); try { target.create(getMonitor()); } catch (CoreException e) { fail("1.0", e); } assertTrue("1.1", target.exists()); try { target.open(getMonitor()); } catch (CoreException e) { fail("2.0", e); } assertTrue("2.1", target.isOpen()); try { target.close(getMonitor()); } catch (CoreException e) { fail("3.0", e); } assertTrue("3.1", !target.isOpen()); try { target.delete(true, getMonitor()); } catch (CoreException e) { fail("4.0", e); } assertTrue("4.1", !target.exists()); } public void testProjectCreation() { IProject target = getWorkspace().getRoot().getProject("Project"); try { target.create(getMonitor()); assertTrue("1.0", target.exists()); } catch (CoreException e) { fail("1.1", e); } assertFalse("1.2", target.isOpen()); try { target.open(getMonitor()); assertTrue("2.0", target.isOpen()); } catch (CoreException e) { fail("2.1", e); } } public void testProjectCreationLineSeparator() throws BackingStoreException, CoreException { // make sure each line separator is different String systemValue = System.getProperty("line.separator"); String newInstanceValue; String newProjectValue; if (systemValue.equals("\n")) { // for unix "\n" newInstanceValue = "\r"; newProjectValue = "\r\n"; } else if (systemValue.equals("\r")) { // for macos "\r" newInstanceValue = "\n"; newProjectValue = "\r\n"; } else { // for windows "\r\n" newInstanceValue = "\r"; newProjectValue = "\n"; } Preferences rootNode = Platform.getPreferencesService().getRootNode(); Preferences instanceNode = rootNode.node(InstanceScope.SCOPE).node(Platform.PI_RUNTIME); String oldInstanceValue = instanceNode.get(Platform.PREF_LINE_SEPARATOR, null); IProject project = getWorkspace().getRoot().getProject(getUniqueString()); IFile file = project.getFile(IProjectDescription.DESCRIPTION_FILE_NAME); IProjectDescription description; try { ensureExistsInWorkspace(project, true); // new .project should have OS default line separator assertEquals("1.0", systemValue, getLineSeparatorFromFile(file)); // set instance-specific line separator instanceNode.put(Platform.PREF_LINE_SEPARATOR, newInstanceValue); instanceNode.flush(); description = project.getDescription(); description.setComment("some comment"); project.setDescription(description, getMonitor()); // existing .project should use existing line separator assertEquals("2.0", systemValue, getLineSeparatorFromFile(file)); project.delete(true, getMonitor()); ensureExistsInWorkspace(project, true); // new .project should have instance-specific line separator assertEquals("3.0", newInstanceValue, getLineSeparatorFromFile(file)); // remove preference for the next step if (oldInstanceValue == null) { instanceNode.remove(Platform.PREF_LINE_SEPARATOR); } else { instanceNode.put(Platform.PREF_LINE_SEPARATOR, oldInstanceValue); } instanceNode.flush(); description = project.getDescription(); description.setComment("some comment"); project.setDescription(description, getMonitor()); // existing .project should use existing line separator assertEquals("4.0", newInstanceValue, getLineSeparatorFromFile(file)); project.delete(true, getMonitor()); ensureExistsInWorkspace(project, true); // new .project should have OS default line separator assertEquals("5.0", systemValue, getLineSeparatorFromFile(file)); // set project-specific line separator Preferences projectNode = rootNode.node(ProjectScope.SCOPE).node(project.getName()).node(Platform.PI_RUNTIME); projectNode.put(Platform.PREF_LINE_SEPARATOR, newProjectValue); projectNode.flush(); // remove .project file but leave the project file.delete(true, getMonitor()); assertFalse("6.0", file.exists()); // workspace save should recreate .project file with project-specific line delimiter getWorkspace().save(true, getMonitor()); // refresh project to update the resource tree project.refreshLocal(IResource.DEPTH_INFINITE, getMonitor()); assertTrue("7.0", file.exists()); // new .project should have project-specific line separator assertEquals("8.0", newProjectValue, getLineSeparatorFromFile(file)); } finally { // revert instance preference to original value if (oldInstanceValue == null) { instanceNode.remove(Platform.PREF_LINE_SEPARATOR); } else { instanceNode.put(Platform.PREF_LINE_SEPARATOR, oldInstanceValue); } instanceNode.flush(); project.delete(true, getMonitor()); } } /** * Tests creating a project whose location is invalid */ public void testProjectCreationInvalidLocation() { IProject target = getWorkspace().getRoot().getProject("Project"); IProjectDescription description = getWorkspace().newProjectDescription(target.getName()); description.setLocation(Platform.getLocation().append(".metadata")); try { target.create(description, getMonitor()); fail("1.0"); } catch (CoreException e) { //expected } //default location for a project called .metadata is invalid target = getWorkspace().getRoot().getProject(".metadata"); description = getWorkspace().newProjectDescription(target.getName()); try { target.create(description, getMonitor()); fail("1.1"); } catch (CoreException e) { //expected } //same with one argument constructor try { target.create(getMonitor()); fail("1.2"); } catch (CoreException e) { //expected } } /** * Tests creating a project whose location already exists with different case */ public void testProjectCreationLocationExistsWithDifferentCase() { if (isWindows()) { String projectName = getUniqueString() + "a"; IProject project = getWorkspace().getRoot().getProject(projectName); try { project.create(getMonitor()); project.delete(false, true, getMonitor()); } catch (CoreException ex) { fail("1.0"); } // the attempt to create a project in an already existing location with different case project = getWorkspace().getRoot().getProject(projectName.toUpperCase()); try { project.create(getMonitor()); fail("2.0"); } catch (CoreException e) { //expected } // the attempt to create a project in an already existing location with the same case project = getWorkspace().getRoot().getProject(projectName); try { project.create(getMonitor()); } catch (CoreException e) { fail("3.0", e); } } } /** * Tests for IProject.delete where: * - project is CLOSED * - content area is the DEFAULT * - resources are IN_SYNC with the file system */ public void testProjectDeletionClosedDefaultInSync() { IProject project = getWorkspace().getRoot().getProject("Project"); IFile file = project.getFile("myfile.txt"); IFile otherFile = project.getFile("myotherfile.txt"); IFileStore projectStore, fileStore, otherFileStore; /* ====================================================================== * Force = TRUE * Delete content = ALWAYS * =======================================================================*/ ensureExistsInWorkspace(new IResource[] {project, file, otherFile}, true); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("1.0", project.exists()); assertTrue("1.1", file.exists()); assertTrue("1.2", otherFile.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("1.3", e); } assertTrue("1.4", project.exists()); assertTrue("1.5", !project.isOpen()); assertTrue("1.6", !project.isAccessible()); assertTrue("1.7", !file.exists()); assertTrue("1.8", !otherFile.exists()); try { int updateFlags = IResource.FORCE; updateFlags |= IResource.ALWAYS_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("1.9", e); } assertTrue("1.10", !project.exists()); assertTrue("1.11", !file.exists()); assertTrue("1.12", !otherFile.exists()); assertTrue("1.13", !projectStore.fetchInfo().exists()); assertTrue("1.14", !fileStore.fetchInfo().exists()); assertTrue("1.15", !otherFileStore.fetchInfo().exists()); /* ====================================================================== * Force = FALSE * Delete content = ALWAYS * =======================================================================*/ ensureExistsInWorkspace(new IResource[] {project, file, otherFile}, true); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("2.0", project.exists()); assertTrue("2.1", file.exists()); assertTrue("2.2", otherFile.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("2.3", e); } assertTrue("2.4", project.exists()); assertTrue("2.5", !project.isOpen()); assertTrue("2.6", !project.isAccessible()); assertTrue("2.7", !file.exists()); assertTrue("2.8", !otherFile.exists()); try { int updateFlags = IResource.ALWAYS_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("2.9", e); } assertTrue("2.10", !project.exists()); assertTrue("2.11", !file.exists()); assertTrue("2.12", !otherFile.exists()); assertTrue("2.13", !projectStore.fetchInfo().exists()); assertTrue("2.14", !fileStore.fetchInfo().exists()); assertTrue("2.15", !otherFileStore.fetchInfo().exists()); /* ====================================================================== * Force = TRUE * Delete content = NEVER * =======================================================================*/ ensureExistsInWorkspace(new IResource[] {project, file, otherFile}, true); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("3.0", project.exists()); assertTrue("3.1", file.exists()); assertTrue("3.2", otherFile.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("3.3", e); } assertTrue("3.4", project.exists()); assertTrue("3.5", !project.isOpen()); assertTrue("3.6", !project.isAccessible()); assertTrue("3.7", !file.exists()); assertTrue("3.8", !otherFile.exists()); try { int updateFlags = IResource.FORCE; updateFlags |= IResource.NEVER_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("3.9", e); } assertTrue("3.10", !project.exists()); assertTrue("3.11", !file.exists()); assertTrue("3.12", !otherFile.exists()); assertTrue("3.13", projectStore.fetchInfo().exists()); assertTrue("3.14", fileStore.fetchInfo().exists()); assertTrue("3.15", otherFileStore.fetchInfo().exists()); // cleanup clear(projectStore); /* ====================================================================== * Force = FALSE * Delete content = NEVER * =======================================================================*/ ensureExistsInWorkspace(new IResource[] {project, file, otherFile}, true); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("4.0", project.exists()); assertTrue("4.1", file.exists()); assertTrue("4.2", otherFile.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("4.3", e); } assertTrue("4.4", project.exists()); assertTrue("4.5", !project.isOpen()); assertTrue("4.6", !project.isAccessible()); assertTrue("4.7", !file.exists()); assertTrue("4.8", !otherFile.exists()); try { int updateFlags = IResource.NEVER_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("4.9", e); } assertTrue("4.10", !project.exists()); assertTrue("4.11", !file.exists()); assertTrue("4.12", !otherFile.exists()); assertTrue("4.13", projectStore.fetchInfo().exists()); assertTrue("4.14", fileStore.fetchInfo().exists()); assertTrue("4.15", otherFileStore.fetchInfo().exists()); // cleanup clear(projectStore); /* ====================================================================== * Force = TRUE * Delete content = DEFAULT * =======================================================================*/ ensureExistsInWorkspace(new IResource[] {project, file, otherFile}, true); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("5.0", project.exists()); assertTrue("5.1", file.exists()); assertTrue("5.2", otherFile.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("5.3", e); } assertTrue("5.4", project.exists()); assertTrue("5.5", !project.isOpen()); assertTrue("5.6", !project.isAccessible()); assertTrue("5.7", !file.exists()); assertTrue("5.8", !otherFile.exists()); try { int updateFlags = IResource.FORCE; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("5.9", e); } assertTrue("5.10", !project.exists()); assertTrue("5.11", !file.exists()); assertTrue("5.12", !otherFile.exists()); assertTrue("5.13", projectStore.fetchInfo().exists()); assertTrue("5.14", fileStore.fetchInfo().exists()); assertTrue("5.15", otherFileStore.fetchInfo().exists()); // cleanup clear(projectStore); /* ====================================================================== * Force = FALSE * Delete content = DEFAULT * =======================================================================*/ ensureExistsInWorkspace(new IResource[] {project, file, otherFile}, true); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("6.0", project.exists()); assertTrue("6.1", file.exists()); assertTrue("6.2", otherFile.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("6.3", e); } assertTrue("6.4", project.exists()); assertTrue("6.5", !project.isOpen()); assertTrue("6.6", !project.isAccessible()); assertTrue("6.7", !file.exists()); assertTrue("6.8", !otherFile.exists()); try { int updateFlags = IResource.NONE; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("6.9", e); } assertTrue("6.10", !project.exists()); assertTrue("6.11", !file.exists()); assertTrue("6.12", !otherFile.exists()); assertTrue("6.13", projectStore.fetchInfo().exists()); assertTrue("6.14", fileStore.fetchInfo().exists()); assertTrue("6.15", otherFileStore.fetchInfo().exists()); // cleanup clear(projectStore); } /** * Tests for IProject.delete where: * - project is CLOSED * - content area is the DEFAULT * - resources are OUT_OF_SYNC with the file system */ public void testProjectDeletionClosedDefaultOutOfSync() { IProject project = getWorkspace().getRoot().getProject("Project"); IFile file = project.getFile("myfile.txt"); IFile otherFile = project.getFile("myotherfile.txt"); IFileStore projectStore, fileStore, otherFileStore; /* ====================================================================== * Force = TRUE * Delete content = ALWAYS * =======================================================================*/ ensureExistsInWorkspace(new IResource[] {project, file}, true); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("1.0", project.exists()); assertTrue("1.1", file.exists()); assertTrue("1.2", !otherFile.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("1.3", e); } createFileInFileSystem(otherFileStore); assertTrue("1.5", otherFileStore.fetchInfo().exists()); assertTrue("1.6", project.exists()); assertTrue("1.7", !project.isOpen()); assertTrue("1.8", !project.isAccessible()); assertTrue("1.9", !file.exists()); assertTrue("1.10", !otherFile.exists()); try { int updateFlags = IResource.FORCE; updateFlags |= IResource.ALWAYS_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("1.11", e); } assertTrue("1.12", !project.exists()); assertTrue("1.13", !file.exists()); assertTrue("1.14", !otherFile.exists()); assertTrue("1.15", !projectStore.fetchInfo().exists()); assertTrue("1.16", !fileStore.fetchInfo().exists()); assertTrue("1.17", !otherFileStore.fetchInfo().exists()); /* ====================================================================== * Force = FALSE * Delete content = ALWAYS * =======================================================================*/ ensureExistsInWorkspace(new IResource[] {project, file}, true); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("2.0", project.exists()); assertTrue("2.1", file.exists()); assertTrue("2.2", !otherFile.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("2.3", e); } createFileInFileSystem(otherFileStore); assertTrue("2.5", otherFileStore.fetchInfo().exists()); assertTrue("2.6", project.exists()); assertTrue("2.7", !project.isOpen()); assertTrue("2.8", !project.isAccessible()); assertTrue("2.9", !file.exists()); assertTrue("2.10", !otherFile.exists()); try { int updateFlags = IResource.ALWAYS_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("2.11", e); } assertTrue("2.12", !project.exists()); assertTrue("2.13", !file.exists()); assertTrue("2.14", !otherFile.exists()); assertTrue("2.15", !projectStore.fetchInfo().exists()); assertTrue("2.16", !fileStore.fetchInfo().exists()); assertTrue("2.17", !otherFileStore.fetchInfo().exists()); /* ====================================================================== * Force = TRUE * Delete content = NEVER * =======================================================================*/ ensureExistsInWorkspace(new IResource[] {project, file}, true); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("3.0", project.exists()); assertTrue("3.1", file.exists()); assertTrue("3.2", !otherFile.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("3.3", e); } createFileInFileSystem(otherFileStore); assertTrue("3.5", otherFileStore.fetchInfo().exists()); assertTrue("3.6", project.exists()); assertTrue("3.7", !project.isOpen()); assertTrue("3.8", !project.isAccessible()); assertTrue("3.9", !file.exists()); assertTrue("3.10", !otherFile.exists()); try { int updateFlags = IResource.FORCE; updateFlags |= IResource.NEVER_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("3.11", e); } assertTrue("3.12", !project.exists()); assertTrue("3.13", !file.exists()); assertTrue("3.14", !otherFile.exists()); assertTrue("3.15", projectStore.fetchInfo().exists()); assertTrue("3.16", fileStore.fetchInfo().exists()); assertTrue("3.17", otherFileStore.fetchInfo().exists()); // cleanup clear(projectStore); /* ====================================================================== * Force = FALSE * Delete content = NEVER * =======================================================================*/ ensureExistsInWorkspace(new IResource[] {project, file}, true); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("4.0", project.exists()); assertTrue("4.1", file.exists()); assertTrue("4.2", !otherFile.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("4.3", e); } createFileInFileSystem(otherFileStore); assertTrue("4.5", otherFileStore.fetchInfo().exists()); assertTrue("4.6", project.exists()); assertTrue("4.7", !project.isOpen()); assertTrue("4.8", !project.isAccessible()); assertTrue("4.9", !file.exists()); assertTrue("4.10", !otherFile.exists()); try { int updateFlags = IResource.NEVER_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("4.11", e); } assertTrue("4.12", !project.exists()); assertTrue("4.13", !file.exists()); assertTrue("4.14", !otherFile.exists()); assertTrue("4.15", projectStore.fetchInfo().exists()); assertTrue("4.16", fileStore.fetchInfo().exists()); assertTrue("4.17", otherFileStore.fetchInfo().exists()); // cleanup clear(projectStore); /* ====================================================================== * Force = TRUE * Delete content = DEFAULT * =======================================================================*/ ensureExistsInWorkspace(new IResource[] {project, file}, true); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("5.0", project.exists()); assertTrue("5.1", file.exists()); assertTrue("5.2", !otherFile.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("5.3", e); } createFileInFileSystem(otherFileStore); assertTrue("5.5", otherFileStore.fetchInfo().exists()); assertTrue("5.6", project.exists()); assertTrue("5.7", !project.isOpen()); assertTrue("5.8", !project.isAccessible()); assertTrue("5.9", !file.exists()); assertTrue("5.10", !otherFile.exists()); try { int updateFlags = IResource.FORCE; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("5.11", e); } assertTrue("5.12", !project.exists()); assertTrue("5.13", !file.exists()); assertTrue("5.14", !otherFile.exists()); assertTrue("5.15", projectStore.fetchInfo().exists()); assertTrue("5.16", fileStore.fetchInfo().exists()); assertTrue("5.17", otherFileStore.fetchInfo().exists()); // cleanup clear(projectStore); /* ====================================================================== * Force = FALSE * Delete content = DEFAULT * =======================================================================*/ ensureExistsInWorkspace(new IResource[] {project, file}, true); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("6.0", project.exists()); assertTrue("6.1", file.exists()); assertTrue("6.2", !otherFile.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("6.3", e); } createFileInFileSystem(otherFileStore); assertTrue("6.5", otherFileStore.fetchInfo().exists()); assertTrue("6.6", project.exists()); assertTrue("6.7", !project.isOpen()); assertTrue("6.8", !project.isAccessible()); assertTrue("6.9", !file.exists()); assertTrue("6.10", !otherFile.exists()); try { int updateFlags = IResource.NONE; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("6.11", e); } assertTrue("6.12", !project.exists()); assertTrue("6.13", !file.exists()); assertTrue("6.14", !otherFile.exists()); assertTrue("6.15", projectStore.fetchInfo().exists()); assertTrue("6.16", fileStore.fetchInfo().exists()); assertTrue("6.17", otherFileStore.fetchInfo().exists()); // cleanup clear(projectStore); } /** * Tests for IProject.delete where: * - project is CLOSED * - content area is USER-DEFINED * - resources are IN_SYNC with the file system */ public void testProjectDeletionClosedUserDefinedInSync() { IProject project = getWorkspace().getRoot().getProject("Project"); IFile file = project.getFile("myfile.txt"); IFileStore projectStore, fileStore; IProjectDescription description = getWorkspace().newProjectDescription(project.getName()); /* ====================================================================== * Force = TRUE * Delete content = ALWAYS * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(file, true); fileStore = ((Resource) file).getStore(); assertTrue("1.2", project.exists()); assertTrue("1.3", file.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("1.4", e); } try { int updateFlags = IResource.FORCE; updateFlags |= IResource.ALWAYS_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("1.5", e); } assertTrue("1.6", !project.exists()); assertTrue("1.7", !file.exists()); // ensure the project directory and files no longer exist assertTrue("1.8", !projectStore.fetchInfo().exists()); assertTrue("1.9", !fileStore.fetchInfo().exists()); clear(projectStore); /* ====================================================================== * Force = FALSE * Delete content = ALWAYS * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(file, true); fileStore = ((Resource) file).getStore(); assertTrue("2.2", project.exists()); assertTrue("2.3", file.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("2.4", e); } try { int updateFlags = IResource.ALWAYS_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("2.5", e); } assertTrue("2.6", !project.exists()); assertTrue("2.7", !file.exists()); // ensure the project directory and files no longer exist assertTrue("2.8", !projectStore.fetchInfo().exists()); assertTrue("2.9", !fileStore.fetchInfo().exists()); clear(projectStore); /* ====================================================================== * Force = TRUE * Delete content = NEVER * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(file, true); fileStore = ((Resource) file).getStore(); assertTrue("3.2", project.exists()); assertTrue("3.3", file.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("3.4", e); } try { int updateFlags = IResource.FORCE; updateFlags |= IResource.NEVER_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("3.5", e); } assertTrue("3.6", !project.exists()); assertTrue("3.7", !file.exists()); assertTrue("3.8", projectStore.fetchInfo().exists()); assertTrue("3.9", fileStore.fetchInfo().exists()); // cleanup clear(projectStore); /* ====================================================================== * Force = FALSE * Delete content = NEVER * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(file, true); fileStore = ((Resource) file).getStore(); assertTrue("4.2", project.exists()); assertTrue("4.3", file.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("4.4", e); } try { int updateFlags = IResource.NEVER_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("4.5", e); } assertTrue("4.6", !project.exists()); assertTrue("4.7", !file.exists()); assertTrue("4.8", projectStore.fetchInfo().exists()); assertTrue("4.9", fileStore.fetchInfo().exists()); // cleanup clear(projectStore); /* ====================================================================== * Force = TRUE * Delete content = DEFAULT * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(new IResource[] {project, file}, true); fileStore = ((Resource) file).getStore(); assertTrue("5.2", project.exists()); assertTrue("5.3", file.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("5.4", e); } try { int updateFlags = IResource.FORCE; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("5.5", e); } assertTrue("5.6", !project.exists()); assertTrue("5.7", !file.exists()); assertTrue("5.8", projectStore.fetchInfo().exists()); assertTrue("5.9", fileStore.fetchInfo().exists()); // cleanup clear(projectStore); /* ====================================================================== * Force = FALSE * Delete content = DEFAULT * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(file, true); fileStore = ((Resource) file).getStore(); assertTrue("6.2", project.exists()); assertTrue("6.3", file.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("6.4", e); } try { int updateFlags = IResource.NONE; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("6.5", e); } assertTrue("6.6", !project.exists()); assertTrue("6.7", !file.exists()); assertTrue("6.8", projectStore.fetchInfo().exists()); assertTrue("6.9", fileStore.fetchInfo().exists()); // cleanup clear(projectStore); } /** * Tests for IProject.delete where: * - project is CLOSED * - content area is USER-DEFINED * - resources are OUT_OF_SYNC with the file system */ public void testProjectDeletionClosedUserDefinedOutOfSync() { IProject project = getWorkspace().getRoot().getProject("Project"); IFile file = project.getFile("myfile.txt"); IFile otherFile = project.getFile("myotherfile.txt"); IFileStore projectStore, fileStore, otherFileStore; IProjectDescription description = getWorkspace().newProjectDescription(project.getName()); /* ====================================================================== * Force = TRUE * Delete content = ALWAYS * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(file, true); ensureExistsInFileSystem(otherFile); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("1.0", project.exists()); assertTrue("1.1", file.exists()); assertTrue("1.2", !otherFile.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("1.3", e); } try { int updateFlags = IResource.FORCE; updateFlags |= IResource.ALWAYS_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("1.4", e); } assertTrue("1.5", !project.exists()); assertTrue("1.6", !file.exists()); assertTrue("1.7", !otherFile.exists()); // ensure the project directory and files no longer exist assertTrue("1.8", !projectStore.fetchInfo().exists()); assertTrue("1.9", !fileStore.fetchInfo().exists()); assertTrue("1.10", !otherFileStore.fetchInfo().exists()); clear(projectStore); /* ====================================================================== * Force = FALSE * Delete content = ALWAYS * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(file, true); ensureExistsInFileSystem(otherFile); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("2.0", project.exists()); assertTrue("2.1", file.exists()); assertTrue("2.2", !otherFile.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("2.3", e); } try { int updateFlags = IResource.ALWAYS_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("2.4", e); } assertTrue("2.5", !project.exists()); assertTrue("2.6", !file.exists()); assertTrue("2.7", !otherFile.exists()); // ensure the project directory and files no longer exist assertTrue("2.8", !projectStore.fetchInfo().exists()); assertTrue("2.9", !fileStore.fetchInfo().exists()); assertTrue("2.10", !otherFileStore.fetchInfo().exists()); clear(projectStore); /* ====================================================================== * Force = TRUE * Delete content = NEVER * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(file, true); ensureExistsInFileSystem(otherFile); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("3.0", project.exists()); assertTrue("3.1", file.exists()); assertTrue("3.2", !otherFile.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("3.3", e); } try { int updateFlags = IResource.FORCE; updateFlags |= IResource.NEVER_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("3.4", e); } assertTrue("3.5", !project.exists()); assertTrue("3.6", !file.exists()); assertTrue("3.7", !otherFile.exists()); assertTrue("3.8", projectStore.fetchInfo().exists()); assertTrue("3.9", fileStore.fetchInfo().exists()); assertTrue("3.10", otherFileStore.fetchInfo().exists()); /* ====================================================================== * Force = FALSE * Delete content = NEVER * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(file, true); ensureExistsInFileSystem(otherFile); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("4.0", project.exists()); assertTrue("4.1", file.exists()); assertTrue("4.2", !otherFile.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("4.3", e); } try { int updateFlags = IResource.NEVER_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("4.4", e); } assertTrue("4.5", !project.exists()); assertTrue("4.6", !file.exists()); assertTrue("4.7", !otherFile.exists()); assertTrue("4.8", projectStore.fetchInfo().exists()); assertTrue("4.9", fileStore.fetchInfo().exists()); assertTrue("4.10", otherFileStore.fetchInfo().exists()); /* ====================================================================== * Force = TRUE * Delete content = DEFAULT * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(new IResource[] {project, file}, true); ensureExistsInFileSystem(otherFile); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("5.0", project.exists()); assertTrue("5.1", file.exists()); assertTrue("5.2", !otherFile.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("5.3", e); } try { int updateFlags = IResource.FORCE; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("5.4", e); } assertTrue("5.5", !project.exists()); assertTrue("5.6", !file.exists()); assertTrue("5.7", !otherFile.exists()); // don't delete the directory itself since the location is user-defined, but delete the contents assertTrue("5.8", projectStore.fetchInfo().exists()); assertTrue("5.9", fileStore.fetchInfo().exists()); assertTrue("5.10", otherFileStore.fetchInfo().exists()); /* ====================================================================== * Force = FALSE * Delete content = DEFAULT * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(file, true); ensureExistsInFileSystem(otherFile); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("6.0", project.exists()); assertTrue("6.1", file.exists()); assertTrue("6.2", !otherFile.exists()); try { project.close(getMonitor()); } catch (CoreException e) { fail("6.3", e); } try { int updateFlags = IResource.NONE; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("6.4", e); } assertTrue("6.5", !project.exists()); // delete was best effort so this file should be gone. assertTrue("6.6", !file.exists()); assertTrue("6.7", !otherFile.exists()); // don't delete the directory itself since its user-defined, but delete the contents assertTrue("6.8", projectStore.fetchInfo().exists()); assertTrue("6.9", fileStore.fetchInfo().exists()); assertTrue("6.10", otherFileStore.fetchInfo().exists()); // cleanup clear(projectStore); } /** * Tests for IProject.delete where: * - project is OPEN * - content area is the DEFAULT * - resources are IN_SYNC with the file system */ public void testProjectDeletionOpenDefaultInSync() { IProject project = getWorkspace().getRoot().getProject("Project"); IFile file = project.getFile("myfile.txt"); IFileStore projectStore, fileStore; /* ====================================================================== * Force = TRUE * Delete content = ALWAYS * =======================================================================*/ ensureExistsInWorkspace(new IResource[] {project, file}, true); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); assertTrue("1.0", project.exists()); assertTrue("1.1", file.exists()); try { int updateFlags = IResource.FORCE; updateFlags |= IResource.ALWAYS_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("1.2", e); } assertTrue("1.3", !project.exists()); assertTrue("1.4", !file.exists()); assertTrue("1.5", !projectStore.fetchInfo().exists()); assertTrue("1.6", !fileStore.fetchInfo().exists()); /* ====================================================================== * Force = FALSE * Delete content = ALWAYS * =======================================================================*/ ensureExistsInWorkspace(new IResource[] {project, file}, true); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); assertTrue("2.0", project.exists()); assertTrue("2.1", file.exists()); try { int updateFlags = IResource.ALWAYS_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("2.2", e); } assertTrue("2.3", !project.exists()); assertTrue("2.4", !file.exists()); assertTrue("2.5", !projectStore.fetchInfo().exists()); assertTrue("2.6", !fileStore.fetchInfo().exists()); /* ====================================================================== * Force = TRUE * Delete content = NEVER * =======================================================================*/ ensureExistsInWorkspace(new IResource[] {project, file}, true); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); assertTrue("3.0", project.exists()); assertTrue("3.1", file.exists()); try { int updateFlags = IResource.FORCE; updateFlags |= IResource.NEVER_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("3.2", e); } assertTrue("3.3", !project.exists()); assertTrue("3.4", !file.exists()); assertTrue("3.5", projectStore.fetchInfo().exists()); assertTrue("3.6", fileStore.fetchInfo().exists()); /* ====================================================================== * Force = FALSE * Delete content = NEVER * =======================================================================*/ ensureExistsInWorkspace(new IResource[] {project, file}, true); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); assertTrue("4.0", project.exists()); assertTrue("4.1", file.exists()); try { int updateFlags = IResource.NEVER_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("4.2", e); } assertTrue("4.3", !project.exists()); assertTrue("4.4", !file.exists()); assertTrue("4.5", projectStore.fetchInfo().exists()); assertTrue("4.6", fileStore.fetchInfo().exists()); /* ====================================================================== * Force = TRUE * Delete content = DEFAULT * =======================================================================*/ ensureExistsInWorkspace(new IResource[] {project, file}, true); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); assertTrue("5.0", project.exists()); assertTrue("5.1", file.exists()); try { int updateFlags = IResource.FORCE; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("5.2", e); } assertTrue("5.3", !project.exists()); assertTrue("5.4", !file.exists()); assertTrue("5.5", !projectStore.fetchInfo().exists()); assertTrue("5.6", !fileStore.fetchInfo().exists()); /* ====================================================================== * Force = FALSE * Delete content = DEFAULT * =======================================================================*/ ensureExistsInWorkspace(new IResource[] {project, file}, true); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); assertTrue("6.0", project.exists()); assertTrue("6.1", file.exists()); try { int updateFlags = IResource.NONE; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("6.2", e); } assertTrue("6.3", !project.exists()); assertTrue("6.4", !file.exists()); assertTrue("6.5", !projectStore.fetchInfo().exists()); assertTrue("6.6", !fileStore.fetchInfo().exists()); } /** * Tests for IProject.delete where: * - project is OPEN * - content area is the DEFAULT * - resources are OUT_OF_SYNC with the file system */ public void testProjectDeletionOpenDefaultOutOfSync() { IProject project = getWorkspace().getRoot().getProject("Project"); IFile file = project.getFile("myfile.txt"); IFileStore projectStore, fileStore; /* ====================================================================== * Force = TRUE * Delete content = ALWAYS * =======================================================================*/ ensureExistsInWorkspace(project, true); ensureExistsInFileSystem(file); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); assertTrue("1.0", project.exists()); assertTrue("1.1", !file.exists()); try { int updateFlags = IResource.FORCE; updateFlags |= IResource.ALWAYS_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("1.2", e); } assertTrue("1.3", !project.exists()); assertTrue("1.4", !file.exists()); assertTrue("1.5", !projectStore.fetchInfo().exists()); assertTrue("1.6", !fileStore.fetchInfo().exists()); /* ====================================================================== * Force = FALSE * Delete content = ALWAYS (always_delete_content over-rides FORCE flag) * =======================================================================*/ ensureExistsInWorkspace(project, true); ensureExistsInFileSystem(file); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); assertTrue("2.0", project.exists()); assertTrue("2.1", !file.exists()); try { int updateFlags = IResource.ALWAYS_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("2.2", e); } assertTrue("2.3", !project.exists()); assertTrue("2.4", !file.exists()); assertTrue("2.5", !projectStore.fetchInfo().exists()); assertTrue("2.6", !fileStore.fetchInfo().exists()); /* ====================================================================== * Force = TRUE * Delete content = NEVER * =======================================================================*/ ensureExistsInWorkspace(project, true); ensureExistsInFileSystem(file); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); assertTrue("3.0", project.exists()); assertTrue("3.1", !file.exists()); try { int updateFlags = IResource.FORCE; updateFlags |= IResource.NEVER_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("3.2", e); } assertTrue("3.3", !project.exists()); assertTrue("3.4", !file.exists()); assertTrue("3.5", projectStore.fetchInfo().exists()); assertTrue("3.6", fileStore.fetchInfo().exists()); // cleanup clear(projectStore); /* ====================================================================== * Force = FALSE * Delete content = NEVER * =======================================================================*/ ensureExistsInWorkspace(project, true); ensureExistsInFileSystem(file); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); assertTrue("4.0", project.exists()); assertTrue("4.1", !file.exists()); try { int updateFlags = IResource.NEVER_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("4.2", e); } assertTrue("4.3", !project.exists()); assertTrue("4.4", !file.exists()); assertTrue("4.5", projectStore.fetchInfo().exists()); assertTrue("4.6", fileStore.fetchInfo().exists()); // cleanup clear(projectStore); /* ====================================================================== * Force = TRUE * Delete content = DEFAULT * =======================================================================*/ ensureExistsInWorkspace(project, true); ensureExistsInFileSystem(file); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); assertTrue("5.0", project.exists()); assertTrue("5.1", !file.exists()); try { int updateFlags = IResource.FORCE; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("5.2", e); } assertTrue("5.3", !project.exists()); assertTrue("5.4", !file.exists()); assertTrue("5.5", !projectStore.fetchInfo().exists()); assertTrue("5.6", !fileStore.fetchInfo().exists()); /* ====================================================================== * Force = FALSE * Delete content = DEFAULT * =======================================================================*/ ensureExistsInWorkspace(project, true); ensureExistsInFileSystem(file); projectStore = ((Resource) project).getStore(); fileStore = ((Resource) file).getStore(); assertTrue("6.0", project.exists()); assertTrue("6.1", !file.exists()); try { int updateFlags = IResource.NONE; project.delete(updateFlags, getMonitor()); fail("6.2"); } catch (CoreException e) { // expected } assertTrue("6.3", project.exists()); assertTrue("6.4", !file.exists()); assertTrue("6.5", projectStore.fetchInfo().exists()); assertTrue("6.6", fileStore.fetchInfo().exists()); } /** * Tests for IProject.delete where: * - project is OPEN * - content area is USER-DEFINED * - resources are IN_SYNC with the file system */ public void testProjectDeletionOpenUserDefinedInSync() { IProject project = getWorkspace().getRoot().getProject("Project"); IFile file = project.getFile("myfile.txt"); IFileStore projectStore, fileStore; IProjectDescription description = getWorkspace().newProjectDescription(project.getName()); /* ====================================================================== * Force = TRUE * Delete content = ALWAYS * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(file, true); fileStore = ((Resource) file).getStore(); assertTrue("1.2", project.exists()); assertTrue("1.3", file.exists()); try { int updateFlags = IResource.FORCE; updateFlags |= IResource.ALWAYS_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("1.4", e); } assertTrue("1.5", !project.exists()); assertTrue("1.6", !file.exists()); // ensure the project directory and files no longer exist assertTrue("1.7", !projectStore.fetchInfo().exists()); assertTrue("1.8", !fileStore.fetchInfo().exists()); /* ====================================================================== * Force = FALSE * Delete content = ALWAYS * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(file, true); fileStore = ((Resource) file).getStore(); assertTrue("2.2", project.exists()); assertTrue("2.3", file.exists()); try { int updateFlags = IResource.ALWAYS_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("2.4", e); } assertTrue("2.5", !project.exists()); assertTrue("2.6", !file.exists()); // ensure the project directory and files no longer exist assertTrue("2.7", !projectStore.fetchInfo().exists()); assertTrue("2.8", !fileStore.fetchInfo().exists()); /* ====================================================================== * Force = TRUE * Delete content = NEVER * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(file, true); fileStore = ((Resource) file).getStore(); assertTrue("3.2", project.exists()); assertTrue("3.3", file.exists()); try { int updateFlags = IResource.FORCE; updateFlags |= IResource.NEVER_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("3.4", e); } assertTrue("3.5", !project.exists()); assertTrue("3.6", !file.exists()); assertTrue("3.7", projectStore.fetchInfo().exists()); assertTrue("3.8", fileStore.fetchInfo().exists()); /* ====================================================================== * Force = FALSE * Delete content = NEVER * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(file, true); fileStore = ((Resource) file).getStore(); assertTrue("4.2", project.exists()); assertTrue("4.3", file.exists()); try { int updateFlags = IResource.NEVER_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("4.4", e); } assertTrue("4.5", !project.exists()); assertTrue("4.6", !file.exists()); assertTrue("4.7", projectStore.fetchInfo().exists()); assertTrue("4.8", fileStore.fetchInfo().exists()); // cleanup clear(projectStore); /* ====================================================================== * Force = TRUE * Delete content = DEFAULT * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(new IResource[] {project, file}, true); fileStore = ((Resource) file).getStore(); assertTrue("5.2", project.exists()); assertTrue("5.3", file.exists()); try { int updateFlags = IResource.FORCE; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("5.4", e); } assertTrue("5.5", !project.exists()); assertTrue("5.6", !file.exists()); // ensure the project directory and files no longer exist assertTrue("5.7", !projectStore.fetchInfo().exists()); assertTrue("5.8", !fileStore.fetchInfo().exists()); /* ====================================================================== * Force = FALSE * Delete content = DEFAULT * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(file, true); fileStore = ((Resource) file).getStore(); assertTrue("6.2", project.exists()); assertTrue("6.3", file.exists()); try { int updateFlags = IResource.NONE; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("6.4", e); } assertTrue("6.5", !project.exists()); assertTrue("6.6", !file.exists()); // ensure the project directory and files no longer exist assertTrue("6.7", !projectStore.fetchInfo().exists()); assertTrue("6.8", !fileStore.fetchInfo().exists()); } /** * Tests for IProject.delete where: * - project is OPEN * - content area is USER-DEFINED * - resources are OUT_OF_SYNC with the file system */ public void testProjectDeletionOpenUserDefinedOutOfSync() { IProject project = getWorkspace().getRoot().getProject("testProjectDeletionOpenUserDefinedOutOfSync"); IFile file = project.getFile("myfile.txt"); IFile otherFile = project.getFile("myotherfile.txt"); IFileStore projectStore, fileStore, otherFileStore; IProjectDescription description = getWorkspace().newProjectDescription(project.getName()); /* ====================================================================== * Force = TRUE * Delete content = ALWAYS * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(file, true); ensureExistsInFileSystem(otherFile); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("1.0", project.exists()); assertTrue("1.1", file.exists()); assertTrue("1.2", !otherFile.exists()); try { int updateFlags = IResource.FORCE; updateFlags |= IResource.ALWAYS_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("1.3", e); } assertTrue("1.4", !project.exists()); assertTrue("1.5", !file.exists()); assertTrue("1.6", !otherFile.exists()); // ensure the project directory and files no longer exist assertTrue("1.7", !projectStore.fetchInfo().exists()); assertTrue("1.8", !fileStore.fetchInfo().exists()); assertTrue("1.9", !otherFileStore.fetchInfo().exists()); clear(projectStore); /* ====================================================================== * Force = FALSE * Delete content = ALWAYS * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(file, true); ensureExistsInFileSystem(otherFile); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("2.0", project.exists()); assertTrue("2.1", file.exists()); assertTrue("2.2", !otherFile.exists()); try { int updateFlags = IResource.ALWAYS_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("2.3", e); } assertTrue("2.4", !project.exists()); assertTrue("2.5", !file.exists()); assertTrue("2.6", !otherFile.exists()); // ensure the project directory and files no longer exist assertTrue("2.7", !projectStore.fetchInfo().exists()); assertTrue("2.8", !fileStore.fetchInfo().exists()); assertTrue("2.9", !otherFileStore.fetchInfo().exists()); clear(projectStore); /* ====================================================================== * Force = TRUE * Delete content = NEVER * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(file, true); ensureExistsInFileSystem(otherFile); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("3.0", project.exists()); assertTrue("3.1", file.exists()); assertTrue("3.2", !otherFile.exists()); try { int updateFlags = IResource.FORCE; updateFlags |= IResource.NEVER_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("3.3", e); } assertTrue("3.4", !project.exists()); assertTrue("3.5", !file.exists()); assertTrue("3.6", !otherFile.exists()); assertTrue("3.7", projectStore.fetchInfo().exists()); assertTrue("3.8", fileStore.fetchInfo().exists()); assertTrue("3.9", otherFileStore.fetchInfo().exists()); // cleanup clear(projectStore); /* ====================================================================== * Force = FALSE * Delete content = NEVER * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(file, true); ensureExistsInFileSystem(otherFile); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("4.0", project.exists()); assertTrue("4.1", file.exists()); assertTrue("4.2", !otherFile.exists()); try { int updateFlags = IResource.NEVER_DELETE_PROJECT_CONTENT; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("4.3", e); } assertTrue("4.4", !project.exists()); assertTrue("4.5", !file.exists()); assertTrue("4.6", !otherFile.exists()); assertTrue("4.7", projectStore.fetchInfo().exists()); assertTrue("4.8", fileStore.fetchInfo().exists()); assertTrue("4.9", otherFileStore.fetchInfo().exists()); /* ====================================================================== * Force = TRUE * Delete content = DEFAULT * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(new IResource[] {project, file}, true); ensureExistsInFileSystem(otherFile); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("5.0", project.exists()); assertTrue("5.1", file.exists()); assertTrue("5.2", !otherFile.exists()); try { int updateFlags = IResource.FORCE; project.delete(updateFlags, getMonitor()); } catch (CoreException e) { fail("5.3", e); } assertTrue("5.4", !project.exists()); assertTrue("5.5", !file.exists()); assertTrue("5.6", !otherFile.exists()); // ensure the project directory and files no longer exist assertTrue("5.7", !projectStore.fetchInfo().exists()); assertTrue("5.8", !fileStore.fetchInfo().exists()); assertTrue("5.9", !otherFileStore.fetchInfo().exists()); /* ====================================================================== * Force = FALSE * Delete content = DEFAULT * =======================================================================*/ projectStore = getTempStore(); description.setLocationURI(projectStore.toURI()); ensureExistsInWorkspace(project, description); ensureExistsInWorkspace(file, true); ensureExistsInFileSystem(otherFile); fileStore = ((Resource) file).getStore(); otherFileStore = ((Resource) otherFile).getStore(); assertTrue("6.0", project.exists()); assertTrue("6.1", file.exists()); assertTrue("6.2", !otherFile.exists()); try { int updateFlags = IResource.NONE; project.delete(updateFlags, getMonitor()); fail("6.3"); } catch (CoreException e) { // expected } assertTrue("6.4", project.exists()); // delete was best effort so this file should be gone. assertTrue("6.5", !file.exists()); assertTrue("6.6", !otherFile.exists()); // don't delete the directory itself since its user-defined, but delete the contents assertTrue("6.7", projectStore.fetchInfo().exists()); assertTrue("6.8", !fileStore.fetchInfo().exists()); assertTrue("6.9", otherFileStore.fetchInfo().exists()); } /** * Tests API on IProjectDescription */ public void testProjectDescriptionDynamic() { IProjectDescription desc = getWorkspace().newProjectDescription("foo"); IProject project1 = getWorkspace().getRoot().getProject("P1"); IProject project2 = getWorkspace().getRoot().getProject("P2"); //dynamic project references assertEquals("2.0", 0, desc.getDynamicReferences().length); IProject[] refs = new IProject[] {project1, project2}; desc.setDynamicReferences(refs); IProject[] result = desc.getDynamicReferences(); assertEquals("2.1", 2, result.length); assertEquals("2.2", project1, result[0]); assertEquals("2.3", project2, result[1]); //destroying the result should not affect the description result[0] = null; result[1] = null; result = desc.getDynamicReferences(); assertEquals("2.4", 2, result.length); assertEquals("2.5", project1, result[0]); assertEquals("2.6", project2, result[1]); //duplicates (should be automatically omitted) refs = new IProject[] {project1, project2, project2, project1, project1}; desc.setDynamicReferences(refs); result = desc.getDynamicReferences(); assertEquals("3.1", 2, result.length); assertEquals("3.2", project1, result[0]); assertEquals("3.3", project2, result[1]); } /** * Tests API on IProjectDescription */ public void testProjectDescriptionReferences() { IProjectDescription desc = getWorkspace().newProjectDescription("foo"); IProject project1 = getWorkspace().getRoot().getProject("P1"); IProject project2 = getWorkspace().getRoot().getProject("P2"); //project name assertEquals("1.0", "foo", desc.getName()); //project references assertEquals("2.0", 0, desc.getReferencedProjects().length); IProject[] refs = new IProject[] {project1, project2}; desc.setReferencedProjects(refs); IProject[] result = desc.getReferencedProjects(); assertEquals("2.1", 2, result.length); assertEquals("2.2", project1, result[0]); assertEquals("2.3", project2, result[1]); //destroying the result should not affect the description result[0] = null; result[1] = null; result = desc.getReferencedProjects(); assertEquals("2.4", 2, result.length); assertEquals("2.5", project1, result[0]); assertEquals("2.6", project2, result[1]); //duplicates (should be automatically omitted) refs = new IProject[] {project1, project2, project2, project1, project1}; desc.setReferencedProjects(refs); result = desc.getReferencedProjects(); assertEquals("3.1", 2, result.length); assertEquals("3.2", project1, result[0]); assertEquals("3.3", project2, result[1]); } public void testProjectLocationValidation() { // validation of the initial project should be ok IProject project1 = getWorkspace().getRoot().getProject("Project1"); IPath root = getWorkspace().getRoot().getLocation().removeLastSegments(1).append("temp"); IPath path = root.append("foo"); assertTrue("1.0", getWorkspace().validateProjectLocation(project1, path).isOK()); // but not if its in the default default area of another project path = Platform.getLocation().append("Project2"); assertTrue("1.1", !getWorkspace().validateProjectLocation(project1, path).isOK()); // Project's own default default area is ok. path = Platform.getLocation().append(project1.getName()); assertTrue("1.2", getWorkspace().validateProjectLocation(project1, path).isOK()); // create the first project with its default default mapping try { project1.create(getMonitor()); } catch (CoreException e) { fail("1.3", e); } // create the second project with a non-default mapping IProjectDescription desc = getWorkspace().newProjectDescription("Project2"); IProject project2 = getWorkspace().getRoot().getProject("Project2"); path = root.append("project2"); assertTrue("2.0", getWorkspace().validateProjectLocation(project2, path).isOK()); desc.setLocation(path); try { project2.create(desc, getMonitor()); } catch (CoreException e) { fail("2.1", e); } // create a third project with the default default location IProject project3 = getWorkspace().getRoot().getProject("Project3"); try { project3.create(getMonitor()); } catch (CoreException e) { fail("3.0", e); } // it should be ok to re-set a current project's location. path = root.append("project3"); assertTrue("3.1", getWorkspace().validateProjectLocation(project3, path).isOK()); // other cases assertTrue("4.0", getWorkspace().validateProjectLocation(project3, root).isOK()); assertTrue("4.1", !getWorkspace().validateProjectLocation(project3, root.append("project2")).isOK()); assertTrue("4.2", getWorkspace().validateProjectLocation(project3, root.append("project2/foo")).isOK()); assertTrue("4.3", getWorkspace().validateProjectLocation(project3, null).isOK()); assertTrue("4.4", getWorkspace().validateProjectLocation(project3, root.append("%20foo")).isOK()); // Validation of a path without a project context. assertTrue("5.0", getWorkspace().validateProjectLocation(null, root).isOK()); assertTrue("5.1", !getWorkspace().validateProjectLocation(null, root.append("project2")).isOK()); assertTrue("5.2", getWorkspace().validateProjectLocation(null, root.append("project2/foo")).isOK()); assertTrue("5.3", getWorkspace().validateProjectLocation(null, root.append("%20foo")).isOK()); try { project1.delete(true, getMonitor()); project2.delete(true, getMonitor()); project3.delete(true, getMonitor()); } catch (CoreException e) { fail("20.1", e); } } /** * Tests creating a project at a location that contains URL escape sequences or spaces. */ public void testProjectLocationWithEscapes() { IProject project1 = getWorkspace().getRoot().getProject("Project1"); IPath root = getWorkspace().getRoot().getLocation().removeLastSegments(1).append("temp"); IPath location = root.append("%20foo bar"); IProjectDescription desc = getWorkspace().newProjectDescription(project1.getName()); desc.setLocation(location); try { project1.create(desc, getMonitor()); project1.open(null); assertTrue("1.0", project1.exists()); assertTrue("1.1", project1.isAccessible()); assertEquals("1.2", location, project1.getLocation()); assertEquals("1.3", location, project1.getRawLocation()); project1.delete(IResource.FORCE, getMonitor()); } catch (CoreException e) { fail("1.99", e); } finally { Workspace.clear(location.toFile()); } } public void testProjectMoveContent() { IProject project = getWorkspace().getRoot().getProject("MyProject"); String[] children = new String[] {"/1/", "/1/2"}; IResource[] resources = buildResources(project, children); ensureExistsInWorkspace(project, true); ensureExistsInWorkspace(resources, true); Set<IPath> pathsToDelete = new HashSet<>(5); try { // move the project content IProjectDescription destination = null; try { destination = project.getDescription(); } catch (CoreException e) { fail("1.0", e); } IPath oldPath = project.getLocation(); IPath newPath = getTempDir().append(Long.toString(System.currentTimeMillis())); pathsToDelete.add(newPath); destination.setLocation(newPath); try { project.move(destination, false, getMonitor()); } catch (CoreException e) { fail("1.1", e); } newPath = project.getLocation(); // ensure that the new description was set correctly and the locations // aren't the same assertTrue("2.0", !oldPath.equals(newPath)); // make sure all the resources still exist. IResourceVisitor visitor = resource -> { assertExistsInWorkspace("2.1." + resource.getFullPath(), resource); return true; }; try { getWorkspace().getRoot().accept(visitor); } catch (CoreException e) { fail("2.2", e); } } finally { for (IPath path : pathsToDelete) { Workspace.clear(path.toFile()); } } } public void testProjectMoveVariations() { IProject project, destProject; IResource[] resources; IResource destination, source, sourceChild, destChild; String[] children; IMarker[] markers = null; String actual = null; QualifiedName qname = new QualifiedName("com.example", "myProperty"); String value = "this is my property value."; // rename a project via the move(IPath) API project = getWorkspace().getRoot().getProject("SourceProject"); source = project; children = new String[] {"/1/", "/1/2"}; resources = buildResources(project, children); ensureExistsInWorkspace(project, true); ensureExistsInWorkspace(resources, true); destination = getWorkspace().getRoot().getProject("DestProject"); assertDoesNotExistInWorkspace("1.0", destination); // set a property to move sourceChild = resources[1]; try { sourceChild.setPersistentProperty(qname, value); } catch (CoreException e) { fail("1.1", e); } // create a marker to be moved try { sourceChild.createMarker(IMarker.PROBLEM); } catch (CoreException e) { fail("1.2", e); } try { source.move(destination.getFullPath(), false, getMonitor()); } catch (CoreException e) { fail("1.3", e); } assertDoesNotExistInWorkspace("1.4", project); assertDoesNotExistInWorkspace("1.5", resources); resources = buildResources((IProject) destination, children); assertExistsInWorkspace("1.6", destination); assertExistsInWorkspace("1.7", resources); // ensure properties are moved too destChild = resources[1]; try { actual = destChild.getPersistentProperty(qname); } catch (CoreException e) { fail("1.6", e); } assertNotNull("1.7", actual); assertEquals("1.8", value, actual); // ensure the marker was moved try { markers = destChild.findMarkers(null, true, IResource.DEPTH_ZERO); } catch (CoreException e) { fail("1.9", e); } assertEquals("1.10", 1, markers.length); // cleanup try { getWorkspace().getRoot().delete(false, getMonitor()); } catch (CoreException e) { fail("1.11", e); } // rename a project via the move(IProjectDescription) API project = getWorkspace().getRoot().getProject("SourceProject"); source = project; children = new String[] {"/1/", "/1/2"}; resources = buildResources(project, children); ensureExistsInWorkspace(project, true); ensureExistsInWorkspace(resources, true); // set a property to move sourceChild = resources[1]; try { sourceChild.setPersistentProperty(qname, value); } catch (CoreException e) { fail("2.1", e); } // create a marker to be moved try { sourceChild.createMarker(IMarker.PROBLEM); } catch (CoreException e) { fail("2.2", e); } destination = getWorkspace().getRoot().getProject("DestProject"); IProjectDescription description = getWorkspace().newProjectDescription(destination.getName()); assertDoesNotExistInWorkspace("2.3", destination); try { ((IProject) source).move(description, false, getMonitor()); } catch (CoreException e) { fail("2.4", e); } assertDoesNotExistInWorkspace("2.5", project); assertDoesNotExistInWorkspace("2.6", resources); resources = buildResources((IProject) destination, children); assertExistsInWorkspace("2.7", destination); assertExistsInWorkspace("2.8", resources); // ensure properties are moved too destChild = resources[1]; try { actual = destChild.getPersistentProperty(qname); } catch (CoreException e) { fail("2.9", e); } assertNotNull("2.10", actual); assertEquals("2.11", value, actual); // ensure the marker was moved try { markers = destChild.findMarkers(null, true, IResource.DEPTH_ZERO); } catch (CoreException e) { fail("2.12", e); } assertEquals("2.13", 1, markers.length); // cleanup try { getWorkspace().getRoot().delete(false, getMonitor()); } catch (CoreException e) { fail("2.14", e); } // create the source project, move it to a be a folder under another project, // This is no longer allowed so ignore the error. project = getWorkspace().getRoot().getProject("SourceProject"); source = project; destProject = getWorkspace().getRoot().getProject("DestProject"); destination = destProject.getFolder("MyFolder"); try { source.move(destination.getFullPath(), true, getMonitor()); fail("3.3"); } catch (CoreException e) { // expected } // create a source folder and move it to be a project. // This is no longer allowed so ignore the error. project = getWorkspace().getRoot().getProject("MySourceProject"); children = new String[] {"/1/", "/1/2"}; source = project.getFolder("1"); resources = buildResources(project, children); destination = getWorkspace().getRoot().getProject("MyDestProject"); try { source.move(destination.getFullPath(), true, getMonitor()); fail("4.3"); } catch (CoreException e) { // expected } } public void testProjectMoveVariations_bug307140() { // Test moving project to its subfolder IProject project = getWorkspace().getRoot().getProject(getUniqueString()); IProjectDescription description; try { project.create(getMonitor()); project.open(getMonitor()); } catch (CoreException e) { fail("1.0", e); } IPath originalLocation = project.getLocation(); IFolder subFolder = project.getFolder(getUniqueString()); try { description = project.getDescription(); description.setLocation(subFolder.getLocation()); project.move(description, true, getMonitor()); fail("2.0"); } catch (CoreException e) { //should be thrown } assertEquals("3.0", originalLocation, project.getLocation()); //cleanup try { getWorkspace().getRoot().delete(false, getMonitor()); } catch (CoreException e) { fail("4.0", e); } // Test moving project to its subfolder - project at non-default location project = getWorkspace().getRoot().getProject(getUniqueString()); //location outside the workspace description = getWorkspace().newProjectDescription(project.getName()); description.setLocation(getRandomLocation()); try { project.create(description, getMonitor()); project.open(getMonitor()); } catch (CoreException e) { fail("5.0", e); } originalLocation = project.getLocation(); subFolder = project.getFolder(getUniqueString()); try { description = project.getDescription(); description.setLocation(subFolder.getLocation()); project.move(description, true, getMonitor()); fail("6.0"); } catch (CoreException e) { //should be thrown } assertEquals("7.0", originalLocation, project.getLocation()); } /** * Tests renaming a project using the move(IProjectDescription) API * where the project contents are stored outside the workspace location. */ public void testRenameExternalProject() { IProject project = getWorkspace().getRoot().getProject("SourceProject"); String[] children = new String[] {"/1/", "/1/2"}; IResource[] resources = buildResources(project, children); // create the project at an external location IProjectDescription description = getWorkspace().newProjectDescription(project.getName()); description.setLocationURI(getTempStore().toURI()); try { project.create(description, getMonitor()); project.open(getMonitor()); } catch (CoreException e) { fail("1.1", e); } ensureExistsInWorkspace(project, true); ensureExistsInWorkspace(resources, true); // set a property to move IResource sourceChild = resources[1]; QualifiedName qname = new QualifiedName("com.example", "myProperty"); String propertyValue = "this is my property value."; String actualPropertyValue = null; try { sourceChild.setPersistentProperty(qname, propertyValue); } catch (CoreException e) { fail("2.1", e); } // create a marker to be moved try { sourceChild.createMarker(IMarker.PROBLEM); } catch (CoreException e) { fail("2.2", e); } IProject destination = getWorkspace().getRoot().getProject("DestProject"); description.setName(destination.getName()); assertDoesNotExistInWorkspace("2.3", destination); try { project.move(description, false, getMonitor()); } catch (CoreException e) { fail("2.4", e); } assertDoesNotExistInWorkspace("2.5", project); assertDoesNotExistInWorkspace("2.6", resources); resources = buildResources(destination, children); assertExistsInWorkspace("2.7", destination); assertExistsInWorkspace("2.8", resources); // ensure properties are moved too IResource destChild = resources[1]; try { actualPropertyValue = destChild.getPersistentProperty(qname); } catch (CoreException e) { fail("2.9", e); } assertNotNull("2.10", actualPropertyValue); assertEquals("2.11", propertyValue, actualPropertyValue); // ensure the marker was moved IMarker[] markers = null; try { markers = destChild.findMarkers(null, true, IResource.DEPTH_ZERO); } catch (CoreException e) { fail("2.12", e); } assertEquals("2.13", 1, markers.length); // cleanup try { getWorkspace().getRoot().delete(false, getMonitor()); } catch (CoreException e) { fail("2.14", e); } } /** * Tests {@link IResource#move(IProjectDescription, int, IProgressMonitor)} * in conjunction with {@link IResource#REPLACE}. */ public void testReplaceLocation() { IProject target = getWorkspace().getRoot().getProject("testReplaceLocation"); ensureExistsInWorkspace(target, true); IFileStore projectStore = getTempStore(); IFileStore childFile = projectStore.getChild("File.txt"); //add some content to the current location IFolder folder = target.getFolder("Folder"); IFile file = folder.getFile("File.txt"); ensureExistsInWorkspace(file, true); //add content to new location IFile newFile = target.getFile(childFile.getName()); createFileInFileSystem(childFile); //replace project location try { IProjectDescription description = target.getDescription(); description.setLocationURI(projectStore.toURI()); target.move(description, IResource.REPLACE, getMonitor()); } catch (CoreException e) { fail("1.99", e); } //existing contents should no longer exist assertTrue("2.0", !folder.exists()); assertTrue("2.1", !file.exists()); assertTrue("2.2", newFile.exists()); //move back to default location try { IProjectDescription description = target.getDescription(); description.setLocationURI(null); target.move(description, IResource.REPLACE, getMonitor()); } catch (CoreException e) { fail("2.99", e); } //old resources should now exist assertTrue("3.0", folder.exists()); assertTrue("3.1", file.exists()); assertTrue("3.2", !newFile.exists()); } public void testSetGetProjectPersistentProperty() { IProject target = getWorkspace().getRoot().getProject("Project"); ensureExistsInWorkspace(target, true); try { setGetPersistentProperty(target); } catch (CoreException e) { fail("1.0", e); } } public void testWorkspaceNotificationClose() { final int[] count = new int[1]; IResourceChangeListener listener = event -> { assertEquals("1.0", IResourceChangeEvent.PRE_CLOSE, event.getType()); count[0]++; assertEquals("1.1", IResource.PROJECT, event.getResource().getType()); assertTrue("1.2", event.getResource().exists()); assertTrue("1.3", ((IProject) event.getResource()).isOpen()); }; getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.PRE_CLOSE); IProject project = getWorkspace().getRoot().getProject("MyProject"); try { project.create(getMonitor()); project.open(getMonitor()); } catch (CoreException e) { fail("1.4", e); } assertTrue("1.5", project.exists()); assertTrue("1.6", project.isOpen()); try { project.close(getMonitor()); } catch (CoreException e) { fail("1.7", e); } assertEquals("1.8", 1, count[0]); assertTrue("1.9", project.exists()); assertTrue("1.10", !project.isOpen()); getWorkspace().removeResourceChangeListener(listener); } public void testWorkspaceNotificationDelete() { final int[] count = new int[1]; IResourceChangeListener listener = event -> { assertEquals("1.0", IResourceChangeEvent.PRE_DELETE, event.getType()); count[0]++; assertEquals("1.1", IResource.PROJECT, event.getResource().getType()); assertTrue("1.2", event.getResource().exists()); }; getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.PRE_DELETE); IProject project = getWorkspace().getRoot().getProject("MyProject"); try { project.create(getMonitor()); project.open(getMonitor()); } catch (CoreException e) { fail("1.3", e); } assertTrue("1.4", project.exists()); try { project.delete(IResource.FORCE, getMonitor()); } catch (CoreException e) { fail("1.5", e); } assertEquals("1.6", 1, count[0]); assertTrue("1.7", !project.exists()); getWorkspace().removeResourceChangeListener(listener); } public void testWorkspaceNotificationMove() { final int[] count = new int[1]; IResourceChangeListener listener = event -> { assertEquals("1.0", IResourceChangeEvent.PRE_DELETE, event.getType()); count[0]++; assertEquals("1.1", IResource.PROJECT, event.getResource().getType()); assertTrue("1.2", event.getResource().exists()); }; getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.PRE_DELETE); IProject project = getWorkspace().getRoot().getProject("MyProject"); try { project.create(getMonitor()); project.open(getMonitor()); } catch (CoreException e) { fail("1.3", e); } assertTrue("1.4", project.exists()); try { project.move(new Path("MyNewProject"), IResource.FORCE, getMonitor()); } catch (CoreException e) { fail("1.5", e); } assertEquals("1.6", 1, count[0]); assertTrue("1.7", !project.exists()); getWorkspace().removeResourceChangeListener(listener); } public void testCreateHiddenProject() { IProject hiddenProject = getWorkspace().getRoot().getProject(getUniqueString()); ensureDoesNotExistInWorkspace(hiddenProject); try { hiddenProject.create(null, IResource.HIDDEN, getMonitor()); } catch (CoreException e) { fail("1.0", e); } assertTrue("2.0", hiddenProject.isHidden()); // try to delete and recreate the project try { hiddenProject.delete(false, getMonitor()); hiddenProject.create(getMonitor()); } catch (CoreException e) { fail("3.0", e); } // it should not be hidden assertTrue("4.0", !hiddenProject.isHidden()); } public void testProjectDeletion_Bug347220() throws CoreException { String projectName = getUniqueString(); IProject project = getWorkspace().getRoot().getProject(projectName); IFolder folder = project.getFolder(getUniqueString()); IFile file = folder.getFile(getUniqueString()); ensureExistsInWorkspace(new IResource[] {project, folder, file}, true); project.open(getMonitor()); // modify the file to create an entry in the history file.setContents(new ByteArrayInputStream(getRandomString().getBytes()), true, true, getMonitor()); // delete the project and check that its metadata is also deleted project.delete(true, getMonitor()); IPath p = ((Workspace) getWorkspace()).getMetaArea().locationFor(project); assertFalse("1.0", p.toFile().exists()); IProject otherProject = getWorkspace().getRoot().getProject(getUniqueString()); ensureExistsInWorkspace(new IResource[] {otherProject}, true); otherProject.open(getMonitor()); // try to rename a project using the name of the deleted project IProjectDescription desc = getWorkspace().newProjectDescription(projectName); try { otherProject.move(desc, true, getMonitor()); } catch (CoreException e) { fail("2.0", e); } } }