blob: 13c92cad580fff40458da68d0a72821fdc21b231 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2015 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:
* Serge Beauchamp (Freescale Semiconductor) - initial API and implementation
*******************************************************************************/
package org.eclipse.core.tests.resources;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.internal.resources.*;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
/**
* Tests the following API methods:
* {@link IContainer#addFilter(String, int, String, int, IProgressMonitor)}
* {@link IContainer#removeFilter(String, int, String, int, IProgressMonitor)}
* {@link IContainer#getFilters()}
*
* This test tests resource filters with projects, folders, linked resource folders,
* and moving those resources to different parents.
*/
public class FilteredResourceTest extends ResourceTest {
private static final String REGEX_FILTER_PROVIDER = "org.eclipse.core.resources.regexFilterMatcher";
protected String childName = "File.txt";
protected IProject closedProject;
protected IFile existingFileInExistingProject;
protected IFolder existingFolderInExistingFolder;
protected IFolder existingFolderInExistingProject;
protected IProject existingProject;
protected IPath localFile;
protected IPath localFolder;
protected IFile nonExistingFileInExistingFolder;
protected IFile nonExistingFileInExistingProject;
protected IFile nonExistingFileInOtherExistingProject;
protected IFolder nonExistingFolderInExistingFolder;
protected IFolder nonExistingFolderInExistingProject;
protected IFolder nonExistingFolderInOtherExistingProject;
protected IFolder nonExistingFolder2InOtherExistingProject;
protected IProject otherExistingProject;
public static Test suite() {
return new TestSuite(FilteredResourceTest.class);
}
public FilteredResourceTest() {
super();
}
public FilteredResourceTest(String name) {
super(name);
}
protected void doCleanup() throws Exception {
ensureExistsInWorkspace(new IResource[] {existingProject, otherExistingProject, closedProject, existingFolderInExistingProject, existingFolderInExistingFolder, existingFileInExistingProject}, true);
closedProject.close(getMonitor());
ensureDoesNotExistInWorkspace(new IResource[] {nonExistingFolderInExistingProject, nonExistingFolderInExistingFolder, nonExistingFolderInOtherExistingProject, nonExistingFolder2InOtherExistingProject, nonExistingFileInExistingProject, nonExistingFileInOtherExistingProject, nonExistingFileInExistingFolder});
resolve(localFolder).toFile().mkdirs();
createFileInFileSystem(resolve(localFile), getRandomContents());
}
/**
* Maybe overridden in subclasses that use path variables.
*/
protected IPath resolve(IPath path) {
return path;
}
/**
* Maybe overridden in subclasses that use path variables.
*/
protected URI resolve(URI uri) {
return uri;
}
@Override
protected void setUp() throws Exception {
super.setUp();
existingProject = getWorkspace().getRoot().getProject("ExistingProject");
otherExistingProject = getWorkspace().getRoot().getProject("OtherExistingProject");
closedProject = getWorkspace().getRoot().getProject("ClosedProject");
existingFolderInExistingProject = existingProject.getFolder("existingFolderInExistingProject");
existingFolderInExistingFolder = existingFolderInExistingProject.getFolder("existingFolderInExistingFolder");
nonExistingFolderInExistingProject = existingProject.getFolder("nonExistingFolderInExistingProject");
nonExistingFolderInOtherExistingProject = otherExistingProject.getFolder("nonExistingFolderInOtherExistingProject");
nonExistingFolder2InOtherExistingProject = otherExistingProject.getFolder("nonExistingFolder2InOtherExistingProject");
nonExistingFolderInExistingFolder = existingFolderInExistingProject.getFolder("nonExistingFolderInExistingFolder");
existingFileInExistingProject = existingProject.getFile("existingFileInExistingProject");
nonExistingFileInExistingProject = existingProject.getFile("nonExistingFileInExistingProject");
nonExistingFileInOtherExistingProject = otherExistingProject.getFile("nonExistingFileInOtherExistingProject");
nonExistingFileInExistingFolder = existingFolderInExistingProject.getFile("nonExistingFileInExistingFolder");
localFolder = getRandomLocation();
localFile = localFolder.append(childName);
doCleanup();
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
Workspace.clear(resolve(localFolder).toFile());
}
/**
* Tests the creation of a simple filter on a folder.
*/
public void testCreateFilterOnFolder() {
try {
FileInfoMatcherDescription matcherDescription = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, "foo");
existingFolderInExistingProject.createFilter(IResourceFilterDescription.INCLUDE_ONLY | IResourceFilterDescription.FILES | IResourceFilterDescription.FOLDERS, matcherDescription, 0, getMonitor());
} catch (CoreException e) {
fail("1.0");
}
IFile foo = existingFolderInExistingProject.getFile("foo");
IFile bar = existingFolderInExistingProject.getFile("bar");
ensureExistsInWorkspace(new IResource[] {foo, bar}, true);
try {
existingProject.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("1.1", e);
}
//close and reopen the project
try {
existingProject.close(getMonitor());
existingProject.open(getMonitor());
} catch (CoreException e) {
fail("1.2", e);
}
IResourceFilterDescription[] filters = null;
try {
filters = existingFolderInExistingProject.getFilters();
} catch (CoreException e) {
fail("1.3", e);
}
assertEquals("1.4", filters.length, 1);
assertEquals("1.5", filters[0].getFileInfoMatcherDescription().getId(), REGEX_FILTER_PROVIDER);
assertEquals("1.6", filters[0].getFileInfoMatcherDescription().getArguments(), "foo");
assertEquals("1.7", filters[0].getType(), IResourceFilterDescription.INCLUDE_ONLY | IResourceFilterDescription.FILES | IResourceFilterDescription.FOLDERS);
assertEquals("1.8", filters[0].getResource(), existingFolderInExistingProject);
IResource members[] = null;
try {
members = existingFolderInExistingProject.members();
} catch (CoreException e) {
fail("1.9", e);
}
assertEquals("2.0", members.length, 1);
assertEquals("2.1", members[0].getType(), IResource.FILE);
assertEquals("2.2", members[0].getName(), "foo");
IWorkspace workspace = existingProject.getWorkspace();
assertTrue("2.3", !workspace.validateFiltered(bar).isOK());
assertTrue("2.4", workspace.validateFiltered(foo).isOK());
}
/**
* Tests the creation of a simple filter on a project.
*/
public void testCreateFilterOnProject() {
try {
FileInfoMatcherDescription matcherDescription = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, "foo");
existingProject.createFilter(IResourceFilterDescription.INCLUDE_ONLY | IResourceFilterDescription.FOLDERS, matcherDescription, 0, getMonitor());
} catch (CoreException e) {
fail("1.0");
}
IFolder foo = existingProject.getFolder("foo");
IFolder bar = existingProject.getFolder("bar");
ensureExistsInWorkspace(new IResource[] {foo, bar}, true);
try {
existingProject.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("1.1", e);
}
//close and reopen the project
try {
existingProject.close(getMonitor());
existingProject.open(getMonitor());
} catch (CoreException e) {
fail("1.2", e);
}
IResourceFilterDescription[] filters = null;
try {
filters = existingProject.getFilters();
} catch (CoreException e) {
fail("1.3", e);
}
assertEquals("1.4", filters.length, 1);
assertEquals("1.5", filters[0].getFileInfoMatcherDescription().getId(), REGEX_FILTER_PROVIDER);
assertEquals("1.6", filters[0].getFileInfoMatcherDescription().getArguments(), "foo");
assertEquals("1.7", filters[0].getType(), IResourceFilterDescription.INCLUDE_ONLY | IResourceFilterDescription.FOLDERS);
assertEquals("1.8", filters[0].getResource(), existingProject);
IResource members[] = null;
try {
members = existingProject.members();
} catch (CoreException e) {
fail("1.9", e);
}
assertEquals("2.0", members.length, 3);
for (IResource member : members) {
if (member.getType() == IResource.FOLDER) {
assertEquals("2.1", member.getType(), IResource.FOLDER);
assertEquals("2.2", member.getName(), "foo");
}
}
IWorkspace workspace = existingProject.getWorkspace();
assertTrue("2.1", !workspace.validateFiltered(bar).isOK());
assertTrue("2.2", workspace.validateFiltered(foo).isOK());
}
/**
* Tests the creation of a simple filter on a linked folder.
*/
public void testCreateFilterOnLinkedFolder() {
IPath location = getRandomLocation();
IFolder folder = nonExistingFolderInExistingProject;
//try to create without the flag (should fail)
try {
folder.createLink(location, IResource.NONE, getMonitor());
fail("1.0");
} catch (CoreException e) {
//should fail
}
try {
FileInfoMatcherDescription matcherDescription = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, "foo");
folder.createFilter(IResourceFilterDescription.INCLUDE_ONLY | IResourceFilterDescription.FILES, matcherDescription, 0, getMonitor());
} catch (CoreException e) {
fail("1.0");
}
IFile foo = folder.getFile("foo");
IFile bar = folder.getFile("bar");
ensureExistsInWorkspace(new IResource[] {foo, bar}, true);
try {
existingProject.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("1.1", e);
}
//close and reopen the project
try {
existingProject.close(getMonitor());
existingProject.open(getMonitor());
} catch (CoreException e) {
fail("1.2", e);
}
IResourceFilterDescription[] filters = null;
try {
filters = folder.getFilters();
} catch (CoreException e) {
fail("1.3", e);
}
assertEquals("1.4", filters.length, 1);
assertEquals("1.5", filters[0].getFileInfoMatcherDescription().getId(), REGEX_FILTER_PROVIDER);
assertEquals("1.6", filters[0].getFileInfoMatcherDescription().getArguments(), "foo");
assertEquals("1.7", filters[0].getType(), IResourceFilterDescription.INCLUDE_ONLY | IResourceFilterDescription.FILES);
assertEquals("1.8", filters[0].getResource(), folder);
IResource members[] = null;
try {
members = folder.members();
} catch (CoreException e) {
fail("1.9", e);
}
assertEquals("2.0", members.length, 1);
assertEquals("2.1", members[0].getType(), IResource.FILE);
assertEquals("2.2", members[0].getName(), "foo");
IWorkspace workspace = existingProject.getWorkspace();
assertTrue("2.1", !workspace.validateFiltered(bar).isOK());
assertTrue("2.2", workspace.validateFiltered(foo).isOK());
}
/**
* Tests the creation of two different filters on a linked folder and the original.
* Regression for bug 267201
*/
public void testCreateFilterOnLinkedFolderAndTarget() {
IPath location = existingFolderInExistingFolder.getLocation();
IFolder folder = nonExistingFolderInExistingProject;
try {
folder.createLink(location, IResource.NONE, getMonitor());
} catch (CoreException e) {
fail("0.5");
}
FileInfoMatcherDescription matcherDescription1 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, ".*\\.cpp");
FileInfoMatcherDescription matcherDescription2 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, ".*\\.h");
IResourceFilterDescription filterDescription2 = null;
try {
folder.createFilter(IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FILES, matcherDescription1, 0, getMonitor());
filterDescription2 = existingFolderInExistingFolder.createFilter(IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FILES, matcherDescription2, 0, getMonitor());
} catch (CoreException e) {
fail("1.0");
}
IResource members[] = null;
try {
members = folder.members();
} catch (CoreException e) {
fail("1.1", e);
}
assertEquals("1.2", members.length, 0);
try {
members = existingFolderInExistingFolder.members();
} catch (CoreException e) {
fail("1.3", e);
}
assertEquals("1.4", members.length, 0);
IFile newFile = existingFolderInExistingFolder.getFile("foo.cpp");
try {
assertTrue("1.5", newFile.getLocation().toFile().createNewFile());
} catch (IOException e1) {
fail("1.6", e1);
}
try {
existingFolderInExistingFolder.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("1.7", e);
}
try {
members = existingFolderInExistingFolder.members();
} catch (CoreException e) {
fail("1.8", e);
}
assertEquals("1.9", members.length, 1);
assertEquals("2.0", members[0].getType(), IResource.FILE);
assertEquals("2.1", members[0].getName(), "foo.cpp");
try {
members = folder.members();
} catch (CoreException e) {
fail("2.2", e);
}
assertEquals("2.3", members.length, 0);
newFile = existingFolderInExistingFolder.getFile("foo.h");
try {
assertTrue("2.5", newFile.getLocation().toFile().createNewFile());
} catch (IOException e1) {
fail("2.6", e1);
}
try {
existingFolderInExistingFolder.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("2.7", e);
}
try {
members = existingFolderInExistingFolder.members();
} catch (CoreException e) {
fail("2.8", e);
}
assertEquals("2.9", members.length, 1);
assertEquals("3.0", members[0].getType(), IResource.FILE);
assertEquals("3.1", members[0].getName(), "foo.cpp");
try {
members = folder.members();
} catch (CoreException e) {
fail("3.2", e);
}
assertEquals("3.3", members.length, 0);
try {
folder.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("3.4", e);
}
try {
members = existingFolderInExistingFolder.members();
} catch (CoreException e) {
fail("3.8", e);
}
assertEquals("3.9", members.length, 1);
assertEquals("4.0", members[0].getType(), IResource.FILE);
assertEquals("4.1", members[0].getName(), "foo.cpp");
try {
members = folder.members();
} catch (CoreException e) {
fail("4.2", e);
}
assertEquals("4.3", members.length, 1);
assertEquals("4.4", members[0].getType(), IResource.FILE);
assertEquals("4.5", members[0].getName(), "foo.h");
// create a file that shows under both
newFile = existingFolderInExistingFolder.getFile("foo.text");
try {
assertTrue("5.5", newFile.getLocation().toFile().createNewFile());
} catch (IOException e1) {
fail("5.6", e1);
}
try {
existingFolderInExistingFolder.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("5.7", e);
}
try {
members = existingFolderInExistingFolder.members();
} catch (CoreException e) {
fail("5.8", e);
}
assertEquals("5.9", members.length, 2);
assertEquals("6.0", members[0].getType(), IResource.FILE);
assertEquals("6.1", members[0].getName(), "foo.cpp");
assertEquals("6.2", members[1].getType(), IResource.FILE);
assertEquals("6.3", members[1].getName(), "foo.text");
try {
members = folder.members();
} catch (CoreException e) {
fail("6.4", e);
}
assertEquals("6.5", members.length, 2);
assertEquals("6.6", members[0].getType(), IResource.FILE);
assertEquals("6.7", members[0].getName(), "foo.h");
assertEquals("6.8", members[1].getType(), IResource.FILE);
assertEquals("6.9", members[1].getName(), "foo.text");
// delete the common file
try {
newFile.delete(true, getMonitor());
} catch (CoreException e) {
fail("7.0", e);
}
try {
members = existingFolderInExistingFolder.members();
} catch (CoreException e) {
fail("7.1", e);
}
assertEquals("7.2", members.length, 1);
assertEquals("7.3", members[0].getType(), IResource.FILE);
assertEquals("7.4", members[0].getName(), "foo.cpp");
try {
members = folder.members();
} catch (CoreException e) {
fail("7.5", e);
}
assertEquals("7.6", members.length, 1);
assertEquals("7.7", members[0].getType(), IResource.FILE);
assertEquals("7.8", members[0].getName(), "foo.h");
// remove the first filter
try {
filterDescription2.delete(0, getMonitor());
} catch (CoreException e) {
fail("8.0");
}
try {
members = existingFolderInExistingFolder.members();
} catch (CoreException e) {
fail("8.1", e);
}
assertEquals("8.2", members.length, 2);
assertEquals("8.3", members[0].getType(), IResource.FILE);
assertEquals("8.4", members[0].getName(), "foo.cpp");
assertEquals("8.4.1", members[1].getType(), IResource.FILE);
assertEquals("8.4.2", members[1].getName(), "foo.h");
try {
members = folder.members();
} catch (CoreException e) {
fail("8.5", e);
}
assertEquals("8.6", members.length, 1);
assertEquals("8.7", members[0].getType(), IResource.FILE);
assertEquals("8.8", members[0].getName(), "foo.h");
// add the filter again
try {
existingFolderInExistingFolder.createFilter(IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FILES, matcherDescription2, 0, getMonitor());
} catch (CoreException e) {
fail("9.0");
}
try {
members = existingFolderInExistingFolder.members();
} catch (CoreException e) {
fail("9.1", e);
}
assertEquals("9.2", members.length, 1);
assertEquals("9.3", members[0].getType(), IResource.FILE);
assertEquals("9.4", members[0].getName(), "foo.cpp");
try {
members = folder.members();
} catch (CoreException e) {
fail("9.5", e);
}
assertEquals("9.6", members.length, 1);
assertEquals("9.7", members[0].getType(), IResource.FILE);
assertEquals("9.8", members[0].getName(), "foo.h");
}
public void testIResource_isFiltered() {
IFolder folder = existingFolderInExistingProject.getFolder("virtual_folder.txt");
IFile file = existingFolderInExistingProject.getFile("linked_file.txt");
try {
folder.create(IResource.VIRTUAL, true, getMonitor());
} catch (CoreException e1) {
fail("0.79", e1);
}
try {
file.createLink(existingFileInExistingProject.getLocation(), 0, getMonitor());
} catch (CoreException e1) {
fail("0.89", e1);
}
FileInfoMatcherDescription matcherDescription = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, ".*\\.txt");
try {
existingFolderInExistingProject.createFilter(IResourceFilterDescription.EXCLUDE_ALL, matcherDescription, 0, getMonitor());
} catch (CoreException e) {
fail("0.99", e);
}
IWorkspace workspace = existingProject.getWorkspace();
assertTrue("1.0", workspace.validateFiltered(folder).isOK());
assertTrue("1.1", workspace.validateFiltered(file).isOK());
}
/**
* Tests the creation of two different filters on a linked folder and the original.
* Check that creating and modifying files in the workspace doesn't make them appear in
* excluded locations.
* Regression for bug 267201
*/
public void testCreateFilterOnLinkedFolderAndTarget2() {
final IPath location = existingFolderInExistingFolder.getLocation();
final IFolder folder = nonExistingFolderInExistingProject;
try {
folder.createLink(location, IResource.NONE, getMonitor());
} catch (CoreException e) {
fail("0.5");
}
FileInfoMatcherDescription matcherDescription1 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, ".*\\.h");
FileInfoMatcherDescription matcherDescription2 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, ".*\\.cpp");
try {
folder.createFilter(IResourceFilterDescription.INCLUDE_ONLY | IResourceFilterDescription.FILES, matcherDescription1, 0, getMonitor());
existingFolderInExistingFolder.createFilter(IResourceFilterDescription.INCLUDE_ONLY | IResourceFilterDescription.FILES, matcherDescription2, 0, getMonitor());
} catch (CoreException e) {
fail("1.0");
}
IResource members[] = null;
// Create 'foo.cpp' in existingFolder...
IFile newFile = existingFolderInExistingFolder.getFile("foo.cpp");
try {
create(newFile, true);
members = existingFolderInExistingFolder.members();
} catch (CoreException e1) {
fail("1.6", e1);
}
assertEquals("1.9", 1, members.length);
assertEquals("2.0", IResource.FILE, members[0].getType());
assertEquals("2.1", "foo.cpp", members[0].getName());
// Create a 'foo.h' under folder
newFile = folder.getFile("foo.h");
try {
create(newFile, true);
} catch (CoreException e1) {
fail("2.6", e1);
}
// Check that foo.h has appeared in 'folder'
try {
// // Refreshing restores sanity (hides the .cpp files)...
// folder.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
members = folder.members();
} catch (CoreException e) {
fail("4.2", e);
}
assertEquals("4.3", 1, members.length);
assertEquals("4.4", IResource.FILE, members[0].getType());
assertEquals("4.5", "foo.h", members[0].getName());
// Check it hasn't appeared in existingFolder...
try {
// // Refresh restores sanity...
// existingFolderInExistingFolder.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
members = existingFolderInExistingFolder.members();
} catch (CoreException e) {
fail("2.8", e);
}
assertEquals("2.9", 1, members.length);
assertEquals("3.0", IResource.FILE, members[0].getType());
assertEquals("3.1", "foo.cpp", members[0].getName());
// And refreshing doesn't change things
try {
existingFolderInExistingFolder.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
members = existingFolderInExistingFolder.members();
} catch (CoreException e) {
fail("2.8", e);
}
assertEquals("2.9", 1, members.length);
assertEquals("3.0", IResource.FILE, members[0].getType());
assertEquals("3.1", "foo.cpp", members[0].getName());
// Check modifying foo.h doesn't make it appear
try {
modifyInWorkspace(folder.getFile("foo.h"));
members = existingFolderInExistingFolder.members();
} catch (CoreException e) {
fail("2.8", e);
}
assertEquals("2.9", 1, members.length);
assertEquals("3.0", IResource.FILE, members[0].getType());
assertEquals("3.1", "foo.cpp", members[0].getName());
}
/**
* Tests that filtering a child directory which is linked from
* else where works
*
* Main tree:
* existingProject/existingFolderInExsitingProject/existingFolderInExistingFolder
* Links:
* otherExistingProject/nonExistingFolderInOtherExistingProject => existingProject/existingFolderInExsitingProject (filter * of type folder)
* otherExistingProject/nonExistingFolder2InOtherExistingProject => existingProject/existingFolderInExsitingProject/existingFolderInExistingFolder
* This is a regression test for Bug 268518.
*/
public void testCreateFilterOnLinkedFolderWithAlias() {
final IProject project = otherExistingProject;
final IPath parentLoc = existingFolderInExistingProject.getLocation();
final IPath childLoc = existingFolderInExistingFolder.getLocation();
final IFolder folder1 = nonExistingFolderInOtherExistingProject;
final IFolder folder2 = nonExistingFolder2InOtherExistingProject;
assertTrue("0.1", !folder1.exists());
assertTrue("0.2", !folder2.exists());
assertTrue("0.3", parentLoc.isPrefixOf(childLoc));
FileInfoMatcherDescription matcherDescription1 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, ".*");
IResourceFilterDescription filterDescription1 = null;
try {
// Filter out all children from existingFolderInExistingProject
filterDescription1 = folder1.createFilter(IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FOLDERS, matcherDescription1, 0, getMonitor());
} catch (CoreException e) {
fail("0.5", e);
}
try {
folder1.createLink(parentLoc, IResource.NONE, getMonitor());
folder2.createLink(childLoc, IResource.NONE, getMonitor());
existingProject.close(getMonitor());
} catch (CoreException e) {
fail("1.0", e);
}
try {
assertTrue("12.0", folder1.exists());
assertTrue("12.2", folder2.exists());
assertTrue("12.4", folder1.isLinked());
assertTrue("12.6", folder2.isLinked());
assertTrue("12.8", folder1.getLocation().equals(parentLoc));
assertTrue("12.10", folder2.getLocation().equals(childLoc));
assertTrue("12.12", folder1.members().length == 0);
assertTrue("12.14", folder2.members().length == 0);
} catch (CoreException e) {
fail("12.20", e);
}
// Need to unset M_USED on the project's resource info, or
// reconcileLinks will never be called...
Workspace workspace = ((Workspace) ResourcesPlugin.getWorkspace());
try {
try {
workspace.prepareOperation(project, getMonitor());
workspace.beginOperation(true);
ResourceInfo ri = ((Resource) project).getResourceInfo(false, true);
ri.clear(ICoreConstants.M_USED);
} finally {
workspace.endOperation(project, true);
}
} catch (CoreException e) {
fail("2.90", e);
}
try {
project.close(getMonitor());
assertTrue("3.1", !project.isOpen());
// Create a file under existingFolderInExistingFolder
createFileInFileSystem(childLoc.append("foo"));
// Reopen the project
project.open(IResource.NONE, getMonitor());
} catch (CoreException e) {
fail("3.0", e);
}
try {
assertTrue("22.0", folder1.exists());
assertTrue("22.2", folder2.exists());
assertTrue("22.4", folder1.isLinked());
assertTrue("22.6", folder2.isLinked());
assertTrue("22.8", folder1.getLocation().equals(parentLoc));
assertTrue("22.10", folder2.getLocation().equals(childLoc));
assertTrue("22.12", folder1.members().length == 0);
assertTrue("22.12", folder2.members().length == 1);
} catch (CoreException e) {
fail("22.20", e);
}
// Swap the links around, loading may be order independent...
try {
folder2.createLink(parentLoc, IResource.REPLACE, getMonitor());
folder1.createLink(childLoc, IResource.REPLACE | IResource.FORCE, getMonitor());
// Filter out all children from existingFolderInExistingProject
folder2.createFilter(IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FOLDERS, matcherDescription1, 0, getMonitor());
filterDescription1.delete(0, getMonitor());
assertTrue(folder1.getFilters().length == 0);
} catch (CoreException e) {
fail("3.0", e);
}
// Need to unset M_USED on the project's resource info, or
// reconcileLinks will never be called...
try {
try {
workspace.prepareOperation(project, getMonitor());
workspace.beginOperation(true);
ResourceInfo ri = ((Resource) project).getResourceInfo(false, true);
ri.clear(ICoreConstants.M_USED);
} finally {
workspace.endOperation(project, true);
}
} catch (CoreException e) {
fail("4.5", e);
}
try {
project.close(getMonitor());
assertTrue("3.1", !project.isOpen());
project.open(IResource.NONE, getMonitor());
} catch (CoreException e) {
fail("5.0", e);
}
try {
assertTrue("32.0", folder1.exists());
assertTrue("32.2", folder2.exists());
assertTrue("32.4", folder1.isLinked());
assertTrue("32.6", folder2.isLinked());
assertTrue("32.8", folder2.getLocation().equals(parentLoc));
assertTrue("32.10", folder1.getLocation().equals(childLoc));
assertTrue("32.12", folder1.members().length == 1);
assertTrue("32.12", folder2.members().length == 0);
} catch (CoreException e) {
fail("32.20", e);
}
}
/**
* Tests that filtering a child directory which is linked from
* else where works
*
* Main tree:
* existingProject/existingFolderInExsitingProject/existingFolderInExistingFolder
* Links:
* otherExistingProject/nonExistingFolderInOtherExistingProject => existingProject/existingFolderInExsitingProject (filter * of type folder)
* otherExistingProject/nonExistingFolder2InOtherExistingProject => existingProject/existingFolderInExsitingProject/existingFolderInExistingFolder
* This is a regression test for Bug 268518.
*/
public void testCreateFilterOnLinkedFolderWithAlias2() {
final IProject project = otherExistingProject;
final IPath parentLoc = existingFolderInExistingProject.getLocation();
final IPath childLoc = existingFolderInExistingFolder.getLocation();
final IFolder folder1 = nonExistingFolderInOtherExistingProject;
final IFolder folder2 = nonExistingFolder2InOtherExistingProject;
assertTrue("0.1", !folder1.exists());
assertTrue("0.2", !folder2.exists());
assertTrue("0.3", parentLoc.isPrefixOf(childLoc));
FileInfoMatcherDescription matcherDescription1 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, ".*");
IResourceFilterDescription filterDescription1 = null;
try {
// Filter out all children from existingFolderInExistingProject
filterDescription1 = folder1.createFilter(IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FOLDERS, matcherDescription1, 0, getMonitor());
} catch (CoreException e) {
fail("0.5", e);
}
try {
folder1.createLink(parentLoc, IResource.NONE, getMonitor());
folder2.createLink(childLoc, IResource.NONE, getMonitor());
existingProject.close(getMonitor());
} catch (CoreException e) {
fail("1.0", e);
}
try {
assertTrue("12.0", folder1.exists());
assertTrue("12.2", folder2.exists());
assertTrue("12.4", folder1.isLinked());
assertTrue("12.6", folder2.isLinked());
assertTrue("12.8", folder1.getLocation().equals(parentLoc));
assertTrue("12.10", folder2.getLocation().equals(childLoc));
assertTrue("12.12", folder1.members().length == 0);
assertTrue("12.14", folder2.members().length == 0);
} catch (CoreException e) {
fail("12.20", e);
}
// Need to unset M_USED on the project's resource info, or
// reconcileLinks will never be called...
Workspace workspace = ((Workspace) ResourcesPlugin.getWorkspace());
try {
try {
workspace.prepareOperation(project, getMonitor());
workspace.beginOperation(true);
ResourceInfo ri = ((Resource) project).getResourceInfo(false, true);
ri.clear(ICoreConstants.M_USED);
} finally {
workspace.endOperation(project, true);
}
} catch (CoreException e) {
fail("2.90", e);
}
try {
// Create a file under existingFolderInExistingFolder
create(folder2.getFile("foo"), true);
} catch (CoreException e) {
fail("3.0", e);
}
try {
assertTrue("22.0", folder1.exists());
assertTrue("22.2", folder2.exists());
assertTrue("22.4", folder1.isLinked());
assertTrue("22.6", folder2.isLinked());
assertTrue("22.8", folder1.getLocation().equals(parentLoc));
assertTrue("22.10", folder2.getLocation().equals(childLoc));
assertTrue("22.12", folder1.members().length == 0);
assertTrue("22.12", folder2.members().length == 1);
} catch (CoreException e) {
fail("22.20", e);
}
// Swap the links around, loading may be order independent...
try {
folder2.createLink(parentLoc, IResource.REPLACE | IResource.NONE, getMonitor());
folder1.createLink(childLoc, IResource.REPLACE | IResource.FORCE, getMonitor());
// Filter out all children from existingFolderInExistingProject
folder2.createFilter(IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FOLDERS, matcherDescription1, 0, getMonitor());
filterDescription1.delete(0, getMonitor());
assertTrue(folder1.getFilters().length == 0);
} catch (CoreException e) {
fail("4.0", e);
}
try {
assertTrue("32.0", folder1.exists());
assertTrue("32.2", folder2.exists());
assertTrue("32.4", folder1.isLinked());
assertTrue("32.6", folder2.isLinked());
assertTrue("32.8", folder2.getLocation().equals(parentLoc));
assertTrue("32.10", folder1.getLocation().equals(childLoc));
assertTrue("32.12", folder1.members().length == 1);
assertTrue("32.12", folder2.members().length == 0);
} catch (CoreException e) {
fail("32.20", e);
}
}
/**
* Tests the creation of a simple filter on a linked folder before the resource creation.
*/
public void testCreateFilterOnLinkedFolderBeforeCreation() {
IPath location = existingFolderInExistingFolder.getLocation();
IFolder folder = nonExistingFolderInExistingProject;
assertTrue("0.1", !folder.exists());
FileInfoMatcherDescription matcherDescription1 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, "foo");
try {
folder.createFilter(IResourceFilterDescription.INCLUDE_ONLY | IResourceFilterDescription.FILES, matcherDescription1, 0, getMonitor());
} catch (CoreException e) {
fail("0.5");
}
try {
folder.createLink(location, IResource.NONE, getMonitor());
} catch (CoreException e) {
fail("1.0");
}
IFile foo = folder.getFile("foo");
IFile bar = folder.getFile("bar");
ensureExistsInWorkspace(new IResource[] {foo, bar}, true);
try {
existingProject.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("1.1", e);
}
//close and reopen the project
try {
existingProject.close(getMonitor());
existingProject.open(getMonitor());
} catch (CoreException e) {
fail("1.2", e);
}
IResourceFilterDescription[] filters = null;
try {
filters = folder.getFilters();
} catch (CoreException e) {
fail("1.3", e);
}
assertEquals("1.4", filters.length, 1);
assertEquals("1.5", filters[0].getFileInfoMatcherDescription().getId(), REGEX_FILTER_PROVIDER);
assertEquals("1.6", filters[0].getFileInfoMatcherDescription().getArguments(), "foo");
assertEquals("1.7", filters[0].getType(), IResourceFilterDescription.INCLUDE_ONLY | IResourceFilterDescription.FILES);
assertEquals("1.8", filters[0].getResource(), folder);
IResource members[] = null;
try {
members = folder.members();
} catch (CoreException e) {
fail("1.9", e);
}
assertEquals("2.0", members.length, 1);
assertEquals("2.1", members[0].getType(), IResource.FILE);
assertEquals("2.2", members[0].getName(), "foo");
}
/**
* Tests the creation and removal of a simple filter on a folder.
*/
public void testCreateAndRemoveFilterOnFolder() {
FileInfoMatcherDescription matcherDescription1 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, "foo");
IResourceFilterDescription filterDescription = null;
try {
filterDescription = existingFolderInExistingFolder.createFilter(IResourceFilterDescription.INCLUDE_ONLY | IResourceFilterDescription.FILES | IResourceFilterDescription.FOLDERS, matcherDescription1, 0, getMonitor());
} catch (CoreException e) {
fail("1.0");
}
IFile foo = existingFolderInExistingFolder.getFile("foo");
IFile bar = existingFolderInExistingFolder.getFile("bar");
ensureExistsInWorkspace(new IResource[] {foo, bar}, true);
try {
existingProject.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("1.1", e);
}
//close and reopen the project
try {
existingProject.close(getMonitor());
existingProject.open(getMonitor());
} catch (CoreException e) {
fail("1.2", e);
}
try {
filterDescription.delete(0, getMonitor());
} catch (CoreException e) {
fail("1.3", e);
}
//close and reopen the project
try {
existingProject.close(getMonitor());
existingProject.open(getMonitor());
} catch (CoreException e) {
fail("1.4", e);
}
IResourceFilterDescription[] filters = null;
try {
filters = existingFolderInExistingFolder.getFilters();
} catch (CoreException e) {
fail("1.5", e);
}
assertEquals("1.6", filters.length, 0);
IResource members[] = null;
try {
members = existingFolderInExistingFolder.members();
} catch (CoreException e) {
fail("1.7", e);
}
assertEquals("1.8", members.length, 2);
assertEquals("1.9", members[0].getType(), IResource.FILE);
assertEquals("2.0", members[0].getName(), "bar");
assertEquals("2.1", members[1].getType(), IResource.FILE);
assertEquals("2.2", members[1].getName(), "foo");
}
/**
* Tests the creation and removal of a simple filter on a folder.
*/
public void testCreateAndRemoveFilterOnFolderWithoutClosingProject() {
FileInfoMatcherDescription matcherDescription1 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, "foo");
IResourceFilterDescription filterDescription = null;
try {
filterDescription = existingFolderInExistingFolder.createFilter(IResourceFilterDescription.INCLUDE_ONLY | IResourceFilterDescription.FILES | IResourceFilterDescription.FOLDERS, matcherDescription1, 0, getMonitor());
} catch (CoreException e) {
fail("1.0");
}
IFile foo = existingFolderInExistingFolder.getFile("foo");
IFile bar = existingFolderInExistingFolder.getFile("bar");
ensureExistsInWorkspace(new IResource[] {foo, bar}, true);
try {
existingProject.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("1.1", e);
}
try {
filterDescription.delete(0, getMonitor());
} catch (CoreException e) {
fail("1.3", e);
}
IResourceFilterDescription[] filters = null;
try {
filters = existingFolderInExistingFolder.getFilters();
} catch (CoreException e) {
fail("1.5", e);
}
assertEquals("1.6", filters.length, 0);
IResource members[] = null;
try {
members = existingFolderInExistingFolder.members();
} catch (CoreException e) {
fail("1.7", e);
}
assertEquals("1.8", members.length, 2);
assertEquals("1.9", members[0].getType(), IResource.FILE);
assertEquals("2.0", members[0].getName(), "bar");
assertEquals("2.1", members[1].getType(), IResource.FILE);
assertEquals("2.2", members[1].getName(), "foo");
}
/**
* Tests the creation of the include-only filter.
*/
public void testIncludeOnlyFilter() {
FileInfoMatcherDescription matcherDescription1 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, ".*\\.c");
try {
existingFolderInExistingProject.createFilter(IResourceFilterDescription.INCLUDE_ONLY | IResourceFilterDescription.FILES | IResourceFilterDescription.FOLDERS, matcherDescription1, 0, getMonitor());
} catch (CoreException e) {
fail("1.0");
}
IFile foo = existingFolderInExistingProject.getFile("foo.c");
IFile file = existingFolderInExistingProject.getFile("file.c");
IFile bar = existingFolderInExistingProject.getFile("bar.h");
ensureExistsInWorkspace(new IResource[] {foo, bar, file}, true);
try {
existingProject.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("1.1", e);
}
IResource members[] = null;
try {
members = existingFolderInExistingProject.members();
} catch (CoreException e) {
fail("1.9", e);
}
assertEquals("2.0", members.length, 2);
assertEquals("2.1", members[0].getType(), IResource.FILE);
assertEquals("2.2", members[0].getName(), "file.c");
assertEquals("2.3", members[1].getType(), IResource.FILE);
assertEquals("2.4", members[1].getName(), "foo.c");
FileInfoMatcherDescription matcherDescription2 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, ".*\\.c");
try {
existingFolderInExistingProject.createFilter(IResourceFilterDescription.INCLUDE_ONLY | IResourceFilterDescription.FILES | IResourceFilterDescription.FOLDERS, matcherDescription2, 0, getMonitor());
} catch (CoreException e) {
fail("3.0");
}
try {
existingProject.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("3.1", e);
}
members = null;
try {
members = existingFolderInExistingProject.members();
} catch (CoreException e) {
fail("3.2", e);
}
assertEquals("3.3", members.length, 2);
assertEquals("3.4", members[0].getType(), IResource.FILE);
assertEquals("3.5", members[0].getName(), "file.c");
assertEquals("3.6", members[1].getType(), IResource.FILE);
assertEquals("3.7", members[1].getName(), "foo.c");
}
/**
* Tests the creation of the exclude-all filter.
*/
public void testExcludeAllFilter() {
FileInfoMatcherDescription matcherDescription1 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, ".*\\.c");
try {
existingFolderInExistingFolder.createFilter(IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FILES | IResourceFilterDescription.FOLDERS, matcherDescription1, 0, getMonitor());
} catch (CoreException e) {
fail("1.0");
}
IFile foo = existingFolderInExistingFolder.getFile("foo.c");
IFile file = existingFolderInExistingFolder.getFile("file.c");
IFile fooh = existingFolderInExistingFolder.getFile("foo.h");
IFile bar = existingFolderInExistingFolder.getFile("bar.h");
ensureExistsInWorkspace(new IResource[] {foo, bar, file, fooh}, true);
try {
existingProject.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("1.1", e);
}
IResource members[] = null;
try {
members = existingFolderInExistingFolder.members();
} catch (CoreException e) {
fail("1.9", e);
}
assertEquals("2.0", members.length, 2);
assertEquals("2.1", members[0].getType(), IResource.FILE);
assertEquals("2.2", members[0].getName(), "bar.h");
assertEquals("2.3", members[1].getType(), IResource.FILE);
assertEquals("2.4", members[1].getName(), "foo.h");
FileInfoMatcherDescription matcherDescription2 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, "foo.*");
try {
existingFolderInExistingFolder.createFilter(IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FILES | IResourceFilterDescription.FOLDERS, matcherDescription2, 0, getMonitor());
} catch (CoreException e) {
fail("3.0");
}
try {
existingProject.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("3.1", e);
}
members = null;
try {
members = existingFolderInExistingFolder.members();
} catch (CoreException e) {
fail("3.2", e);
}
assertEquals("3.3", members.length, 1);
assertEquals("3.4", members[0].getType(), IResource.FILE);
assertEquals("3.5", members[0].getName(), "bar.h");
}
/**
* Tests the creation of the mixed include-only exclude-all filter.
*/
public void testMixedFilter() {
FileInfoMatcherDescription matcherDescription1 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, ".*\\.c");
FileInfoMatcherDescription matcherDescription2 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, "foo.*");
try {
existingFolderInExistingProject.createFilter(IResourceFilterDescription.INCLUDE_ONLY | IResourceFilterDescription.FILES | IResourceFilterDescription.FOLDERS, matcherDescription1, 0, getMonitor());
existingFolderInExistingProject.createFilter(IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FILES | IResourceFilterDescription.FOLDERS, matcherDescription2, 0, getMonitor());
} catch (CoreException e) {
fail("1.0");
}
IFile foo = existingFolderInExistingProject.getFile("foo.c");
IFile file = existingFolderInExistingProject.getFile("file.c");
IFile fooh = existingFolderInExistingProject.getFile("foo.h");
IFile bar = existingFolderInExistingProject.getFile("bar.h");
ensureExistsInWorkspace(new IResource[] {foo, bar, file, fooh}, true);
try {
existingProject.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("1.1", e);
}
IResource members[] = null;
try {
members = existingFolderInExistingProject.members();
} catch (CoreException e) {
fail("1.9", e);
}
assertEquals("2.0", members.length, 1);
assertEquals("2.1", members[0].getType(), IResource.FILE);
assertEquals("2.2", members[0].getName(), "file.c");
}
/**
* Tests the creation of inheritable filter.
*/
public void testInheritedFilter() {
FileInfoMatcherDescription matcherDescription1 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, ".*\\.c");
FileInfoMatcherDescription matcherDescription2 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, "foo.*");
try {
existingProject.createFilter(IResourceFilterDescription.INCLUDE_ONLY | IResourceFilterDescription.INHERITABLE | IResourceFilterDescription.FILES, matcherDescription1, 0, getMonitor());
existingFolderInExistingFolder.createFilter(IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FILES | IResourceFilterDescription.FOLDERS, matcherDescription2, 0, getMonitor());
} catch (CoreException e) {
fail("1.0");
}
IFile foo = existingFolderInExistingFolder.getFile("foo.c");
IFile file = existingFolderInExistingFolder.getFile("file.c");
IFile fooh = existingFolderInExistingFolder.getFile("foo.h");
IFile bar = existingFolderInExistingFolder.getFile("bar.h");
ensureExistsInWorkspace(new IResource[] {foo, bar, file, fooh}, true);
try {
existingProject.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("1.1", e);
}
IResource members[] = null;
try {
members = existingFolderInExistingFolder.members();
} catch (CoreException e) {
fail("1.9", e);
}
assertEquals("2.0", members.length, 1);
assertEquals("2.1", members[0].getType(), IResource.FILE);
assertEquals("2.2", members[0].getName(), "file.c");
}
/**
* Tests the creation of FOLDER filter.
*/
public void testFolderOnlyFilters() {
FileInfoMatcherDescription matcherDescription1 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, "foo.*");
try {
existingFolderInExistingFolder.createFilter(IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FOLDERS, matcherDescription1, 0, getMonitor());
} catch (CoreException e) {
fail("1.0");
}
IFile foo = existingFolderInExistingFolder.getFile("foo.c");
IFolder food = existingFolderInExistingFolder.getFolder("foo.d");
ensureExistsInWorkspace(new IResource[] {foo, food}, true);
try {
existingProject.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("1.1", e);
}
IResource members[] = null;
try {
members = existingFolderInExistingFolder.members();
} catch (CoreException e) {
fail("1.9", e);
}
assertEquals("2.0", members.length, 1);
assertEquals("2.1", members[0].getType(), IResource.FILE);
assertEquals("2.2", members[0].getName(), "foo.c");
}
/**
* Tests the creation of FILE filter.
*/
public void testFileOnlyFilters() {
FileInfoMatcherDescription matcherDescription1 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, "foo.*");
try {
existingFolderInExistingFolder.createFilter(IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FILES, matcherDescription1, 0, getMonitor());
} catch (CoreException e) {
fail("1.0");
}
IFile foo = existingFolderInExistingFolder.getFile("foo.c");
IFolder food = existingFolderInExistingFolder.getFolder("foo.d");
ensureExistsInWorkspace(new IResource[] {foo, food}, true);
try {
existingProject.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("1.1", e);
}
IResource members[] = null;
try {
members = existingFolderInExistingFolder.members();
} catch (CoreException e) {
fail("1.9", e);
}
assertEquals("2.0", members.length, 1);
assertEquals("2.1", members[0].getType(), IResource.FOLDER);
assertEquals("2.2", members[0].getName(), "foo.d");
}
/**
* Tests moving a folder with filters.
*/
public void testMoveFolderWithFilterToAnotherProject() {
FileInfoMatcherDescription matcherDescription1 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, "foo.*");
try {
existingFolderInExistingProject.createFilter(IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FILES, matcherDescription1, 0, getMonitor());
} catch (CoreException e) {
fail("1.0");
}
IFile foo = existingFolderInExistingProject.getFile("foo.c");
IFolder food = existingFolderInExistingProject.getFolder("foo.d");
ensureExistsInWorkspace(new IResource[] {foo, food}, true);
try {
existingProject.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("1.1", e);
}
IFolder destination = otherExistingProject.getFolder("destination");
try {
existingFolderInExistingProject.move(destination.getFullPath(), 0, getMonitor());
} catch (CoreException e) {
fail("1.2");
}
IResourceFilterDescription[] filters = null;
try {
filters = existingFolderInExistingProject.getFilters();
} catch (CoreException e) {
fail("1.3", e);
}
assertEquals("1.4", filters.length, 0);
filters = null;
try {
filters = destination.getFilters();
} catch (CoreException e) {
fail("1.5", e);
}
assertEquals("1.6", filters.length, 1);
assertEquals("1.7", filters[0].getFileInfoMatcherDescription().getId(), REGEX_FILTER_PROVIDER);
assertEquals("1.8", filters[0].getFileInfoMatcherDescription().getArguments(), "foo.*");
assertEquals("1.9", filters[0].getType(), IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FILES);
assertEquals("2.0", filters[0].getResource(), destination);
}
/**
* Tests copying a folder with filters.
*/
public void testCopyFolderWithFilterToAnotherProject() {
FileInfoMatcherDescription matcherDescription1 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, "foo.*");
try {
existingFolderInExistingProject.createFilter(IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FILES, matcherDescription1, 0, getMonitor());
} catch (CoreException e) {
fail("1.0");
}
IFile foo = existingFolderInExistingProject.getFile("foo.c");
IFolder food = existingFolderInExistingProject.getFolder("foo.d");
ensureExistsInWorkspace(new IResource[] {foo, food}, true);
try {
existingProject.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("1.1", e);
}
IFolder destination = otherExistingProject.getFolder("destination");
try {
existingFolderInExistingProject.copy(destination.getFullPath(), 0, getMonitor());
} catch (CoreException e) {
fail("1.2");
}
IResourceFilterDescription[] filters = null;
try {
filters = existingFolderInExistingProject.getFilters();
} catch (CoreException e) {
fail("1.3", e);
}
assertEquals("1.4", filters.length, 1);
assertEquals("1.5", filters[0].getFileInfoMatcherDescription().getId(), REGEX_FILTER_PROVIDER);
assertEquals("1.6", filters[0].getFileInfoMatcherDescription().getArguments(), "foo.*");
assertEquals("1.7", filters[0].getType(), IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FILES);
assertEquals("1.8", filters[0].getResource(), existingFolderInExistingProject);
filters = null;
try {
filters = destination.getFilters();
} catch (CoreException e) {
fail("2.0", e);
}
assertEquals("2.1", filters.length, 1);
assertEquals("2.2", filters[0].getFileInfoMatcherDescription().getId(), REGEX_FILTER_PROVIDER);
assertEquals("2.3", filters[0].getFileInfoMatcherDescription().getArguments(), "foo.*");
assertEquals("2.4", filters[0].getType(), IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FILES);
assertEquals("2.5", filters[0].getResource(), destination);
}
/**
* Tests copying a folder with filters to another folder.
*/
public void testCopyFolderWithFilterToAnotherFolder() {
FileInfoMatcherDescription matcherDescription1 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, "foo.*");
try {
existingFolderInExistingProject.createFilter(IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FILES, matcherDescription1, 0, getMonitor());
} catch (CoreException e) {
fail("1.0");
}
IFile foo = existingFolderInExistingProject.getFile("foo.c");
IFolder food = existingFolderInExistingProject.getFolder("foo.d");
ensureExistsInWorkspace(new IResource[] {foo, food}, true);
try {
existingProject.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("1.1", e);
}
ensureExistsInWorkspace(new IResource[] {nonExistingFolderInExistingProject}, true);
IFolder destination = nonExistingFolderInExistingProject.getFolder("destination");
try {
existingFolderInExistingProject.copy(destination.getFullPath(), 0, getMonitor());
} catch (CoreException e) {
fail("1.2");
}
IResourceFilterDescription[] filters = null;
try {
filters = existingFolderInExistingProject.getFilters();
} catch (CoreException e) {
fail("1.3", e);
}
assertEquals("1.4", filters.length, 1);
assertEquals("1.5", filters[0].getFileInfoMatcherDescription().getId(), REGEX_FILTER_PROVIDER);
assertEquals("1.6", filters[0].getFileInfoMatcherDescription().getArguments(), "foo.*");
assertEquals("1.7", filters[0].getType(), IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FILES);
assertEquals("1.8", filters[0].getResource(), existingFolderInExistingProject);
filters = null;
try {
filters = destination.getFilters();
} catch (CoreException e) {
fail("2.0", e);
}
assertEquals("2.1", filters.length, 1);
assertEquals("2.2", filters[0].getFileInfoMatcherDescription().getId(), REGEX_FILTER_PROVIDER);
assertEquals("2.3", filters[0].getFileInfoMatcherDescription().getArguments(), "foo.*");
assertEquals("2.4", filters[0].getType(), IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FILES);
assertEquals("2.5", filters[0].getResource(), destination);
}
/**
* Tests moving a folder with filters to another folder.
*/
public void testMoveFolderWithFilterToAnotherFolder() {
FileInfoMatcherDescription matcherDescription1 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, "foo.*");
try {
existingFolderInExistingProject.createFilter(IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FILES, matcherDescription1, 0, getMonitor());
} catch (CoreException e) {
fail("1.0");
}
IFile foo = existingFolderInExistingProject.getFile("foo.c");
IFolder food = existingFolderInExistingProject.getFolder("foo.d");
ensureExistsInWorkspace(new IResource[] {foo, food}, true);
try {
existingProject.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("1.1", e);
}
ensureExistsInWorkspace(new IResource[] {nonExistingFolderInExistingProject}, true);
IFolder destination = nonExistingFolderInExistingProject.getFolder("destination");
try {
existingFolderInExistingProject.move(destination.getFullPath(), 0, getMonitor());
} catch (CoreException e) {
fail("1.2");
}
IResourceFilterDescription[] filters = null;
try {
filters = existingFolderInExistingProject.getFilters();
} catch (CoreException e) {
fail("1.3", e);
}
assertEquals("1.4", filters.length, 0);
filters = null;
try {
filters = destination.getFilters();
} catch (CoreException e) {
fail("2.0", e);
}
assertEquals("2.1", filters.length, 1);
assertEquals("2.2", filters[0].getFileInfoMatcherDescription().getId(), REGEX_FILTER_PROVIDER);
assertEquals("2.3", filters[0].getFileInfoMatcherDescription().getArguments(), "foo.*");
assertEquals("2.4", filters[0].getType(), IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FILES);
assertEquals("2.5", filters[0].getResource(), destination);
}
/**
* Tests deleting a folder with filters.
*/
public void testDeleteFolderWithFilterToAnotherFolder() {
FileInfoMatcherDescription matcherDescription1 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, "foo.*");
FileInfoMatcherDescription matcherDescription2 = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, ".*\\.c");
try {
existingFolderInExistingProject.createFilter(IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FILES, matcherDescription1, 0, getMonitor());
existingFolderInExistingFolder.createFilter(IResourceFilterDescription.INCLUDE_ONLY | IResourceFilterDescription.FILES, matcherDescription2, 0, getMonitor());
} catch (CoreException e) {
fail("1.0");
}
IFile foo = existingFolderInExistingProject.getFile("foo.c");
IFolder food = existingFolderInExistingProject.getFolder("foo.d");
ensureExistsInWorkspace(new IResource[] {foo, food}, true);
try {
existingProject.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("1.1", e);
}
ensureExistsInWorkspace(new IResource[] {nonExistingFolderInExistingProject}, true);
try {
existingFolderInExistingProject.delete(0, getMonitor());
} catch (CoreException e) {
fail("1.2");
}
IResourceFilterDescription[] filters = null;
try {
filters = existingFolderInExistingProject.getFilters();
} catch (CoreException e) {
fail("1.3", e);
}
assertEquals("1.4", filters.length, 0);
filters = null;
try {
filters = existingFolderInExistingFolder.getFilters();
} catch (CoreException e) {
fail("2.0", e);
}
assertEquals("2.1", filters.length, 0);
}
/* Regression test for Bug 304276 */
public void testInvalidCharactersInRegExFilter() {
RegexFileInfoMatcher matcher = new RegexFileInfoMatcher();
try {
matcher.initialize(existingProject, "*:*");
fail("1.0");
} catch (CoreException e) {
}
}
/**
* Regression test for Bug 302146
*/
public void testBug302146() {
try {
FileInfoMatcherDescription matcherDescription = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, "foo");
existingFolderInExistingProject.createFilter(IResourceFilterDescription.INCLUDE_ONLY | IResourceFilterDescription.FILES | IResourceFilterDescription.FOLDERS, matcherDescription, 0, getMonitor());
} catch (CoreException e) {
fail("1.0");
}
// close and reopen the project
try {
existingProject.close(getMonitor());
existingProject.open(getMonitor());
} catch (CoreException e) {
fail("2.0", e);
}
IResourceFilterDescription[] filters = null;
try {
filters = existingFolderInExistingProject.getFilters();
} catch (CoreException e) {
fail("3.0", e);
}
// check that filters are recreated when the project is reopened
// it means that .project was updated with filter details
assertEquals("4.0", filters.length, 1);
assertEquals("4.1", filters[0].getFileInfoMatcherDescription().getId(), REGEX_FILTER_PROVIDER);
assertEquals("4.2", filters[0].getFileInfoMatcherDescription().getArguments(), "foo");
assertEquals("4.3", filters[0].getType(), IResourceFilterDescription.INCLUDE_ONLY | IResourceFilterDescription.FILES | IResourceFilterDescription.FOLDERS);
assertEquals("4.4", filters[0].getResource(), existingFolderInExistingProject);
try {
new ProjectDescriptionReader().read(existingProject.getFile(".project").getLocation());
} catch (IOException e) {
fail("5.0", e);
}
}
/**
* Regression for Bug 317783 - Resource filters do not work at all in "Project Explorer"
* The problem is that a client calls explicitly refreshLocal on a folder that is filtered out by
* resource filters and that doesn't exist in the workspace. This used to cause the resource to
* appear in the workspace, along with all its children, in spite of active resource filters to the
* contrary.
*/
public void test317783() {
IFolder folder = existingProject.getFolder("foo");
ensureExistsInWorkspace(folder, true);
IFile file = folder.getFile("bar.txt");
ensureExistsInWorkspace(file, "content");
try {
existingProject.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("1.1", e);
}
try {
FileInfoMatcherDescription matcherDescription = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, ".*");
existingProject.createFilter(IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FOLDERS, matcherDescription, 0, getMonitor());
} catch (CoreException e) {
fail("1.2");
}
try {
existingProject.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("1.3", e);
}
IResource members[] = null;
try {
members = existingProject.members();
} catch (CoreException e) {
fail("1.4", e);
}
assertEquals("1.5", 2, members.length);
assertEquals("1.6", ".project", members[0].getName());
assertEquals("1.7", existingFileInExistingProject.getName(), members[1].getName());
try {
folder.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("2.0", e);
}
try {
members = existingProject.members();
} catch (CoreException e) {
fail("2.1", e);
}
assertEquals("2.2", 2, members.length);
assertEquals("2.3", ".project", members[0].getName());
assertEquals("2.4", existingFileInExistingProject.getName(), members[1].getName());
assertEquals("2.5", false, folder.exists());
assertEquals("2.6", false, file.exists());
}
/**
* Regression for Bug 317824 - Renaming a project that contains resource filters fails,
* and copying a project that contains resource filters removes the resource filters.
*/
public void test317824() {
IFolder folder = existingProject.getFolder("foo");
ensureExistsInWorkspace(folder, true);
IFile file = folder.getFile("bar.txt");
ensureExistsInWorkspace(file, "content");
try {
existingProject.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("1.1", e);
}
try {
FileInfoMatcherDescription matcherDescription = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, ".*");
existingProject.createFilter(IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FOLDERS, matcherDescription, 0, getMonitor());
} catch (CoreException e) {
fail("1.2");
}
try {
assertEquals(1, existingProject.getFilters().length);
} catch (CoreException e) {
fail("1.3", e);
}
try {
existingProject.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("1.4", e);
}
IPath newPath = existingProject.getFullPath().removeLastSegments(1).append(existingProject.getName() + "_moved");
try {
existingProject.move(newPath, true, getMonitor());
} catch (CoreException e) {
fail("1.5", e);
}
IProject newProject = ResourcesPlugin.getWorkspace().getRoot().getProject(existingProject.getName() + "_moved");
try {
assertTrue(newProject.exists());
assertEquals(1, newProject.getFilters().length);
} catch (CoreException e) {
fail("1.6", e);
}
newPath = newProject.getFullPath().removeLastSegments(1).append(newProject.getName() + "_copy");
try {
newProject.copy(newPath, true, getMonitor());
} catch (CoreException e) {
fail("1.7", e);
}
newProject = ResourcesPlugin.getWorkspace().getRoot().getProject(newProject.getName() + "_copy");
try {
assertTrue(newProject.exists());
assertEquals(1, newProject.getFilters().length);
} catch (CoreException e) {
fail("1.8", e);
}
}
/**
* Regression test for bug 328464
*/
public void test328464() {
IFolder folder = existingProject.getFolder(getUniqueString());
ensureExistsInWorkspace(folder, true);
IFile file_a_txt = folder.getFile("a.txt");
ensureExistsInWorkspace(file_a_txt, true);
try {
FileInfoMatcherDescription matcherDescription = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, "a\\.txt");
existingProject.createFilter(IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FILES | IResourceFilterDescription.INHERITABLE, matcherDescription, 0, getMonitor());
} catch (CoreException e) {
fail("1.0", e);
}
assertFalse("2.0", existingProject.getWorkspace().validateFiltered(file_a_txt).isOK());
// rename a.txt to A.txt in the file system
File ioFile = file_a_txt.getLocation().toFile();
assertTrue("3.0", ioFile.exists());
ioFile.renameTo(new File(file_a_txt.getLocation().removeLastSegments(1).append("A.txt").toString()));
assertFalse("4.0", existingProject.getWorkspace().validateFiltered(file_a_txt).isOK());
try {
folder.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
} catch (CoreException e) {
fail("5.0", e);
}
assertFalse("6.0", file_a_txt.exists());
assertFalse("7.0", existingProject.getWorkspace().validateFiltered(file_a_txt).isOK());
IFile file_A_txt = folder.getFile("A.txt");
assertTrue("9.0", file_A_txt.exists());
assertTrue("10.0", existingProject.getWorkspace().validateFiltered(file_A_txt).isOK());
}
/**
* Regression test for bug 343914
*/
public void test343914() {
String subProjectName = "subProject";
IPath subProjectLocation = existingProject.getLocation().append(subProjectName);
try {
FileInfoMatcherDescription matcherDescription = new FileInfoMatcherDescription(REGEX_FILTER_PROVIDER, subProjectName);
existingProject.createFilter(IResourceFilterDescription.EXCLUDE_ALL | IResourceFilterDescription.FOLDERS | IResourceFilterDescription.FILES | IResourceFilterDescription.INHERITABLE, matcherDescription, 0, getMonitor());
} catch (CoreException e) {
fail("1.0", e);
}
IPath fileLocation = subProjectLocation.append("file.txt");
IWorkspaceRoot root = getWorkspace().getRoot();
IFile result = root.getFileForLocation(fileLocation);
assertTrue("2.0", result == null);
IFile[] results = root.findFilesForLocation(fileLocation);
assertTrue("2.1", results.length == 0);
IPath containerLocation = subProjectLocation.append("folder");
IContainer resultContainer = root.getContainerForLocation(containerLocation);
assertTrue("2.2", resultContainer == null);
IContainer[] resultsContainer = root.findContainersForLocation(containerLocation);
assertTrue("2.3", resultsContainer.length == 0);
IProject subProject = root.getProject(subProjectName);
IProjectDescription newProjectDescription = getWorkspace().newProjectDescription(subProjectName);
newProjectDescription.setLocation(subProjectLocation);
try {
subProject.create(newProjectDescription, getMonitor());
} catch (CoreException e) {
fail("2.99", e);
}
result = root.getFileForLocation(fileLocation);
assertTrue("3.0", result != null);
assertEquals("3.1", subProject, result.getProject());
results = root.findFilesForLocation(fileLocation);
assertTrue("3.2", results.length == 1);
assertEquals("3.3", subProject, results[0].getProject());
resultContainer = root.getContainerForLocation(containerLocation);
assertTrue("3.4", resultContainer != null);
assertEquals("3.5", subProject, resultContainer.getProject());
resultsContainer = root.findContainersForLocation(containerLocation);
assertTrue("3.6", resultsContainer.length == 1);
assertEquals("3.7", subProject, resultsContainer[0].getProject());
}
}