Skip to main content
summaryrefslogtreecommitdiffstats
path: root/tests
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 /tests
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
Diffstat (limited to 'tests')
-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
4 files changed, 339 insertions, 4 deletions
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