| /******************************************************************************* |
| * Copyright (c) 2000, 2002 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Common Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/cpl-v10.html |
| * |
| * Contributors: |
| * IBM - Initial API and implementation |
| * tammo.freese@offis.de - tests for swapping files and folders |
| ******************************************************************************/ |
| package org.eclipse.core.tests.resources; |
| |
| import java.io.ByteArrayInputStream; |
| |
| 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.*; |
| import org.eclipse.core.tests.harness.EclipseWorkspaceTest; |
| |
| public class IResourceChangeListenerTest extends EclipseWorkspaceTest { |
| ResourceDeltaVerifier verifier; |
| |
| protected static final String VERIFIER_NAME = "TestListener"; |
| |
| /* some random resource handles */ |
| IProject project1; |
| IProject project2; |
| IFolder folder1;//below project2 |
| IFolder folder2;//below folder1 |
| IFolder folder3;//same as file1 |
| IFile file1;//below folder1 |
| IFile file2;//below folder1 |
| IFile file3;//below folder2 |
| IFile project1MetaData; |
| IFile project2MetaData; |
| public IResourceChangeListenerTest() { |
| } |
| public IResourceChangeListenerTest(String name) { |
| super(name); |
| } |
| public void _testBenchMark_1GBYQEZ() { |
| // start with a clean workspace |
| getWorkspace().removeResourceChangeListener(verifier); |
| try { |
| getWorkspace().getRoot().delete(false, getMonitor()); |
| } catch (CoreException e) { |
| fail("0.0", e); |
| } |
| |
| // create the listener |
| IResourceChangeListener listener = new IResourceChangeListener() { |
| public int fCounter; |
| public void resourceChanged(IResourceChangeEvent event) { |
| try { |
| System.out.println("Start"); |
| for (int i = 0; i < 10; i++) { |
| fCounter = 0; |
| long start = System.currentTimeMillis(); |
| IResourceDelta delta = event.getDelta(); |
| delta.accept(new IResourceDeltaVisitor() { |
| public boolean visit(IResourceDelta delta) throws CoreException { |
| fCounter++; |
| return true; |
| } |
| }); |
| long end = System.currentTimeMillis(); |
| System.out.println(" Number of deltas: " + fCounter + ". Time needed: " + (end - start)); |
| } |
| System.out.println("End"); |
| } catch (CoreException e) { |
| fail("1.0", e); |
| } |
| } |
| }; |
| |
| // add the listener |
| getWorkspace().addResourceChangeListener(listener); |
| |
| // setup the test data |
| IWorkspaceRunnable body = new IWorkspaceRunnable() { |
| public void run(IProgressMonitor monitor) throws CoreException { |
| IProject project = getWorkspace().getRoot().getProject("Test"); |
| IProjectDescription description = getWorkspace().newProjectDescription(project.getName()); |
| IPath root = getWorkspace().getRoot().getLocation(); |
| IPath contents = root.append("temp/testing"); |
| description.setLocation(contents); |
| project.create(description, getMonitor()); |
| project.open(getMonitor()); |
| project.refreshLocal(IResource.DEPTH_INFINITE, getMonitor()); |
| } |
| }; |
| try { |
| getWorkspace().run(body, getMonitor()); |
| } catch (CoreException e) { |
| fail("2.0", e); |
| } |
| |
| // touch all resources (so that they appear in the delta) |
| body = new IWorkspaceRunnable() { |
| public void run(IProgressMonitor monitor) throws CoreException { |
| IResourceVisitor visitor = new IResourceVisitor() { |
| public boolean visit(IResource resource) throws CoreException { |
| resource.touch(getMonitor()); |
| return true; |
| } |
| }; |
| getWorkspace().getRoot().accept(visitor); |
| } |
| }; |
| try { |
| getWorkspace().run(body, getMonitor()); |
| } catch (CoreException e) { |
| fail("3.0", e); |
| } |
| |
| // un-register our listener |
| getWorkspace().removeResourceChangeListener(listener); |
| } |
| /** |
| * Tests that the builder is receiving an appropriate delta |
| * @see SortBuilderPlugin |
| * @see SortBuilder |
| */ |
| public void assertDelta() { |
| assertTrue(verifier.getMessage(), verifier.isDeltaValid()); |
| } |
| /** |
| * Runs code to handle a core exception |
| */ |
| protected void handleCoreException(CoreException e) { |
| assertTrue("CoreException: " + e.getMessage(), false); |
| } |
| /** |
| * Sets up the fixture, for example, open a network connection. |
| * This method is called before a test is executed. |
| */ |
| 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("File" + 1); |
| file1 = folder1.getFile("File" + 1); |
| file2 = folder1.getFile("File" + 2); |
| file3 = folder2.getFile("File" + 1); |
| project1MetaData = project1.getFile(IProjectDescription.DESCRIPTION_FILE_NAME); |
| project2MetaData = project2.getFile(IProjectDescription.DESCRIPTION_FILE_NAME); |
| |
| // Create and open a project, folder and file |
| IWorkspaceRunnable body = new IWorkspaceRunnable() { |
| public void run(IProgressMonitor monitor) throws CoreException { |
| project1.create(getMonitor()); |
| project1.open(getMonitor()); |
| folder1.create(true, true, getMonitor()); |
| file1.create(getRandomContents(), true, getMonitor()); |
| } |
| }; |
| try { |
| getWorkspace().run(body, getMonitor()); |
| } catch (CoreException e) { |
| fail("1.0", e); |
| } |
| verifier = new ResourceDeltaVerifier(); |
| getWorkspace().addResourceChangeListener(verifier); |
| } |
| public static Test suite() { |
| // TestSuite suite = new TestSuite(); |
| // suite.addTest(new IResourceChangeListenerTest("testMoveProject2")); |
| // return suite; |
| |
| return new TestSuite(IResourceChangeListenerTest.class); |
| } |
| /** |
| * Tears down the fixture, for example, close a network connection. |
| * This method is called after a test is executed. |
| */ |
| protected void tearDown() throws Exception { |
| super.tearDown(); |
| ensureDoesNotExistInWorkspace(getWorkspace().getRoot()); |
| getWorkspace().removeResourceChangeListener(verifier); |
| } |
| public void testAddAndRemoveFile() { |
| try { |
| verifier.reset(); |
| getWorkspace().run( |
| new IWorkspaceRunnable() { |
| public void run (IProgressMonitor m) throws CoreException { |
| m.beginTask("Creating and deleting", 100); |
| try { |
| file2.create(getRandomContents(), true, new SubProgressMonitor(m, 50)); |
| file2.delete(true, new SubProgressMonitor(m, 50)); |
| } |
| finally { |
| m.done(); |
| } |
| } |
| }, getMonitor()); |
| //should not have been verified since there was no change |
| assertTrue("Unexpected notification on no change", !verifier.hasBeenNotified()); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| public void testMulti() { |
| |
| class Listener1 implements IResourceChangeListener { |
| public boolean done = false; |
| public void resourceChanged(IResourceChangeEvent event) { |
| assertEquals("1.0", IResourceChangeEvent.POST_CHANGE, event.getType()); |
| done = true; |
| } |
| } |
| |
| class Listener2 extends Listener1 implements IResourceChangeListener { |
| public void resourceChanged(IResourceChangeEvent event) { |
| assertEquals("2.0", IResourceChangeEvent.POST_AUTO_BUILD, event.getType()); |
| done = true; |
| } |
| } |
| |
| Listener1 listener1 = new Listener1(); |
| Listener2 listener2 = new Listener2(); |
| |
| getWorkspace().addResourceChangeListener(listener1, IResourceChangeEvent.POST_CHANGE); |
| getWorkspace().addResourceChangeListener(listener2, IResourceChangeEvent.POST_AUTO_BUILD); |
| |
| try { |
| project1.touch(getMonitor()); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| |
| assertTrue("3.0", listener1.done); |
| assertTrue("3.1", listener2.done); |
| getWorkspace().removeResourceChangeListener(listener1); |
| getWorkspace().removeResourceChangeListener(listener2); |
| } |
| public void testAddAndRemoveFolder() { |
| try { |
| verifier.reset(); |
| getWorkspace().run( |
| new IWorkspaceRunnable() { |
| public void run (IProgressMonitor m) throws CoreException { |
| m.beginTask("Creating and deleting", 100); |
| try { |
| folder2.create(true, true, new SubProgressMonitor(m, 50)); |
| folder2.delete(true, new SubProgressMonitor(m, 50)); |
| } |
| finally { |
| m.done(); |
| } |
| } |
| }, getMonitor()); |
| //should not have been verified since there was no change |
| assertTrue("Unexpected notification on no change", !verifier.hasBeenNotified()); |
| |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| public void testAddFile() { |
| try { |
| verifier.addExpectedChange(file2, IResourceDelta.ADDED, 0); |
| file2.create(getRandomContents(), true, getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| public void testAddFileAndFolder() { |
| try { |
| verifier.addExpectedChange(folder2, IResourceDelta.ADDED, 0); |
| verifier.addExpectedChange(file3, IResourceDelta.ADDED, 0); |
| getWorkspace().run(new IWorkspaceRunnable() { |
| public void run(IProgressMonitor m) throws CoreException { |
| m.beginTask("Creating folder and file", 100); |
| try { |
| folder2.create(true, true, new SubProgressMonitor(m, 50)); |
| file3.create(getRandomContents(), true, new SubProgressMonitor(m, 50)); |
| } finally { |
| m.done(); |
| } |
| } |
| } |
| , getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| public void testAddFolder() { |
| try { |
| verifier.addExpectedChange(folder2, IResourceDelta.ADDED, 0); |
| folder2.create(true, true, getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| public void testAddProject() { |
| try { |
| verifier.addExpectedChange(project2, IResourceDelta.ADDED, 0); |
| verifier.addExpectedChange(project2MetaData, IResourceDelta.ADDED, 0); |
| project2.create(getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| public void testChangeFile() { |
| try { |
| /* change file1's contents */ |
| verifier.addExpectedChange(file1, IResourceDelta.CHANGED, IResourceDelta.CONTENT); |
| file1.setContents(getRandomContents(), true, false, getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| public void testChangeFileToFolder() { |
| try { |
| /* change file1 into a folder */ |
| verifier.addExpectedChange(file1, IResourceDelta.CHANGED, IResourceDelta.CONTENT | IResourceDelta.TYPE | IResourceDelta.REPLACED); |
| getWorkspace().run( |
| new IWorkspaceRunnable() { |
| public void run (IProgressMonitor m) throws CoreException { |
| m.beginTask("Deleting and Creating", 100); |
| try { |
| file1.delete(true, new SubProgressMonitor(m, 50)); |
| folder3.create(true, true, new SubProgressMonitor(m, 50)); |
| } |
| finally { |
| m.done(); |
| } |
| } |
| }, getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| public void testChangeFolderToFile() { |
| try { |
| /* change to a folder */ |
| file1.delete(true, getMonitor()); |
| folder3.create(true, true, getMonitor()); |
| |
| /* now change back to a file and verify */ |
| verifier.addExpectedChange(file1, IResourceDelta.CHANGED, IResourceDelta.CONTENT | IResourceDelta.TYPE | IResourceDelta.REPLACED); |
| getWorkspace().run(new IWorkspaceRunnable() { |
| public void run(IProgressMonitor m) throws CoreException { |
| m.beginTask("Deleting and Creating", 100); |
| try { |
| folder3.delete(true, new SubProgressMonitor(m, 50)); |
| file1.create(getRandomContents(), true, new SubProgressMonitor(m, 50)); |
| } finally { |
| m.done(); |
| } |
| } |
| } |
| , getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| public void testChangeProject() { |
| try { |
| project2.create(getMonitor()); |
| project2.open(getMonitor()); |
| IProjectDescription desc = project2.getDescription(); |
| desc.setReferencedProjects(new IProject[] {project1}); |
| verifier.addExpectedChange(project2, IResourceDelta.CHANGED, IResourceDelta.DESCRIPTION); |
| verifier.addExpectedChange(project2MetaData, IResourceDelta.CHANGED, IResourceDelta.CONTENT); |
| project2.setDescription(desc, IResource.FORCE, getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| public void testCloseOpenReplaceFile() { |
| try { |
| // FIXME: how to do this? |
| //workspace.save(getMonitor()); |
| //workspace.close(getMonitor()); |
| //workspace.open(getMonitor()); |
| verifier.reset(); |
| getWorkspace().addResourceChangeListener(verifier); |
| |
| /* change file1's contents */ |
| verifier.addExpectedChange(file1, IResourceDelta.CHANGED, IResourceDelta.REPLACED | IResourceDelta.CONTENT); |
| getWorkspace().run(new IWorkspaceRunnable() { |
| public void run(IProgressMonitor m) throws CoreException { |
| m.beginTask("Deleting and Creating", 100); |
| try { |
| file1.delete(true, new SubProgressMonitor(m, 50)); |
| file1.create(getRandomContents(), true, new SubProgressMonitor(m, 50)); |
| } finally { |
| m.done(); |
| } |
| } |
| }, getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| public void testDeleteInPostBuildListener() { |
| // create the resource change listener |
| IResourceChangeListener listener = new IResourceChangeListener() { |
| public void resourceChanged(final IResourceChangeEvent event) { |
| try { |
| event.getDelta().accept(new IResourceDeltaVisitor() { |
| public boolean visit(IResourceDelta delta) throws CoreException { |
| IResource resource = delta.getResource(); |
| if (resource.getType() == IResource.FILE) { |
| try { |
| ((IFile)resource).delete(true, true, null); |
| } catch (RuntimeException e) { |
| throw e; |
| } |
| } |
| return true; |
| } |
| }); |
| } catch (CoreException e) { |
| fail("1.0", e); |
| } |
| } |
| }; |
| // register the listener with the workspace. |
| getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.POST_AUTO_BUILD); |
| try { |
| getWorkspace().run(new IWorkspaceRunnable() { |
| // cause a delta by touching all resources |
| public void run(IProgressMonitor monitor) throws CoreException { |
| getWorkspace().getRoot().accept(new IResourceVisitor() { |
| public boolean visit(IResource resource) throws CoreException { |
| resource.touch(getMonitor()); |
| return true; |
| } |
| }); |
| } |
| }, getMonitor()); |
| } catch (CoreException e) { |
| fail("2.0", e); |
| } finally { |
| // cleanup: ensure that the listener is removed |
| getWorkspace().removeResourceChangeListener(listener); |
| } |
| } |
| public void testDeleteProject() throws CoreException { |
| //test that marker deltas are fired when projects are deleted |
| final IMarker marker = project1.createMarker(IMarker.TASK); |
| IResourceChangeListener listener = new IResourceChangeListener() { |
| public void resourceChanged(IResourceChangeEvent event) { |
| IMarkerDelta[] deltas = event.findMarkerDeltas(IMarker.TASK, false); |
| assertEquals("1.0", 1, deltas.length); |
| assertEquals("1.1", marker.getId(), deltas[0].getId()); |
| assertEquals("1.2", IResourceDelta.REMOVED, deltas[0].getKind()); |
| } |
| }; |
| try { |
| getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.POST_CHANGE); |
| project1.delete(true, false, getMonitor()); |
| } finally { |
| getWorkspace().removeResourceChangeListener(listener); |
| } |
| } |
| /** |
| * Tests that team private members don't show up in resource deltas when |
| * standard traversal and visitor are used. |
| */ |
| public void testHiddenTeamPrivateChanges() { |
| IWorkspace workspace = getWorkspace(); |
| final IFolder teamPrivateFolder = project1.getFolder("TeamPrivateFolder"); |
| final IFile teamPrivateFile = folder1.getFile("TeamPrivateFile"); |
| final IResource[] privateResources = new IResource[] {teamPrivateFolder, teamPrivateFile}; |
| IResourceChangeListener listener = new IResourceChangeListener() { |
| public void resourceChanged(IResourceChangeEvent event) { |
| //make sure the delta doesn't include the team private members |
| assertNotDeltaIncludes("1.0", event.getDelta(), privateResources); |
| //make sure a visitor does not find team private members |
| assertNotDeltaVisits("1.1", event.getDelta(), privateResources); |
| } |
| }; |
| workspace.addResourceChangeListener(listener); |
| try { |
| //create a team private folder |
| workspace.run(new IWorkspaceRunnable() { |
| public void run(IProgressMonitor monitor) throws CoreException { |
| teamPrivateFolder.create(true, true, getMonitor()); |
| teamPrivateFolder.setTeamPrivateMember(true); |
| } |
| }, getMonitor()); |
| //create children in team private folder |
| IFile fileInFolder = teamPrivateFolder.getFile("FileInPrivateFolder"); |
| fileInFolder.create(getRandomContents(), true, getMonitor()); |
| //modify children in team private folder |
| fileInFolder.setContents(getRandomContents(), IResource.NONE, getMonitor()); |
| //delete children in team private folder |
| fileInFolder.delete(IResource.NONE, getMonitor()); |
| //delete team private folder and change some other file |
| workspace.run(new IWorkspaceRunnable() { |
| public void run(IProgressMonitor monitor) throws CoreException { |
| teamPrivateFolder.delete(IResource.NONE, getMonitor()); |
| file1.setContents(getRandomContents(), IResource.NONE, getMonitor()); |
| } |
| }, getMonitor()); |
| //create team private file |
| workspace.run(new IWorkspaceRunnable() { |
| public void run(IProgressMonitor monitor) throws CoreException { |
| teamPrivateFile.create(getRandomContents(), true, getMonitor()); |
| teamPrivateFile.setTeamPrivateMember(true); |
| } |
| }, getMonitor()); |
| //modify team private file |
| teamPrivateFile.setContents(getRandomContents(), IResource.NONE, getMonitor()); |
| //delete team private file |
| teamPrivateFile.delete(IResource.NONE, getMonitor()); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } finally { |
| workspace.removeResourceChangeListener(listener); |
| } |
| } |
| public void testMoveFile() { |
| try { |
| verifier.addExpectedChange(folder2, IResourceDelta.ADDED, 0); |
| verifier.addExpectedChange(file1, IResourceDelta.REMOVED, IResourceDelta.MOVED_TO, null, file3.getFullPath()); |
| verifier.addExpectedChange(file3, IResourceDelta.ADDED, IResourceDelta.MOVED_FROM, file1.getFullPath(), null); |
| getWorkspace().run(new IWorkspaceRunnable() { |
| public void run(IProgressMonitor m) throws CoreException { |
| m.beginTask("Creating and moving", 100); |
| try { |
| folder2.create(true, true, new SubProgressMonitor(m, 50)); |
| file1.move(file3.getFullPath(), true, new SubProgressMonitor(m, 50)); |
| } finally { |
| m.done(); |
| } |
| } |
| } |
| , getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| /** |
| * Move a project via rename. |
| * Note that the DESCRIPTION flag should be set in the delta for the |
| * destination only. |
| */ |
| public void testMoveProject1() { |
| try { |
| verifier.addExpectedChange(project1, IResourceDelta.REMOVED, IResourceDelta.MOVED_TO, null, project2.getFullPath()); |
| verifier.addExpectedChange(project1.getFile(".project"), IResourceDelta.REMOVED, IResourceDelta.MOVED_TO, null, project2.getFile(".project").getFullPath()); |
| verifier.addExpectedChange(folder1, IResourceDelta.REMOVED, IResourceDelta.MOVED_TO, null, project2.getFolder(folder1.getProjectRelativePath()).getFullPath()); |
| verifier.addExpectedChange(file1, IResourceDelta.REMOVED, IResourceDelta.MOVED_TO, null, project2.getFile(file1.getProjectRelativePath()).getFullPath()); |
| |
| verifier.addExpectedChange(project2, IResourceDelta.ADDED, IResourceDelta.OPEN | IResourceDelta.DESCRIPTION | IResourceDelta.MOVED_FROM, project1.getFullPath(), null); |
| verifier.addExpectedChange(project2.getFile(".project"), IResourceDelta.ADDED, IResourceDelta.CONTENT | IResourceDelta.MOVED_FROM, project1.getFile(".project").getFullPath(), null); |
| verifier.addExpectedChange(project2.getFolder(folder1.getProjectRelativePath()), IResourceDelta.ADDED, IResourceDelta.MOVED_FROM, folder1.getFullPath(), null); |
| verifier.addExpectedChange(project2.getFile(file1.getProjectRelativePath()), IResourceDelta.ADDED, IResourceDelta.MOVED_FROM, file1.getFullPath(), null); |
| getWorkspace().run(new IWorkspaceRunnable() { |
| public void run(IProgressMonitor m) throws CoreException { |
| m.beginTask("Creating and moving", 100); |
| try { |
| project1.move(project2.getFullPath(), IResource.NONE, new SubProgressMonitor(m, 50)); |
| } finally { |
| m.done(); |
| } |
| } |
| } |
| , getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| /** |
| * Move a project via a location change only. |
| * Note that the DESCRIPTION flag should be set in the delta. |
| */ |
| public void testMoveProject2() { |
| final IPath path = getRandomLocation(); |
| try { |
| verifier.addExpectedChange(project1, IResourceDelta.CHANGED, IResourceDelta.DESCRIPTION); |
| verifier.addExpectedChange(project1.getFile(".project"), IResourceDelta.CHANGED, IResourceDelta.CONTENT); |
| |
| getWorkspace().run(new IWorkspaceRunnable() { |
| public void run(IProgressMonitor m) throws CoreException { |
| m.beginTask("Creating and moving", 100); |
| try { |
| IProjectDescription desc = project1.getDescription(); |
| desc.setLocation(path); |
| project1.move(desc, IResource.NONE, new SubProgressMonitor(m, 50)); |
| } finally { |
| m.done(); |
| } |
| } |
| } |
| , getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } finally { |
| Workspace.clear(path.toFile()); |
| } |
| } |
| public void testModifyMoveFile() { |
| try { |
| verifier.addExpectedChange(folder2, IResourceDelta.ADDED, 0); |
| verifier.addExpectedChange(file1, IResourceDelta.REMOVED, IResourceDelta.MOVED_TO, null, file3.getFullPath()); |
| verifier.addExpectedChange(file3, IResourceDelta.ADDED, IResourceDelta.MOVED_FROM | IResourceDelta.CONTENT, file1.getFullPath(), null); |
| getWorkspace().run(new IWorkspaceRunnable() { |
| public void run(IProgressMonitor m) throws CoreException { |
| m.beginTask("Creating and moving", 100); |
| try { |
| folder2.create(true, true, new SubProgressMonitor(m, 50)); |
| file1.setContents(getRandomContents(), IResource.NONE, getMonitor()); |
| file1.move(file3.getFullPath(), true, new SubProgressMonitor(m, 50)); |
| } finally { |
| m.done(); |
| } |
| } |
| } |
| , getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| public void testMoveFileAddMarker() { |
| try { |
| verifier.addExpectedChange(folder2, IResourceDelta.ADDED, 0); |
| verifier.addExpectedChange(file1, IResourceDelta.REMOVED, IResourceDelta.MOVED_TO, null, file3.getFullPath()); |
| verifier.addExpectedChange(file3, IResourceDelta.ADDED, IResourceDelta.MOVED_FROM | IResourceDelta.MARKERS, file1.getFullPath(), null); |
| getWorkspace().run(new IWorkspaceRunnable() { |
| public void run(IProgressMonitor m) throws CoreException { |
| m.beginTask("Creating and moving", 100); |
| try { |
| folder2.create(true, true, new SubProgressMonitor(m, 50)); |
| file1.move(file3.getFullPath(), true, new SubProgressMonitor(m, 50)); |
| file3.createMarker(IMarker.TASK); |
| } finally { |
| m.done(); |
| } |
| } |
| } |
| , getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| |
| public void testMoveModifyFile() { |
| try { |
| verifier.addExpectedChange(folder2, IResourceDelta.ADDED, 0); |
| verifier.addExpectedChange(file1, IResourceDelta.REMOVED, IResourceDelta.MOVED_TO, null, file3.getFullPath()); |
| verifier.addExpectedChange(file3, IResourceDelta.ADDED, IResourceDelta.MOVED_FROM | IResourceDelta.CONTENT, file1.getFullPath(), null); |
| getWorkspace().run(new IWorkspaceRunnable() { |
| public void run(IProgressMonitor m) throws CoreException { |
| m.beginTask("Creating and moving", 100); |
| try { |
| folder2.create(true, true, new SubProgressMonitor(m, 50)); |
| file1.move(file3.getFullPath(), true, new SubProgressMonitor(m, 50)); |
| file3.setContents(getRandomContents(), IResource.NONE, getMonitor()); |
| } finally { |
| m.done(); |
| } |
| } |
| } |
| , getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| |
| public void testMoveMoveFile() { |
| file2 = project1.getFile("File2"); |
| file3 = project1.getFile("File3"); |
| |
| try { |
| verifier.addExpectedChange(file1, IResourceDelta.REMOVED, IResourceDelta.MOVED_TO, null, file3.getFullPath()); |
| verifier.addExpectedChange(file3, IResourceDelta.ADDED, IResourceDelta.MOVED_FROM, file1.getFullPath(), null); |
| getWorkspace().run(new IWorkspaceRunnable() { |
| public void run(IProgressMonitor m) throws CoreException { |
| m.beginTask("moving and moving file", 100); |
| try { |
| file1.move(file2.getFullPath(), false, null); |
| file2.move(file3.getFullPath(),false, null); |
| } finally { |
| m.done(); |
| } |
| } |
| } |
| , getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| |
| public void testMoveMoveFolder() { |
| folder2 = project1.getFolder("Folder2"); |
| folder3 = project1.getFolder("Folder3"); |
| file3 = folder3.getFile(file1.getName()); |
| |
| try { |
| |
| verifier.addExpectedChange(folder1, IResourceDelta.REMOVED, IResourceDelta.MOVED_TO, null, folder3.getFullPath()); |
| verifier.addExpectedChange(folder3, IResourceDelta.ADDED, IResourceDelta.MOVED_FROM, folder1.getFullPath(), null); |
| verifier.addExpectedChange(file1, IResourceDelta.REMOVED, IResourceDelta.MOVED_TO, null, file3.getFullPath()); |
| verifier.addExpectedChange(file3, IResourceDelta.ADDED, IResourceDelta.MOVED_FROM, file1.getFullPath(), null); |
| |
| getWorkspace().run(new IWorkspaceRunnable() { |
| public void run(IProgressMonitor m) throws CoreException { |
| m.beginTask("moving and moving folder", 100); |
| try { |
| folder1.move(folder2.getFullPath(), false, null); |
| folder2.move(folder3.getFullPath(),false, null); |
| } finally { |
| m.done(); |
| } |
| } |
| } |
| , getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| |
| public void testSwapFolders() { |
| try { |
| folder2 = project1.getFolder("Folder2"); |
| folder3 = project1.getFolder("Folder3"); |
| file1.delete(false, null); |
| folder2.create(false, true, null); |
| |
| verifier.addExpectedChange(folder1, IResourceDelta.CHANGED, IResourceDelta.MOVED_FROM | IResourceDelta.MOVED_TO, folder2.getFullPath(), folder2.getFullPath()); |
| verifier.addExpectedChange(folder2, IResourceDelta.CHANGED, IResourceDelta.MOVED_FROM | IResourceDelta.MOVED_TO, folder1.getFullPath(), folder1.getFullPath()); |
| |
| getWorkspace().run(new IWorkspaceRunnable() { |
| public void run(IProgressMonitor m) throws CoreException { |
| m.beginTask("swap folders", 100); |
| try { |
| folder1.move(folder3.getFullPath(), false, null); |
| folder2.move(folder1.getFullPath(),false, null); |
| folder3.move(folder2.getFullPath(),false, null); |
| } finally { |
| m.done(); |
| } |
| } |
| } |
| , getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| |
| public void testReplaceFolderWithFolder() { |
| try { |
| folder2 = project1.getFolder("Folder2"); |
| folder3 = project1.getFolder("Folder3"); |
| file1.delete(false, null); |
| folder2.create(false, true, null); |
| |
| verifier.addExpectedChange(folder1, IResourceDelta.REMOVED, IResourceDelta.MOVED_TO, null, folder2.getFullPath()); |
| // TODO in next line: How to set expected MOVED_TO as well as expected MOVED_FROM?? |
| verifier.addExpectedChange(folder2, IResourceDelta.CHANGED, IResourceDelta.MOVED_FROM | IResourceDelta.MOVED_TO, folder1.getFullPath(), folder3.getFullPath()); |
| verifier.addExpectedChange(folder3, IResourceDelta.ADDED, IResourceDelta.MOVED_FROM, folder2.getFullPath(), null); |
| |
| getWorkspace().run(new IWorkspaceRunnable() { |
| public void run(IProgressMonitor m) throws CoreException { |
| m.beginTask("replace folder with folder", 100); |
| try { |
| folder2.move(folder3.getFullPath(), false, null); |
| folder1.move(folder2.getFullPath(),false, null); |
| } finally { |
| m.done(); |
| } |
| } |
| } |
| , getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| |
| public void testSwapFiles() { |
| try { |
| file1 = project1.getFile("File1"); |
| file2 = project1.getFile("File2"); |
| file3 = project1.getFile("File3"); |
| |
| file1.create(new ByteArrayInputStream(new byte[] {65}), false, null); |
| file2.create(new ByteArrayInputStream(new byte[] {67}), false, null); |
| |
| verifier.addExpectedChange(file1, IResourceDelta.CHANGED, IResourceDelta.MOVED_FROM | IResourceDelta.MOVED_TO, file2.getFullPath(), file2.getFullPath()); |
| verifier.addExpectedChange(file2, IResourceDelta.CHANGED, IResourceDelta.MOVED_FROM | IResourceDelta.MOVED_TO, file1.getFullPath(), file1.getFullPath()); |
| |
| getWorkspace().run(new IWorkspaceRunnable() { |
| public void run(IProgressMonitor m) throws CoreException { |
| m.beginTask("swap files", 100); |
| try { |
| file1.move(file3.getFullPath(), false, null); |
| file2.move(file1.getFullPath(),false, null); |
| file3.move(file2.getFullPath(),false, null); |
| } finally { |
| m.done(); |
| } |
| } |
| } |
| , getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| |
| |
| public void testRemoveFile() { |
| try { |
| verifier.addExpectedChange(file1, IResourceDelta.REMOVED, 0); |
| file1.delete(true, getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| public void testRemoveFileAndFolder() { |
| try { |
| verifier.addExpectedChange(folder1, IResourceDelta.REMOVED, 0); |
| verifier.addExpectedChange(file1, IResourceDelta.REMOVED, 0); |
| folder1.delete(true, getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| public void testReplaceFile() { |
| try { |
| /* change file1's contents */ |
| verifier.addExpectedChange(file1, IResourceDelta.CHANGED, IResourceDelta.REPLACED | IResourceDelta.CONTENT); |
| getWorkspace().run(new IWorkspaceRunnable() { |
| public void run(IProgressMonitor m) throws CoreException { |
| m.beginTask("Deleting and Creating", 100); |
| try { |
| file1.delete(true, new SubProgressMonitor(m, 50)); |
| file1.create(getRandomContents(), true, new SubProgressMonitor(m, 50)); |
| } finally { |
| m.done(); |
| } |
| } |
| } |
| , getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| public void testSetLocal() { |
| try { |
| verifier.reset(); |
| //set local on a file that is already local -- should be no change |
| file1.setLocal(true, IResource.DEPTH_INFINITE, getMonitor()); |
| assertTrue("Unexpected notification on no change", !verifier.hasBeenNotified()); |
| |
| //set non-local, still shouldn't appear in delta |
| verifier.reset(); |
| file1.setLocal(false, IResource.DEPTH_INFINITE, getMonitor()); |
| assertTrue("Unexpected notification on no change", !verifier.hasBeenNotified()); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| /** |
| * Asserts that the delta is correct for changes to team private members. |
| */ |
| public void testTeamPrivateChanges() { |
| IWorkspace workspace = getWorkspace(); |
| final IFolder teamPrivateFolder = project1.getFolder("TeamPrivateFolder"); |
| final IFile teamPrivateFile = folder1.getFile("TeamPrivateFile"); |
| try { |
| //create a team private folder |
| verifier.reset(); |
| verifier.addExpectedChange(teamPrivateFolder, IResourceDelta.ADDED, 0); |
| workspace.run(new IWorkspaceRunnable() { |
| public void run(IProgressMonitor monitor) throws CoreException { |
| teamPrivateFolder.create(true, true, getMonitor()); |
| teamPrivateFolder.setTeamPrivateMember(true); |
| } |
| }, getMonitor()); |
| assertDelta(); |
| verifier.reset(); |
| |
| //create children in team private folder |
| IFile fileInFolder = teamPrivateFolder.getFile("FileInPrivateFolder"); |
| verifier.addExpectedChange(fileInFolder, IResourceDelta.ADDED, 0); |
| fileInFolder.create(getRandomContents(), true, getMonitor()); |
| assertDelta(); |
| verifier.reset(); |
| |
| //modify children in team private folder |
| verifier.addExpectedChange(fileInFolder, IResourceDelta.CHANGED, IResourceDelta.CONTENT); |
| fileInFolder.setContents(getRandomContents(), IResource.NONE, getMonitor()); |
| assertDelta(); |
| verifier.reset(); |
| |
| //delete children in team private folder |
| verifier.addExpectedChange(fileInFolder, IResourceDelta.REMOVED, 0); |
| fileInFolder.delete(IResource.NONE, getMonitor()); |
| assertDelta(); |
| verifier.reset(); |
| |
| //delete team private folder and change some other file |
| verifier.addExpectedChange(teamPrivateFolder, IResourceDelta.REMOVED, 0); |
| verifier.addExpectedChange(file1, IResourceDelta.CHANGED, IResourceDelta.CONTENT); |
| workspace.run(new IWorkspaceRunnable() { |
| public void run(IProgressMonitor monitor) throws CoreException { |
| teamPrivateFolder.delete(IResource.NONE, getMonitor()); |
| file1.setContents(getRandomContents(), IResource.NONE, getMonitor()); |
| } |
| }, getMonitor()); |
| assertDelta(); |
| verifier.reset(); |
| |
| //create team private file |
| verifier.addExpectedChange(teamPrivateFile, IResourceDelta.ADDED, 0); |
| workspace.run(new IWorkspaceRunnable() { |
| public void run(IProgressMonitor monitor) throws CoreException { |
| teamPrivateFile.create(getRandomContents(), true, getMonitor()); |
| teamPrivateFile.setTeamPrivateMember(true); |
| } |
| }, getMonitor()); |
| assertDelta(); |
| verifier.reset(); |
| |
| //modify team private file |
| verifier.addExpectedChange(teamPrivateFile, IResourceDelta.CHANGED, IResourceDelta.CONTENT); |
| teamPrivateFile.setContents(getRandomContents(), IResource.NONE, getMonitor()); |
| assertDelta(); |
| verifier.reset(); |
| |
| //delete team private file |
| verifier.addExpectedChange(teamPrivateFile, IResourceDelta.REMOVED, 0); |
| teamPrivateFile.delete(IResource.NONE, getMonitor()); |
| assertDelta(); |
| verifier.reset(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| public void testTwoFileChanges() { |
| try { |
| verifier.addExpectedChange(file1, IResourceDelta.CHANGED, IResourceDelta.CONTENT); |
| verifier.addExpectedChange(file2, IResourceDelta.ADDED, 0); |
| getWorkspace().run(new IWorkspaceRunnable() { |
| public void run(IProgressMonitor m) throws CoreException { |
| m.beginTask("setting contents and creating", 100); |
| try { |
| file1.setContents(getRandomContents(), true, false, new SubProgressMonitor(m, 50)); |
| file2.create(getRandomContents(), true, new SubProgressMonitor(m, 50)); |
| } finally { |
| m.done(); |
| } |
| } |
| } |
| , getMonitor()); |
| assertDelta(); |
| } catch (CoreException e) { |
| handleCoreException(e); |
| } |
| } |
| |
| /** |
| * Asserts that a manual traversal of the delta does not find the given resources. |
| */ |
| void assertNotDeltaIncludes(String message, IResourceDelta delta, IResource[] resources) { |
| try { |
| IResource deltaResource = delta.getResource(); |
| for (int i = 0; i < resources.length; i++) { |
| assertTrue(message, !deltaResource.equals(resources[i])); |
| } |
| IResourceDelta[] children = delta.getAffectedChildren(); |
| for (int i = 0; i < children.length; i++) { |
| assertNotDeltaIncludes(message, children[i], resources); |
| } |
| } catch (RuntimeException e) { |
| fail(message, e); |
| } |
| } |
| /** |
| * Asserts that a visitor traversal of the delta does not find the given resources. |
| */ |
| void assertNotDeltaVisits(final String message, IResourceDelta delta, final IResource[] resources) { |
| try { |
| delta.accept(new IResourceDeltaVisitor() { |
| public boolean visit(IResourceDelta delta) throws CoreException { |
| IResource deltaResource = delta.getResource(); |
| for (int i = 0; i < resources.length; i++) { |
| assertTrue(message, !deltaResource.equals(resources[i])); |
| } |
| return true; |
| } |
| }); |
| } catch (CoreException e) { |
| fail(message, e); |
| } catch (RuntimeException e) { |
| fail(message, e); |
| } |
| } |
| /* |
| * Create a resource change listener and register it for POST_AUTO_BUILD events. |
| * Ensure that you are able to modify the workspace tree. |
| */ |
| public void test_1GDK9OG() { |
| // create the resource change listener |
| IResourceChangeListener listener = new IResourceChangeListener() { |
| public void resourceChanged(final IResourceChangeEvent event) { |
| try { |
| IWorkspaceRunnable body = new IWorkspaceRunnable() { |
| public void run(IProgressMonitor monitor) throws CoreException { |
| // modify the tree. |
| IResourceDeltaVisitor visitor = new IResourceDeltaVisitor() { |
| public boolean visit(IResourceDelta delta) throws CoreException { |
| IResource resource = delta.getResource(); |
| try { |
| resource.touch(getMonitor()); |
| } catch (RuntimeException e) { |
| throw e; |
| } |
| resource.createMarker(IMarker.PROBLEM); |
| return true; |
| } |
| }; |
| event.getDelta().accept(visitor); |
| } |
| }; |
| getWorkspace().run(body, getMonitor()); |
| } catch (CoreException e) { |
| fail("1.0", e); |
| } |
| } |
| }; |
| // register the listener with the workspace. |
| getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.POST_AUTO_BUILD); |
| try { |
| IWorkspaceRunnable body = new IWorkspaceRunnable() { |
| // cause a delta by touching all resources |
| final IResourceVisitor visitor = new IResourceVisitor() { |
| public boolean visit(IResource resource) throws CoreException { |
| resource.touch(getMonitor()); |
| return true; |
| } |
| }; |
| public void run(IProgressMonitor monitor) throws CoreException { |
| getWorkspace().getRoot().accept(visitor); |
| } |
| }; |
| getWorkspace().run(body, getMonitor()); |
| } catch (CoreException e) { |
| fail("2.0", e); |
| } finally { |
| // cleanup: ensure that the listener is removed |
| getWorkspace().removeResourceChangeListener(listener); |
| } |
| } |
| } |