/** 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);
    }
  }