/*******************************************************************************
* Copyright (c) 2008 Wind River Systems, Inc. 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:
* Markus Schorn - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.core.internal.tests;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.eclipse.cdt.internal.core.resources.ResourceLookup;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
public class ResourceLookupTests extends TestCase {
public static Test suite() {
return new TestSuite(ResourceLookupTests.class);
}
private IProject fProject;
@Override
protected void setUp() {
final IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
fProject= root.getProject("reslookup");
}
@Override
protected void tearDown() throws Exception {
fProject.delete(true, new NullProgressMonitor());
}
protected IFolder createFolder(IProject project, String filename) throws CoreException {
IFolder folder= project.getFolder(filename);
folder.create(true, false, new NullProgressMonitor());
return folder;
}
protected IFile createFile(IProject project, String filename) throws CoreException {
IFile file= project.getFile(filename);
file.create(new InputStream() {
@Override
public int read() throws IOException {
return -1;
}}, true, new NullProgressMonitor());
return file;
}
public void testNameLookup() throws CoreException {
IProject[] prjs= new IProject[]{fProject};
fProject.create(new NullProgressMonitor());
fProject.open(new NullProgressMonitor());
createFolder(fProject, "folder1");
createFolder(fProject, "folder2");
createFile(fProject, "abc.h");
createFile(fProject, "folder1/abc.h");
createFile(fProject, "folder2/abC.h");
IFile[] files= ResourceLookup.findFilesByName(new Path("abc.h"), prjs, false);
assertEquals(2, files.length);
files= ResourceLookup.findFilesByName(new Path("bla/../abc.h"), prjs, false);
assertEquals(2, files.length);
files= ResourceLookup.findFilesByName(new Path("../abc.h"), prjs, false);
assertEquals(2, files.length);
files= ResourceLookup.findFilesByName(new Path("../../abc.h"), prjs, false);
assertEquals(2, files.length);
files= ResourceLookup.findFilesByName(new Path("abc.h"), prjs, true);
assertEquals(3, files.length);
files= ResourceLookup.findFilesByName(new Path("folder1/abc.h"), prjs, false);
assertEquals(1, files.length);
files= ResourceLookup.findFilesByName(new Path("folder1/abC.h"), prjs, false);
assertEquals(0, files.length);
files= ResourceLookup.findFilesByName(new Path("fOlder1/abc.h"), prjs, false);
assertEquals(0, files.length);
files= ResourceLookup.findFilesByName(new Path("folder1/abc.h"), prjs, true);
assertEquals(1, files.length);
files= ResourceLookup.findFilesByName(new Path("folder1/abC.h"), prjs, true);
assertEquals(1, files.length);
files= ResourceLookup.findFilesByName(new Path("fOlder1/abc.h"), prjs, true);
assertEquals(1, files.length);
files= ResourceLookup.findFilesByName(new Path("bla/../abc.h"), prjs, true);
assertEquals(3, files.length);
}
public void testResourceDelta() throws CoreException {
IProject[] prjs= new IProject[]{fProject};
fProject.create(new NullProgressMonitor());
fProject.open(new NullProgressMonitor());
IFile[] files= ResourceLookup.findFilesByName(new Path("abc.h"), prjs, true);
assertEquals(0, files.length);
IFolder f1= createFolder(fProject, "folder1");
createFolder(fProject, "folder2");
IFile f2= createFile(fProject, "abc.h");
files= ResourceLookup.findFilesByName(new Path("abc.h"), prjs, true);
assertEquals(1, files.length);
createFile(fProject, "folder1/abc.h");
files= ResourceLookup.findFilesByName(new Path("abc.h"), prjs, true);
assertEquals(2, files.length);
createFile(fProject, "folder2/abC.h");
files= ResourceLookup.findFilesByName(new Path("abc.h"), prjs, true);
assertEquals(3, files.length);
f1.delete(true, new NullProgressMonitor());
files= ResourceLookup.findFilesByName(new Path("abc.h"), prjs, true);
assertEquals(2, files.length);
f2.delete(true, new NullProgressMonitor());
files= ResourceLookup.findFilesByName(new Path("abc.h"), prjs, true);
assertEquals(1, files.length);
}
public void testDeref() throws CoreException {
IProject[] prjs= new IProject[]{fProject};
fProject.create(new NullProgressMonitor());
fProject.open(new NullProgressMonitor());
createFolder(fProject, "folder1");
createFolder(fProject, "folder2");
createFile(fProject, "abc.h");
IFile[] files= ResourceLookup.findFilesByName(new Path("abc.h"), prjs, true);
assertEquals(1, files.length);
ResourceLookup.unrefNodeMap();
createFile(fProject, "folder1/abc.h");
createFile(fProject, "folder2/abC.h");
files= ResourceLookup.findFilesByName(new Path("abc.h"), prjs, true);
assertEquals(3, files.length);
ResourceLookup.unrefNodeMap();
files= ResourceLookup.findFilesByName(new Path("abc.h"), prjs, true);
assertEquals(3, files.length);
}
public void testCollected() throws CoreException {
IProject[] prjs= new IProject[]{fProject};
fProject.create(new NullProgressMonitor());
fProject.open(new NullProgressMonitor());
createFolder(fProject, "folder1");
createFolder(fProject, "folder2");
createFile(fProject, "abc.h");
IFile[] files= ResourceLookup.findFilesByName(new Path("abc.h"), prjs, true);
assertEquals(1, files.length);
ResourceLookup.simulateNodeMapCollection();
createFile(fProject, "folder1/abc.h");
createFile(fProject, "folder2/abC.h");
files= ResourceLookup.findFilesByName(new Path("abc.h"), prjs, true);
assertEquals(3, files.length);
ResourceLookup.simulateNodeMapCollection();
files= ResourceLookup.findFilesByName(new Path("abc.h"), prjs, true);
assertEquals(3, files.length);
}
public void testFindFilesByLocation() throws Exception {
fProject.create(new NullProgressMonitor());
fProject.open(new NullProgressMonitor());
createFolder(fProject, "folder1");
createFolder(fProject, "folder2");
IFile file= createFile(fProject, "abc.h");
createFile(fProject, "folder1/abc.h");
createFile(fProject, "folder2/abC.h");
URI uri= file.getLocationURI();
IPath path= file.getLocation();
IFile[] files= ResourceLookup.findFilesForLocationURI(uri);
assertEquals(1, files.length);
files= ResourceLookup.findFilesForLocation(path);
assertEquals(1, files.length);
if (new File("a").equals(new File("A"))) {
URI upperCase= new URI(uri.getScheme(), uri.getSchemeSpecificPart().toUpperCase(), uri.getFragment());
IPath upperCasePath= new Path(path.toString().toUpperCase());
files= ResourceLookup.findFilesForLocationURI(upperCase);
assertEquals(1, files.length);
files= ResourceLookup.findFilesForLocation(upperCasePath);
assertEquals(1, files.length);
}
}
public void testLinkedResourceFiles() throws Exception {
IProject[] prjs= new IProject[]{fProject};
fProject.create(new NullProgressMonitor());
fProject.open(new NullProgressMonitor());
createFolder(fProject, "folder1");
File f= File.createTempFile("extern", "h");
IPath location= Path.fromOSString(f.getAbsolutePath());
IFile file1= fProject.getFile("linked1");
IFile file2= fProject.getFile("linked2.h");
file1.createLink(location, 0, new NullProgressMonitor());
file2.createLink(location, 0, new NullProgressMonitor());
IFile[] files = ResourceLookup.findFilesForLocation(location);
assertEquals(2, files.length);
files= ResourceLookup.findFilesByName(new Path(location.lastSegment()), prjs, false);
assertEquals(2, files.length);
files= ResourceLookup.findFilesByName(new Path("linked2.h"), prjs, false);
assertEquals(0, files.length);
}
}