blob: 720f5c23f37ddd934908de23a77dee93a9d0678e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 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 v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM - Initial API and implementation
******************************************************************************/
package org.eclipse.team.tests.ccvs.core.provider;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Path;
import org.eclipse.team.core.TeamException;
import org.eclipse.team.internal.ccvs.core.CVSException;
import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin;
import org.eclipse.team.internal.ccvs.core.ICVSFile;
import org.eclipse.team.internal.ccvs.core.ICVSFolder;
import org.eclipse.team.internal.ccvs.core.ICVSResourceVisitor;
import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot;
import org.eclipse.team.internal.ccvs.core.syncinfo.ResourceSyncInfo;
import org.eclipse.team.internal.ccvs.core.util.AddDeleteMoveListener;
import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
import org.eclipse.team.tests.ccvs.core.EclipseTest;
public class ResourceDeltaTest extends EclipseTest {
/**
* Constructor for ResourceDeltaTest.
*/
public ResourceDeltaTest() {
super();
}
/**
* Constructor for ResourceDeltaTest.
* @param name
*/
public ResourceDeltaTest(String name) {
super(name);
}
public static Test suite() {
TestSuite suite = new TestSuite(ResourceDeltaTest.class);
return new CVSTestSetup(suite);
//return new CVSTestSetup(new ResourceDeltaTest("testOrphanedSubtree"));
}
public void assertNotManaged(ICVSFile cvsFile) throws CVSException {
assertTrue("File " + cvsFile.getName() + " should not be managed", ! cvsFile.isManaged());
}
public void assertNotManaged(ICVSFolder cvsFolder) throws CVSException {
assertTrue("Folder " + cvsFolder.getName() + " should not be managed", ! cvsFolder.isManaged());
assertTrue("Folder " + cvsFolder.getName() + " should not be a cvs folder", ! cvsFolder.isCVSFolder());
cvsFolder.acceptChildren(new ICVSResourceVisitor() {
public void visitFile(ICVSFile file) throws CVSException {
assertNotManaged(file);
}
public void visitFolder(ICVSFolder folder) throws CVSException {
assertNotManaged(folder);
}
});
}
public void assertAdditionMarkerFor(IResource resource, boolean exists) throws CoreException {
if ( ! CVSProviderPlugin.getPlugin().getShowTasksOnAddAndDelete()) return;
IMarker[] markers = resource.findMarkers(AddDeleteMoveListener.ADDITION_MARKER, false, IResource.DEPTH_ZERO);
if (exists) {
assertTrue("Addition marker doesn't exist for " + resource.getName(), markers.length == 1);
} else {
assertTrue("Addition marker exists for " + resource.getName(), markers.length == 0);
}
}
public void assertDeletionMarkerFor(IResource resource, boolean exists) throws CoreException {
if ( ! CVSProviderPlugin.getPlugin().getShowTasksOnAddAndDelete()) return;
IMarker marker = null;
if (resource.getParent().exists()) {
String name = resource.getName();
IMarker[] markers = resource.getParent().findMarkers(AddDeleteMoveListener.DELETION_MARKER, false, IResource.DEPTH_ZERO);
for (int i = 0; i < markers.length; i++) {
IMarker iMarker = markers[i];
String markerName = (String)iMarker.getAttribute(AddDeleteMoveListener.NAME_ATTRIBUTE);
if (markerName.equals(name)) {
marker = iMarker;
break;
}
}
}
if (exists) {
assertTrue("Deletion marker doesn't exist for " + resource.getName(), marker != null);
} else {
assertTrue("Deletion marker exists for " + resource.getName(), marker == null);
}
}
public void testOrphanedSubtree() throws TeamException, CoreException {
IProject project = createProject("testOrphanedSubtree", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt", "folder1/folder2/b.txt"});
IFolder folder = project.getFolder(new Path("folder1"));
folder.move(new Path("moved"), false, false, null);
folder = project.getFolder(new Path("moved"));
ICVSFolder cvsFolder = CVSWorkspaceRoot.getCVSFolderFor(folder);
assertNotManaged(cvsFolder);
assertAdditionMarkerFor(folder, true);
}
public void testDeletionHandling() throws TeamException, CoreException {
IProject project = createProject("testDeletionHandling", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt", "folder1/folder2/b.txt"});
addResources(project, new String[] {"added.txt"}, false);
assertAdditionMarkerFor(project.getFile("added.txt"), false);
deleteResources(project, new String[] {"added.txt", "deleted.txt"}, false);
ICVSFile file = CVSWorkspaceRoot.getCVSFileFor(project.getFile("added.txt"));
assertNotManaged(file);
assertDeletionMarkerFor(project.getFile("added.txt"), false);
file = CVSWorkspaceRoot.getCVSFileFor(project.getFile("deleted.txt"));
assertTrue("File " + file.getName() + " should be managed", file.isManaged());
ResourceSyncInfo info = file.getSyncInfo();
assertTrue("File " + file.getName() + " should be marked as deleted", info.isDeleted());
assertDeletionMarkerFor(project.getFile("deleted.txt"), true);
}
public void testFileAdditionHandling() throws TeamException, CoreException {
IProject project = createProject("testFileAdditionHandling", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt", "folder1/folder2/b.txt"});
deleteResources(project, new String[] {"deleted.txt"}, false);
assertDeletionMarkerFor(project.getFile("deleted.txt"), true);
addResources(project, new String[] {"deleted.txt"}, false);
ICVSFile file = CVSWorkspaceRoot.getCVSFileFor(project.getFile("deleted.txt"));
assertTrue("File " + file.getName() + " should be managed", file.isManaged());
ResourceSyncInfo info = file.getSyncInfo();
assertTrue("File " + file.getName() + " should not be marked as deleted", ! info.isDeleted());
assertTrue("File " + file.getName() + " should not be marked as addition", ! info.isAdded());
assertDeletionMarkerFor(project.getFile("deleted.txt"), false);
assertAdditionMarkerFor(project.getFile("added.txt"), false);
}
public void testFolderAdditionHandling() throws TeamException, CoreException {
IProject project = createProject("testFolderAdditionHandling", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt", "folder1/folder2/b.txt"});
IFolder folder = project.getFolder("newfolder");
folder.create(false, true, null);
assertAdditionMarkerFor(folder, true);
getProvider(project).add(new IResource[] {folder}, IResource.DEPTH_ZERO, DEFAULT_MONITOR);
assertAdditionMarkerFor(folder, false);
}
}