blob: 09b2629903ef8aeb9eab940373e151ba0baa7c03 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.team.tests.ccvs.core.provider;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import junit.framework.Assert;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IPluginDescriptor;
import org.eclipse.core.runtime.IPluginRegistry;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.team.core.TeamException;
import org.eclipse.team.internal.ccvs.core.CVSTag;
import org.eclipse.team.internal.ccvs.core.ICVSFolder;
import org.eclipse.team.internal.ccvs.core.ICVSRemoteResource;
import org.eclipse.team.internal.ccvs.core.ICVSResource;
import org.eclipse.team.internal.ccvs.core.client.Command;
import org.eclipse.team.internal.ccvs.core.client.Session;
import org.eclipse.team.internal.ccvs.core.client.Command.LocalOption;
import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot;
import org.eclipse.team.internal.ccvs.core.resources.RemoteFolder;
import org.eclipse.team.internal.ccvs.core.resources.RemoteModule;
import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
import org.eclipse.team.tests.ccvs.core.EclipseTest;
import org.osgi.framework.Bundle;
/**
* This class tests the Command framework using simple CVS commands
*/
public class ModuleTest extends EclipseTest {
public static final String RESOURCE_PATH = "resources/CommandTest/";
public ModuleTest() {
super(null);
}
public ModuleTest(String name) {
super(name);
}
public static Test suite() {
TestSuite suite = new TestSuite(ModuleTest.class);
return new CVSTestSetup(suite);
//return new CVSTestSetup(new ModuleTest("testAliasForFiles"));
}
private static boolean isSetUp = false;
private static RemoteModule[] remoteModules;
public void setUp() throws TeamException, CoreException, IOException {
if (isSetUp) return;
// upload the modules definitions file
Bundle b = Platform.getBundle("org.eclipse.team.tests.cvs.core");
URL url = b.getEntry(RESOURCE_PATH + "CVSROOT/modules");
waitMsec(1000);
IProject cvsroot = checkoutProject(null, "CVSROOT", null);
InputStream in = url.openStream();
try {
cvsroot.getFile("modules").setContents(in, false, false, DEFAULT_MONITOR);
} finally {
in.close();
}
commitProject(cvsroot);
uploadProject("common");
remoteModules = RemoteModule.getRemoteModules(getRepository(), null, DEFAULT_MONITOR);
isSetUp = true;
}
protected void uploadProject(String projectName) throws TeamException, IOException, CoreException {
// locate the test case contents in the plugin resources
IPluginRegistry registry = Platform.getPluginRegistry();
IPluginDescriptor descriptor = registry.getPluginDescriptor("org.eclipse.team.tests.cvs.core");
URL baseURL = descriptor.getInstallURL();
URL url = new URL(baseURL, RESOURCE_PATH + projectName);
url = Platform.resolve(url);
Assert.assertTrue(url.getProtocol().equals("file"));
IPath path = new Path(url.getPath());
// create a project rooted there
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IWorkspaceRoot workspaceRoot = workspace.getRoot();
IProject project = workspaceRoot.getProject(projectName);
IProjectDescription projectDescription = workspace.newProjectDescription(projectName);
projectDescription.setLocation(path);
project.create(projectDescription, null);
project.open(null);
// import the project into CVS
Session s = new Session(getRepository(), CVSWorkspaceRoot.getCVSFolderFor(project));
s.open(DEFAULT_MONITOR, true /* open for modification */);
try {
Command.IMPORT.execute(s, Command.NO_GLOBAL_OPTIONS,
new LocalOption[] {Command.makeArgumentOption(Command.MESSAGE_OPTION, "")},
new String[] { projectName, "start", "vendor"},
null,
DEFAULT_MONITOR);
} finally {
s.close();
}
// delete the project locally
project.delete(false /*deleteContent*/, false /*force*/, null);
}
// XXX Temporary method of checkout (i.e. with vcm_meta
protected IProject checkoutProject(String projectName, CVSTag tag) throws TeamException, CoreException {
IProject project = super.checkoutProject(getWorkspace().getRoot().getProject(projectName), null, tag);
ICVSFolder parent = (ICVSFolder)CVSWorkspaceRoot.getCVSResourceFor(project);
ICVSResource vcmmeta = CVSWorkspaceRoot.getCVSResourceFor(project.getFile(".vcm_meta"));
if ( ! vcmmeta.isManaged() && ! parent.getFolderSyncInfo().getIsStatic()) {
addResources(new IResource[] {project.getFile(".vcm_meta")});
waitMsec(1000);
commitProject(project);
}
return project;
}
/*
* Test the following definition
*
* # self referencing modules
* project1 project1
*/
public void testSelfReferencingModule() throws TeamException, CoreException, IOException {
uploadProject("project1");
IProject project1 = checkoutProject("project1", null);
ICVSRemoteResource tree = getRemoteTree(project1, CVSTag.DEFAULT, DEFAULT_MONITOR);
assertEquals(Path.EMPTY, CVSWorkspaceRoot.getCVSResourceFor(project1), tree, false, false);
RemoteModule module = getRemoteModule("project1");
assertEquals(Path.EMPTY, (RemoteFolder)tree, module, false);
}
/*
* Test the following definition
*
* # checkout docs in flattened structure
* docs -d docs common/docs
* macros common/macros
*/
public void testFlattenedStructure() throws TeamException, CoreException, IOException {
IProject docs = checkoutProject("docs", null);
ICVSRemoteResource tree = getRemoteTree(docs, CVSTag.DEFAULT, DEFAULT_MONITOR);
assertEquals(Path.EMPTY, CVSWorkspaceRoot.getCVSResourceFor(docs), tree, false, false);
RemoteModule module = getRemoteModule("docs");
assertEquals(Path.EMPTY, (RemoteFolder)tree, module, false);
IProject macros = checkoutProject("macros", null);
tree = getRemoteTree(macros, CVSTag.DEFAULT, DEFAULT_MONITOR);
assertEquals(Path.EMPTY, CVSWorkspaceRoot.getCVSResourceFor(macros), tree, false, false);
module = getRemoteModule("macros");
assertEquals(Path.EMPTY, (RemoteFolder)tree, module, false);
}
/*
* Test the following definition
*
* # include docs with project
* project2 project2 &docs
* # only project2
* project2-only project2
*/
public void testIncludeAndExcludeDocs() throws TeamException, CoreException, IOException {
uploadProject("project2");
IProject project2 = checkoutProject("project2", null);
ICVSRemoteResource tree = getRemoteTree(project2, CVSTag.DEFAULT, DEFAULT_MONITOR);
assertEquals(Path.EMPTY, CVSWorkspaceRoot.getCVSResourceFor(project2), tree, false, false);
RemoteModule module = getRemoteModule("project2");
assertEquals(Path.EMPTY, (RemoteFolder)tree, module, false);
project2 = checkoutProject("project2-only", null);
tree = getRemoteTree(project2, CVSTag.DEFAULT, DEFAULT_MONITOR);
assertEquals(Path.EMPTY, CVSWorkspaceRoot.getCVSResourceFor(project2), tree, false, false);
module = getRemoteModule("project2-only");
assertEquals(Path.EMPTY, (RemoteFolder)tree, module, false);
}
/*
* Test the following definition
*
* # a use of alias
* project3-src project3/src
* project3-src_file -a project3-src/file.c mc-src/file.h
* project3-sub project3/sub &project3-src_file
*/
// public void testAliasForFiles() throws TeamException, CoreException, IOException {
// uploadProject("project3");
// IProject project3 = checkoutProject("project3-sub", null);
// ICVSRemoteResource tree = getRemoteTree(project3, CVSTag.DEFAULT, DEFAULT_MONITOR);
// assertEquals("Local does not match remote", Session.getManagedResource(project3), (ICVSResource)tree.getRemote(), false, false);
//
// project3 = checkoutProject("project3-src", null);
// tree = getRemoteTree(project3, CVSTag.DEFAULT, DEFAULT_MONITOR);
// assertEquals("Local does not match remote", Session.getManagedResource(project3), (ICVSResource)tree.getRemote(), false, false);
//
// project3 = checkoutProject("project3-src_file", null);
// tree = getRemoteTree(project3, CVSTag.DEFAULT, DEFAULT_MONITOR);
// assertEquals("Local does not match remote", Session.getManagedResource(project3), (ICVSResource)tree.getRemote(), false, false);
// }
/*
* Test the following definition
*
* # using aliases to provide packaging
* project7-common -a project7/common
* project7-pc -a project7-common project7/pc
* project7-linux -a project7-common project7/linux
*/
// public void testAliases() throws TeamException, CoreException, IOException {
// uploadProject("project7");
// IProject project7 = checkoutProject("project7-common", null);
// ICVSRemoteResource tree = getRemoteTree(project7, CVSTag.DEFAULT, DEFAULT_MONITOR);
// assertEquals("Local does not match remote", Session.getManagedResource(project7), (ICVSResource)tree.getRemote(), false, false);
//
// project7 = checkoutProject("project7-pc", null);
// tree = getRemoteTree(project7, CVSTag.DEFAULT, DEFAULT_MONITOR);
// assertEquals("Local does not match remote", Session.getManagedResource(project7), (ICVSResource)tree.getRemote(), false, false);
//
// project7 = checkoutProject("project7-linux", null);
// tree = getRemoteTree(project7, CVSTag.DEFAULT, DEFAULT_MONITOR);
// assertEquals("Local does not match remote", Session.getManagedResource(project7), (ICVSResource)tree.getRemote(), false, false);
// }
/*
* Test the following definition
*
* # simple use of module alias
* project8-alias -a project8 common
*/
public void testSimpleAlias() throws TeamException, CoreException, IOException {
uploadProject("project8");
// XXX Module checkout will not work yet
// IProject project8 = checkoutProject("project8-alias", null);
//RemoteModule module = getRemoteModule("project8-alias");
}
public RemoteModule getRemoteModule(String moduleName) {
for (int i = 0; i < remoteModules.length; i++) {
RemoteModule module = remoteModules[i];
// XXX shouldn't be getName
if (module.getName().equals(moduleName))
return module;
}
return null;
}
}