blob: 28eb0819fec792637c0342cddecd170e7b614316 [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.internal.localstore;
import java.io.IOException;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.internal.resources.Workspace;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Path;
public class CaseSensitivityTest extends LocalStoreTest {
private boolean isCaseSensitive = Workspace.caseSensitive;
public CaseSensitivityTest() {
super();
}
public CaseSensitivityTest(String name) {
super(name);
}
public static Test suite() {
return new TestSuite(CaseSensitivityTest.class);
}
public void testCreateProjects() {
String projectName = "testProject31415";
// create a project, should be fine
IProject project1 = getWorkspace().getRoot().getProject(projectName);
try {
project1.create(null);
project1.open(null);
} catch (CoreException e) {
fail("1.0", e);
}
// create a second project; should fail because has same name with different casing
IProject project2 = getWorkspace().getRoot().getProject(projectName.toUpperCase());
try {
project2.create(null);
project2.open(null);
assertTrue("2.0", isCaseSensitive);
} catch (CoreException e) {
if (isCaseSensitive) {
fail("2.1", e);
}
}
}
public void testCreateFolders() {
String folderName = "testFolder31415";
IProject aProject = getWorkspace().getRoot().getProjects()[0];
// create a folder, should be fine
IFolder folder1 = aProject.getFolder(folderName);
try {
folder1.create(true, true, null);
} catch (CoreException e) {
fail("1.0", e);
}
// create a second folder; should fail because has same name with different casing
IFolder folder2 = aProject.getFolder(folderName.toUpperCase());
try {
folder2.create(true, true, null);
assertTrue("2.0", isCaseSensitive);
} catch (CoreException e) {
if (isCaseSensitive) {
fail("2.1", e);
}
}
// create a file; should fail because has same name with different casing
IFile file = aProject.getFile(folderName.toUpperCase());
try {
file.create(getRandomContents(), true, null);
fail("3.0");
} catch (CoreException e) {
// expected
}
}
public void testCreateFiles() {
String fileName = "testFile31415";
IProject aProject = getWorkspace().getRoot().getProjects()[0];
// create a file, should be fine
IFile file1 = aProject.getFile(fileName);
try {
file1.create(getRandomContents(), true, null);
} catch (CoreException e) {
fail("1.0", e);
}
// create a second file; should fail because has same name with different casing
IFile file2 = aProject.getFile(fileName.toUpperCase());
try {
file2.create(getRandomContents(), true, null);
assertTrue("2.0", isCaseSensitive);
} catch (CoreException e) {
if (isCaseSensitive) {
fail("2.1", e);
}
}
// create a folder; should fail because has same name with different casing
IFolder folder = aProject.getFolder(fileName.toUpperCase());
try {
folder.create(true, true, null);
fail("3.0");
} catch (CoreException e) {
// expected
}
}
public void testRenameProject() {
String project1name = "project1test31415";
String project2name = "project2test31415";
// create 2 projects with different names
IProject project1 = getWorkspace().getRoot().getProject(project1name);
try {
project1.create(null);
project1.open(null);
} catch (CoreException e) {
fail("1.0", e);
}
IProject project2 = getWorkspace().getRoot().getProject(project2name);
try {
project2.create(null);
project2.open(null);
} catch (CoreException e) {
fail("2.0", e);
}
// try to rename project 1 to the uppercase name of project 2, should fail
try {
project1.move(Path.ROOT.append(project2.getName().toUpperCase()), true, null);
assertTrue("3.0", isCaseSensitive);
} catch (CoreException e) {
if (isCaseSensitive) {
fail("3.99", e);
}
}
}
public void testRenameFolder() {
String folder1name = "folder1test31415";
String folder2name = "folder2test31415";
IProject aProject = getWorkspace().getRoot().getProjects()[0];
// create 2 folders with different names
IFolder folder1 = aProject.getFolder(folder1name);
try {
folder1.create(true, true, null);
} catch (CoreException e) {
fail("1.1", e);
}
IFolder folder2 = aProject.getFolder(folder2name);
try {
folder2.create(true, true, null);
} catch (CoreException e) {
fail("2.2", e);
}
// try to rename folder 1 to the uppercase name of folder 2, should fail
IFolder folder3 = aProject.getFolder(folder2name.toUpperCase());
try {
folder1.move(folder3.getFullPath(), true, null);
assertTrue("3.1", isCaseSensitive);
} catch (CoreException e) {
if (isCaseSensitive) {
fail("3.2", e);
}
}
}
public void testRenameFile() {
String file1name = "file1test31415";
String file2name = "file2test31415";
IProject aProject = getWorkspace().getRoot().getProjects()[0];
// create 2 files with different names
IFile file1 = aProject.getFile(file1name);
try {
file1.create(getRandomContents(), true, null);
} catch (CoreException e) {
fail("1.1", e);
}
IFile file2 = aProject.getFile(file2name);
try {
file2.create(getRandomContents(), true, null);
} catch (CoreException e) {
fail("2.2", e);
}
// try to rename folder 1 to the uppercase name of folder 2, should fail
IFile file3 = aProject.getFile(file2name.toUpperCase());
try {
file1.move(file3.getFullPath(), true, null);
assertTrue("3.1", isCaseSensitive);
} catch (CoreException e) {
if (isCaseSensitive) {
fail("3.2", e);
}
}
}
public void testCopyAndMoveFolder() {
String folderName = "folderTest31415";
IProject sourceProject = getWorkspace().getRoot().getProjects()[0];
IProject destinationProject = getWorkspace().getRoot().getProjects()[1];
// create 2 folders, one in each project, with case-different names
IFolder folder1 = sourceProject.getFolder(folderName);
try {
folder1.create(true, true, null);
} catch (CoreException e) {
fail("1.0", e);
}
IFolder folder2 = destinationProject.getFolder(folderName.toUpperCase());
try {
folder2.create(true, true, null);
} catch (CoreException e) {
fail("1.1", e);
}
// try to copy the folder from source project to destination project.
// should fail due to conflict
try {
folder1.copy(destinationProject.getFullPath().append(folder1.getName()), true, null);
assertTrue("1.2.1", isCaseSensitive);
} catch (CoreException e) {
assertTrue("1.2.2." + e.getMessage(), !isCaseSensitive);
}
// try to move the folder from source project to destination project.
// should fail due to conflict
try {
folder1.move(destinationProject.getFullPath().append(folder1.getName()), true, null);
fail("1.3");
} catch (CoreException e) {
// expected
}
}
public void testCopyAndMoveFile() {
String fileName = "fileTest31415";
IProject sourceProject = getWorkspace().getRoot().getProjects()[0];
IProject destinationProject = getWorkspace().getRoot().getProjects()[1];
// create 2 files, one in each project, with case-different names
IFile file1 = sourceProject.getFile(fileName);
try {
file1.create(getRandomContents(), true, null);
} catch (CoreException e) {
fail("1.0", e);
}
IFile file2 = destinationProject.getFile(fileName.toUpperCase());
try {
file2.create(getRandomContents(), true, null);
} catch (CoreException e) {
fail("1.1", e);
}
// try to copy the file from source project to destination project.
// should fail due to conflict
try {
file1.copy(destinationProject.getFullPath().append(file1.getName()), true, null);
assertTrue("1.2.1", isCaseSensitive);
} catch (CoreException e) {
if (isCaseSensitive) {
fail("1.2.2", e);
}
}
// try to move the file from source project to destination project.
// should fail due to conflict
try {
file1.move(destinationProject.getFullPath().append(file1.getName()), true, null);
fail("1.3");
} catch (CoreException e) {
// expected
}
}
public void testCopyAndMoveFolderOverFile() {
String name = "test31415";
IProject sourceProject = getWorkspace().getRoot().getProjects()[0];
IProject destinationProject = getWorkspace().getRoot().getProjects()[1];
// create 2 resources, one in each project, with case-different names
IFolder folder = sourceProject.getFolder(name);
try {
folder.create(true, true, null);
} catch (CoreException e) {
fail("1.0", e);
}
IFile file = destinationProject.getFile(name.toUpperCase());
try {
file.create(getRandomContents(), true, null);
} catch (CoreException e) {
fail("1.1", e);
}
// try to copy the folder from source project to destination project.
// should fail due to conflict with existing file with case-different name
try {
folder.copy(destinationProject.getFullPath().append(folder.getName()), true, null);
assertTrue("1.2.1", isCaseSensitive);
} catch (CoreException e) {
assertTrue("1.2.2." + e.getMessage(), !isCaseSensitive);
}
// try to move the folder from source project to destination project.
// should fail due to conflict with existing file with case-different name
try {
folder.move(destinationProject.getFullPath().append(folder.getName()), true, null);
fail("1.3");
} catch (CoreException e) {
// expected
}
}
public void testCopyAndMoveFileOverFolder() {
String name = "test31415";
IProject sourceProject = getWorkspace().getRoot().getProjects()[0];
IProject destinationProject = getWorkspace().getRoot().getProjects()[1];
// create 2 resources, one in each project, with case-different names
IFile file = sourceProject.getFile(name);
try {
file.create(getRandomContents(), true, null);
} catch (CoreException e) {
fail("1.0", e);
}
IFolder folder = destinationProject.getFolder(name.toUpperCase());
try {
folder.create(true, true, null);
} catch (CoreException e) {
fail("1.1", e);
}
// try to copy the file from source project to destination project.
// should fail due to conflict with existing folder with case-different name
try {
file.copy(destinationProject.getFullPath().append(file.getName()), true, null);
assertTrue("1.2.1", isCaseSensitive);
} catch (CoreException e) {
assertTrue("1.2.2." + e.getMessage(), !isCaseSensitive);
}
// try to move the file from source project to destination project.
// should fail due to conflict with existing folder with case-different name
try {
file.move(destinationProject.getFullPath().append(file.getName()), true, null);
assertTrue("1.3", false);
} catch (CoreException e) {
// expected
}
}
public void testCopyAndMoveFolderBecomeProject() {
IProject sourceProject = getWorkspace().getRoot().getProjects()[0];
IProject blockingProject = getWorkspace().getRoot().getProjects()[1];
// create a folder in the source project with a case-different name to the second project
IFolder folder = sourceProject.getFolder(blockingProject.getName().toUpperCase());
try {
folder.create(true, true, null);
} catch (CoreException e) {
fail("1.0", e);
}
// try to move the folder from source project to the root, which makes it a project.
// should always fails since we aren't allowed to move a folder to be a project.
try {
folder.move(Path.ROOT.append(folder.getName()), true, null);
fail("1.1");
} catch (CoreException e) {
// expected
}
// try to copy the folder from source project to the root, which makes it a project.
// should always fail since we aren't allowed to copy a folder to be a project
try {
folder.copy(Path.ROOT.append(folder.getName()), true, null);
fail("1.2");
} catch (CoreException e) {
// expected
}
}
public void testCopyAndMoveProjectBecomeFolder() {
IProject sourceProject = getWorkspace().getRoot().getProjects()[0];
IProject destinationProject = getWorkspace().getRoot().getProjects()[1];
// create a file in the destination project with a case-different name of the source project
IFile file = destinationProject.getFile(sourceProject.getName().toUpperCase());
try {
file.create(getRandomContents(), true, null);
} catch (CoreException e) {
fail("1.0", e);
}
// try to move the source project to the destination project, which makes it a folder.
// should fail because we aren't allowed to move a project to be a folder
try {
sourceProject.move(destinationProject.getFullPath().append(sourceProject.getName()), true, null);
fail("1.1");
} catch (CoreException e) {
// expected
}
// try to copy the source project to the destination project, which makes it a folder.
// should fail because we aren't allowed to copy a project to be a folder
try {
sourceProject.copy(destinationProject.getFullPath().append(sourceProject.getName()), true, null);
fail("1.2");
} catch (CoreException e) {
// expected
}
}
public void testRefreshLocalFolder1() {
String name = "test31415";
IProject project = getWorkspace().getRoot().getProjects()[0];
// create a Folder, which should be fine
IFolder folder = project.getFolder(name.toUpperCase());
try {
folder.create(true, true, null);
} catch (CoreException e) {
fail("1.1", e);
}
// get a Folder handle with the same name but different casing
// in order to determine file system location
IFolder herringRouge = project.getFolder(name);
// create a directory with the folder's name
folder.getLocation().toFile().delete();
java.io.File dir = herringRouge.getLocation().toFile();
dir.mkdir();
// do a refresh, which should cause a problem
try {
project.refreshLocal(IResource.DEPTH_INFINITE, null);
} catch (CoreException e) {
fail("1.2", e);
}
assertTrue("2.0", !folder.exists());
assertTrue("2.1", herringRouge.exists());
}
public void testRefreshLocalFile1() {
String name = "test31415";
IProject project = getWorkspace().getRoot().getProjects()[0];
// create a File, which should be fine
IFile file = project.getFile(name.toUpperCase());
try {
file.create(getRandomContents(), true, null);
} catch (CoreException e) {
fail("1.1", e);
}
// get a File handle with the same name but different casing
// in order to determine file system location
IFile herringRouge = project.getFile(name);
// create a file in the local file system with the same name but different casing
ensureDoesNotExistInFileSystem(file);
ensureExistsInFileSystem(herringRouge);
// do a refresh, which should cause a problem
try {
project.refreshLocal(IResource.DEPTH_INFINITE, null);
} catch (CoreException e) {
fail("3.0", e);
}
assertTrue("4.0", !file.exists());
assertTrue("4.1", herringRouge.exists());
}
public void testRefreshLocalFolder2() {
String name = "test31415";
IProject project = getWorkspace().getRoot().getProjects()[0];
// create a Folder, which should be fine
IFolder folder = project.getFolder(name.toUpperCase());
try {
folder.create(true, true, null);
} catch (CoreException e) {
fail("1.1", e);
}
// get a File handle with the same name but different casing
// in order to determine file system location
IFile herringRouge = project.getFile(name);
// create a file in the local file system with the same name but different casing
ensureDoesNotExistInFileSystem(folder);
ensureExistsInFileSystem(herringRouge);
// do a refresh, which should cause a problem
try {
project.refreshLocal(IResource.DEPTH_INFINITE, null);
} catch (CoreException e) {
fail("3.0", e);
}
assertTrue("4.0", !folder.exists());
assertTrue("4.1", herringRouge.exists());
}
public void testRefreshLocalFile2() {
String name = "test31415";
IProject project = getWorkspace().getRoot().getProjects()[0];
// create a File, which should be fine
IFile file = project.getFile(name.toUpperCase());
try {
file.create(getRandomContents(), true, null);
} catch (CoreException e) {
fail("1.1", e);
}
// get a Folder handle with the same name but different casing
// in order to determine file system location
IFolder herringRouge = project.getFolder(name);
// create a directory with the folder's name
java.io.File localFile = file.getLocation().toFile();
localFile.delete();
assertTrue("2.0", !localFile.exists());
java.io.File dir = herringRouge.getLocation().toFile();
dir.mkdir();
assertTrue("2.1", dir.exists());
// do a refresh, which should cause a problem
try {
project.refreshLocal(IResource.DEPTH_INFINITE, null);
} catch (CoreException e) {
fail("3.0", e);
}
assertTrue("4.0", !file.exists());
assertTrue("4.1", herringRouge.exists());
}
public void testDeleteResources() {
String name = "test31415";
// create a project, should be fine
IProject project = getWorkspace().getRoot().getProject(name);
try {
project.create(null);
project.open(null);
} catch (CoreException e) {
fail("1.1", e);
}
// create a Folder, which should be fine
IFolder folder = project.getFolder(name);
try {
folder.create(true, true, null);
} catch (CoreException e) {
fail("2.1", e);
}
// create a File, which should be fine
IFile file = folder.getFile(name);
try {
file.create(getRandomContents(), true, null);
} catch (CoreException e) {
fail("3.1", e);
}
// replace the File's filesystem rep. with a case-different name
java.io.File localFile = file.getLocation().toFile();
localFile.delete();
assertTrue("4.0", !localFile.exists());
localFile = new java.io.File(file.getLocation().removeLastSegments(1).toString(), name.toUpperCase());
try {
localFile.createNewFile();
} catch (IOException e) {
fail("4.1", e);
}
assertTrue("4.2", localFile.exists());
try {
file.delete(true, null);
} catch (CoreException e) {
fail("5.0", e);
}
localFile.delete(); // so that we can change its parent folder
assertTrue("6.0", !localFile.exists());
// replace the Folder's filesystem rep. with a case-different name
java.io.File localFolder = folder.getLocation().toFile();
localFolder.delete();
assertTrue("7.0", !localFolder.exists());
localFolder = new java.io.File(folder.getLocation().removeLastSegments(1).toString(), name.toUpperCase());
localFolder.mkdir();
assertTrue("7.1", localFolder.exists());
try {
folder.delete(true, null);
} catch (CoreException e) {
fail("8.0", e);
}
}
}