/******************************************************************************* * Copyright (c) 2000, 2012 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.core.tests.resources.regression; import junit.framework.Test; import junit.framework.TestSuite; import org.eclipse.core.filesystem.EFS; import org.eclipse.core.filesystem.IFileStore; import org.eclipse.core.resources.*; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.Platform; import org.eclipse.core.tests.resources.ResourceTest; public class IFolderTest extends ResourceTest { /** * Constructor for IFolderTest. */ public IFolderTest() { super(); } /** * Constructor for IFolderTest. * @param name */ public IFolderTest(String name) { super(name); } public static Test suite() { return new TestSuite(IFolderTest.class); } /** * Bug requests that if a failed folder creation occurs on Linux that we check * the immediate parent to see if it is read-only so we can return a better * error code and message to the user. */ public void testBug25662() { // We need to know whether or not we can unset the read-only flag // in order to perform this test. if (!isReadOnlySupported()) { return; } // Only run this test on Linux for now since Windows lets you create // a file within a read-only folder. if (!Platform.getOS().equals(Platform.OS_LINUX)) { return; } IProject project = getWorkspace().getRoot().getProject("MyProject"); IFolder parentFolder = project.getFolder("parentFolder"); ensureExistsInWorkspace(new IResource[] {project, parentFolder}, true); IFolder folder = parentFolder.getFolder("folder"); try { parentFolder.setReadOnly(true); assertTrue("0.0", parentFolder.isReadOnly()); try { folder.create(true, true, getMonitor()); fail("0.1"); } catch (CoreException e) { assertEquals("0.2", IResourceStatus.PARENT_READ_ONLY, e.getStatus().getCode()); } } finally { parentFolder.setReadOnly(false); } } /** * Bug 11510 [resources] Non-local folders do not become local when directory is created. */ public void testBug11510() { IWorkspaceRoot root = getWorkspace().getRoot(); IProject project = root.getProject("TestProject"); IFolder folder = project.getFolder("fold1"); IFile subFile = folder.getFile("f1"); IFile file = project.getFile("f2"); ensureExistsInWorkspace(project, true); ensureExistsInWorkspace(new IResource[] {folder, file, subFile}, false); assertTrue("1.0", !folder.isLocal(IResource.DEPTH_ZERO)); assertTrue("1.1", !file.isLocal(IResource.DEPTH_ZERO)); assertTrue("1.1", !subFile.isLocal(IResource.DEPTH_ZERO)); // now create the resources in the local file system and refresh ensureExistsInFileSystem(file); try { project.refreshLocal(IResource.DEPTH_INFINITE, getMonitor()); } catch (CoreException e) { fail("2.0", e); } assertTrue("2.1", file.isLocal(IResource.DEPTH_ZERO)); assertTrue("2.2", !folder.isLocal(IResource.DEPTH_ZERO)); assertTrue("2.3", !subFile.isLocal(IResource.DEPTH_ZERO)); folder.getLocation().toFile().mkdir(); try { project.refreshLocal(IResource.DEPTH_INFINITE, getMonitor()); } catch (CoreException e) { fail("3.0", e); } assertTrue("3.1", folder.isLocal(IResource.DEPTH_ZERO)); assertTrue("3.2", file.isLocal(IResource.DEPTH_ZERO)); assertTrue("3.3", !subFile.isLocal(IResource.DEPTH_ZERO)); ensureExistsInFileSystem(subFile); try { project.refreshLocal(IResource.DEPTH_INFINITE, getMonitor()); } catch (CoreException e) { fail("4.0", e); } assertTrue("4.1", subFile.isLocal(IResource.DEPTH_ZERO)); assertTrue("4.2", folder.isLocal(IResource.DEPTH_ZERO)); assertTrue("4.3", file.isLocal(IResource.DEPTH_ZERO)); } /** * Bug 514831: "shallow" mkdir fails if the directory already exists */ public void testBug514831() throws CoreException { IWorkspaceRoot root = getWorkspace().getRoot(); IProject project = root.getProject("TestProject"); IFolder folder = project.getFolder("folder"); ensureExistsInWorkspace(project, true); ensureExistsInWorkspace(new IResource[] {folder}, true); IFileStore dir = EFS.getLocalFileSystem().fromLocalFile(folder.getLocation().toFile()); assertTrue(dir.fetchInfo().exists()); dir.mkdir(EFS.NONE, null); dir.mkdir(EFS.SHALLOW, null); // should not throw an exception } }