Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean Michel-Lemieux2002-03-20 06:16:48 +0000
committerJean Michel-Lemieux2002-03-20 06:16:48 +0000
commit7b8c7076880672d6e1143ef478a4d1540c80d1fa (patch)
treea28c8e6cec9b827387744666982d5a605ed09b2d
parentc7bf5d13b56d66db33a079e030f80fe6788a53e8 (diff)
downloadeclipse.platform.team-7b8c7076880672d6e1143ef478a4d1540c80d1fa.tar.gz
eclipse.platform.team-7b8c7076880672d6e1143ef478a4d1540c80d1fa.tar.xz
eclipse.platform.team-7b8c7076880672d6e1143ef478a4d1540c80d1fa.zip
Added tests for team.core and made initial fixes based on tests
-rw-r--r--bundles/org.eclipse.team.core/doc/org_eclipse_team_core.html10
-rw-r--r--bundles/org.eclipse.team.core/doc/org_eclipse_team_core_providers.html32
-rw-r--r--bundles/org.eclipse.team.core/src/org/eclipse/team/core/RepositoryProvider.java36
-rw-r--r--tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderBic.java28
-rw-r--r--tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderNaish.java27
-rw-r--r--tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderTests.java282
-rw-r--r--tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TeamTest.java6
7 files changed, 373 insertions, 48 deletions
diff --git a/bundles/org.eclipse.team.core/doc/org_eclipse_team_core.html b/bundles/org.eclipse.team.core/doc/org_eclipse_team_core.html
index 7cd6300f0..fbe0e1abb 100644
--- a/bundles/org.eclipse.team.core/doc/org_eclipse_team_core.html
+++ b/bundles/org.eclipse.team.core/doc/org_eclipse_team_core.html
@@ -8,16 +8,10 @@
<center>
<h1>Team Core Plug-in</h1></center>
-This document lists all of the extension points that the Team Core plug-in makes available to provider developers.
+This document lists all of the extension points that the Team Core plug-in makes available to repository provider developers.
<p>
<hr WIDTH="100%">
-<h1>
-General Extension Points</h1>
-The following extension point can be used to register a team provider nature id with the platform:
-<ul>
-<li>
-<a href="org_eclipse_team_core_providers.html">org.eclipse.team.core.providers</a></li>
-</ul>
+<h1>General Extension Points</h1>
<a href="hglegal.htm"><img SRC="ngibmcpy.gif" ALT="Copyright IBM Corp. 2000, 2001. All Rights Reserved." BORDER=0 height=12 width=195></a>
</body>
</html>
diff --git a/bundles/org.eclipse.team.core/doc/org_eclipse_team_core_providers.html b/bundles/org.eclipse.team.core/doc/org_eclipse_team_core_providers.html
deleted file mode 100644
index 790a8c730..000000000
--- a/bundles/org.eclipse.team.core/doc/org_eclipse_team_core_providers.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
- <meta name="GENERATOR" content="Mozilla/4.5 [en] (WinNT; I) [Netscape]">
- <title>Workbench Extension Points</title>
-</head>
-<body link="#0000FF" vlink="#800080">
-
-<center>
-<h1>
-Applications</h1></center>
-<b><i>Identifier: </i></b>org.eclipse.team.core.providers
-<p><b><i>Description:</i></b> This extension point is used to register
-a provider nature with the Team Core plugin. Registered provider natures
-benefit from the services provided by the Team Core plug-in. These include
-programmatic configuration of providers and cardinality enforcement (e.g.
-only one team nature can be assigned to a project at a time).
-<p>Configuration Markup:
-<p><tt>&lt;!ELEMENT perspective (description?)></tt>
-<br><tt>&nbsp;&nbsp; &lt;!ATTLIST perspective</tt>
-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; natureId&nbsp; CDATA #REQUIRED</tt>
-<br><tt>&nbsp;&nbsp;&nbsp; ></tt><tt></tt>
-<p><b>natureId</b> - the nature identifier to register
-<p><b><i>Examples:</i></b> The following is an example of a providers extension:
-<p><tt>&lt;extension id="CVSProvider" point="org.eclipse.team.core.providers"></tt>
-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp; &lt;providers natureId="org.eclipse.team.provider.cvs.core.cvsnature"/></tt>
-<br><tt>&nbsp;&lt;/extension></tt><tt></tt>
-<a href="hglegal.htm"><img SRC="ngibmcpy.gif" ALT="Copyright IBM Corp. 2000, 2001. All Rights Reserved." BORDER=0 height=12 width=195></a>
-</body>
-</html>
- \ No newline at end of file
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/RepositoryProvider.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/RepositoryProvider.java
index a5f73cb12..a50ceaabd 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/RepositoryProvider.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/RepositoryProvider.java
@@ -67,6 +67,9 @@ public abstract class RepositoryProvider implements IProjectNature {
private final static String TEAM_SETID = "org.eclipse.team.repository-provider";
+ // the project instance that this nature is assigned to
+ private IProject project;
+
/**
* Default constructor required for the resources plugin to instantiate this class from
* the nature extension definition.
@@ -162,8 +165,10 @@ public abstract class RepositoryProvider implements IProjectNature {
List teamSet = new ArrayList();
for (int i = 0; i < desc.length; i++) {
String[] setIds = desc[i].getNatureSetIds();
- if(setIds.equals(TEAM_SETID)) {
- teamSet.add(desc[i].getNatureId());
+ for (int j = 0; j < setIds.length; j++) {
+ if(setIds[j].equals(TEAM_SETID)) {
+ teamSet.add(desc[i].getNatureId());
+ }
}
}
return (String[]) teamSet.toArray(new String[teamSet.size()]);
@@ -204,7 +209,8 @@ public abstract class RepositoryProvider implements IProjectNature {
/**
* Returns a provider of type with the given id if associated with the given project
- * or <code>null</code> if the project is not associated with a provider of that type.
+ * or <code>null</code> if the project is not associated with a provider of that type
+ * or the nature id is that of a non-team repository provider nature.
*
* @param project the project to query for a provider
* @param id the repository provider id
@@ -213,7 +219,15 @@ public abstract class RepositoryProvider implements IProjectNature {
final public static RepositoryProvider getProvider(IProject project, String id) {
try {
if(project.isAccessible()) {
- return (RepositoryProvider)project.getNature(id);
+ // if the nature id given is not in the team set then return
+ // null.
+ IProjectNatureDescriptor desc = ResourcesPlugin.getWorkspace().getNatureDescriptor(id);
+ String[] setIds = desc.getNatureSetIds();
+ for (int i = 0; i < setIds.length; i++) {
+ if(setIds[i].equals(TEAM_SETID)) {
+ return (RepositoryProvider)project.getNature(id);
+ }
+ }
}
} catch(ClassCastException e) {
TeamPlugin.log(new Status(IStatus.ERROR, TeamPlugin.ID, 0, Policy.bind("RepositoryProviderTypeRepositoryProvider_assigned_to_the_project_must_be_a_subclass_of_RepositoryProvider___2") + id, e)); //$NON-NLS-1$
@@ -283,4 +297,18 @@ public abstract class RepositoryProvider implements IProjectNature {
public SimpleAccessOperations getSimpleAccess() {
return null;
}
+
+ /*
+ * @see IProjectNature#getProject()
+ */
+ public IProject getProject() {
+ return project;
+ }
+
+ /*
+ * @see IProjectNature#setProject(IProject)
+ */
+ public void setProject(IProject project) {
+ this.project = project;
+ }
}
diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderBic.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderBic.java
index 3db32af1b..0ef738c9c 100644
--- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderBic.java
+++ b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderBic.java
@@ -1,6 +1,7 @@
package org.eclipse.team.tests.core;
-import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IFileModificationValidator;
+import org.eclipse.core.resources.team.IMoveDeleteHook;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.team.core.RepositoryProvider;
@@ -8,6 +9,9 @@ public class RepositoryProviderBic extends RepositoryProvider {
final public static String NATURE_ID = "org.eclipse.team.tests.core.bic-provider";
+ private IMoveDeleteHook mdh;
+ private IFileModificationValidator mv;
+
/*
* @see RepositoryProvider#configureProject()
*/
@@ -25,4 +29,26 @@ public class RepositoryProviderBic extends RepositoryProvider {
*/
public void deconfigure() throws CoreException {
}
+
+ /*
+ * @see RepositoryProvider#getFileModificationValidator()
+ */
+ public IFileModificationValidator getFileModificationValidator() {
+ return mv;
+ }
+
+ /*
+ * @see RepositoryProvider#getMoveDeleteHook()
+ */
+ public IMoveDeleteHook getMoveDeleteHook() {
+ return mdh;
+ }
+
+ public void setModificationValidator(IFileModificationValidator mv) {
+ this.mv = mv;
+ }
+
+ public void setMoveDeleteHook(IMoveDeleteHook mdh) {
+ this.mdh = mdh;
+ }
} \ No newline at end of file
diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderNaish.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderNaish.java
index d1e08e095..570c3387b 100644
--- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderNaish.java
+++ b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderNaish.java
@@ -1,13 +1,15 @@
package org.eclipse.team.tests.core;
-import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IFileModificationValidator;
+import org.eclipse.core.resources.team.IMoveDeleteHook;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.team.core.RepositoryProvider;
public class RepositoryProviderNaish extends RepositoryProvider {
final public static String NATURE_ID = "org.eclipse.team.tests.core.naish-provider";
-
+ private IMoveDeleteHook mdh;
+ private IFileModificationValidator mv;
/*
* @see RepositoryProvider#configureProject()
*/
@@ -25,4 +27,25 @@ public class RepositoryProviderNaish extends RepositoryProvider {
*/
public void deconfigure() throws CoreException {
}
+
+ public void setModificationValidator(IFileModificationValidator mv) {
+ this.mv = mv;
+ }
+
+ public void setMoveDeleteHook(IMoveDeleteHook mdh) {
+ this.mdh = mdh;
+ }
+ /*
+ * @see RepositoryProvider#getFileModificationValidator()
+ */
+ public IFileModificationValidator getFileModificationValidator() {
+ return mv;
+ }
+
+ /*
+ * @see RepositoryProvider#getMoveDeleteHook()
+ */
+ public IMoveDeleteHook getMoveDeleteHook() {
+ return mdh;
+ }
} \ No newline at end of file
diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderTests.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderTests.java
index b81990a64..df5693d23 100644
--- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderTests.java
+++ b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderTests.java
@@ -1,5 +1,6 @@
package org.eclipse.team.tests.core;
+import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -7,8 +8,19 @@ import java.util.List;
import junit.extensions.TestSetup;
import junit.framework.Test;
import junit.framework.TestSuite;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFileModificationValidator;
+import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.team.IMoveDeleteHook;
+import org.eclipse.core.resources.team.IResourceTree;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
import org.eclipse.team.core.RepositoryProvider;
import org.eclipse.team.core.TeamException;
@@ -36,12 +48,280 @@ public class RepositoryProviderTests extends TeamTest {
public void testGetProviderGeneric() throws CoreException, TeamException {
IProject project = getUniqueTestProject("testGetProviderGeneric");
+ IProject project2 = getUniqueTestProject("testGetProviderGeneric");
// test that adding a non-team nature will not return a provider
RepositoryProvider.addNatureToProject(project, RepositoryProviderOtherSport.NATURE_ID, null);
assertTrue(RepositoryProvider.getProvider(project) == null);
// adding a valid team provider should be fine
- //RepositoryProvider.addNatureToProject(project, RepositoryProvider);
+ RepositoryProvider.addNatureToProject(project, RepositoryProviderBic.NATURE_ID, null);
+ RepositoryProvider.addNatureToProject(project2, RepositoryProviderNaish.NATURE_ID, null);
+ RepositoryProvider provider1 = RepositoryProvider.getProvider(project);
+ RepositoryProvider provider2 = RepositoryProvider.getProvider(project2);
+ assertTrue(provider1 != null && provider1.getID().equals(RepositoryProviderBic.NATURE_ID));
+ assertTrue(provider2 != null && provider2.getID().equals(RepositoryProviderNaish.NATURE_ID));
+ assertTrue(provider1.getProject().equals(project) && provider2.getProject().equals(project2));
+
+ // adding another provider should be prohibited by core
+ try {
+ RepositoryProvider.addNatureToProject(project, RepositoryProviderNaish.NATURE_ID, null);
+ fail("cannot add two team providers to the same project");
+ } catch(TeamException e) {
+ provider1 = RepositoryProvider.getProvider(project);
+ assertTrue(provider1 != null && provider1.getID().equals(RepositoryProviderBic.NATURE_ID));
+ }
+
+ // closed or non-existant projects cannot be associated with a provider
+ IProject closedProject = getUniqueTestProject("testGetProviderGenericClosed");
+ IProject nonExistantProject = ResourcesPlugin.getWorkspace().getRoot().getProject("nonExistant");
+ closedProject.close(null);
+ assertTrue(RepositoryProvider.getProvider(closedProject) == null);
+ assertTrue(RepositoryProvider.getProvider(nonExistantProject) == null);
+
+ // removing the nature removes the provider association
+ RepositoryProvider.removeNatureFromProject(project, RepositoryProviderBic.NATURE_ID, null);
+ RepositoryProvider.removeNatureFromProject(project2, RepositoryProviderNaish.NATURE_ID, null);
+ assertTrue(RepositoryProvider.getProvider(project)==null);
+ assertTrue(RepositoryProvider.getProvider(project2)==null);
+ }
+
+ public void testGetProviderById() throws CoreException, TeamException {
+ IProject project1 = getUniqueTestProject("testGetProviderById_1");
+ IProject project2 = getUniqueTestProject("testGetProviderById_2");
+
+ // test that adding a non-team nature will not return a provider
+ RepositoryProvider.addNatureToProject(project1, RepositoryProviderOtherSport.NATURE_ID, null);
+ assertTrue(RepositoryProvider.getProvider(project1, RepositoryProviderOtherSport.NATURE_ID) == null);
+
+ // adding a valid team provider should be fine
+ RepositoryProvider.addNatureToProject(project1, RepositoryProviderBic.NATURE_ID, null);
+ RepositoryProvider.addNatureToProject(project2, RepositoryProviderNaish.NATURE_ID, null);
+ assertTrue(RepositoryProvider.getProvider(project1, RepositoryProviderBic.NATURE_ID)!=null);
+ assertTrue(RepositoryProvider.getProvider(project2, RepositoryProviderNaish.NATURE_ID)!=null);
+
+ // adding another provider should be prohibited by core
+ try {
+ RepositoryProvider.addNatureToProject(project1, RepositoryProviderNaish.NATURE_ID, null);
+ fail("cannot add two team providers to the same project");
+ } catch(TeamException e) {
+ assertTrue(RepositoryProvider.getProvider(project1, RepositoryProviderBic.NATURE_ID)!=null);
+ }
+
+ // closed or non-existant projects cannot be associated with a provider
+ IProject closedProject = getUniqueTestProject("testGetProviderGenericClosed");
+ IProject nonExistantProject = ResourcesPlugin.getWorkspace().getRoot().getProject("nonExistant");
+ closedProject.close(null);
+ assertTrue(RepositoryProvider.getProvider(closedProject, "id") == null);
+ assertTrue(RepositoryProvider.getProvider(nonExistantProject, "id") == null);
+
+ // removing the nature removes the provider association
+ RepositoryProvider.removeNatureFromProject(project1, RepositoryProviderBic.NATURE_ID, null);
+ RepositoryProvider.removeNatureFromProject(project2, RepositoryProviderNaish.NATURE_ID, null);
+ assertTrue(RepositoryProvider.getProvider(project1, RepositoryProviderBic.NATURE_ID)==null);
+ assertTrue(RepositoryProvider.getProvider(project2, RepositoryProviderNaish.NATURE_ID)==null);
+ }
+
+ public void testFileModificationValidator() throws CoreException, TeamException {
+ IProject project = getUniqueTestProject("testFileModificationValidator");
+
+ // adding a valid team provider should be fine
+ RepositoryProvider.addNatureToProject(project, RepositoryProviderBic.NATURE_ID, null);
+ RepositoryProviderBic bicProvider = (RepositoryProviderBic)RepositoryProvider.getProvider(project, RepositoryProviderBic.NATURE_ID);
+ assertTrue(bicProvider!=null);
+
+ // test that validator gets called by team core dispatching
+ final boolean[] called = new boolean[] {false};
+ bicProvider.setModificationValidator(new IFileModificationValidator() {
+ // can't test validate edit here because it is only called from editors
+ public IStatus validateEdit(IFile[] files, Object context) {
+ return null;
+ }
+ public IStatus validateSave(IFile file) {
+ called[0] = true;
+ return getTeamTestStatus(IStatus.OK);
+ }
+ });
+ IFile file = project.getFile("test.txt");
+ file.create(new ByteArrayInputStream("test".getBytes()), true, null);
+ file.setContents(new ByteArrayInputStream("test2".getBytes()), true, false, null);
+ assertTrue(called[0] == true);
+
+ // test that validator can veto a setContents
+ called[0] = false;
+ bicProvider.setModificationValidator(new IFileModificationValidator() {
+ // can't test validate edit here because it is only called from editors
+ public IStatus validateEdit(IFile[] files, Object context) {
+ return null;
+ }
+ public IStatus validateSave(IFile file) {
+ called[0] = true;
+ return getTeamTestStatus(IStatus.ERROR);
+ }
+ });
+ try {
+ file.setContents(new ByteArrayInputStream("test3".getBytes()), true, false, null);
+ fail("validate hook should veto this setContents");
+ } catch(CoreException e) {
+ assertTrue(called[0] == true);
+ }
+
+ // test that default validator allows the modification
+ bicProvider.setModificationValidator(null);
+ file.setContents(new ByteArrayInputStream("test4".getBytes()), true, false, null);
+ }
+
+ public void testMoveDeleteHook() throws CoreException, TeamException {
+ final IProject project = getUniqueTestProject("testMoveDeleteHook");
+
+ // adding a valid team provider should be fine
+ RepositoryProvider.addNatureToProject(project, RepositoryProviderBic.NATURE_ID, null);
+ RepositoryProviderBic bicProvider = (RepositoryProviderBic)RepositoryProvider.getProvider(project, RepositoryProviderBic.NATURE_ID);
+ assertTrue(bicProvider!=null);
+
+ // only testing that dispatching works, resources plugin is testing the rest of the API
+ final boolean[] called = new boolean[] {false, false, false, false, false, false};
+ IMoveDeleteHook hook = new IMoveDeleteHook() {
+ public boolean deleteFile(IResourceTree tree, IFile file, int updateFlags, IProgressMonitor monitor) {
+ called[0] = true;
+ return false;
+ }
+ public boolean deleteFolder(IResourceTree tree, IFolder folder, int updateFlags, IProgressMonitor monitor) {
+ called[1] = true;
+ return false;
+ }
+ public boolean deleteProject(IResourceTree tree, IProject project, int updateFlags, IProgressMonitor monitor) {
+ called[2] = true;
+ return false;
+ }
+ public boolean moveFile(IResourceTree tree, IFile source, IFile destination, int updateFlags, IProgressMonitor monitor) {
+ called[3] = true;
+ return false;
+ }
+ public boolean moveFolder(IResourceTree tree, IFolder source, IFolder destination, int updateFlags, IProgressMonitor monitor) {
+ called[4] = true;
+ return false;
+ }
+ public boolean moveProject(IResourceTree tree, IProject source, IProjectDescription description, int updateFlags, IProgressMonitor monitor) {
+ called[5] = true;
+ return false;
+ }
+ };
+ bicProvider.setMoveDeleteHook(hook);
+
+ IResource[] resources = buildResources(project, new String[] {"deleteFile.txt", "moveFile.txt", "deletedFolder/", "moveFolder/"});
+ ensureExistsInWorkspace(resources, true);
+ resources[0].delete(false, null);
+ resources[1].move(resources[1].getFullPath().removeLastSegments(1).append("movedFile_NEW"), false, null);
+ resources[2].delete(false, null);
+ resources[3].move(resources[3].getFullPath().removeLastSegments(1).append("movedFolder"), false, null);
+ // moving using the description allows the moved project to have natures ids or origination
+ IProjectDescription desc = project.getDescription();
+ desc.setName("movedProject");
+ project.move(desc, false, null);
+ IProject newProject = ResourcesPlugin.getWorkspace().getRoot().getProject("movedProject");
+ bicProvider = (RepositoryProviderBic)RepositoryProvider.getProvider(newProject);
+ bicProvider.setMoveDeleteHook(hook);
+ newProject.delete(true, null);
+ for (int i = 0; i < called.length; i++) {
+ assertTrue(called[i]);
+ }
+ }
+
+ public void testMoveDeleteHookBetweenProjects() throws CoreException, TeamException {
+ final IProject projectA = getUniqueTestProject("testMoveDeleteHookBetweenProjects_A");
+ final IProject projectB = getUniqueTestProject("testMoveDeleteHookBetweenProjects_B");
+
+ // adding a valid team provider should be fine
+ RepositoryProvider.addNatureToProject(projectA, RepositoryProviderBic.NATURE_ID, null);
+ final RepositoryProviderBic bicProvider = (RepositoryProviderBic)RepositoryProvider.getProvider(projectA, RepositoryProviderBic.NATURE_ID);
+ RepositoryProvider.addNatureToProject(projectB, RepositoryProviderNaish.NATURE_ID, null);
+ final RepositoryProviderNaish naishProvider = (RepositoryProviderNaish)RepositoryProvider.getProvider(projectB, RepositoryProviderNaish.NATURE_ID);
+ assertTrue(bicProvider!=null && naishProvider!=null);
+
+ // only testing that dispatching works, resources plugin is testing the rest of the API
+ final boolean[] calledProjectA = new boolean[] {false, false};
+ bicProvider.setMoveDeleteHook(new IMoveDeleteHook() {
+ public boolean deleteFile(IResourceTree tree, IFile file, int updateFlags, IProgressMonitor monitor) {
+ return false;
+ }
+ public boolean deleteFolder(IResourceTree tree, IFolder folder, int updateFlags, IProgressMonitor monitor) {
+ return false;
+ }
+ public boolean deleteProject(IResourceTree tree, IProject project, int updateFlags, IProgressMonitor monitor) {
+ return false;
+ }
+ public boolean moveFile(IResourceTree tree, IFile source, IFile destination, int updateFlags, IProgressMonitor monitor) {
+ assertTrue(bicProvider.getProject().equals(source.getProject()));
+ calledProjectA[0] = true;
+ return false;
+ }
+ public boolean moveFolder(IResourceTree tree, IFolder source, IFolder destination, int updateFlags, IProgressMonitor monitor) {
+ assertTrue(bicProvider.getProject().equals(source.getProject()));
+ calledProjectA[1] = true;
+ return false;
+ }
+ public boolean moveProject(IResourceTree tree, IProject source, IProjectDescription description, int updateFlags, IProgressMonitor monitor) {
+ return false;
+ }
+ });
+
+ final boolean[] calledProjectB = new boolean[] {false, false};
+ naishProvider.setMoveDeleteHook(new IMoveDeleteHook() {
+ public boolean deleteFile(IResourceTree tree, IFile file, int updateFlags, IProgressMonitor monitor) {
+ return false;
+ }
+ public boolean deleteFolder(IResourceTree tree, IFolder folder, int updateFlags, IProgressMonitor monitor) {
+ return false;
+ }
+ public boolean deleteProject(IResourceTree tree, IProject project, int updateFlags, IProgressMonitor monitor) {
+ return false;
+ }
+ public boolean moveFile(IResourceTree tree, IFile source, IFile destination, int updateFlags, IProgressMonitor monitor) {
+ assertTrue(bicProvider.getProject().equals(destination.getProject()));
+ calledProjectB[0] = true;
+ return false;
+ }
+ public boolean moveFolder(IResourceTree tree, IFolder source, IFolder destination, int updateFlags, IProgressMonitor monitor) {
+ assertTrue(bicProvider.getProject().equals(destination.getProject()));
+ calledProjectB[1] = true;
+ return false;
+ }
+ public boolean moveProject(IResourceTree tree, IProject source, IProjectDescription description, int updateFlags, IProgressMonitor monitor) {
+ return false;
+ }
+ });
+
+ IResource[] resources = buildResources(projectA, new String[] {"moveFile.txt", "moveFolder/"});
+ ensureExistsInWorkspace(resources, true);
+ resources[0].move(projectB.getFullPath().append("moveFile_new.txt"), false, null);
+ resources[1].move(projectB.getFullPath().append("movedFolder"), false, null);
+ for (int i = 0; i < calledProjectA.length; i++) {
+ assertTrue(calledProjectA[i] && calledProjectB[i]);
+ }
+
+ // test that moving files/folders from a project without a provider to a project with a provider calls the
+ // move hooks for the destination
+ calledProjectA[0] = false; calledProjectA[1] = false;
+ calledProjectB[0] = false; calledProjectB[1] = false;
+ IProject projectC = getUniqueTestProject("testMoveDeleteHookBetweenProjects_B");
+ resources = buildResources(projectC, new String[] {"moveFile.txt", "moveFolder/"});
+ resources[0].move(projectB.getFullPath().append("moveFile_new.txt"), false, null);
+ resources[1].move(projectB.getFullPath().append("movedFolder"), false, null);
+ for (int i = 0; i < calledProjectA.length; i++) {
+ assertTrue(calledProjectA[i]==false && calledProjectB[i]);
+ }
+
+ // test that moving files/folders from a project with a provider to a project without a provider calls the
+ // hooks for the source
+ calledProjectA[0] = false; calledProjectA[1] = false;
+ calledProjectB[0] = false; calledProjectB[1] = false;
+ resources = buildResources(projectA, new String[] {"anotherMovedFiled.txt", "anotherMovedFolder/"});
+ ensureExistsInWorkspace(resources, true);
+ resources[0].move(projectC.getFullPath().append("moveFileOther_new.txt"), false, null);
+ resources[1].move(projectC.getFullPath().append("movedFolderOther"), false, null);
+ for (int i = 0; i < calledProjectA.length; i++) {
+ assertTrue(calledProjectA[i] && calledProjectB[i]==false);
+ }
}
}
diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TeamTest.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TeamTest.java
index 7f64727fe..feb37bffa 100644
--- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TeamTest.java
+++ b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TeamTest.java
@@ -2,6 +2,8 @@ package org.eclipse.team.tests.core;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
import org.eclipse.core.tests.harness.EclipseWorkspaceTest;
public class TeamTest extends EclipseWorkspaceTest {
@@ -26,4 +28,8 @@ public class TeamTest extends EclipseWorkspaceTest {
// manage and share with the default stream create by this class
return getNamedTestProject(prefix + "-" + Long.toString(System.currentTimeMillis()));
}
+
+ protected IStatus getTeamTestStatus(int severity) {
+ return new Status(severity, "org.eclipse.team.tests.core", 0, "team status", null);
+ }
}

Back to the top