blob: 97e39fb3cb1eb0c06c692e3ef6aca033db32eac2 [file] [log] [blame]
/*******************************************************************************
* 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.resources.*;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.tests.resources.ResourceTest;
public class IFileTest extends ResourceTest {
private boolean DISABLED = true;
/**
* Constructor for IFileTest.
*/
public IFileTest() {
super();
}
/**
* Constructor for IFileTest.
* @param name
*/
public IFileTest(String name) {
super(name);
}
public static Test suite() {
return new TestSuite(IFileTest.class);
}
/**
* Bug states that the error code in the CoreException which is thrown when
* you try to create a file in a read-only folder on Linux should be
* ERROR_WRITE.
*/
public void testBug25658() {
// This test is no longer valid since the error code is dependent on whether
// or not the parent folder is marked as read-only. We need to write a different
// test to make the file.create fail.
if (DISABLED ) {
return;
}
// We need to know whether or not we can unset the read-only flag
// in order to perform this test.
if (!isReadOnlySupported()) {
return;
}
// Don't test this on Windows
if (isWindows()) {
return;
}
IProject project = getWorkspace().getRoot().getProject("MyProject");
IFolder folder = project.getFolder("folder");
ensureExistsInWorkspace(new IResource[] {project, folder}, true);
IFile file = folder.getFile("file.txt");
try {
folder.setReadOnly(true);
assertTrue("0.0", folder.isReadOnly());
try {
file.create(getRandomContents(), true, getMonitor());
fail("0.1");
} catch (CoreException e) {
assertEquals("0.2", IResourceStatus.FAILED_WRITE_LOCAL, e.getStatus().getCode());
}
} finally {
folder.setReadOnly(false);
}
}
/**
* Bug requests that if a failed file write 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 folder = project.getFolder("folder");
ensureExistsInWorkspace(new IResource[] {project, folder}, true);
IFile file = folder.getFile("file.txt");
try {
folder.setReadOnly(true);
assertTrue("0.0", folder.isReadOnly());
try {
file.create(getRandomContents(), true, getMonitor());
fail("0.1");
} catch (CoreException e) {
assertEquals("0.2", IResourceStatus.PARENT_READ_ONLY, e.getStatus().getCode());
}
} finally {
folder.setReadOnly(false);
}
}
/**
* Tests setting local timestamp of project description file
*/
public void testBug43936() {
IProject project = getWorkspace().getRoot().getProject("MyProject");
IFile descFile = project.getFile(IProjectDescription.DESCRIPTION_FILE_NAME);
ensureExistsInWorkspace(project, true);
assertTrue("1.0", descFile.exists());
IProjectDescription desc = null;
try {
desc = project.getDescription();
} catch (CoreException e) {
fail("1.99", e);
}
//change the local file timestamp
long newTime = System.currentTimeMillis() + 10000;
try {
descFile.setLocalTimeStamp(newTime);
} catch (CoreException e1) {
fail("2.99", e1);
}
assertTrue("2.0", descFile.isSynchronized(IResource.DEPTH_ZERO));
try {
//try setting the description -- shouldn't fail
project.setDescription(desc, getMonitor());
} catch (CoreException e2) {
fail("3.99", e2);
}
}
}