diff options
author | Jean Michel-Lemieux | 2002-03-20 06:16:48 +0000 |
---|---|---|
committer | Jean Michel-Lemieux | 2002-03-20 06:16:48 +0000 |
commit | 7b8c7076880672d6e1143ef478a4d1540c80d1fa (patch) | |
tree | a28c8e6cec9b827387744666982d5a605ed09b2d | |
parent | c7bf5d13b56d66db33a079e030f80fe6788a53e8 (diff) | |
download | eclipse.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
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><!ELEMENT perspective (description?)></tt> -<br><tt> <!ATTLIST perspective</tt> -<br><tt> natureId CDATA #REQUIRED</tt> -<br><tt> ></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><extension id="CVSProvider" point="org.eclipse.team.core.providers"></tt> -<br><tt> <providers natureId="org.eclipse.team.provider.cvs.core.cvsnature"/></tt> -<br><tt> </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); + } } |