blob: f591638d0b50fba5a763ddd7f3d73f280f74a72f [file] [log] [blame]
package org.eclipse.team.tests.ccvs.core.provider;
/*
* (c) Copyright IBM Corp. 2000, 2002.
* All Rights Reserved.
*/
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
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.runtime.CoreException;
import org.eclipse.core.runtime.Path;
import org.eclipse.team.core.TeamException;
import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin;
import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
import org.eclipse.team.tests.ccvs.core.EclipseTest;
/**
* @version 1.0
* @author ${user}
*/
public class ImportTest extends EclipseTest {
/**
* Constructor for ImportTest.
*/
public ImportTest() {
super();
}
/**
* Constructor for ImportTest.
* @param name
*/
public ImportTest(String name) {
super(name);
}
public static Test suite() {
TestSuite suite = new TestSuite(ImportTest.class);
return new CVSTestSetup(suite);
//return new CVSTestSetup(new ImportTest("testReadOnly"));
}
// Assert that the two containers have equal contents
protected void assertEquals(IContainer container1, IContainer container2) throws CoreException {
assertEquals(container1.getName(), container2.getName());
List members1 = new ArrayList();
members1.addAll(Arrays.asList(container1.members()));
members1.remove(container1.findMember("CVS"));
List members2 = new ArrayList();
members2.addAll(Arrays.asList(container2.members()));
members2.remove(container2.findMember("CVS"));
assertTrue(members1.size() == members2.size());
for (int i=0;i<members1.size();i++) {
IResource member1 = (IResource)members1.get(i);
IResource member2 = container2.findMember(member1.getName());
assertNotNull(member2);
assertEquals(member1, member2);
}
}
// Assert that the two files have equal contents
protected void assertEquals(IFile file1, IFile file2) throws CoreException {
assertEquals(file1.getName(), file2.getName());
assertTrue(compareContent(file1.getContents(), file2.getContents()));
}
// Assert that the two projects have equal contents ignoreing the project name
// and the .vcm_meta file
protected void assertEquals(IProject container1, IProject container2) throws CoreException {
List members1 = new ArrayList();
members1.addAll(Arrays.asList(container1.members()));
members1.remove(container1.findMember(".project"));
members1.remove(container1.findMember("CVS"));
List members2 = new ArrayList();
members2.addAll(Arrays.asList(container2.members()));
members2.remove(container2.findMember(".project"));
members2.remove(container2.findMember("CVS"));
assertTrue("Number of children differs for " + container1.getFullPath(), members1.size() == members2.size());
for (int i=0;i<members1.size();i++) {
IResource member1 = (IResource)members1.get(i);
IResource member2 = container2.findMember(member1.getName());
assertNotNull(member2);
assertEquals(member1, member2);
}
}
protected void assertEquals(IResource resource1, IResource resource2) throws CoreException {
assertEquals(resource1.getType(), resource2.getType());
if (resource1.getType() == IResource.FILE)
assertEquals((IFile)resource1, (IFile)resource2);
else
assertEquals((IContainer)resource1, (IContainer)resource2);
}
public void testImportAndCheckout() throws TeamException, CoreException {
// Create a test project and import it into cvs
IProject project = getUniqueTestProject("testImport");
IResource[] result = buildResources(project, new String[] { "file1.txt", "folder1/", "folder1/a.txt" }, true);
importProject(project);
// Check it out under a different name and validate that the results are the same
IProject copy = getWorkspace().getRoot().getProject(project.getName() + "Copy");
CVSProviderPlugin.getProvider().checkout(getRepository(), copy, project.getName(), null, DEFAULT_MONITOR);
assertValidCheckout(copy);
assertEquals(project, copy);
}
public void testCheckout() throws TeamException, CoreException, IOException {
// Create a project and checkout a copy
IProject project = createProject("testCheckout", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" });
IProject copy = checkoutCopy(project, "-copy");
// 0. checkout the project again
project = checkoutProject(project, null, null);
assertEquals(project, copy, true, true);
// 1. Delete the project but not it's contents and checkout the project again
project.delete(false, false, DEFAULT_MONITOR);
project = checkoutProject(project, null, null);
assertEquals(project, copy, true, true);
// 2. Delete the project and its contents and use the module name instead of the project
project.delete(true, false, DEFAULT_MONITOR);
project = checkoutProject(null, project.getName(), null);
assertEquals(project, copy, true, true);
// 3. Create a project in a custom location and check out over it
project.delete(true, false, DEFAULT_MONITOR);
IProjectDescription desc = ResourcesPlugin.getWorkspace().newProjectDescription(project.getName());
//desc.setLocation(new Path("C:\\temp\\project"));
project.create(desc, DEFAULT_MONITOR);
project = checkoutProject(project, null, null);
assertEquals(project, copy, true, true);
// 4. Checkout something that doesn't contain a .project
project.delete(true, false, DEFAULT_MONITOR);
project = checkoutProject(null, project.getName() + "/folder1", null);
//assertEquals(project, copy.getFolder("folder1"));
}
}