/*******************************************************************************
* Copyright (c) 2007, 2010 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.team.tests.ccvs.ui;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.eclipse.core.resources.IProject;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.team.internal.ccvs.core.CVSProjectSetCapability;
import org.eclipse.team.internal.ccvs.core.CVSRepositoryLocationMatcher;
import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation;
import org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation;
import org.eclipse.team.internal.ccvs.core.util.KnownRepositories;
import org.eclipse.team.internal.ccvs.ui.ConfigureRepositoryLocationsDialog;
/**
* This class tests an algorithm which suggests alternative repository locations
* when importing a project set.
*/
public class CVSProjectSetImportTest extends TestCase {
private KnownRepositories knownRepositories;
private ICVSRepositoryLocation[] savedRepositories;
public CVSProjectSetImportTest() {
super();
}
public CVSProjectSetImportTest(String name) {
super(name);
}
public static Test suite() {
return new TestSuite(CVSProjectSetImportTest.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
knownRepositories = KnownRepositories.getInstance();
savedRepositories = knownRepositories.getRepositories();
// dispose all known repositories
for (ICVSRepositoryLocation savedRepository : savedRepositories) {
knownRepositories.disposeRepository(savedRepository);
}
}
// Tests of the Alternative Map. The map contains suggested, alternative
// repositories. It's used to create combo-boxes on the Import Project Set
// dialog.
public void testEmptyInfoMap() {
IProject[] projects = new IProject[] { null };
Map infoMap = new HashMap();
Map alternativeMap = CVSRepositoryLocationMatcher
.prepareSuggestedRepositoryLocations(projects, infoMap);
assertNull(alternativeMap);
assertEquals(0, knownRepositories.getRepositories().length);
}
public void testEmptyReferenceStrings() throws Exception {
_testPrepareSuggestedRepositoryLocations(new String[] {}, new String[] {}, new String[][] { {} });
// There is nothing we can suggest.
}
public void testMalformedReferenceString() throws Exception {
_testPrepareSuggestedRepositoryLocations(new String[] {},
new String[] { "Hi, I'm a malformed reference string." }, new String[][] { {} });
}
public void testUnknownSingleReferenceString() throws Exception {
_testPrepareSuggestedRepositoryLocations(
new String[] {},
new String[] { "1.0,:pserver:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh" },
new String[][] { { ":pserver:dev.eclipse.org:/cvsroot/eclipse" } });
}
public void testSelectionForUnknownSingleReferenceString() throws Exception {
_testDialogDefaultSelection(
new String[] {},
new String[] { "1.0,:pserver:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh" },
new String[] { ":pserver:dev.eclipse.org:/cvsroot/eclipse" });
}
public void testKnownSingleReferenceString() throws Exception {
_testPrepareSuggestedRepositoryLocations(
new String[] { ":pserver:dev.eclipse.org:/cvsroot/eclipse" },
new String[] { "1.0,:pserver:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh" },
new String[][] { {} });
}
// test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=199108
public void testSingleKnownRepositoryWithUsername() throws Exception {
_testPrepareSuggestedRepositoryLocations(
new String[] { ":pserver:joe@dev.eclipse.org:/cvsroot/eclipse" },
new String[] {
"1.0,:pserver:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh",
"1.0,:extssh:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.team.tests.cvs.core,org.eclipse.team.tests.cvs.core" },
new String[][] {
{ ":pserver:joe@dev.eclipse.org:/cvsroot/eclipse" },
{ ":extssh:dev.eclipse.org:/cvsroot/eclipse",
":pserver:joe@dev.eclipse.org:/cvsroot/eclipse" } });
}
public void testSingleKnownRepositoryMatchesTwoReferenceStrings() throws Exception {
_testPrepareSuggestedRepositoryLocations(
new String[] { ":pserver:joe@dev.eclipse.org:/cvsroot/eclipse" },
new String[] {
"1.0,:pserver:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh",
"1.0,:pserver:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.team.tests.cvs.core,org.eclipse.team.tests.cvs.core" },
new String[][] {
{ ":pserver:joe@dev.eclipse.org:/cvsroot/eclipse" },
{ ":pserver:joe@dev.eclipse.org:/cvsroot/eclipse" } });
}
public void testOneMatchingReferenceString() throws Exception {
_testPrepareSuggestedRepositoryLocations(
new String[] { ":pserver:joe@dev.eclipse.org:/cvsroot/eclipse" },
new String[] {
"1.0,:pserver:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh",
"1.0,:extssh:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.team.tests.cvs.core,org.eclipse.team.tests.cvs.core" },
new String[][] {
{ ":pserver:joe@dev.eclipse.org:/cvsroot/eclipse" },
{ ":extssh:dev.eclipse.org:/cvsroot/eclipse",
":pserver:joe@dev.eclipse.org:/cvsroot/eclipse" } });
}
public void testTwoMatchingKnownRepositories() throws Exception {
_testPrepareSuggestedRepositoryLocations(
new String[] { ":pserver:joe@dev.eclipse.org:/cvsroot/eclipse",
":pserver:ann@dev.eclipse.org:/cvsroot/eclipse" },
new String[] { "1.0,:pserver:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh" },
new String[][] { {
":pserver:ann@dev.eclipse.org:/cvsroot/eclipse",
":pserver:joe@dev.eclipse.org:/cvsroot/eclipse" } });
}
public void testThreeKindsOfSuggestions() throws Exception {
_testPrepareSuggestedRepositoryLocations(
new String[] { ":pserver:dev.eclipse.org:/cvsroot/eclipse",
":pserver:localhost:/cvsroot/project" },
new String[] { "1.0,:extssh:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh" },
new String[][] { {
":extssh:dev.eclipse.org:/cvsroot/eclipse",
":pserver:dev.eclipse.org:/cvsroot/eclipse",
":pserver:localhost:/cvsroot/project" } });
}
public void testOneCompatibleOfTwoKnown() throws Exception {
_testPrepareSuggestedRepositoryLocations(
new String[] { ":pserver:dev.eclipse.org:/cvsroot/eclipse",
":pserver:joe@dev.eclipse.org:/cvsroot/TECHNOLOGY" },
new String[] { "1.0,:extssh:joe@dev.eclipse.org:/cvsroot/eclipse,org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh" },
new String[][] { {
":extssh:joe@dev.eclipse.org:/cvsroot/eclipse",
":pserver:dev.eclipse.org:/cvsroot/eclipse",
":pserver:joe@dev.eclipse.org:/cvsroot/TECHNOLOGY" } });
}
public void testTwoUnknownOneCompatibleReferenceStrings() throws Exception {
_testPrepareSuggestedRepositoryLocations(
new String[] { ":extssh:dev.eclipse.org:/cvsroot/eclipse" },
new String[] {
"1.0,:ext:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh",
"1.0,:pserver:dev.eclipse.org:/cvsroot/TECHNOLOGY,org.eclipse.team.tests.cvs.core,org.eclipse.team.tests.cvs.core" },
new String[][] {
{ ":ext:dev.eclipse.org:/cvsroot/eclipse",
":extssh:dev.eclipse.org:/cvsroot/eclipse" },
{ ":pserver:dev.eclipse.org:/cvsroot/TECHNOLOGY",
":extssh:dev.eclipse.org:/cvsroot/eclipse" } });
}
public void testSelectionForTwoUnknownOneCompatibleReferenceStrings()
throws Exception {
_testDialogDefaultSelection(
new String[] { ":extssh:dev.eclipse.org:/cvsroot/eclipse" },
new String[] {
"1.0,:ext:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh",
"1.0,:pserver:dev.eclipse.org:/cvsroot/TECHNOLOGY,org.eclipse.team.tests.cvs.core,org.eclipse.team.tests.cvs.core" },
new String[] { ":extssh:dev.eclipse.org:/cvsroot/eclipse",
":pserver:dev.eclipse.org:/cvsroot/TECHNOLOGY" });
}
public void testSelectionForOneCompatibleOfTwoKnown() throws Exception {
_testDialogDefaultSelection(
new String[] { ":pserver:dev.eclipse.org:/cvsroot/eclipse",
":pserver:joe@dev.eclipse.org:/cvsroot/technology" },
new String[] { "1.0,:extssh:joe@dev.eclipse.org:/cvsroot/eclipse,org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh" },
new String[] { ":pserver:dev.eclipse.org:/cvsroot/eclipse" });
}
public void testCompatibleSuggestionsOrder() throws Exception {
_testPrepareSuggestedRepositoryLocations(
new String[] { ":pserver:dev.eclipse.org:/cvsroot/eclipse",
":extssh:dev.eclipse.org:/cvsroot/eclipse",
":ext:dev.eclipse.org:/cvsroot/eclipse" },
new String[] { "1.0,:pserverssh2:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh" },
new String[][] { {
":pserverssh2:dev.eclipse.org:/cvsroot/eclipse",
":extssh:dev.eclipse.org:/cvsroot/eclipse",
":pserver:dev.eclipse.org:/cvsroot/eclipse",
":ext:dev.eclipse.org:/cvsroot/eclipse" } });
}
public void testSelectionForCompatibleSuggestionsOrder() throws Exception {
_testDialogDefaultSelection(
new String[] { ":ext:dev.eclipse.org:/cvsroot/eclipse",
":extssh:dev.eclipse.org:/cvsroot/eclipse",
":pserver:dev.eclipse.org:/cvsroot/eclipse" },
new String[] { "1.0,:pserverssh2:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.team.tests.cvs.core,org.eclipse.team.tests.cvs.core" },
new String[] { ":extssh:dev.eclipse.org:/cvsroot/eclipse" });
}
public void testCompatibleSuggestionsOrder2() throws Exception {
_testPrepareSuggestedRepositoryLocations(
new String[] { ":ext:dev.eclipse.org:/cvsroot/eclipse",
":extssh:dev.eclipse.org:/cvsroot/eclipse",
":pserver:dev.eclipse.org:/cvsroot/eclipse" },
new String[] {
"1.0,:pserver:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh",
"1.0,:pserverssh2:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.team.tests.cvs.core,org.eclipse.team.tests.cvs.core" },
new String[][] {
{ ":pserver:dev.eclipse.org:/cvsroot/eclipse" },
{ ":pserverssh2:dev.eclipse.org:/cvsroot/eclipse",
":extssh:dev.eclipse.org:/cvsroot/eclipse",
":pserver:dev.eclipse.org:/cvsroot/eclipse",
":ext:dev.eclipse.org:/cvsroot/eclipse" } });
}
public void testSelectionForOnlyOneReferenceStringNeedsAdditionalInfo()
throws Exception {
_testDialogDefaultSelection(
new String[] { ":pserver:dev.eclipse.org:/cvsroot/eclipse" },
new String[] {
"1.0,:pserver:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.team.tests.cvs.core,org.eclipse.team.tests.cvs.core",
"1.0,:extssh:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.team.tests.cvs.core,org.eclipse.team.tests.cvs.core" },
new String[] { null,
":pserver:dev.eclipse.org:/cvsroot/eclipse" });
}
public void testSelectionForUnknownReferenceString() throws Exception {
_testDialogDefaultSelection(
new String[] { ":pserver:LOCALHOST:/cvsroot/path" },
new String[] { "1.0,:pserver:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.team.tests.cvs.core,org.eclipse.team.tests.cvs.core" },
new String[] { ":pserver:dev.eclipse.org:/cvsroot/eclipse" });
}
/**
* The main method to test the
* CVSProjectSetCapability.isAdditionalRepositoryInformationRequired
* method.
*
* @param knownLocations
* Array of known repositories as strings. The format used:
*
* :method:[[user][:password]@]hostname[:[port]]/path/to/repository
*
* 1.0,:method:[[user][:password]@]hostname[:[port]]/path/to/repository,project.name,module.name[,tagname]
*
* :method:[[user][:password]@]hostname[:[port]]/path/to/repository
*
* 1.0,:method:[[user][:password]@]hostname[:[port]]/path/to/repository,project.name,module.name[,tagname]
*