blob: baaa9d4fab03b8c5bb13216e54da971918d42ba1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2017 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;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Path;
/**
* Tests the public API of IResourceDelta
*/
public class IResourceDeltaTest extends ResourceTest {
/* some random resource handles */
protected IProject project1;
protected IProject project2;
protected IFolder folder1;//below project2
protected IFolder folder2;//below folder1
protected IFolder folder3;//same as file1
protected IFile file1;//below folder1
protected IFile file2;//below folder1
protected IFile file3;//below folder2
protected IFile file4;//below folder1
protected IResource[] allResources;
public IResourceDeltaTest() {
super();
}
public IResourceDeltaTest(String name) {
super(name);
}
/**
* Sets up the fixture, for example, open a network connection.
* This method is called before a test is executed.
*/
@Override
protected void setUp() throws Exception {
super.setUp();
// Create some resource handles
project1 = getWorkspace().getRoot().getProject("Project" + 1);
project2 = getWorkspace().getRoot().getProject("Project" + 2);
folder1 = project1.getFolder("Folder" + 1);
folder2 = folder1.getFolder("Folder" + 2);
folder3 = folder1.getFolder("Folder" + 3);
file1 = folder1.getFile("File" + 1);
file2 = folder1.getFile("File" + 2);
file3 = folder2.getFile("File" + 3);
file4 = folder1.getFile("File" + 4);//doesn't exist initially
allResources = new IResource[] {project1, project2, folder1, folder2, folder3, file1, file2, file3};
// Create and open the resources
IWorkspaceRunnable body = monitor -> ensureExistsInWorkspace(allResources, true);
try {
getWorkspace().run(body, getMonitor());
} catch (CoreException e) {
fail("1.0", e);
}
}
public static Test suite() {
return new TestSuite(IResourceDeltaTest.class);
}
/**
* Tears down the fixture, for example, close a network connection.
* This method is called after a test is executed.
*/
@Override
protected void tearDown() throws Exception {
super.tearDown();
ensureDoesNotExistInWorkspace(getWorkspace().getRoot());
}
/**
* Tests the IResourceDelta#findMember method.
*/
public void testFindMember() {
/*
* The following changes will occur:
* - change file1
* - delete folder2 (which deletes file3)
* - add file4 below folder1
*/
IResourceChangeListener listener = event -> {
//delta relative to root
IResourceDelta delta = event.getDelta();
assertNotNull("1.0", delta.findMember(project1.getFullPath()));
assertNotNull("1.1", delta.findMember(file1.getFullPath()));
assertNotNull("1.2", delta.findMember(folder2.getFullPath()));
assertNotNull("1.3", delta.findMember(file3.getFullPath()));
assertNotNull("1.4", delta.findMember(file4.getFullPath()));
assertNull("1.5", delta.findMember(project2.getFullPath()));
assertNull("1.6", delta.findMember(file2.getFullPath()));
assertNull("1.7", delta.findMember(folder3.getFullPath()));
//delta relative to project
delta = delta.findMember(project1.getFullPath());
assertNotNull("2.1", delta.findMember(file1.getProjectRelativePath()));
assertNotNull("2.2", delta.findMember(folder2.getProjectRelativePath()));
assertNotNull("2.3", delta.findMember(file3.getProjectRelativePath()));
assertNotNull("2.4", delta.findMember(file4.getProjectRelativePath()));
assertNull("2.5", delta.findMember(project2.getFullPath()));
assertNull("2.6", delta.findMember(file2.getProjectRelativePath()));
assertNull("2.7", delta.findMember(folder3.getProjectRelativePath()));
assertNull("2.8", delta.findMember(project1.getFullPath()));
assertNull("2.9", delta.findMember(file1.getFullPath()));
//delta with no children
delta = delta.findMember(file1.getProjectRelativePath());
assertEquals("3.1", delta, delta.findMember(Path.ROOT));
assertNull("3.2", delta.findMember(new Path("foo")));
};
getWorkspace().addResourceChangeListener(listener);
//do the work
IWorkspaceRunnable body = monitor -> {
file1.setContents(getRandomContents(), true, true, getMonitor());
folder2.delete(true, getMonitor());
file4.create(getRandomContents(), true, getMonitor());
};
try {
getWorkspace().run(body, getMonitor());
} catch (CoreException e) {
fail("Exception1", e);
} finally {
getWorkspace().removeResourceChangeListener(listener);
}
}
}