/** Tries to delete a folder containing an irremovable file. Works only for Linux with natives. */ public void testDeleteFolderLinux() { if (!(Platform.getOS().equals(Platform.OS_LINUX))) return; IProject project = null; File projectRoot = null; IFolder subFolder = null; try { IWorkspace workspace = getWorkspace(); project = workspace.getRoot().getProject(getUniqueString()); IFolder folder = project.getFolder("a_folder"); subFolder = folder.getFolder("sub-folder"); IFile file1 = subFolder.getFile("file1.txt"); IFile file3 = folder.getFile("file3.txt"); ensureExistsInWorkspace(new IResource[] {file1, file3}, true); projectRoot = project.getLocation().toFile(); // marks sub-folder as read-only so its files cannot be removed on Linux setReadOnly(subFolder, true); try { folder.delete(IResource.FORCE, getMonitor()); fail("2.0 - should have failed"); } catch (CoreException ce) { // success - a file couldn't be removed } assertTrue("2.2", file1.exists()); assertTrue("2.3", subFolder.exists()); assertTrue("2.4", !file3.exists()); assertTrue("2.5", folder.exists()); assertTrue("2.7", folder.isSynchronized(IResource.DEPTH_INFINITE)); setReadOnly(subFolder, false); assertTrue("3.5", project.isSynchronized(IResource.DEPTH_INFINITE)); try { folder.delete(IResource.FORCE, getMonitor()); } catch (CoreException ce) { ce.printStackTrace(); fail("4.0", ce); } assertTrue("5.1", !file1.exists()); assertTrue("5.2", !subFolder.exists()); assertTrue("5.3", !folder.exists()); assertTrue("5.4", file1.isSynchronized(IResource.DEPTH_INFINITE)); assertTrue("5.5", folder.isSynchronized(IResource.DEPTH_INFINITE)); } finally { if (subFolder != null && subFolder.exists()) setReadOnly(subFolder, false); if (projectRoot != null) ensureDoesNotExistInFileSystem(projectRoot); } }