Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests')
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/AllTeamAndCVSTests.java44
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/AllTests.java48
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/CVSClientException.java21
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/CVSTestSetup.java199
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/CommandLineCVSClient.java81
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/EclipseCVSClient.java119
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/EclipseTest.java706
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/ICVSClient.java22
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/JUnitTestCase.java329
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/TestConnection.java119
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/TestConnectionMethod.java46
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/AllTestsCompatibility.java33
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/BasicTest.java496
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/CompatibleTestSetup.java58
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/ConflictTest.java95
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/ModuleTest.java94
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/SameResultEnv.java490
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/AllTestsCVSResources.java35
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/BatchedTestSetup.java33
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/EclipseFolderTest.java95
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/EclipseSynchronizerTest.java521
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/ResourceSyncBytesTest.java126
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/ResourceSyncInfoTest.java147
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/AllTestsProvider.java51
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/CVSProviderTest.java501
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/ImportTest.java160
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/IsModifiedTests.java538
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/LinkResourcesTest.java80
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/ModuleTest.java287
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/RemoteResourceTest.java332
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/ResourceDeltaTest.java272
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/SyncElementTest.java840
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/WatchEditTest.java146
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/AllTestsTeamSubscriber.java36
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/CVSMergeSubscriberTest.java390
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/CVSSyncSubscriberTest.java231
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/CVSWorkspaceSubscriberTest.java1152
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/SyncInfoSource.java56
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/SyncSetTests.java109
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/TestCommitAction.java22
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/TestMergeUpdateAction.java39
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/TestWorkspaceUpdateAction.java51
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/CVSUITestCase.java486
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/DummyPromptCondition.java24
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/EclipseUITestHarnessApplication.java191
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/EmptyPerspective.java54
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/FakeSelectionProvider.java42
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/ICriteria.java23
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/LoggingTestCase.java107
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/LoggingTestResult.java264
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/LoggingTestRunner.java38
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/PerformanceTimer.java55
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/SequenceGenerator.java63
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/Util.java796
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/Waiter.java35
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/AllTests.java32
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/BenchmarkTestSetup.java55
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/CommandTests.java239
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/SyncTests.java115
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/WorkflowTests.java159
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/ArgumentParser.java49
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/CaseEntry.java38
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/DelimitedValuesWriter.java54
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/GroupEntry.java28
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/ILogEntryVisitor.java19
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/LogEntry.java124
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/LogEntryContainer.java63
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/LogFormatterUIMain.java188
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/MergeRunsVisitor.java76
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintCSVDiffVisitor.java102
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintCSVSummaryVisitor.java82
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintDiffMain.java154
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintDiffVisitor.java90
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintSummaryMain.java122
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintTextDiffVisitor.java147
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintTextSummaryVisitor.java109
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/Result.java39
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/RootEntry.java48
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/TaskEntry.java106
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/Util.java23
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/sync/AllTestsSynchronizeView.java48
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/sync/SyncInfoFromSyncSet.java92
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/unit/CheckoutOperationTests.java118
-rw-r--r--tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/unit/MenuEnablementTest.java533
84 files changed, 0 insertions, 14480 deletions
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/AllTeamAndCVSTests.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/AllTeamAndCVSTests.java
deleted file mode 100644
index 8e08123bb..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/AllTeamAndCVSTests.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core;
-import junit.extensions.TestSetup;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import org.eclipse.team.tests.core.AllTeamTests;
-
-public class AllTeamAndCVSTests extends EclipseTest {
-
- /**
- * Constructor for CVSClientTest.
- */
- public AllTeamAndCVSTests() {
- super();
- }
-
- /**
- * Constructor for CVSClientTest.
- * @param name
- */
- public AllTeamAndCVSTests(String name) {
- super(name);
- }
-
- /*
- * ORDER IS IMPORTANT: Run compatibility and resource tests before any other!!!
- */
- public static Test suite() {
- TestSuite suite = new TestSuite();
- suite.addTest(new TestSetup(AllTeamTests.suite()));
- suite.addTest(new CVSTestSetup(AllTests.suite()));
- return suite;
- }
-}
-
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/AllTests.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/AllTests.java
deleted file mode 100644
index ce45de614..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/AllTests.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.team.tests.ccvs.core.cvsresources.AllTestsCVSResources;
-import org.eclipse.team.tests.ccvs.core.provider.AllTestsProvider;
-import org.eclipse.team.tests.ccvs.core.subscriber.AllTestsTeamSubscriber;
-
-public class AllTests extends EclipseTest {
-
- /**
- * Constructor for CVSClientTest.
- */
- public AllTests() {
- super();
- }
-
- /**
- * Constructor for CVSClientTest.
- * @param name
- */
- public AllTests(String name) {
- super(name);
- }
-
- /*
- * ORDER IS IMPORTANT: Run compatibility and resource tests before any other!!!
- */
- public static Test suite() {
- TestSuite suite = new TestSuite();
- //suite.addTest(org.eclipse.team.tests.ccvs.core.compatible.AllTestsCompatibility.suite());
- suite.addTest(AllTestsCVSResources.suite());
- suite.addTest(AllTestsProvider.suite());
- suite.addTest(AllTestsTeamSubscriber.suite());
- return new CVSTestSetup(suite);
- }
-}
-
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/CVSClientException.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/CVSClientException.java
deleted file mode 100644
index 7ea4fba13..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/CVSClientException.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core;
-import org.eclipse.team.internal.ccvs.core.CVSException;
-
-public class CVSClientException extends CVSException {
-
- public CVSClientException(String message) {
- super(message);
- }
-
-}
-
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/CVSTestSetup.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/CVSTestSetup.java
deleted file mode 100644
index bff8c3eaf..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/CVSTestSetup.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.PrintStream;
-
-import junit.extensions.TestSetup;
-import junit.framework.Test;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.team.internal.ccvs.core.CVSException;
-import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin;
-import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation;
-import org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation;
-
-public class CVSTestSetup extends TestSetup {
- public static final String REPOSITORY_LOCATION;
- public static final boolean INITIALIZE_REPO;
- public static final boolean DEBUG;
- public static final boolean LOCAL_REPO;
- public static final String RSH;
- public static final int WAIT_FACTOR;
- public static final int COMPRESSION_LEVEL;
-
- public static CVSRepositoryLocation repository;
-
- // Static initializer for constants
- static {
- loadProperties();
- REPOSITORY_LOCATION = System.getProperty("eclipse.cvs.repository");
- INITIALIZE_REPO = Boolean.valueOf(System.getProperty("eclipse.cvs.initrepo", "false")).booleanValue();
- DEBUG = Boolean.valueOf(System.getProperty("eclipse.cvs.debug", "false")).booleanValue();
- RSH = System.getProperty("eclipse.cvs.rsh", "rsh");
- LOCAL_REPO = Boolean.valueOf(System.getProperty("eclipse.cvs.localRepo", "false")).booleanValue();
- WAIT_FACTOR = Integer.parseInt(System.getProperty("eclipse.cvs.waitFactor", "1"));
- COMPRESSION_LEVEL = Integer.parseInt(System.getProperty("eclipse.cvs.compressionLevel", "0"));
- }
-
- public static void loadProperties() {
- String propertiesFile = System.getProperty("eclipse.cvs.properties");
- if (propertiesFile == null) return;
- File file = new File(propertiesFile);
- if (file.isDirectory()) file = new File(file, "repository.properties");
- try {
- BufferedReader reader = new BufferedReader(new FileReader(file));
- try {
- for (String line; (line = reader.readLine()) != null; ) {
- if (line.startsWith("#")) continue;
- int sep = line.indexOf("=");
- String property = line.substring(0, sep).trim();
- String value = line.substring(sep + 1).trim();
- System.setProperty("eclipse.cvs." + property, value);
- }
- } finally {
- reader.close();
- }
- } catch (Exception e) {
- System.err.println("Could not read repository properties file: " + file.getAbsolutePath());
- }
- }
-
- /**
- * Constructor for CVSTestSetup.
- */
- public CVSTestSetup(Test test) {
- super(test);
- }
-
- public static void executeRemoteCommand(ICVSRepositoryLocation repository, String commandLine) {
- if (! LOCAL_REPO) {
- commandLine = RSH + " " + repository.getHost() + " -l " + repository.getUsername() + " " + commandLine;
- }
- int returnCode = executeCommand(commandLine, null, null);
- if (returnCode != -1 && returnCode != 0) {
- System.err.println("Remote command returned " + returnCode + ": " + commandLine);
- }
- }
-
- /**
- * Executes a command.
- * Returns the command's return code, or -1 on failure.
- *
- * @param commandLine the local command line to run
- * @param environment the new environment variables, or null to inherit from parent process
- * @param workingDirectory the new workingDirectory, or null to inherit from parent process
- */
- public static int executeCommand(String commandLine, String[] environment, File workingDirectory) {
- PrintStream debugStream = CVSTestSetup.DEBUG ? System.out : null;
- try {
- if (debugStream != null) {
- // while debugging, dump CVS command line client results to stdout
- // prefix distinguishes between message source stream
- debugStream.println();
- printPrefixedLine(debugStream, "CMD> ", commandLine);
- if (workingDirectory != null) printPrefixedLine(debugStream, "DIR> ", workingDirectory.toString());
- }
- Process cvsProcess = Runtime.getRuntime().exec(commandLine, environment, workingDirectory);
- // stream output must be dumped to avoid blocking the process or causing a deadlock
- startBackgroundPipeThread(cvsProcess.getErrorStream(), debugStream, "ERR> ");
- startBackgroundPipeThread(cvsProcess.getInputStream(), debugStream, "MSG> ");
-
- int returnCode = cvsProcess.waitFor();
- if (debugStream != null) debugStream.println("RESULT> " + returnCode);
- return returnCode;
- } catch (IOException e) {
- printPrefixedLine(System.err, "Unable to execute command: ", commandLine);
- e.printStackTrace(System.err);
- } catch (InterruptedException e) {
- printPrefixedLine(System.err, "Unable to execute command: ", commandLine);
- e.printStackTrace(System.err);
- }
- return -1;
- }
-
- private static void startBackgroundPipeThread(final InputStream is, final PrintStream os,
- final String prefix) {
- new Thread() {
- public void run() {
- BufferedReader reader = null;
- try {
- try {
- reader = new BufferedReader(new InputStreamReader(is));
- for (;;) {
- String line = reader.readLine();
- if (line == null) break;
- if (os != null) printPrefixedLine(os, prefix, line);
- }
- } finally {
- if (reader != null) reader.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }.start();
- }
-
- private static void printPrefixedLine(PrintStream os, String prefix, String line) {
- os.print(prefix);
- os.println(line.substring(0, Math.min(line.length(), 256))); // trim long lines
- }
-
- /*
- * Use rsh to delete any contents of the repository and initialize it again
- */
- private static void initializeRepository(CVSRepositoryLocation repository) {
- String repoRoot = repository.getRootDirectory();
- executeRemoteCommand(repository, "rm -rf " + repoRoot);
- executeRemoteCommand(repository, "cvs -d " + repoRoot + " init");
- }
-
- public void setUp() throws CVSException {
- if (repository == null)
- repository = setupRepository(REPOSITORY_LOCATION);
- CVSProviderPlugin.getPlugin().setCompressionLevel(COMPRESSION_LEVEL);
- }
-
- protected CVSRepositoryLocation setupRepository(String location) throws CVSException {
-
- // Give some info about which repository the tests are running with
- System.out.println("Connecting to: " + location);
-
- // Validate that we can connect, also creates and caches the repository location. This
- // is important for the UI tests.
- CVSRepositoryLocation repository = (CVSRepositoryLocation)CVSProviderPlugin.getPlugin().getRepository(location);
- //CVSRepositoryLocation repository = CVSRepositoryLocation.fromString(location);
- try {
- repository.validateConnection(new NullProgressMonitor());
- } catch (CVSException e) {
- System.out.println("Unable to connect to remote repository: " + repository.getLocation());
- throw e;
- }
-
- // Initialize the repo if requested (requires rsh access)
- if( INITIALIZE_REPO ) {
- initializeRepository(repository);
- }
-
- return repository;
- }
-
- public void tearDown() throws CVSException {
- // Nothing to do here
- }
-
-}
-
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/CommandLineCVSClient.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/CommandLineCVSClient.java
deleted file mode 100644
index ec6ff38d3..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/CommandLineCVSClient.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core;
-
-import java.io.File;
-
-import junit.framework.Assert;
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.team.internal.ccvs.core.CVSException;
-import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation;
-
-public class CommandLineCVSClient implements ICVSClient {
- public static final ICVSClient INSTANCE = new CommandLineCVSClient();
- private static final String cvsExecutable =
- System.getProperty("eclipse.cvs.command");
-
- public void executeCommand(ICVSRepositoryLocation repositoryLocation,
- IContainer localRoot, String command, String[] globalOptions,
- String[] localOptions, String[] arguments) throws CVSException {
- execute(repositoryLocation.getLocation(), localRoot.getLocation().toFile(), command,
- globalOptions, localOptions, arguments);
- try {
- localRoot.refreshLocal(IResource.DEPTH_INFINITE, null);
- } catch (CoreException e) {
- throw new CVSClientException("CoreException during refreshLocal: " + e.getMessage());
- }
- }
-
- public static void execute(
- String repositoryLocation, File localRoot, String command,
- String[] globalOptions, String[] localOptions,
- String[] arguments) throws CVSException {
- // test arguments
- Assert.assertNotNull(repositoryLocation);
- Assert.assertNotNull(localRoot);
- Assert.assertNotNull(command);
- Assert.assertNotNull(globalOptions);
- Assert.assertNotNull(localOptions);
- Assert.assertNotNull(arguments);
- Assert.assertTrue(localRoot.exists());
-
- // build command line
- StringBuffer commandLineBuf = new StringBuffer(cvsExecutable);
- commandLineBuf.append(" -d \"");
- commandLineBuf.append(repositoryLocation);
- commandLineBuf.append('"');
- appendStrings(commandLineBuf, globalOptions);
- commandLineBuf.append(' ');
- commandLineBuf.append(command);
- appendStrings(commandLineBuf, localOptions);
- appendStrings(commandLineBuf, arguments);
-
- // execute command
- JUnitTestCase.waitMsec(1500);
- int returnCode = CVSTestSetup.executeCommand(commandLineBuf.toString(), null, localRoot);
- if (returnCode != 0) {
- throw new CVSClientException("Command line client returned non-zero code: " + returnCode);
- }
- }
-
- private static void appendStrings(StringBuffer commandLine, String[] strings) {
- for (int i = 0; i < strings.length; i++) {
- String string = strings[i];
- if (string != null && string.length() != 0) {
- commandLine.append(" \"");
- commandLine.append(string);
- commandLine.append('"');
- }
- }
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/EclipseCVSClient.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/EclipseCVSClient.java
deleted file mode 100644
index 7667790b2..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/EclipseCVSClient.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-import junit.framework.Assert;
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.team.internal.ccvs.core.CVSException;
-import org.eclipse.team.internal.ccvs.core.CVSStatus;
-import org.eclipse.team.internal.ccvs.core.ICVSFolder;
-import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation;
-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.GlobalOption;
-import org.eclipse.team.internal.ccvs.core.client.Command.LocalOption;
-import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot;
-
-public class EclipseCVSClient implements ICVSClient {
- public static final ICVSClient INSTANCE = new EclipseCVSClient();
- private static final HashMap commandPool = new HashMap();
- static {
- commandPool.put("update", Command.UPDATE);
- commandPool.put("co", Command.CHECKOUT);
- commandPool.put("ci", Command.COMMIT);
- commandPool.put("import", Command.IMPORT);
- commandPool.put("add", Command.ADD);
- commandPool.put("remove", Command.REMOVE);
- commandPool.put("status", Command.STATUS);
- commandPool.put("log", Command.LOG);
- commandPool.put("tag", Command.TAG);
- commandPool.put("rtag", Command.RTAG);
- commandPool.put("admin", Command.ADMIN);
- commandPool.put("diff", Command.DIFF);
- }
-
- public void executeCommand(ICVSRepositoryLocation repositoryLocation,
- IContainer localRoot, String command, String[] globalOptions,
- String[] localOptions, String[] arguments) throws CVSException {
- execute(repositoryLocation, CVSWorkspaceRoot.getCVSFolderFor(localRoot), command,
- globalOptions, localOptions, arguments);
- }
-
- public static void execute(
- ICVSRepositoryLocation cvsRepositoryLocation, ICVSFolder cvsLocalRoot,
- String command, String[] globalOptions, String[] localOptions,
- String[] arguments) throws CVSException {
- // test arguments
- Assert.assertNotNull(cvsRepositoryLocation);
- Assert.assertNotNull(cvsLocalRoot);
- Assert.assertNotNull(command);
- Assert.assertNotNull(globalOptions);
- Assert.assertNotNull(localOptions);
- Assert.assertNotNull(arguments);
- Assert.assertTrue(cvsLocalRoot.exists());
-
- // get command instance
- Command cvsCommand = (Command) commandPool.get(command);
-
- // get global options
- List globals = new ArrayList();
- for (int i = 0; i < globalOptions.length; i++) {
- globals.add(new CustomGlobalOption(globalOptions[i]));
- }
- GlobalOption[] cvsGlobalOptions = (GlobalOption[]) globals.toArray(new GlobalOption[globals.size()]);
-
- // get local options
- List locals = new ArrayList();
- for (int i = 0; i < localOptions.length; i++) {
- String option = localOptions[i];
- String argument = null;
- if ((i < localOptions.length - 1) && (localOptions[i + 1].charAt(0) != '-')) {
- argument = localOptions[++i];
- }
- locals.add(new CustomLocalOption(option, argument));
- }
- LocalOption[] cvsLocalOptions = (LocalOption[]) locals.toArray(new LocalOption[locals.size()]);
-
- // execute command
- IProgressMonitor monitor = new NullProgressMonitor();
- Session session = new Session(cvsRepositoryLocation, cvsLocalRoot);
- try {
- session.open(monitor);
- IStatus status = cvsCommand.execute(session,
- cvsGlobalOptions, cvsLocalOptions, arguments, null, monitor);
- if (status.getCode() == CVSStatus.SERVER_ERROR) {
- throw new CVSClientException("Eclipse client returned non-ok status: " + status);
- }
- } finally {
- session.close();
- monitor.done();
- }
- }
-
- private static class CustomGlobalOption extends GlobalOption {
- public CustomGlobalOption(String option) {
- super(option);
- }
- }
-
- private static class CustomLocalOption extends LocalOption {
- public CustomLocalOption(String option, String arg) {
- super(option, arg);
- }
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/EclipseTest.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/EclipseTest.java
deleted file mode 100644
index baf590835..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/EclipseTest.java
+++ /dev/null
@@ -1,706 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core;
-import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceVisitor;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.tests.harness.EclipseWorkspaceTest;
-import org.eclipse.team.core.RepositoryProvider;
-import org.eclipse.team.core.TeamException;
-import org.eclipse.team.internal.ccvs.core.CVSException;
-import org.eclipse.team.internal.ccvs.core.CVSStatus;
-import org.eclipse.team.internal.ccvs.core.CVSTag;
-import org.eclipse.team.internal.ccvs.core.CVSTeamProvider;
-import org.eclipse.team.internal.ccvs.core.ICVSFile;
-import org.eclipse.team.internal.ccvs.core.ICVSFolder;
-import org.eclipse.team.internal.ccvs.core.ICVSRemoteFile;
-import org.eclipse.team.internal.ccvs.core.ICVSRemoteFolder;
-import org.eclipse.team.internal.ccvs.core.ICVSRemoteResource;
-import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation;
-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.Import;
-import org.eclipse.team.internal.ccvs.core.client.Session;
-import org.eclipse.team.internal.ccvs.core.client.Update;
-import org.eclipse.team.internal.ccvs.core.client.Command.LocalOption;
-import org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation;
-import org.eclipse.team.internal.ccvs.core.connection.CVSServerException;
-import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot;
-import org.eclipse.team.internal.ccvs.core.resources.RemoteFile;
-import org.eclipse.team.internal.ccvs.core.resources.RemoteFolder;
-import org.eclipse.team.internal.ccvs.core.syncinfo.FolderSyncInfo;
-import org.eclipse.team.internal.ccvs.core.syncinfo.ResourceSyncInfo;
-import org.eclipse.team.internal.ccvs.ui.operations.CVSOperation;
-import org.eclipse.team.internal.ccvs.ui.operations.ITagOperation;
-import org.eclipse.team.internal.ccvs.ui.operations.TagInRepositoryOperation;
-import org.eclipse.team.internal.ccvs.ui.operations.TagOperation;
-
-public class EclipseTest extends EclipseWorkspaceTest {
-
- protected static IProgressMonitor DEFAULT_MONITOR = new NullProgressMonitor();
- protected static final int RANDOM_CONTENT_SIZE = 3876;
-
- /**
- * Constructor for CVSBlackBoxTest.
- */
- public EclipseTest() {
- super();
- }
- public EclipseTest(String name) {
- super(name);
- }
-
- /*
- * Get the resources for the given resource names
- */
- public IResource[] getResources(IContainer container, String[] hierarchy) throws CoreException {
- IResource[] resources = new IResource[hierarchy.length];
- for (int i=0;i<resources.length;i++) {
- resources[i] = container.findMember(hierarchy[i]);
- if (resources[i] == null) {
- resources[i] = buildResources(container, new String[] {hierarchy[i]})[0];
- }
- }
- return resources;
- }
-
- /**
- * Add the resources to an existing container and upload them to CVS
- */
- public IResource[] addResources(IContainer container, String[] hierarchy, boolean checkin) throws CoreException, TeamException {
- IResource[] newResources = buildResources(container, hierarchy, false);
- addResources(newResources);
- if (checkin) commitResources(newResources, IResource.DEPTH_ZERO);
- return newResources;
- }
-
- protected void addResources(IResource[] newResources) throws TeamException, CoreException {
- if (newResources.length == 0) return;
- getProvider(newResources[0]).add(newResources, IResource.DEPTH_ZERO, DEFAULT_MONITOR);
- }
- /**
- * Perform a CVS edit of the given resources
- */
- public IResource[] editResources(IContainer container, String[] hierarchy) throws CoreException, TeamException {
- IResource[] resources = getResources(container, hierarchy);
- getProvider(container).edit(resources, true /* recurse */, true /* notifyServer */, ICVSFile.NO_NOTIFICATION, DEFAULT_MONITOR);
- assertReadOnly(resources, false /* isReadOnly */, true /* recurse */);
- return resources;
- }
-
- /**
- * Perform a CVS unedit of the given resources
- */
- public IResource[] uneditResources(IContainer container, String[] hierarchy) throws CoreException, TeamException {
- IResource[] resources = getResources(container, hierarchy);
- getProvider(container).unedit(resources, true /* recurse */, true/* notifyServer */, DEFAULT_MONITOR);
- assertReadOnly(resources, true /* isReadOnly */, true /* recurse */);
- return resources;
- }
-
- public void appendText(IResource resource, String text, boolean prepend) throws CoreException, IOException, CVSException {
- IFile file = (IFile)resource;
- InputStream in = file.getContents();
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- try {
- if (prepend) {
- bos.write(text.getBytes());
- }
- int i;
- while ((i = in.read()) != -1) {
- bos.write(i);
- }
- if (!prepend) {
- bos.write(text.getBytes());
- }
- } finally {
- in.close();
- }
- setContentsAndEnsureModified(file, bos.toString());
- }
-
- /**
- * Delete the resources from an existing container and the changes to CVS
- */
- public IResource[] changeResources(IContainer container, String[] hierarchy, boolean checkin) throws CoreException, TeamException {
- List changedResources = new ArrayList(hierarchy.length);
- for (int i=0;i<hierarchy.length;i++) {
- IResource resource = container.findMember(hierarchy[i]);
- if (resource.getType() == IResource.FILE) {
- changedResources.add(resource);
- setContentsAndEnsureModified((IFile)resource);
- }
- }
- IResource[] resources = (IResource[])changedResources.toArray(new IResource[changedResources.size()]);
- if (checkin) commitResources(resources, IResource.DEPTH_ZERO);
- return resources;
- }
-
- /**
- * Delete the resources from an existing container and the changes to CVS
- */
- public IResource[] deleteResources(IContainer container, String[] hierarchy, boolean checkin) throws CoreException, TeamException {
- IResource[] resources = getResources(container, hierarchy);
- deleteResources(resources);
- if (checkin)
- commitResources(resources, IResource.DEPTH_ZERO);
- return resources;
- }
-
- protected void deleteResources(IResource[] resources) throws TeamException, CoreException {
- if (resources.length == 0) return;
- getProvider(resources[0]).delete(resources, DEFAULT_MONITOR);
- }
- /**
- * Unmanage the resources
- */
- public void unmanageResources(IContainer container, String[] hierarchy) throws CoreException, TeamException {
- IResource[] resources = getResources(container, hierarchy);
- unmanageResources(resources);
- }
-
- protected void unmanageResources(IResource[] resources) throws TeamException, CoreException {
- for (int i=0;i<resources.length;i++) {
- CVSWorkspaceRoot.getCVSResourceFor(resources[i]).unmanage(null);
- }
- }
- /**
- * Update the resources from an existing container with the changes from the CVS repository
- */
- public IResource[] updateResources(IContainer container, String[] hierarchy, boolean ignoreLocalChanges) throws CoreException, TeamException {
- IResource[] resources = getResources(container, hierarchy);
- LocalOption[] options = Command.NO_LOCAL_OPTIONS;
- if(ignoreLocalChanges) {
- options = new LocalOption[] {Update.IGNORE_LOCAL_CHANGES};
- }
- getProvider(container).update(resources, options, null, true /*createBackups*/, DEFAULT_MONITOR);
- return resources;
- }
-
- public void updateProject(IProject project, CVSTag tag, boolean ignoreLocalChanges) throws TeamException {
- LocalOption[] options = Command.NO_LOCAL_OPTIONS;
- if(ignoreLocalChanges) {
- options = new LocalOption[] {Update.IGNORE_LOCAL_CHANGES};
- }
- getProvider(project).update(new IResource[] {project}, options, tag, true /*createBackups*/, DEFAULT_MONITOR);
- }
-
- public void commitProject(IProject project) throws TeamException, CoreException {
- commitResources(project, true);
- }
-
- public void commitResources(IContainer container, boolean deep) throws TeamException, CoreException {
- commitResources(new IResource[] {container }, deep?IResource.DEPTH_INFINITE:IResource.DEPTH_ZERO);
- }
-
- /**
- * Commit the resources from an existing container to the CVS repository
- */
- public IResource[] commitResources(IContainer container, String[] hierarchy) throws CoreException, TeamException {
- IResource[] resources = getResources(container, hierarchy);
- commitResources(resources, IResource.DEPTH_ZERO);
- return resources;
- }
-
- /*
- * Commit the provided resources which must all be in the same project
- */
- protected void commitResources(IResource[] resources, int depth) throws TeamException, CoreException {
- if (resources.length == 0) return;
- getProvider(resources[0]).checkin(resources, depth, DEFAULT_MONITOR);
- }
- /**
- * Commit the resources from an existing container to the CVS repository
- */
- public void tagProject(IProject project, CVSTag tag, boolean force) throws TeamException {
- ITagOperation op = new TagOperation(null, new IResource[] {project});
- runTag(op, tag, force);
- }
-
- public void tagRemoteResource(ICVSRemoteResource resource, CVSTag tag, boolean force) throws TeamException {
- ITagOperation op = new TagInRepositoryOperation(null, new ICVSRemoteResource[] {resource});
- runTag(op, tag, force);
-
- }
- private void runTag(ITagOperation op, CVSTag tag, boolean force) throws TeamException {
- if (force) op.moveTag();
- op.setTag(tag);
- try {
- ((CVSOperation)op).run(DEFAULT_MONITOR);
- } catch (InterruptedException e) {
- fail("Tag interrupted.");
- } catch (InvocationTargetException e) {
- if (e.getTargetException() instanceof TeamException) {
- throw (TeamException) e.getTargetException();
- } else {
- e.printStackTrace();
- fail("Unexpected error while tagging");
- }
- }
- }
- /**
- * Return a collection of resources defined by hierarchy. The resources
- * are added to the workspace and to the file system. If the manage flag is true, the
- * resources are auto-managed, if false, they are left un-managed.
- */
- public IResource[] buildResources(IContainer container, String[] hierarchy, boolean includeContainer) throws CoreException {
- List resources = new ArrayList(hierarchy.length + 1);
- resources.addAll(Arrays.asList(buildResources(container, hierarchy)));
- if (includeContainer)
- resources.add(container);
- IResource[] result = (IResource[]) resources.toArray(new IResource[resources.size()]);
- ensureExistsInWorkspace(result, true);
- for (int i = 0; i < result.length; i++) {
- if (result[i].getType() == IResource.FILE)
- // 3786 bytes is the average size of Eclipse Java files!
- ((IFile) result[i]).setContents(getRandomContents(RANDOM_CONTENT_SIZE), true, false, null);
- }
- return result;
- }
-
- /*
- * Checkout a copy of the project into a project with the given postfix
- */
- protected IProject checkoutCopy(IProject project, String postfix) throws TeamException {
- // Check the project out under a different name and validate that the results are the same
- IProject copy = getWorkspace().getRoot().getProject(project.getName() + postfix);
- checkout(getRepository(), copy, CVSWorkspaceRoot.getCVSFolderFor(project).getFolderSyncInfo().getRepository(), null, DEFAULT_MONITOR);
- return copy;
- }
-
- protected IProject checkoutCopy(IProject project, CVSTag tag) throws TeamException {
- // Check the project out under a different name and validate that the results are the same
- IProject copy = getWorkspace().getRoot().getProject(project.getName() + tag.getName());
- checkout(getRepository(), copy,
- CVSWorkspaceRoot.getCVSFolderFor(project).getFolderSyncInfo().getRepository(),
- tag, DEFAULT_MONITOR);
- return copy;
- }
-
- public static void checkout(
- ICVSRepositoryLocation repository,
- IProject project,
- String sourceModule,
- CVSTag tag,
- IProgressMonitor monitor)
- throws TeamException {
-
- if (sourceModule == null)
- sourceModule = project.getName();
- CVSWorkspaceRoot.checkout(new ICVSRemoteFolder[] { new RemoteFolder(null, repository, sourceModule, tag)},
- new IProject[] { project }, monitor);
- }
-
- protected IProject checkoutProject(IProject project, String moduleName, CVSTag tag) throws TeamException {
- if (project == null)
- project = getWorkspace().getRoot().getProject(new Path(moduleName).lastSegment());
- checkout(getRepository(), project, moduleName, tag, DEFAULT_MONITOR);
- return project;
- }
- /*
- * This method creates a project with the given resources, imports
- * it to CVS and checks it out
- */
- protected IProject createProject(String prefix, String[] resources) throws CoreException, TeamException {
- IProject project = getUniqueTestProject(prefix);
- buildResources(project, resources, true);
- shareProject(project);
- assertValidCheckout(project);
- return project;
- }
-
- /*
- * Compare two projects by comparing thier providers
- */
- protected void assertEquals(IProject project1, IProject project2) throws CoreException, TeamException, IOException {
- assertEquals(project1, project2, false, false);
- }
-
- protected void assertEquals(IProject project1, IProject project2, boolean includeTimestamps, boolean includeTags) throws CoreException, TeamException, IOException {
- assertEquals(getProvider(project1), getProvider(project2), includeTimestamps, includeTags);
- }
-
- /*
- * Compare CVS team providers by comparing the cvs resource corresponding to the provider's project
- */
- protected void assertEquals(CVSTeamProvider provider1, CVSTeamProvider provider2, boolean includeTimestamps, boolean includeTags) throws CoreException, TeamException, IOException {
- assertEquals(Path.EMPTY, CVSWorkspaceRoot.getCVSFolderFor(provider1.getProject()),
- CVSWorkspaceRoot.getCVSFolderFor(provider2.getProject()),
- includeTimestamps, includeTags);
- }
-
- /*
- * Compare resources by casting them to their prpoer type
- */
- protected void assertEquals(IPath parent, ICVSResource resource1, ICVSResource resource2, boolean includeTimestamps, boolean includeTags) throws CoreException, CVSException, IOException {
- assertEquals("Resource types do not match for " + parent.append(resource1.getName()), resource1.isFolder(), resource2.isFolder());
- if (!resource1.isFolder())
- assertEquals(parent, (ICVSFile)resource1, (ICVSFile)resource2, includeTimestamps, includeTags);
- else
- assertEquals(parent, (ICVSFolder)resource1, (ICVSFolder)resource2, includeTimestamps, includeTags);
- }
-
- /*
- * Compare folders by comparing their folder sync info and there children
- *
- * XXX What about unmanaged children?
- */
- protected void assertEquals(IPath parent, ICVSFolder container1, ICVSFolder container2, boolean includeTimestamps, boolean includeTags) throws CoreException, CVSException, IOException {
- IPath path = parent.append(container1.getName());
- assertEquals(path, container1.getFolderSyncInfo(), container2.getFolderSyncInfo(), includeTags);
- assertTrue("The number of resource in " + path.toString() + " differs",
- container1.members(ICVSFolder.ALL_EXISTING_MEMBERS).length
- == container2.members(ICVSFolder.ALL_EXISTING_MEMBERS).length);
- ICVSResource[] resources = container1.members(ICVSFolder.ALL_EXISTING_MEMBERS);
- for (int i= 0;i <resources.length;i++) {
- assertEquals(path, resources[i], container2.getChild(resources[i].getName()), includeTimestamps, includeTags);
- }
-
- }
-
- /*
- * Compare the files contents and sync information
- */
- protected void assertEquals(IPath parent, ICVSFile file1, ICVSFile file2, boolean includeTimestamps, boolean includeTags) throws CoreException, CVSException, IOException {
- if (file1.getName().equals(".project")) return;
- // Getting the contents first is important as it will fetch the proper sync info if one of the files is a remote handle
- assertTrue("Contents of " + parent.append(file1.getName()) + " do not match", compareContent(getContents(file1), getContents(file2)));
- assertEquals(parent.append(file1.getName()), file1.getSyncInfo(), file2.getSyncInfo(), includeTimestamps, includeTags);
- }
-
- /*
- * Compare sync info by comparing the entry line generated by the sync info
- */
- protected void assertEquals(IPath path, ResourceSyncInfo info1, ResourceSyncInfo info2, boolean includeTimestamp, boolean includeTag) throws CoreException, CVSException, IOException {
- if (info1 == null || info2 == null) {
- assertTrue("Resource Sync info differs for " + path.toString(), info1 == info2);
- return;
- }
- String line1;
- String line2;
- if(includeTimestamp) {
- line1 = info1.getEntryLine();
- line2 = info2.getEntryLine();
- } else {
- line1 = info1.getServerEntryLine(null);
- line2 = info2.getServerEntryLine(null);
- }
- if (!includeTag) {
- // Strip everything past the last slash
- line1 = line1.substring(0, line1.lastIndexOf('/'));
- line2 = line2.substring(0, line2.lastIndexOf('/'));
- }
- assertTrue("Resource Sync info differs for " + path.toString(), line1.equals(line2));
- }
-
- /*
- * Use the equals of folder sync info unless the tag is not included in which case we just
- * compare the root and repository
- */
- protected void assertEquals(IPath path, FolderSyncInfo info1, FolderSyncInfo info2, boolean includeTag) throws CoreException, CVSException, IOException {
- if (info1 == null && info2 == null) {
- return;
- } else if (info1 == null) {
- fail("Expected " + path.toString() + " not to be a CVS folder but it is.");
- } else if (info2 == null) {
- fail("Expected " + path.toString() + " to be a CVS folder but it isn't.");
- }
-
- if (includeTag) {
- assertTrue("Folder sync info differs for " + path.toString(), info1.equals(info2));
- } else {
- assertTrue("Repository Root differs for " + path.toString(), info1.getRoot().equals(info2.getRoot()));
- assertTrue("Repository relative path differs for " + path.toString(), info1.getRepository().equals(info2.getRepository()));
- }
- }
-
-
- /*
- * Compare folders by comparing their folder sync info and there children
- *
- * XXX What about unmanaged children?
- */
- protected void assertEquals(IPath parent, RemoteFolder container1, RemoteFolder container2, boolean includeTags) throws CoreException, TeamException, IOException {
- IPath path = parent.append(container1.getName());
- assertEquals(path, container1.getFolderSyncInfo(), container2.getFolderSyncInfo(), includeTags);
- ICVSRemoteResource[] members1 = container1.getMembers(DEFAULT_MONITOR);
- ICVSRemoteResource[] members2 = container2.getMembers(DEFAULT_MONITOR);
- assertTrue("Number of members differ for " + path, members1.length == members2.length);
- Map memberMap2 = new HashMap();
- for (int i= 0;i <members2.length;i++) {
- memberMap2.put(members2[i].getName(), members2[i]);
- }
- for (int i= 0;i <members1.length;i++) {
- ICVSRemoteResource member2 = (ICVSRemoteResource)memberMap2.get(members1[i].getName());
- assertNotNull("Resource does not exist: " + path.append(members1[i].getName()) + member2);
- assertEquals(path, members1[i], member2, includeTags);
- }
- }
- protected void assertEquals(IPath parent, ICVSRemoteResource resource1, ICVSRemoteResource resource2, boolean includeTags) throws CoreException, TeamException, IOException {
- assertEquals("Resource types do not match for " + parent.append(resource1.getName()), resource1.isContainer(), resource2.isContainer());
- if (resource1.isContainer())
- assertEquals(parent, (RemoteFolder)resource1, (RemoteFolder)resource2, includeTags);
- else
- assertEquals(parent, (ICVSFile)resource1, (ICVSFile)resource2, false, includeTags);
- }
-
-
- /*
- * Compare the local project with the remote state by checking out a copy of the project.
- */
- protected void assertLocalStateEqualsRemote(IProject project) throws TeamException, CoreException, IOException {
- assertEquals(getProvider(project), getProvider(checkoutCopy(project, "-remote")), false, true);
- }
-
- /*
- * Compare the local project with the remote state indicated by the given tag by checking out a copy of the project.
- */
- protected void assertLocalStateEqualsRemote(String message, IProject project, CVSTag tag) throws TeamException, CoreException, IOException {
- assertEquals(getProvider(project), getProvider(checkoutCopy(project, tag)), true, false);
- }
-
- protected void assertHasNoRemote(String prefix, IResource[] resources) throws TeamException {
- for (int i=0;i<resources.length;i++)
- assertHasNoRemote(prefix, resources[i]);
- }
-
- protected void assertHasNoRemote(String prefix, IResource resource) throws TeamException {
- assertTrue(prefix + " resource should not have a remote", !CVSWorkspaceRoot.hasRemote(resource));
- }
-
- protected void assertHasRemote(String prefix, IResource[] resources) throws TeamException {
- for (int i=0;i<resources.length;i++)
- assertHasRemote(prefix, resources[i]);
- }
-
- protected void assertHasRemote(String prefix, IResource resource) throws TeamException {
- assertTrue(prefix + " resource should have a remote", CVSWorkspaceRoot.hasRemote(resource));
- }
-
- protected void assertIsModified(String prefix, IResource[] resources) throws TeamException {
- for (int i=0;i<resources.length;i++)
- assertIsModified(prefix, resources[i]);
- }
-
- protected void assertIsModified(String prefix, IResource resource) throws TeamException {
- // Only check for files as CVS doesn't dirty folders
- if (resource.getType() == IResource.FILE)
- assertTrue(prefix + " resource " + resource.getFullPath() + " should be dirty.", ((ICVSFile)getCVSResource(resource)).isModified(null));
- }
-
- protected void assertNotModified(String prefix, IResource[] resources) throws TeamException {
- for (int i=0;i<resources.length;i++)
- assertNotModified(prefix, resources[i]);
- }
-
- protected void assertNotModified(String prefix, IResource resource) throws TeamException {
- assertTrue(prefix + " resource should be dirty", !((ICVSFile)getCVSResource(resource)).isModified(null));
- }
-
- protected void assertIsIgnored(IResource resource, boolean ignoredState) throws TeamException {
- assertEquals("Resource " + resource.getFullPath() + " should be ignored but isn't.",
- ignoredState, getCVSResource(resource).isIgnored());
- }
-
- protected void assertValidCheckout(IProject project) {
- // NOTE: Add code to ensure that the project was checkout out properly
- CVSTeamProvider provider = (CVSTeamProvider)RepositoryProvider.getProvider(project);
- assertNotNull(provider);
- }
-
- protected void assertReadOnly(IResource[] resources, final boolean isReadOnly, final boolean recurse) throws CoreException {
- for (int i = 0; i < resources.length; i++) {
- IResource resource = resources[i];
- resource.accept(new IResourceVisitor() {
- public boolean visit(IResource resource) throws CoreException {
- if (resource.getType() == IResource.FILE) {
- assertEquals(isReadOnly, resource.isReadOnly());
- }
- return recurse;
- }
- });
- }
- }
-
- protected InputStream getContents(ICVSFile file) throws CVSException, IOException {
- if (file instanceof ICVSRemoteFile)
- return ((RemoteFile)file).getContents(DEFAULT_MONITOR);
- else
- return new BufferedInputStream(file.getContents());
- }
-
- /*
- * Get the CVS Resource for the given resource
- */
- protected ICVSResource getCVSResource(IResource resource) throws CVSException {
- return CVSWorkspaceRoot.getCVSResourceFor(resource);
- }
-
- protected IProject getNamedTestProject(String name) throws CoreException {
- IProject target = getWorkspace().getRoot().getProject(name);
- if (!target.exists()) {
- target.create(null);
- target.open(null);
- }
- assertExistsInFileSystem(target);
- return target;
- }
- protected CVSTeamProvider getProvider(IResource resource) throws TeamException {
- return (CVSTeamProvider)RepositoryProvider.getProvider(resource.getProject());
- }
- protected static InputStream getRandomContents(int sizeAtLeast) {
- StringBuffer randomStuff = new StringBuffer(sizeAtLeast + 100);
- while (randomStuff.length() < sizeAtLeast) {
- randomStuff.append(getRandomSnippet());
- }
- return new ByteArrayInputStream(randomStuff.toString().getBytes());
- }
- /**
- * Return String with some random text to use
- * as contents for a file resource.
- */
- public static String getRandomSnippet() {
- switch ((int) Math.round(Math.random() * 10)) {
- case 0 :
- return "este e' o meu conteudo (portuguese)";
- case 1 :
- return "Dann brauchen wir aber auch einen deutschen Satz!";
- case 2 :
- return "I'll be back";
- case 3 :
- return "don't worry, be happy";
- case 4 :
- return "there is no imagination for more sentences";
- case 5 :
- return "customize yours";
- case 6 :
- return "foo";
- case 7 :
- return "bar";
- case 8 :
- return "foobar";
- case 9 :
- return "case 9";
- default :
- return "these are my contents";
- }
- }
- protected IProject getUniqueTestProject(String prefix) throws CoreException {
- // manage and share with the default stream create by this class
- return getNamedTestProject(prefix + "-" + Long.toString(System.currentTimeMillis()));
- }
-
- protected CVSRepositoryLocation getRepository() {
- return CVSTestSetup.repository;
- }
- protected void importProject(IProject project) throws TeamException {
-
- // Create the root folder for the import operation
- ICVSFolder root = CVSWorkspaceRoot.getCVSFolderFor(project);
-
- // Perform the import
- IStatus status;
- Session s = new Session(getRepository(), root);
- s.open(DEFAULT_MONITOR);
- try {
- status = Command.IMPORT.execute(s,
- Command.NO_GLOBAL_OPTIONS,
- new LocalOption[] {Import.makeArgumentOption(Command.MESSAGE_OPTION, "Initial Import")},
- new String[] { project.getName(), getRepository().getUsername(), "start" },
- null,
- DEFAULT_MONITOR);
- } finally {
- s.close();
- }
-
- if (status.getCode() == CVSStatus.SERVER_ERROR) {
- throw new CVSServerException(status);
- }
- }
-
- protected void shareProject(IProject project) throws TeamException, CoreException {
- mapNewProject(project);
- commitNewProject(project);
- }
-
- protected void mapNewProject(IProject project) throws TeamException {
- CVSWorkspaceRoot.createModule(getRepository(), project, null, DEFAULT_MONITOR);
- }
-
- protected void commitNewProject(IProject project) throws CoreException, CVSException, TeamException {
- List resourcesToAdd = new ArrayList();
- IResource[] members = project.members();
- for (int i = 0; i < members.length; i++) {
- if ( ! CVSWorkspaceRoot.getCVSResourceFor(members[i]).isIgnored()) {
- resourcesToAdd.add(members[i]);
- }
- }
- getProvider(project).add((IResource[]) resourcesToAdd.toArray(new IResource[resourcesToAdd.size()]), IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
- getProvider(project).checkin(new IResource[] {project}, IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
- // Pause to ensure that future operations happen later than timestamp of committed resources
- waitMsec(1500);
- }
-
- /**
- * Return an input stream with some random text to use
- * as contents for a file resource.
- */
- public InputStream getRandomContents() {
- return getRandomContents(RANDOM_CONTENT_SIZE);
- }
-
- protected void setContentsAndEnsureModified(IFile file) throws CoreException, TeamException {
- setContentsAndEnsureModified(file, getRandomContents().toString());
- }
-
- protected void setContentsAndEnsureModified(IFile file, String contents) throws CoreException, CVSException {
- ICVSFile cvsFile = CVSWorkspaceRoot.getCVSFileFor(file);
- int count = 0;
- if (contents == null) contents ="";
- do {
- file.setContents(new ByteArrayInputStream(contents.getBytes()), false, false, null);
- assertTrue("Timestamp granularity is too small. Increase test wait factor", count <= CVSTestSetup.WAIT_FACTOR);
- if (!cvsFile.isModified(null)) {
- waitMsec(1500);
- count++;
- }
- } while (!cvsFile.isModified(null));
- }
-
- public void waitMsec(int msec) {
- try {
- Thread.sleep(msec);
- } catch(InterruptedException e) {
- fail("wait-problem");
- }
- }
-}
-
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/ICVSClient.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/ICVSClient.java
deleted file mode 100644
index a89cec5e1..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/ICVSClient.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core;
-
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.team.internal.ccvs.core.CVSException;
-import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation;
-
-public interface ICVSClient {
- public void executeCommand(
- ICVSRepositoryLocation repositoryLocation, IContainer localRoot, String command,
- String[] globalOptions, String[] localOptions, String[] arguments)
- throws CVSException;
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/JUnitTestCase.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/JUnitTestCase.java
deleted file mode 100644
index c8f4ad4af..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/JUnitTestCase.java
+++ /dev/null
@@ -1,329 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core;
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.PrintStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import junit.awtui.TestRunner;
-import junit.framework.TestCase;
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.team.internal.ccvs.core.CVSException;
-import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation;
-import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot;
-
-/**
- * Base-class to the low level-testcases for the Session.
- * Supplies convinience-methods and default attributes for the testcases.
- * Especally data for a default-connection to the server is stored.
- */
-public abstract class JUnitTestCase extends TestCase {
- protected static final int RANDOM_CONTENT_SIZE = 10000;
- protected static final boolean NEWLINE_TEST = false;
- protected static final String PLATFORM_NEWLINE = System.getProperty("line.separator");
- protected static final IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
-
- public static final String[] EMPTY_ARGS = new String[0];
-
- /**
- * Init the options and arguments to standard-values
- */
- public JUnitTestCase(String name) {
- super(name);
- }
-
- /**
- * Delete a project/resource form the standard cvs-server
- */
- protected void magicDeleteRemote(String remoteName) throws CVSException {
- magicDeleteRemote(CVSTestSetup.repository, remoteName);
- }
-
- /**
- * Delete a project/resource form the specified cvs-server
- */
- protected static void magicDeleteRemote(ICVSRepositoryLocation location, String remoteName)
- throws CVSException {
- CVSTestSetup.executeRemoteCommand(location, "rm -rf " +
- new Path(location.getRootDirectory()).append(remoteName).toString());
- }
-
- /**
- * Sends the project to the standard cvs-server so that it contains the resources
- * described in createResources. The files have random content.
- *
- * @param projectName the name of the project to import
- * @param createResources e.g. new String[]{"a.txt","f1/b.txt","f1/c.txt","f2/d.txt"}
- */
- protected void magicSetUpRepo(String projectName, String[] createResources)
- throws IOException, CoreException, CVSException {
- magicSetUpRepo(CVSTestSetup.repository, projectName, createResources);
- }
-
- /**
- * Sends the project to the specified cvs-server so that it contains the resources
- * described in createResources. The files have random content.
- *
- * @param location the CVS repository location
- * @param projectName the name of the project to import
- * @param createResources e.g. new String[]{"a.txt","f1/b.txt","f1/c.txt","f2/d.txt"}
- */
- protected static void magicSetUpRepo(ICVSRepositoryLocation location, String projectName,
- String[] createResources) throws IOException, CoreException, CVSException {
- IProject projectRoot = workspaceRoot.getProject(projectName + "-setup-tmp");
- mkdirs(projectRoot);
- createRandomFile(projectRoot, createResources);
- magicDeleteRemote(location, projectName);
-
- String[] lOptions = new String[]{"-m","msg"};
- String[] args = new String[]{projectName,"a","b"};
-
- EclipseCVSClient.execute(location, CVSWorkspaceRoot.getCVSFolderFor(projectRoot),
- "import", EMPTY_ARGS, lOptions, args);
- projectRoot.delete(false /*force*/, null);
- }
-
- /**
- * Compare Arrays and find the first different element
- */
- protected static void assertEqualsArrays(Object[] obArr1, Object[] obArr2) {
-
- assertEquals("Called assertEqualsArrays with null on one side", obArr1 == null,obArr2 == null);
- if (obArr1 == null) {
- return;
- }
-
- for (int i=0; i<Math.min(obArr1.length,obArr2.length); i++) {
- assertEquals("At Element " + i + " of the array",obArr1[i],obArr2[i]);
- }
-
- // If the Arrays are different in length, look for the first
- // not existing element and compare it to the existing in the
- // other array
- if (obArr1.length > obArr2.length) {
- assertEquals("Arrays of different length",obArr1[obArr2.length],null);
- return;
- }
-
- if (obArr1.length < obArr2.length) {
- assertEquals("Arrays of different length",obArr2[obArr1.length],null);
- return;
- }
-
- }
-
- /**
- * Write text lines to file from an array of strings.
- */
- protected static void writeToFile(IFile file, String[] contents)
- throws IOException, CoreException {
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- PrintStream os = new PrintStream(bos);
- try {
- for (int i = 0; i < contents.length; i++) {
- os.println(contents[i]);
- }
- ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
- if (file.exists()) {
- file.setContents(bis, false /*force*/, true /*keepHistory*/, null);
- } else {
- mkdirs(file.getParent());
- file.create(bis, false /*force*/, null);
- }
- } finally {
- os.close();
- }
- }
-
- /**
- * Read text lines from file into an array of strings.
- */
- protected static String[] readFromFile(IFile file)
- throws IOException, CoreException {
- if (! file.exists()) return null;
- BufferedReader reader = new BufferedReader(new InputStreamReader(file.getContents()));
- List fileContentStore = new ArrayList();
- try {
- String line;
- while ((line = reader.readLine()) != null) {
- fileContentStore.add(line);
- }
- } finally {
- reader.close();
- }
- return (String[]) fileContentStore.toArray(new String[fileContentStore.size()]);
- }
-
- /**
- * Append text files to file from an array of strings, create new file if it
- * does not exist yet.
- */
- protected static void appendToFile(IFile file, String[] contents)
- throws IOException, CoreException {
- String[] oldContents = readFromFile(file);
- String[] newContents;
- if (oldContents == null) {
- newContents = contents;
- } else {
- newContents = new String[oldContents.length + contents.length];
- System.arraycopy(oldContents, 0, newContents, 0, oldContents.length);
- System.arraycopy(contents, 0, newContents, oldContents.length, contents.length);
- }
- writeToFile(file, newContents);
- }
-
- /**
- * Pre-Append text files to file from an array of strings, create new file if it
- * does not exist yet.
- */
- protected static void prefixToFile(IFile file, String[] contents)
- throws IOException, CoreException {
- String[] oldContents = readFromFile(file);
- String[] newContents;
- if (oldContents == null) {
- newContents = contents;
- } else {
- newContents = new String[oldContents.length + contents.length];
- System.arraycopy(contents, 0, newContents, 0, contents.length);
- System.arraycopy(oldContents, 0, newContents, contents.length, oldContents.length);
- }
- writeToFile(file, newContents);
- }
-
- /**
- * genertates Random content meand to be written in a File
- */
- protected static String createRandomContent() {
-
- StringBuffer content = new StringBuffer();
- int contentSize;
-
- content.append("Random file generated for test" + PLATFORM_NEWLINE);
-
- contentSize = (int) Math.round(RANDOM_CONTENT_SIZE * 2 * Math.random());
- for (int i=0; i<contentSize; i++) {
-
- if (Math.random()>0.99) {
- content.append(PLATFORM_NEWLINE);
- }
-
- if (Math.random()>0.99) {
- content.append("\n");
- }
-
- if (NEWLINE_TEST) {
- if (Math.random()>0.99) {
- content.append("\n\r");
- }
- if (Math.random()>0.99) {
- content.append('\r');
- }
- if (Math.random()>0.99) {
- content.append("\r\n");
- }
- if (Math.random()>0.99) {
- content.append("\n");
- }
- if (Math.random()>0.99) {
- content.append("\n\n");
- }
- if (Math.random()>0.99) {
- content.append("\r\r");
- }
- }
-
- content.append((char)('\u0021' + Math.round(60 * Math.random())));
- }
-
- return content.toString();
- }
-
- /**
- * Creates a folder (and its parents if needed).
- */
- protected static void mkdirs(IContainer container) throws CoreException {
- if (container.getType() == IResource.PROJECT) {
- IProject project = (IProject) container;
- if (! project.exists()) {
- project.create(null);
- }
- project.open(null);
- } else if (container.getType() == IResource.FOLDER) {
- IFolder folder = (IFolder) container;
- if (! folder.exists()) {
- mkdirs(folder.getParent());
- folder.create(false /*force*/, true /*local*/, null);
- }
- }
- }
-
- /**
- * Creates the file with random content, and all the folders on the
- * way to there.
- */
- private static void createRandomFile(IFile file)
- throws IOException, CoreException {
- mkdirs(file.getParent());
- writeToFile(file, new String[] { createRandomContent() });
- }
-
- /**
- * Build the given fileStructure, all files are going to have
- * sample content, all folders on the way are created.
- */
- protected static void createRandomFile(IContainer parent, String[] fileNameArray)
- throws IOException, CoreException {
- for (int i = 0; i < fileNameArray.length; i++) {
- IFile file = parent.getFile(new Path(fileNameArray[i]));
- createRandomFile(file);
- }
- }
-
- /**
- * wait milliseconds to continou the execution
- */
- public static void waitMsec(int msec) {
- try {
- int wait = CVSTestSetup.WAIT_FACTOR * msec;
- long start = System.currentTimeMillis();
- Thread.sleep(wait);
- long end = System.currentTimeMillis();
- // Allow a 100 ms error in waiting
- assertTrue("Error in thread class. Did not wait long enough", (end - start) > (wait - 100));
- } catch(InterruptedException e) {
- fail("wait-problem");
- }
- }
-
- /**
- * Call this method from the main-method of your test-case.
- * It initialises some required parameter and runs the testcase.
- */
- protected static void run(Class test) {
- // XXX is this property used anywhere?
- System.setProperty("eclipse.cvs.standalone", "true");
- TestRunner.run(test);
- }
-}
-
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/TestConnection.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/TestConnection.java
deleted file mode 100644
index 682c9b6ec..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/TestConnection.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation;
-import org.eclipse.team.internal.ccvs.core.IServerConnection;
-import org.eclipse.team.internal.ccvs.core.connection.CVSAuthenticationException;
-
-/**
- * @author Administrator
- *
- * To change this generated comment go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-public class TestConnection implements IServerConnection {
-
- public static TestConnection currentConnection;
-
- public static List previousLines;
- public static StringBuffer currentLine;
-
-
- private ByteArrayInputStream serverResponse;
-
- private static final String VALID_SERVER_REQUESTS = "Valid-requests Root Valid-responses valid-requests Repository Directory Max-dotdot Static-directory Sticky Checkin-prog Update-prog Entry Kopt Checkin-time Modified Is-modified UseUnchanged Unchanged Notify Questionable Case Argument Argumentx Global_option Gzip-stream wrapper-sendme-rcsOptions Set Kerberos-encrypt Gssapi-encrypt Gssapi-authenticate expand-modules ci co update diff log rlog add remove update-patches gzip-file-contents status rdiff tag rtag import admin export history release watch-on watch-off watch-add watch-remove watchers editors init annotate rannotate noop version";
-
- public static IServerConnection createConnection(ICVSRepositoryLocation location, String password) {
- currentConnection = new TestConnection();
- return currentConnection;
- }
-
- public static String getLastLine() {
- if (previousLines.isEmpty()) return null;
- return (String)previousLines.get(previousLines.size() - 1);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.internal.ccvs.core.IServerConnection#open(org.eclipse.core.runtime.IProgressMonitor)
- */
- public void open(IProgressMonitor monitor) throws IOException, CVSAuthenticationException {
- resetStreams();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.internal.ccvs.core.IServerConnection#close()
- */
- public void close() throws IOException {
- resetStreams();
- }
-
- /**
- *
- */
- private void resetStreams() {
- currentLine = new StringBuffer();
- previousLines = new ArrayList();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.internal.ccvs.core.IServerConnection#getInputStream()
- */
- public InputStream getInputStream() {
- // TODO Auto-generated method stub
- return new InputStream() {
- public int read() throws IOException {
- if (serverResponse == null) {
- throw new IOException("Not prepared to make a response");
- } else {
- return serverResponse.read();
- }
- }
- };
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.internal.ccvs.core.IServerConnection#getOutputStream()
- */
- public OutputStream getOutputStream() {
- return new OutputStream() {
- public void write(int output) throws IOException {
- byte b = (byte)output;
- if (b == '\n') {
- String sentLine = currentLine.toString();
- previousLines.add(sentLine);
- currentLine = new StringBuffer();
- respondToSentLine(sentLine);
- } else {
- currentLine.append((char)b);
- }
- }
- };
- }
-
- /**
- * @param sentLine
- */
- protected void respondToSentLine(String sentLine) {
- if (sentLine.equals("valid-requests")) {
- serverResponse = new ByteArrayInputStream((VALID_SERVER_REQUESTS + "\nok\n").getBytes());
- }
- }
-
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/TestConnectionMethod.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/TestConnectionMethod.java
deleted file mode 100644
index d64a946ff..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/TestConnectionMethod.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core;
-
-import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation;
-import org.eclipse.team.internal.ccvs.core.IConnectionMethod;
-import org.eclipse.team.internal.ccvs.core.IServerConnection;
-
-/**
- * @author Administrator
- *
- * To change this generated comment go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-public class TestConnectionMethod implements IConnectionMethod {
-
- /* (non-Javadoc)
- * @see org.eclipse.team.internal.ccvs.core.IConnectionMethod#getName()
- */
- public String getName() {
- return "test";
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.internal.ccvs.core.IConnectionMethod#createConnection(org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation, java.lang.String)
- */
- public IServerConnection createConnection(ICVSRepositoryLocation location, String password) {
- return TestConnection.createConnection(location, password);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.internal.ccvs.core.IConnectionMethod#disconnect(org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation)
- */
- public void disconnect(ICVSRepositoryLocation location) {
- // Nothing need to be done
- }
-
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/AllTestsCompatibility.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/AllTestsCompatibility.java
deleted file mode 100644
index 12d4bc836..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/AllTestsCompatibility.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.compatible;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class AllTestsCompatibility extends TestSuite {
-
- public static Test suite() {
- TestSuite suite = new TestSuite();
- suite.addTest(BasicTest.suite());
- suite.addTest(ConflictTest.suite());
- suite.addTest(ModuleTest.suite());
- return new CompatibleTestSetup(suite);
- }
-
- public AllTestsCompatibility(String name) {
- super(name);
- }
-
- public AllTestsCompatibility() {
- super();
- }
-}
-
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/BasicTest.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/BasicTest.java
deleted file mode 100644
index 207241341..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/BasicTest.java
+++ /dev/null
@@ -1,496 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.compatible;
-import java.util.Date;
-import java.util.GregorianCalendar;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import org.eclipse.team.tests.ccvs.core.JUnitTestCase;
-
-public class BasicTest extends JUnitTestCase {
- SameResultEnv env1;
- SameResultEnv env2;
-
- public BasicTest(String arg) {
- super(arg);
- env1 = new SameResultEnv(arg + "-checkout1");
- env2 = new SameResultEnv(arg + "-checkout2");
- }
-
- public BasicTest() {
- this("BasicTest");
- }
-
- public static void main(String[] args) {
- run(BasicTest.class);
- }
-
- public static Test suite() {
- TestSuite suite = new TestSuite(BasicTest.class);
- return new CompatibleTestSetup(suite);
- //return new CompatibleTestSetup(new BasicTest("testReadOnly"));
- }
- public void setUp() throws Exception {
- env1.setUp();
- env2.setUp();
-
- // Set the project to the content we need ...
- env1.magicSetUpRepo("proj2",new String[]{"a.txt","f1/b.txt","f1/c.txt"});
- env2.deleteFile("proj2");
- }
-
- public void tearDown() throws Exception {
- env1.tearDown();
- env2.tearDown();
- }
-
- public void testAdd() throws Exception {
-
- env1.execute("co",EMPTY_ARGS,new String[]{"proj2"});
- env1.writeToFile("proj2/d.txt",new String[]{"The file to be added","next"});
- env1.mkdirs("proj2/f2/f3");
- env1.mkdirs("proj2/f4/f5");
- env1.writeToFile("proj2/f4/f5/e.txt", new String[]{"Another file to be added","next"});
-
- env1.execute("add",EMPTY_ARGS,new String[]{"d.txt"},"proj2");
- env1.execute("add",EMPTY_ARGS,new String[]{"f2","f2/f3"},"proj2");
- env1.execute("add",EMPTY_ARGS,new String[]{"f4"},"proj2");
- env1.execute("add",EMPTY_ARGS,new String[]{"f4/f5"},"proj2");
- env1.execute("add",EMPTY_ARGS,new String[]{"f4/f5/e.txt"},"proj2");
- env1.execute("ci",new String[]{"-m","TestMessage"},new String[]{"proj2"});
-
- // Check the stuff out somewhere else to acctually check, that
- // the file has been accepted
- env2.execute("co",EMPTY_ARGS,new String[]{"proj2"});
- }
-
- public void testAddUpdate() throws Exception {
-
- env1.execute("co",EMPTY_ARGS,new String[]{"proj2"});
- env2.execute("co",EMPTY_ARGS,new String[]{"proj2"});
-
- env1.writeToFile("proj2/d.txt",new String[]{"The file to be added","next"});
- env1.mkdirs("proj2/f2/f3");
- env1.mkdirs("proj2/f4/f5");
- env1.writeToFile("proj2/f4/f5/e.txt", new String[]{"Another file to be added","next"});
-
- env1.execute("add",EMPTY_ARGS,new String[]{"d.txt"},"proj2");
- env1.execute("add",EMPTY_ARGS,new String[]{"f2","f2/f3"},"proj2");
- env1.execute("add",EMPTY_ARGS,new String[]{"f4"},"proj2");
- env1.execute("add",EMPTY_ARGS,new String[]{"f4/f5"},"proj2");
- env1.execute("add",EMPTY_ARGS,new String[]{"f4/f5/e.txt"},"proj2");
- env1.execute("ci",new String[]{"-m","TestMessage"},new String[]{"proj2"});
-
- env2.execute("update",EMPTY_ARGS,new String[]{"proj2"});
-
- }
-
- public void testRemove() throws Exception {
-
- env1.execute("co",EMPTY_ARGS,new String[]{"proj2"});
- env1.deleteFile("proj2/a.txt");
- env1.deleteFile("proj2/f1/c.txt");
-
- env1.execute("remove",EMPTY_ARGS,new String[]{"a.txt"},"proj2");
- env1.execute("remove",EMPTY_ARGS,new String[]{"f1/c.txt"},"proj2");
- env1.execute("ci",new String[]{"-m","TestMessage"},new String[]{"proj2"});
-
- // Check the stuff out somewhere else to acctually check, that
- // the file has been accepted
- env2.execute("co",EMPTY_ARGS,new String[]{"proj2"});
- }
-
- public void testRemoveRecusive() throws Exception {
-
- env1.execute("co",EMPTY_ARGS,new String[]{"proj2"});
- env2.execute("co",EMPTY_ARGS,new String[]{"proj2"});
-
- env1.deleteFile("proj2/a.txt");
- env1.deleteFile("proj2/f1/c.txt");
-
- env1.execute("remove",EMPTY_ARGS,new String[0],"proj2");
- env1.execute("ci",new String[]{"-m","TestMessage"},new String[]{"proj2"});
-
- // Check the stuff out somewhere else to acctually check, that
- // the file has been accepted
- env2.execute("update",EMPTY_ARGS,new String[]{"proj2"});
- }
-
- public void testRoundRewrite() throws Exception {
-
- // Download content in two locations
- env1.execute("co",EMPTY_ARGS,new String[]{"proj2"},"");
- env2.execute("co",EMPTY_ARGS,new String[]{"proj2"},"");
-
- // change the file "proj1/folder1/c.txt" in env1 check it in
- // on the server
- env1.appendToFile("proj2/f1/c.txt", new String[] { "AppendIt" });
- env1.execute("ci",new String[]{"-m","TestMessage"},new String[]{"proj2"},"");
-
- // assure that the file is different in env1 and env2
- // try {
- // assertEqualsArrays(env1.readFromFile("proj2/f1/c.txt"),
- // env2.readFromFile("proj2/f1/c.txt"));
- // throw new IllegalArgumentException("This is a failed Assertion");
- // } catch (AssertionFailedError e) {}
-
- // update env2 and make sure the changes are there
- env2.execute("update",EMPTY_ARGS,new String[]{"proj2"},"");
- // assertEqualsArrays(env1.readFromFile("proj2/f1/c.txt"),
- // env2.readFromFile("proj2/f1/c.txt"));
- }
-
- public void testUpdateMinusN() throws Exception {
- String[] fileContent1;
-
- fileContent1 = new String[]{"RandomNumber", Math.random() + ""};
-
- env1.execute("co",EMPTY_ARGS,new String[]{"proj2"});
- env2.execute("co",EMPTY_ARGS,new String[]{"proj2"});
-
- env1.writeToFile("proj1/folder1/c.txt",fileContent1);
-
- env1.execute("ci",new String[]{"-n"},new String[]{"-m","TestMessage"},new String[]{"proj2"},"");
- env2.execute("update",EMPTY_ARGS,new String[]{"proj2"});
- }
-
- public void testStatus() throws Exception {
-
- env1.execute("co",EMPTY_ARGS,new String[]{"proj2"});
- env1.execute("status",EMPTY_ARGS,new String[]{"proj2"});
-
- env1.deleteFile("proj2/a.txt");
- env1.deleteFile("proj2/f1/c.txt");
- env1.appendToFile("proj2/f1/b.txt",new String[] { "AppendIt" });
-
- env1.execute("status",EMPTY_ARGS,new String[]{"proj2"});
- env1.execute("status",EMPTY_ARGS,new String[0],"proj2");
-
- env1.createRandomFile("proj2/d.txt");
-
- env1.execute("status",EMPTY_ARGS,new String[0],"proj2");
- env1.execute("status",EMPTY_ARGS,new String[]{"f1/b.txt"},"proj2");
- // env1.execute("status",localOptions,new String[]{"d.txt"},"proj2");
- }
-
- public void testLog() throws Exception {
-
- env1.execute("co",EMPTY_ARGS,new String[]{"proj2"});
- env1.execute("log",EMPTY_ARGS,new String[]{"proj2"});
-
- env1.deleteFile("proj2/a.txt");
- env1.deleteFile("proj2/f1/c.txt");
- env1.appendToFile("proj2/f1/b.txt",new String[] { "AppendIt" });
-
- env1.execute("log",EMPTY_ARGS,new String[]{"proj2"});
- env1.execute("log",EMPTY_ARGS,new String[0],"proj2");
-
- env1.createRandomFile("proj2/d.txt");
-
- env1.execute("log",EMPTY_ARGS,new String[0],"proj2");
- env1.execute("log",EMPTY_ARGS,new String[]{"f1/b.txt"},"proj2");
-
- }
-
- public void testBranchTag() throws Exception {
-
- env1.execute("co",EMPTY_ARGS,new String[]{"proj2"});
- env1.execute("tag",new String[]{"-b"},new String[]{"tag1","proj2"});
-
- env1.deleteFile("proj2/a.txt");
- env1.deleteFile("proj2/f1/c.txt");
- env1.appendToFile("proj2/f1/b.txt",new String[] { "AppendIt" });
-
- env1.execute("tag",new String[]{"-b"},new String[]{"tag2","proj2"});
-
- env1.createRandomFile("proj2/d.txt");
-
- env1.deleteFile("proj2");
-
- // Try an commit and an add in the two different streams
- env1.execute("co",new String[]{"-r","tag1"},new String[]{"proj2"});
- env1.appendToFile("proj2/f1/b.txt", new String[] { "AppendItTwo" });
- env1.createRandomFile("proj2/d.txt");
- env1.execute("add",new String[0],new String[]{"d.txt"},"proj2");
- env1.execute("ci",new String[]{"-m","branch"},new String[]{"proj2"});
- env1.deleteFile("proj2");
- env1.execute("co",new String[]{"-r","tag1"},new String[]{"proj2"});
-
- env2.execute("co",new String[]{"-r","tag2"},new String[]{"proj2"});
- env2.appendToFile("proj2/f1/b.txt", new String[] { "AppendItThree" });
- env2.createRandomFile("proj2/d.txt");
- env2.execute("add",new String[0],new String[]{"d.txt"},"proj2");
- env2.execute("ci",new String[]{"-m","branch"},new String[]{"proj2"});
- env2.deleteFile("proj2");
- env2.execute("co",new String[]{"-r","tag2"},new String[]{"proj2"});
- }
-
- public void testBranchingWithLocalChanges() throws Exception {
- // Try to branch of a workspace with local changes
- env1.execute("co",EMPTY_ARGS,new String[]{"proj2"});
- JUnitTestCase.waitMsec(1500);
- env1.appendToFile("proj2/f1/b.txt",new String[] { "AppendIt" });
- env1.execute("tag",new String[]{"-b"},new String[]{"branch-with-changes","proj2"});
- env1.execute("update",new String[]{"-r", "branch-with-changes"},new String[]{"proj2"});
- }
-
- public void testTag() throws Exception {
-
- env1.execute("co",EMPTY_ARGS,new String[]{"proj2"});
- env1.execute("tag",EMPTY_ARGS,new String[]{"tag1","proj2"});
-
- env1.deleteFile("proj2/a.txt");
- env1.deleteFile("proj2/f1/c.txt");
- env1.appendToFile("proj2/f1/b.txt",new String[] { "AppendIt" });
-
- env1.execute("tag",EMPTY_ARGS,new String[]{"tag2","proj2"});
- env1.execute("tag",EMPTY_ARGS,new String[]{"tag2"},"proj2");
-
- env1.createRandomFile("proj2/d.txt");
-
- env1.execute("tag",EMPTY_ARGS,new String[]{"tag3"},"proj2");
- env1.execute("tag",EMPTY_ARGS,new String[]{"tag3","f1/b.txt"},"proj2");
-
- env1.deleteFile("proj2");
- env1.execute("co",new String[]{"-r","tag1"},new String[]{"proj2"});
- env1.deleteFile("proj2");
- env1.execute("co",new String[]{"-r","tag2"},new String[]{"proj2"});
- env1.deleteFile("proj2");
- env1.execute("co",new String[]{"-r","tag3"},new String[]{"proj2"});
-
- // env1.execute("tag",localOptions,new String[]{"d.txt"},"proj2");
-
- env1.execute("update", new String[]{"-r","tag1"}, new String[]{"proj2"});
- env1.execute("update", new String[]{"-r","tag2"}, new String[]{"proj2"});
- env1.execute("update", new String[]{"-r","tag3"}, new String[]{"proj2"});
- env1.execute("update", new String[]{"-A"}, new String[]{"proj2"});
- }
-
- public void testRTag() throws Exception {
-
- // Checkout and tag the project
- env1.execute("co",EMPTY_ARGS,new String[]{"proj2"});
- env1.execute("tag",EMPTY_ARGS,new String[]{"tag1","proj2"});
- env1.deleteFile("proj2");
-
- // Use rtag to tag the above tag as both a version and a branch
- env1.execute("rtag",new String[]{"-r", "tag1"},new String[]{"rtag1","proj2"});
- env1.execute("rtag",new String[]{"-b", "-r", "tag1"},new String[]{"btag1","proj2"});
-
- // Checkout the version and branch
- env1.deleteFile("proj2");
- env1.execute("co",new String[]{"-r","rtag1"},new String[]{"proj2"});
- env1.deleteFile("proj2");
- env1.execute("co",new String[]{"-r","btag1"},new String[]{"proj2"});
- }
-
- public void testPrune() throws Exception {
-
- // Download content in two locations
- env1.execute("co",EMPTY_ARGS,new String[]{"proj2"},"");
- env2.execute("co",EMPTY_ARGS,new String[]{"proj2"},"");
-
- // change the file "proj1/folder1/c.txt" in env1 check it in
- // on the server
- env1.deleteFile("proj2/f1/b.txt");
- env1.deleteFile("proj2/f1/c.txt");
- env1.execute("remove",EMPTY_ARGS,new String[0],"proj2");
-
- env1.execute("ci",new String[]{"-m","TestMessage"},new String[]{"proj2"},"");
- env1.execute("update",new String[]{"-P"},new String[]{"proj2"},"");
-
- // update env2 and make sure the changes are there
- env2.execute("update",new String[]{"-P"},new String[]{"proj2"},"");
-
- }
-
- public void testPrune2() throws Exception {
-
- // Download content in two locations
- env1.execute("co",EMPTY_ARGS,new String[]{"proj2"},"");
- env2.execute("co",EMPTY_ARGS,new String[]{"proj2"},"");
-
- // change the file "proj1/folder1/c.txt" in env1 check it in
- // on the server
- env1.deleteFile("proj2/f1/b.txt");
- env1.deleteFile("proj2/f1/c.txt");
- env1.execute("remove",EMPTY_ARGS,new String[0],"proj2");
-
- env1.execute("ci",new String[]{"-m","TestMessage"},new String[]{"proj2"},"");
- env1.execute("update",new String[]{"-P"},new String[]{},"proj2");
-
- // update env2 and make sure the changes are there
- env2.execute("update",new String[]{"-P"},new String[]{},"proj2");
-
- }
-
- public void testAdmin() throws Exception {
-
- env1.execute("co",EMPTY_ARGS,new String[]{"proj2"},"");
-
- env1.execute("admin",new String[]{"-kb"},new String[]{"proj2/f1/b.txt"},"");
- env1.execute("update",EMPTY_ARGS,new String[]{"proj2"},"");
-
- env2.execute("co",EMPTY_ARGS,new String[]{"proj2"},"");
- }
-
- public void testDiff() throws Exception {
-
- env1.execute("co",EMPTY_ARGS,new String[]{"proj2"});
- env1.execute("diff",EMPTY_ARGS,new String[]{"proj2"});
-
- env1.setIgnoreExceptions(true);
-
- env1.appendToFile("proj2/f1/c.txt",new String[] {"AppendIt2" });
- env1.appendToFile("proj2/f1/b.txt",new String[] { "AppendIt" });
-
- env1.execute("diff",EMPTY_ARGS,new String[]{"proj2"});
- env1.execute("diff",EMPTY_ARGS,new String[0],"proj2");
-
- env1.createRandomFile("proj2/d.txt");
-
- env1.execute("diff",EMPTY_ARGS,new String[0],"proj2");
- env1.execute("diff",EMPTY_ARGS,new String[]{"f1/b.txt"},"proj2");
- // env1.execute("diff",localOptions,new String[]{"d.txt"},"proj2");
-
- env1.setIgnoreExceptions(false);
- }
-
- public void testReadOnly() throws Exception {
-
- // Checkout a read-only copy
- env1.execute("co",new String[]{"-r"},EMPTY_ARGS,new String[]{"proj2"},"");
- // Checkout and modify a writable copy
- env2.execute("co",new String[]{},EMPTY_ARGS,new String[]{"proj2"},"");
- env2.appendToFile("proj2/f1/c.txt",new String[] {"AppendIt2" });
- // Update the read only copy
- env1.execute("update",new String[] {"-r"},EMPTY_ARGS,new String[]{"proj2"},"");
-
- // Update the read-only copy to writable
- env1.execute("update",new String[] {},EMPTY_ARGS,new String[]{"proj2"},"");
- }
-
- public void testQuestionables() throws Exception {
- env1.execute("co",EMPTY_ARGS,new String[]{"proj2"},"");
- env1.writeToFile("proj2/f2/d.txt", new String[]{"content"});
- env1.writeToFile("proj2/f3/f4/d.txt", new String[]{"content"});
- env1.writeToFile("proj2/f5/f6/f7/d.txt", new String[]{"content"});
- env1.execute("add",new String[0],new String[]{"f3"},"proj2");
- env1.execute("add",new String[0],new String[]{"f3/f4"},"proj2");
- env1.execute("update",new String[0],new String[]{"."},"proj2");
- }
-
- public void testImportWrappers() throws Exception {
- // Make the project empty
- env1.magicSetUpRepo("proj3",new String[]{"NoImportant.txt"});
- env2.deleteFile("proj3");
-
- // Create resouces and import them with the
- // special wrapper
- env1.createRandomFile(new String[]{"a.txt","a.class","a.xxx"},"proj3");
- env1.execute("import",
- new String[]{"-W","*.txt -k 'kv'","-W","*.class -k 'b'","-I","*.xxx","-m","msg"},
- new String[]{"proj3","aTag","bTag"},
- "proj3");
-
- // download the server-version
- env2.execute("co",EMPTY_ARGS,new String[]{"proj3"},"");
- }
-
- public void testImportIgnores() throws Exception {
- // Make the project empty
- env1.magicSetUpRepo("proj3",new String[]{"NoImportant.txt"});
- env2.deleteFile("proj3");
-
- // Create resouces and import them with the
- // special wrapper
- env1.createRandomFile(new String[]{"a.txt","a.class","a.xxx"},"proj3");
- env1.execute("import",
- new String[]{"-I","*.xxx","-m","msg"},
- new String[]{"proj3","aTag","bTag"},
- "proj3");
-
- // download the server-version
- env2.execute("co",EMPTY_ARGS,new String[]{"proj3"},"");
- }
-
- private String toGMTString(Date d) {
- return d.toGMTString();
- }
-
- public void testDate() throws Exception {
-
- // IMPOTANT:
- // Do not make tests with relative dates, because the times coming back form the server will
- // sometimes differ from the reference-client to the eclipse-client due to the time-delay in calling
-
- Date beforeChange;
- Date firstChange;
- Date secondChange;
-
- env1.execute("co",new String[0],new String[]{"proj2"});
-
- // Change the file "a.txt" and record the times you are doing that at
- waitMsec(1100); // here we wait for the import to finish
- beforeChange = GregorianCalendar.getInstance().getTime();
-
- waitMsec(1100);
-
- env1.appendToFile("proj2/a.txt",new String[] { "AppendIt" });
- env1.execute("ci",new String[]{"-m","msg"},new String[]{"proj2"});
- firstChange = GregorianCalendar.getInstance().getTime();
-
- waitMsec(1100);
-
- env1.appendToFile("proj2/a.txt",new String[] { "AppendIt2" });
- env1.appendToFile("proj2/f1/b.txt",new String[] { "AppendIt2" });
- env1.execute("ci",new String[]{"-m","msg"},new String[]{"proj2"});
- secondChange = GregorianCalendar.getInstance().getTime();
-
- waitMsec(1100);
-
- env1.deleteFile("proj2");
-
- // Now check the project at different times out
- env1.execute("co",new String[]{"-D",toGMTString(beforeChange)},new String[]{"proj2"});
- env1.deleteFile("proj2");
-
- env1.execute("co",new String[]{"-D",toGMTString(firstChange)},new String[]{"proj2"});
- env1.deleteFile("proj2");
-
- env1.execute("co",new String[]{"-D",toGMTString(secondChange)},new String[]{"proj2"});
- env1.deleteFile("proj2");
-
- // Now do some updates to look if update -D works
- env1.execute("co",new String[0],new String[]{"proj2"});
- env1.execute("update",new String[]{"-D",toGMTString(beforeChange)},new String[]{"proj2"});
- env1.execute("update",new String[]{"-D",toGMTString(firstChange)},new String[]{"proj2"});
- env1.execute("update",new String[]{"-D",toGMTString(secondChange)},new String[]{"proj2"});
-
- // We look if the parameter -a is working
- env1.execute("update",new String[]{"-D",toGMTString(beforeChange),"-A"},new String[]{"proj2"});
- env1.execute("update",new String[]{"-D",toGMTString(secondChange)},new String[]{"proj2"});
- env1.deleteFile("proj2");
-
- // We get try to merge changes from different dates
- env1.execute("co",new String[0],new String[]{"proj2"});
- env1.appendToFile("proj2/a.txt", new String[] { "This is the world ..." });
- env1.execute("update",new String[]{"-D",toGMTString(beforeChange)},new String[]{"proj2"});
- env1.appendToFile("proj2/a.txt", new String[] {"... which constantly changes" });
- env1.execute("update",new String[]{"-A"},new String[]{"proj2"});
- // Change something to be able to commit
- env1.appendToFile("proj2/a.txt", new String[] { "... and the changes are approved" });
- env1.execute("ci",new String[]{"-m","msg"},new String[]{"proj2"});
-
- }
-}
-
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/CompatibleTestSetup.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/CompatibleTestSetup.java
deleted file mode 100644
index 98f1dfbf0..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/CompatibleTestSetup.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.compatible;
-import junit.framework.Test;
-import org.eclipse.team.internal.ccvs.core.CVSException;
-import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin;
-import org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation;
-import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
-
-/**
- * @version 1.0
- * @author ${user}
- */
-public class CompatibleTestSetup extends CVSTestSetup {
- public static final String ECLIPSE_REPOSITORY_LOCATION;
- public static final String REFERENCE_REPOSITORY_LOCATION;
- public static CVSRepositoryLocation referenceClientRepository;
- public static CVSRepositoryLocation eclipseClientRepository;
-
- static {
- REFERENCE_REPOSITORY_LOCATION = System.getProperty("eclipse.cvs.repository1");
- ECLIPSE_REPOSITORY_LOCATION = System.getProperty("eclipse.cvs.repository2");
- }
-
- /**
- * Constructor for CompatibleTestSetup.
- */
- public CompatibleTestSetup(Test test) {
- super(test);
- }
-
- /**
- * For compatibility testing, we need to set up two repositories
- */
- public void setUp() throws CVSException {
- CVSProviderPlugin.getPlugin().setPruneEmptyDirectories(false);
- CVSProviderPlugin.getPlugin().setFetchAbsentDirectories(false);
-
- // setup the repositories
- if (referenceClientRepository == null)
- referenceClientRepository = setupRepository(REFERENCE_REPOSITORY_LOCATION);
- if (eclipseClientRepository == null)
- eclipseClientRepository = setupRepository(ECLIPSE_REPOSITORY_LOCATION);
- }
-
- public void tearDown() throws CVSException {
- CVSProviderPlugin.getPlugin().setPruneEmptyDirectories(true);
- CVSProviderPlugin.getPlugin().setFetchAbsentDirectories(true);
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/ConflictTest.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/ConflictTest.java
deleted file mode 100644
index 3dc2c59d0..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/ConflictTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.compatible;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import org.eclipse.team.tests.ccvs.core.JUnitTestCase;
-
-public class ConflictTest extends JUnitTestCase {
- SameResultEnv env1;
- SameResultEnv env2;
-
- public ConflictTest() {
- this(null);
- }
-
- public ConflictTest(String arg) {
- super(arg);
- env1 = new SameResultEnv(arg + "checkout1");
- env2 = new SameResultEnv(arg + "checkout2");
- }
-
- public void setUp() throws Exception {
- env1.setUp();
- env2.setUp();
-
- // Set the project to the content we need ...
- env1.magicSetUpRepo("proj2",new String[]{"a.txt","f1/b.txt","f1/c.txt"});
- env2.deleteFile("proj2");
- }
-
- public void tearDown() throws Exception {
- env1.tearDown();
- env2.tearDown();
- }
-
- public static Test suite() {
- TestSuite suite = new TestSuite(ConflictTest.class);
- //return new CompatibleTestSetup(new ConflictTest("testSimpleConflict"));
- return new CompatibleTestSetup(suite);
- }
-
- public void testSimpleConflict() throws Exception {
- // Download content in two locations
- env1.execute("co",EMPTY_ARGS,new String[]{"proj2"},"");
- env2.execute("co",EMPTY_ARGS,new String[]{"proj2"},"");
-
- // change the file in both directories in a different way
- env1.appendToFile("proj2/f1/c.txt", new String[] { "AppendIt This" });
- env2.appendToFile("proj2/f1/c.txt", new String[] { "AppendIt That" });
-
- // commit changes of the first
- env1.execute("ci",new String[]{"-m","TestMessage"},new String[]{"proj2"},"");
-
- // load the changes into the changed file
- // and submit the merge
- env2.execute("update",EMPTY_ARGS,new String[]{"proj2"},"");
-
- // commit must fail because we have a merged conflict which has not been
- // edited.
- env2.setIgnoreExceptions(true);
- env2.execute("ci",new String[]{"-m","TestMessage"},new String[]{"proj2"},"");
- env2.setIgnoreExceptions(false);
-
- // Make a change to the file in order to let the cvs-client know
- // that we solved the confilict
- env2.appendToFile("proj2/f1/c.txt", new String[] { "That's allright" });
- env2.execute("ci",new String[]{"-m","TestMessage"},new String[]{"proj2"},"");
- }
-
- public void testMergedUpdate() throws Exception {
- // Download content in two locations
- env1.execute("co",EMPTY_ARGS,new String[]{"proj2"},"");
- env2.execute("co",EMPTY_ARGS,new String[]{"proj2"},"");
-
- // change the file in both directories in a different way so that
- // can be merged without conflicts
- env1.prefixToFile("proj2/f1/c.txt", new String[] { "AppendIt at top" });
- env2.appendToFile("proj2/f1/c.txt", new String[] { "AppendIt at bottom" });
-
- // commit changes of the first
- env1.execute("ci",new String[]{"-m","TestMessage"},new String[]{"proj2"},"");
-
- // changes should be merged
- env2.execute("update",EMPTY_ARGS,new String[]{"proj2"},"");
- env2.execute("ci",new String[]{"-m","TestMessage"},new String[]{"proj2"},"");
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/ModuleTest.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/ModuleTest.java
deleted file mode 100644
index 8c1f0b18b..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/ModuleTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.compatible;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import org.eclipse.team.tests.ccvs.core.JUnitTestCase;
-
-public class ModuleTest extends JUnitTestCase {
- SameResultEnv env1;
- SameResultEnv env2;
-
- public ModuleTest(String arg) {
- super(arg);
- env1 = new SameResultEnv(arg + "checkout1");
- env2 = new SameResultEnv(arg + "checkout2");
- }
-
- public static void main(String[] args) {
- run(ModuleTest.class);
- }
-
- public void setUp() throws Exception {
- env1.setUp();
- env2.setUp();
-
- // Set the project to the content we need ...
- env1.magicDeleteRemote("CVSROOT/modules");
- env1.magicDeleteRemote("CVSROOT/modules,v");
- env1.magicSetUpRepo("proj2",new String[]{"a.txt","f1/b.txt","f1/c.txt","f2/d.txt","f2/f3/e.txt"});
- env2.deleteFile("proj2");
- }
-
- public void tearDown() throws Exception {
- env1.tearDown();
- env2.tearDown();
- }
-
- public static Test suite() {
- TestSuite suite = new TestSuite(ModuleTest.class);
- return new CompatibleTestSetup(suite);
- }
-
- private void setUpModuleFile(String[] change) throws Exception {
-
- // Write the modules-file
- env1.execute("co",EMPTY_ARGS,new String[]{"CVSROOT"});
- env1.writeToFile("CVSROOT/modules",change);
-
- // Send it up to the server
- env1.execute("add",new String[]{"-m","m"},new String[]{"modules"},"CVSROOT");
- env1.execute("ci",new String[]{"-m","m"},new String[]{"CVSROOT"});
- env1.deleteFile("CVSROOT");
- }
-
- public void testSimpleModule() throws Exception {
- setUpModuleFile(new String[]{"mod1 proj2"});
- env1.execute("co",EMPTY_ARGS,new String[]{"mod1"});
- env1.appendToFile("mod1/a.txt", new String[] { "Append" });
- env1.execute("ci",new String[]{"-m","m"},new String[]{"mod1"});
- env1.execute("update",EMPTY_ARGS,new String[]{"mod1"});
- }
-
- public void testCompositeModule() throws Exception {
- setUpModuleFile(new String[]{ "mod1-f1 proj2/f1",
- "mod1-f2 proj2/f2",
- "mod1f &mod1-f1 &mod1-f2"});
-
- env1.execute("co",EMPTY_ARGS,new String[]{"mod1f"});
- env1.appendToFile("mod1f/mod1-f1/b.txt", new String[] { "Append" });
- env1.execute("ci",new String[]{"-m","m"},new String[]{"mod1f"});
- env1.execute("update",EMPTY_ARGS,new String[]{"mod1f"});
- }
-
- public void testCompositeAliasModule() throws Exception {
- setUpModuleFile(new String[]{"mod1-f1 proj2/f1",
- "mod1t proj2/f1 b.txt",
- "mod1-f2 &proj2/f2 &mod1t",
- "mod1f -a mod1-f1 mod1-f2"});
-
- env1.execute("co",EMPTY_ARGS,new String[]{"mod1f"});
- env1.appendToFile("mod1-f1/b.txt", new String[] { "Append" });
- env1.execute("ci",new String[]{"-m","m"},new String[]{"mod1-f1","mod1-f2"});
- env1.execute("update",EMPTY_ARGS,new String[]{"mod1-f1","mod1-f2"});
- }
-}
-
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/SameResultEnv.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/SameResultEnv.java
deleted file mode 100644
index 948cad490..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/SameResultEnv.java
+++ /dev/null
@@ -1,490 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.compatible;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Date;
-import java.util.StringTokenizer;
-
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-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.Path;
-import org.eclipse.team.internal.ccvs.core.CVSException;
-import org.eclipse.team.internal.ccvs.core.ICVSFile;
-import org.eclipse.team.internal.ccvs.core.ICVSFolder;
-import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation;
-import org.eclipse.team.internal.ccvs.core.ICVSResource;
-import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot;
-import org.eclipse.team.internal.ccvs.core.syncinfo.ResourceSyncInfo;
-import org.eclipse.team.tests.ccvs.core.CommandLineCVSClient;
-import org.eclipse.team.tests.ccvs.core.EclipseCVSClient;
-import org.eclipse.team.tests.ccvs.core.ICVSClient;
-import org.eclipse.team.tests.ccvs.core.JUnitTestCase;
-
-
-/**
- * This is a TestCase that does provide the possibility
- * to run tests on both the reference reference-client and the
- * client provided by us, and to check on equal results
- * in files and messages to the consol.
- *
- * No own tests should be placed here, instead you should
- * instanciate this testcase in order to make your test from
- * another suite.
- * The class is final, because you need to be able to open
- * two (or more) different enviorments to test certain things.
- */
-public final class SameResultEnv extends JUnitTestCase {
- private IProject referenceProject;
- private ICVSFolder referenceRoot;
- private IProject eclipseProject;
- private ICVSFolder eclipseRoot;
-
- private boolean ignoreExceptions;
-
- public SameResultEnv(String arg) {
- super(arg);
- }
-
- /**
- * Always to be called in the setUp of the testCase that wants to
- * use the same-result Enviorment.
- */
- public void setUp() throws Exception {
- super.setUp();
- IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
- // setup reference client test project
- referenceProject = root.getProject(getName() + "-reference");
- referenceProject.delete(true /*deleteContent*/, true /*force*/, null);
- mkdirs(referenceProject);
- referenceRoot = CVSWorkspaceRoot.getCVSFolderFor(referenceProject);
-
- // setup eclipse client test project
- eclipseProject = root.getProject(getName() + "-eclipse");
- eclipseProject.delete(true /*deleteContent*/, true /*force*/, null);
- mkdirs(eclipseProject);
- eclipseRoot = CVSWorkspaceRoot.getCVSFolderFor(eclipseProject);
-
- // By default, exceptions are not ignored.
- // Specific test cases can choose to ignore exceptions
- ignoreExceptions = false;
- }
-
- /**
- * Always to be called in the tearDown of the testCase that wants to
- * use the same-result Enviorment.
- */
- public void tearDown() throws Exception {
- // we deliberately don't clean up test projects to simplify debugging
- super.tearDown();
- }
-
- /**
- * Helper method.
- * Calls execute(command, EMPTY_ARGS, localOptions, arguments, pathRelativeToRoot)
- */
- public void execute(String command, String[] localOptions, String[] arguments, String pathRelativeToRoot)
- throws CVSException {
- execute(command, EMPTY_ARGS, localOptions, arguments, pathRelativeToRoot);
- }
-
- /**
- * Helper method.
- * Calls execute(command, EMPTY_ARGS, localOptions, arguments, "")
- */
- public void execute(String command, String[] localOptions, String[] arguments)
- throws CVSException {
- execute(command, EMPTY_ARGS, localOptions, arguments, "");
- }
-
- /**
- * Runs a command twice, once in the reference environments, once
- * in the eclipse environment. Compares the resulting resources
- * on disk, but not console output.
- */
- public void execute(String command,
- String[] globalOptions, String[] localOptions, String[] arguments,
- String pathRelativeToRoot) throws CVSException {
-
- // run with reference client
- boolean referenceClientException = execute(CommandLineCVSClient.INSTANCE,
- CompatibleTestSetup.referenceClientRepository, referenceProject,
- command, globalOptions, localOptions, arguments, pathRelativeToRoot);
- // run with Eclipse client
- boolean eclipseClientException = execute(EclipseCVSClient.INSTANCE,
- CompatibleTestSetup.eclipseClientRepository, eclipseProject,
- command, globalOptions, localOptions, arguments, pathRelativeToRoot);
-
- // assert same results
- assertEquals(referenceClientException, eclipseClientException);
- assertConsistent();
- }
-
- private boolean execute(ICVSClient client, ICVSRepositoryLocation repositoryLocation,
- IContainer localRoot, String command,
- String[] globalOptions, String[] localOptions, String[] arguments,
- String pathRelativeToRoot) throws CVSException {
- try {
- IPath path = new Path(pathRelativeToRoot);
- if (path.segmentCount() != 0) {
- localRoot = localRoot.getFolder(path);
- }
- client.executeCommand(repositoryLocation, localRoot, command, globalOptions,
- localOptions, arguments);
- } catch (CVSException e) {
- if (ignoreExceptions) return true;
- throw e;
- }
- return false;
- }
-
- /**
- * Deletes files on the both of the cvs-servers.
- */
- public void magicDeleteRemote(String remoteName) throws CVSException {
- super.magicDeleteRemote(CompatibleTestSetup.referenceClientRepository, remoteName);
- super.magicDeleteRemote(CompatibleTestSetup.eclipseClientRepository, remoteName);
- }
-
- /**
- * Set up both of the repos on the cvs-server(s) with the standard
- * file-structure:
- * project
- * a.txt
- * f1
- * b.txt
- * c.txt
- */
- public void magicSetUpRepo(String projectName)
- throws IOException, CoreException, CVSException {
- magicSetUpRepo(projectName, new String[]{"a.txt","f1/b.txt","f1/c.txt"});
- }
-
- /**
- * Set up both of the repos on the cvs-server(s) with a filestructre
- * resulting for your input in the parameter createResources.
- */
- public void magicSetUpRepo(String projectName, String[] createResources)
- throws IOException, CoreException, CVSException {
- magicDeleteRemote(projectName);
-
- IProject projectRoot = workspaceRoot.getProject(projectName + "-setup-tmp");
- mkdirs(projectRoot);
- createRandomFile(projectRoot, createResources);
-
- String[] lOptions = new String[]{"-m","msg"};
- String[] args = new String[]{projectName,"a","b"};
-
- magicDeleteRemote(CompatibleTestSetup.referenceClientRepository, projectName);
- EclipseCVSClient.execute(CompatibleTestSetup.referenceClientRepository, CVSWorkspaceRoot.getCVSFolderFor(projectRoot),
- "import", EMPTY_ARGS, lOptions, args);
-
- magicDeleteRemote(CompatibleTestSetup.eclipseClientRepository, projectName);
- EclipseCVSClient.execute(CompatibleTestSetup.eclipseClientRepository, CVSWorkspaceRoot.getCVSFolderFor(projectRoot),
- "import", EMPTY_ARGS, lOptions, args);
-
- projectRoot.delete(false /*force*/, null);
- }
-
- /**
- * Create a file with random-content in both, the reference client and
- * the eclipse-client.
- *
- * @param relativeFileName is the relative path as allways in the
- class used for access
- */
- public void createRandomFile(String relativeFileName)
- throws IOException, CoreException {
- String[] contents = new String[] { createRandomContent() };
- writeToFile(relativeFileName, contents);
- }
-
- /**
- * Call createRandomFile for every element of the array
- *
- * @see SameResultEnv#createRandomFile(String)
- */
- public void createRandomFile(String[] relativeFileNames,
- String pathRelativeToRoot) throws CoreException, IOException {
- if (pathRelativeToRoot == null) {
- pathRelativeToRoot = "";
- } else if (! pathRelativeToRoot.endsWith("/")) {
- pathRelativeToRoot += "/";
- }
- for (int i = 0; i < relativeFileNames.length; i++) {
- createRandomFile(pathRelativeToRoot + relativeFileNames[i]);
- }
- }
-
- /**
- * Read from the file (check that we have acctually got the same
- * content in both versions
- */
- public String[] readFromFile(String relativeFileName)
- throws IOException, CoreException {
- IFile referenceFile = referenceProject.getFile(relativeFileName);
- String[] content1 = super.readFromFile(referenceFile);
- IFile eclipseFile = eclipseProject.getFile(relativeFileName);
- String[] content2 = super.readFromFile(eclipseFile);
- assertEqualsArrays(content1,content2);
- return content1;
- }
-
- /**
- * Delete a file / folder from both directories.
- */
- public void deleteFile(String relativeFileName) throws CoreException {
- IResource referenceFile, eclipseFile;
- if (relativeFileName.length() != 0) {
- referenceFile = referenceProject.findMember(relativeFileName);
- eclipseFile = eclipseProject.findMember(relativeFileName);
- } else {
- referenceFile = referenceProject;
- eclipseFile = eclipseProject;
- }
- assertEquals(referenceFile != null, eclipseFile != null);
- if (referenceFile == null) return;
- assertEquals(referenceFile.exists(), eclipseFile.exists());
- referenceFile.delete(true, null);
- eclipseFile.delete(true, null);
- }
-
- /**
- * Creates a folder (and its parents if needed) in both environments.
- */
- public void mkdirs(String relativeFolderName) throws CoreException {
- IFolder referenceFolder = referenceProject.getFolder(relativeFolderName);
- IFolder eclipseFolder = eclipseProject.getFolder(relativeFolderName);
- assertEquals(referenceFolder.exists(), eclipseFolder.exists());
- mkdirs(referenceFolder);
- mkdirs(eclipseFolder);
- }
-
- /**
- * Append a String to an file (acctally to both of the files, that are going
- * to have the same content)
- */
- public void appendToFile(String relativeFileName, String[] contents)
- throws IOException, CoreException {
- // Wait a second so that the timestamp will change for sure
- waitMsec(1500);
-
- IFile referenceFile = referenceProject.getFile(relativeFileName);
- appendToFile(referenceFile, contents);
- IFile eclipseFile = eclipseProject.getFile(relativeFileName);
- appendToFile(eclipseFile, contents);
- }
-
- /**
- * Append a String to an file (acctally to both of the files, that are going
- * to have the same content)
- */
- public void prefixToFile(String relativeFileName, String[] contents)
- throws IOException, CoreException {
- // Wait a second so that the timestamp will change for sure
- waitMsec(1500);
-
- IFile referenceFile = referenceProject.getFile(relativeFileName);
- prefixToFile(referenceFile, contents);
- IFile eclipseFile = eclipseProject.getFile(relativeFileName);
- prefixToFile(eclipseFile, contents);
- }
-
- /**
- * Write to the file (acctally to both of the files, that are going
- * to have the same content)
- */
- public void writeToFile(String relativeFileName, String[] contents)
- throws IOException, CoreException {
- IFile referenceFile = referenceProject.getFile(relativeFileName);
- writeToFile(referenceFile, contents);
- IFile eclipseFile = eclipseProject.getFile(relativeFileName);
- writeToFile(eclipseFile, contents);
- }
-
- /**
- * Checks whether the two directories inside the environment
- * are equal and therefore the state valid.
- */
- public void assertConsistent() throws CVSException {
- assertEquals(referenceRoot, eclipseRoot);
- }
-
- /**
- * Deep compare of two ManagedResources (most likly folders).
- * Passwords are ignored.
- *
- * @param ignoreTimestamp if true timestamps of
- files are ignored for the comparison
- */
- public static void assertEquals(ICVSResource mResource1,
- ICVSResource mResource2)
- throws CVSException {
-
- assertEquals(mResource1.isFolder(), mResource2.isFolder());
- assertEquals(mResource1.isManaged() , mResource2.isManaged());
- assertEquals(mResource1.exists(), mResource2.exists());
-
- if (!mResource1.exists()) {
- return;
- }
-
- if (mResource1.isFolder()) {
- assertEquals((ICVSFolder)mResource1,(ICVSFolder)mResource2);
- } else {
- assertEquals((ICVSFile)mResource1,(ICVSFile)mResource2);
- }
- }
-
- /**
- * Assert that two CVSFile's are equal by comparing the content
- * and the metainformation out of the ResourceSync.
- */
- private static void assertEquals(ICVSFile mFile1, ICVSFile mFile2) throws CVSException {
-
- if (mFile1.getName().equals(".project")) return;
-
- // Check the permissions on disk
- assertEquals(mFile1.isReadOnly(), mFile2.isReadOnly());
-
- // Compare the content of the files
- try {
- InputStream in1 = mFile1.getContents();
- InputStream in2 = mFile2.getContents();
- byte[] buffer1 = new byte[(int)mFile1.getSize()];
- byte[] buffer2 = new byte[(int)mFile2.getSize()];
- // This is not the right way to do it, because the Stream
- // may read less than the whoole file
- in1.read(buffer1);
- in2.read(buffer2);
- in1.close();
- in2.close();
- assertEquals("Length differs for file " + mFile1.getName(), buffer1.length, buffer2.length);
- assertEquals("Contents differs for file " + mFile1.getName(), new String(buffer1),new String(buffer2));
- } catch (IOException e) {
- throw new CVSException("Error in TestCase");
- }
-
- // We can not do the ceck, because the reference client does
- // check out dirty files ?!?
- // assertEquals(mFile1.isDirty(),mFile2.isDirty());
-
- assertEquals(mFile1.getSyncInfo() == null,mFile2.getSyncInfo() == null);
- if (mFile1.getSyncInfo() == null) {
- return;
- }
-
- ResourceSyncInfo info1 = mFile1.getSyncInfo();
- ResourceSyncInfo info2 = mFile2.getSyncInfo();
-
- assertEquals(info1.getKeywordMode(), info2.getKeywordMode());
- assertEquals(info1.getTag(), info2.getTag());
- assertEquals(info1.getName(), info2.getName());
- assertEquals(info1.getRevision(), info2.getRevision());
-
- assertEquals(info1.isDeleted(), info2.isDeleted());
- assertEquals(info1.isAdded(), info2.isAdded());
- assertEquals(info1.isMerged(), info2.isMerged());
- assertEquals(info1.isMergedWithConflicts(), info2.isMergedWithConflicts());
-
- // Ensure that timestamps are written using same timezone.
- // assertTimestampEquals(info1.getTimeStamp(), info2.getTimeStamp());
-
- // We are not able to check for the permissions, as the reference-client doesn't save them
- }
-
- private static void assertTimestampEquals(Date timestamp1, Date timestamp2) {
- assertEquals(timestamp1!=null, timestamp2!=null);
- if(timestamp1!=null) {
- long time1 = timestamp1.getTime();
- long time2 = timestamp2.getTime();
- long difference = Math.abs(time1 - time2);
- assertTrue("timestamps should be in same timezone:" + timestamp1 + ":" + timestamp2, difference < (10*60*1000)); // 10 minutes
- }
- }
-
- /**
- * Assert that two CVSFile's are equal. First the
- * metainformation out of the FolderSync for this
- * folder is compared, then the amount of children is
- * checked and finally the recussion is started to
- * compare the children of this folder.
- */
- private static void assertEquals(ICVSFolder mFolder1,
- ICVSFolder mFolder2)
- throws CVSException {
-
- assertEquals(mFolder1.isCVSFolder(),mFolder2.isCVSFolder());
-
- if (mFolder1.isCVSFolder()) {
- String root1 = removePassword(mFolder1.getFolderSyncInfo().getRoot());
- String root2 = removePassword(mFolder2.getFolderSyncInfo().getRoot());
- root1 = root1.substring(0,root1.lastIndexOf("@"));
- root2 = root2.substring(0,root2.lastIndexOf("@"));
- assertEquals(root1,root2);
-
- assertEquals(mFolder1.getFolderSyncInfo().getRepository(),mFolder2.getFolderSyncInfo().getRepository());
- assertEquals(mFolder1.getFolderSyncInfo().getIsStatic(),mFolder2.getFolderSyncInfo().getIsStatic());
- assertEquals(mFolder1.getFolderSyncInfo().getTag(),mFolder2.getFolderSyncInfo().getTag());
- }
-
- ICVSResource[] resourceList1 = mFolder1.members(ICVSFolder.FILE_MEMBERS | ICVSFolder.FOLDER_MEMBERS);
- ICVSResource[] resourceList2 = mFolder2.members(ICVSFolder.FILE_MEMBERS | ICVSFolder.FOLDER_MEMBERS);
- assertEquals(resourceList1.length, resourceList2.length);
- for (int i=0; i<resourceList1.length; i++) {
- boolean resourceFound = false;
- for (int j=0; j<resourceList2.length; j++) {
- if (resourceList1[i].getName().equals(resourceList2[j].getName())) {
- assertEquals(resourceList1[i], resourceList2[j]);
- resourceFound = true;
- break;
- }
- }
- assertTrue("Resource " + resourceList1[i].getName() + " not found in the list",resourceFound);
- }
- }
-
- /**
- * Sets whether Exceptions that are thrown in the execution of both of the clients are
- * catched or thrown to the upper level. If the exceptions are catched the result of the
- * reference-client and this client are compared as if the execution succseded.
- */
- public void setIgnoreExceptions(boolean ignoreExceptions) {
- this.ignoreExceptions = ignoreExceptions;
- }
-
- /**
- * returns ":pserver:nkrambro@fiji:/home/nkrambro/repo"
- * when you insert ":pserver:nkrambro:password@fiji:/home/nkrambro/repo"
- */
- public static String removePassword(String root) {
- StringTokenizer tok = new StringTokenizer(root, ":@", true);
- StringBuffer filteredRoot = new StringBuffer();
- int colonCounter = 3;
- while (tok.hasMoreTokens()) {
- String token = tok.nextToken();
- if ("@".equals(token)) colonCounter = -1;
- if (":".equals(token)) {
- if (--colonCounter == 0) continue; // skip colon
- }
- if (colonCounter == 0) continue; // skip password
- filteredRoot.append(token);
- }
- return filteredRoot.toString();
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/AllTestsCVSResources.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/AllTestsCVSResources.java
deleted file mode 100644
index f769c0b28..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/AllTestsCVSResources.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.cvsresources;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import org.eclipse.team.tests.ccvs.core.EclipseTest;
-
-public class AllTestsCVSResources extends EclipseTest {
- public static Test suite() {
- TestSuite suite = new TestSuite();
- suite.addTest(ResourceSyncInfoTest.suite());
- suite.addTest(EclipseSynchronizerTest.suite());
- suite.addTest(EclipseFolderTest.suite());
- suite.addTest(ResourceSyncBytesTest.suite());
- return suite;
- }
-
- public AllTestsCVSResources(String name) {
- super(name);
- }
-
- public AllTestsCVSResources() {
- super();
- }
-}
-
-
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/BatchedTestSetup.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/BatchedTestSetup.java
deleted file mode 100644
index 1cf00240b..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/BatchedTestSetup.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.cvsresources;
-
-
-import junit.extensions.TestSetup;
-import junit.framework.Test;
-
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.team.internal.ccvs.core.CVSException;
-import org.eclipse.team.internal.ccvs.core.resources.EclipseSynchronizer;
-
-public class BatchedTestSetup extends TestSetup {
- public BatchedTestSetup(Test test) {
- super(test);
- }
-
- public void setUp() throws CVSException {
- EclipseSynchronizer.getInstance().beginOperation(ResourcesPlugin.getWorkspace().getRoot(), null);
- }
-
- public void tearDown() throws CVSException {
- EclipseSynchronizer.getInstance().endOperation(null);
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/EclipseFolderTest.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/EclipseFolderTest.java
deleted file mode 100644
index c60abc3ac..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/EclipseFolderTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.cvsresources;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceVisitor;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.team.core.TeamException;
-import org.eclipse.team.internal.ccvs.core.CVSException;
-import org.eclipse.team.internal.ccvs.core.ICVSFolder;
-import org.eclipse.team.internal.ccvs.core.ICVSResource;
-import org.eclipse.team.internal.ccvs.core.ICVSRunnable;
-import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot;
-import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
-import org.eclipse.team.tests.ccvs.core.EclipseTest;
-
-/**
- * What does this class do?
- */
-public class EclipseFolderTest extends EclipseTest {
- public EclipseFolderTest() {
- super();
- }
-
- public EclipseFolderTest(String name) {
- super(name);
- }
-
- public static Test suite() {
- TestSuite suite = new TestSuite();
- suite.addTestSuite(EclipseFolderTest.class);
- return new CVSTestSetup(suite);
- }
-
- protected void assertChildrenHaveSync(IContainer root, final boolean hasSync) throws CoreException, CVSException {
- root.accept(new IResourceVisitor() {
- public boolean visit(IResource resource) throws CoreException {
- try {
- ICVSResource cvsResource = CVSWorkspaceRoot.getCVSResourceFor(resource);
- if(!cvsResource.isIgnored()) {
- if(resource.getType()==IResource.FILE) {
- assertTrue((cvsResource.getSyncInfo()!=null) == hasSync);
- } else {
- assertTrue((((ICVSFolder)cvsResource).getFolderSyncInfo()!=null) == hasSync);
- }
- }
- } catch(CVSException e) {
- throw new CoreException(e.getStatus());
- }
- return true;
- }
- });
- }
-
- public void testUnmanageFolder() throws CoreException, TeamException {
- IProject project = createProject("testUnmanageFolder_A", new String[] {"a.txt", "folder1/", "folder1/b.txt", "folder1/folder2/", "folder1/folder2/c.txt"});
- ICVSFolder cvsProject = CVSWorkspaceRoot.getCVSFolderFor(project);
- assertChildrenHaveSync(project, true);
-
- // test that unmanaging the project flushes sync info
- cvsProject.unmanage(null);
- assertChildrenHaveSync(project, false);
-
- final IProject projectB = createProject("testUnmanageFolder_B", new String[] {"a.txt", "folder1/", "folder1/b.txt", "folder1/folder2/", "folder1/folder2/c.txt"});
- final ICVSFolder cvsProjectB = CVSWorkspaceRoot.getCVSFolderFor(projectB);
- assertChildrenHaveSync(projectB, true);
-
- // test that unmanaging in a CVS runnable flushes too
- cvsProjectB.run(new ICVSRunnable() {
- public void run(IProgressMonitor monitor) throws CVSException {
- try {
- assertChildrenHaveSync(projectB, true);
- cvsProjectB.unmanage(null);
- assertChildrenHaveSync(projectB, false);
- } catch(CoreException e) {
- throw CVSException.wrapException(e);
- }
- }
- }, null);
- assertChildrenHaveSync(projectB, false);
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/EclipseSynchronizerTest.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/EclipseSynchronizerTest.java
deleted file mode 100644
index ca3338928..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/EclipseSynchronizerTest.java
+++ /dev/null
@@ -1,521 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.cvsresources;
-
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-
-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.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspaceRoot;
-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.CVSException;
-import org.eclipse.team.internal.ccvs.core.CVSTag;
-import org.eclipse.team.internal.ccvs.core.resources.EclipseSynchronizer;
-import org.eclipse.team.internal.ccvs.core.syncinfo.FolderSyncInfo;
-import org.eclipse.team.internal.ccvs.core.syncinfo.MutableResourceSyncInfo;
-import org.eclipse.team.internal.ccvs.core.syncinfo.ResourceSyncInfo;
-import org.eclipse.team.internal.ccvs.core.util.SyncFileWriter;
-import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
-import org.eclipse.team.tests.ccvs.core.EclipseTest;
-
-/**
- * Tests the EclipseSynchronizer.
- * Does not test state change broadcasts.
- */
-public class EclipseSynchronizerTest extends EclipseTest {
- private IProject project;
- private static EclipseSynchronizer sync = EclipseSynchronizer.getInstance();
-
- public EclipseSynchronizerTest() {
- super();
- }
-
- public EclipseSynchronizerTest(String name) {
- super(name);
- }
-
- public static Test suite() {
- TestSuite suite = new TestSuite();
-
- // Run all tests twice to ensure consistency between batched and non-batched behaviour.
- // 1. First run -- no batching
- suite.addTestSuite(EclipseSynchronizerTest.class);
- // 2. Second run -- with batching
- suite.addTest(new BatchedTestSetup(new TestSuite(EclipseSynchronizerTest.class)));
- return new CVSTestSetup(suite);
- }
-
- public void testFolderSync() throws CoreException, CVSException {
- // Workspace root
- IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
-// FolderSyncInfo info = sync.getFolderSync(root);
-// assertNull(info);
-// sync.deleteFolderSync(root);
-// sync.setFolderSync(root, dummyFolderSync(root));
-// info = sync.getFolderSync(root);
-// assertNull(info);
-
- // Non-existant project
- IProject project = root.getProject(getName() + "-" + System.currentTimeMillis());
- assertDoesNotExistInFileSystem(project);
- _testFolderSyncInvalid(project);
-
- // Project
- project.create(null);
- project.open(null);
- _testFolderSyncValid(project);
-
- // Non-existant folder
- IFolder folder = project.getFolder("folder1");
- assertDoesNotExistInFileSystem(folder);
- _testFolderSyncInvalid(folder);
-
- // Non-existant folder with non-existant parent
- IFolder childFolder = folder.getFolder("folder2");
- assertDoesNotExistInFileSystem(childFolder);
- _testFolderSyncInvalid(childFolder);
-
- // Folder
- folder.create(false /*force*/, true /*local*/, null);
- _testFolderSyncValid(folder);
-
- // Child folder
- childFolder.create(false /*force*/, true /*local*/, null);
- _testFolderSyncValid(childFolder);
-
- // Deleted folder -- sync info should no longer exist
- sync.setFolderSync(folder, dummyFolderSync(folder));
- folder.delete(false /*force*/, null);
- _testFolderSyncInvalid(folder); // verifies sync info was deleted
-
- // Recreated folder -- sync info should not be preserved across deletions
- folder.create(false /*force*/, true /*local*/, null);
- sync.setFolderSync(folder, dummyFolderSync(folder));
- folder.delete(false /*force*/, null);
- folder.create(false /*force*/, true /*local*/, null);
- _testFolderSyncValid(folder); // verifies sync info has not reappeared
-
- // Deleted project
- sync.setFolderSync(project, dummyFolderSync(project));
- project.delete(false /*force*/, null);
- _testFolderSyncInvalid(project);
- }
-
- /*
- * Test get/set/delete folder sync for things that support it.
- * Assumes container does not already have sync info.
- */
- private void _testFolderSyncValid(IContainer container) throws CoreException, CVSException {
- FolderSyncInfo info = sync.getFolderSync(container);
- assertNull(info);
- sync.deleteFolderSync(container);
- FolderSyncInfo newInfo = dummyFolderSync(container);
- sync.setFolderSync(container, newInfo);
- info = sync.getFolderSync(container);
- assertEquals(newInfo, info);
- // verify that deleteFolderSync() does the right thing
- buildResources(container, new String[] { "hassync/", "nosync", "hassync.txt", "nosync.txt" }, true);
- IResource resource = container.getFile(new Path("hassync.txt"));
- sync.setResourceSync(resource, dummyResourceSync(resource));
- resource = container.getFolder(new Path("hassync"));
- sync.setResourceSync(resource, dummyResourceSync(resource));
- assertNotNull(sync.getResourceSync(container.getFile(new Path("hassync.txt"))));
- assertNull(sync.getResourceSync(container.getFile(new Path("nosync.txt"))));
- assertNotNull(sync.getResourceSync(container.getFolder(new Path("hassync"))));
- assertNull(sync.getResourceSync(container.getFolder(new Path("nosync"))));
- if (container.getType() == IResource.FOLDER) {
- sync.setResourceSync(container, dummyResourceSync(container));
- assertNotNull(sync.getResourceSync(container));
- }
- // should delete folder sync for self, and resource sync for children
- sync.deleteFolderSync(container);
- info = sync.getFolderSync(container);
- assertNull(info);
- assertNull(sync.getResourceSync(container.getFile(new Path("hassync.txt"))));
- assertNull(sync.getResourceSync(container.getFile(new Path("nosync.txt"))));
- assertNull(sync.getResourceSync(container.getFolder(new Path("hassync"))));
- assertNull(sync.getResourceSync(container.getFolder(new Path("nosync"))));
- if (container.getType() == IResource.FOLDER) {
- assertNotNull(sync.getResourceSync(container));
- }
- }
-
- /*
- * Test get/set/delete folder sync for things that should not support it.
- * Assumes container does not already have sync info.
- */
- private void _testFolderSyncInvalid(IContainer container) throws CVSException {
- FolderSyncInfo info = sync.getFolderSync(container);
- assertNull(info);
- sync.deleteFolderSync(container);
- try {
- sync.setFolderSync(container, dummyFolderSync(container));
- fail("Expected CVSException");
- } catch (CVSException e) {
- }
- info = sync.getFolderSync(container);
- assertNull(info);
- }
-
- public void testResourceSync() throws CoreException, CVSException {
- // Workspace root
- IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
- _testResourceSyncInvalid(root);
-
- // Project
- IProject project = getUniqueTestProject(getName());
- assertExistsInFileSystem(project);
- _testResourceSyncInvalid(project);
-
- // Folder
- IFolder folder = project.getFolder("folder1");
- folder.create(false /*force*/, true /*local*/, null);
- _testResourceSyncValid(folder);
-
- // File
- IFile file = folder.getFile("file1");
- file.create(getRandomContents(), false /*force*/, null);
- _testResourceSyncValid(file);
-
- // Deleted/recreated file -- if parent exists, sync info should be preserved across deletions
- ResourceSyncInfo info = dummyResourceSync(file);
- sync.setResourceSync(file, info);
- // Note: deleting a resource will delete it's sync info unless the project has a CVS provider
- file.delete(false /*force*/, null);
- ResourceSyncInfo newInfo = sync.getResourceSync(file);
- //assertEquals(newInfo, info);
- assertEquals(newInfo, null); /* changed for reason noted above */
- file.create(getRandomContents(), false /*force*/, null);
- sync.setResourceSync(file, info); /* added for reason noted above */
- newInfo = sync.getResourceSync(file);
- assertEquals(newInfo, info);
- sync.deleteResourceSync(file);
- file.delete(false /*force*/, null);
- _testResourceSyncValid(file);
-
- // Deleted parent -- sync info of children should also be deleted
- sync.setResourceSync(file, info);
- folder.delete(false /*force*/, null);
- info = sync.getResourceSync(file);
- assertNull(info);
-
- // File in non-existant folder
- IFolder dummyFolder = project.getFolder("folder2");
- assertDoesNotExistInFileSystem(dummyFolder);
- IFile dummyFile = dummyFolder.getFile("file2");
- assertDoesNotExistInFileSystem(dummyFile);
- _testResourceSyncInvalid(dummyFile);
- }
-
- /*
- * Test get/set/delete resource sync for things that support it.
- * Assumes resource does not already have sync info.
- */
- private void _testResourceSyncValid(IResource resource) throws CVSException {
- ResourceSyncInfo info = sync.getResourceSync(resource);
- assertNull(info);
- sync.deleteResourceSync(resource);
- ResourceSyncInfo newInfo = dummyResourceSync(resource);
- sync.setResourceSync(resource, newInfo);
- info = sync.getResourceSync(resource);
- assertEquals(newInfo, info);
- sync.deleteResourceSync(resource);
- info = sync.getResourceSync(resource);
- assertNull(info);
- }
-
- /*
- * Test get/set/delete resource sync for things that should not support it.
- * Assumes resource does not already have sync info.
- */
- private void _testResourceSyncInvalid(IResource resource) throws CVSException {
- ResourceSyncInfo info = sync.getResourceSync(resource);
- assertNull(info);
- sync.deleteResourceSync(resource);
- try {
- sync.setResourceSync(resource, dummyResourceSync(resource));
- fail("Expected CVSException");
- } catch (CVSException e) {
- }
- info = sync.getResourceSync(resource);
- assertNull(info);
- }
-
- public void testIsIgnored() throws CoreException, TeamException {
- IProject project = getUniqueTestProject("isIgnoredTests");
- IResource[] resources = buildResources(project, new String[] {"a.txt", "c.java", "folder1/", "folder1/b.txt", "folder2/"}, true /* include project */);
-
- sync.addIgnored(project, "*.txt");
-
- assertIsIgnored(project.getFile("a.txt"), true);
- assertIsIgnored(project.getFile("c.java"), false);
- assertIsIgnored(project.getFolder("folder1"), false);
- assertIsIgnored(project.getFolder("folder2"), false);
- assertIsIgnored(project.getFile("folder1/b.txt"), false);
- assertIsIgnored(project.getFile("folder1/not-existing.txt"), false);
- assertIsIgnored(project.getParent(), false);
- assertIsIgnored(project, false);
-
- sync.addIgnored(project, "folder1");
-
- assertIsIgnored(project.getFile("a.txt"), true);
- assertIsIgnored(project.getFile("c.java"), false);
- assertIsIgnored(project.getFolder("folder1"), true);
- assertIsIgnored(project.getFolder("folder2"), false);
- assertIsIgnored(project.getFile("folder1/b.txt"), true);
- assertIsIgnored(project.getFile("folder1/not-existing.txt"), true);
- assertIsIgnored(project.getParent(), false);
- assertIsIgnored(project, false);
-
- // delete the ignores, the resource delta should clear the cached
- // ignore list
- IResource cvsIgnore = project.getFile(".cvsignore");
- cvsIgnore.delete(true, null);
-
- assertIsIgnored(project.getFile("a.txt"), false);
- assertIsIgnored(project.getFile("c.java"), false);
- assertIsIgnored(project.getFolder("folder1"), false);
- assertIsIgnored(project.getFolder("folder2"), false);
- assertIsIgnored(project.getFile("folder1/b.txt"), false);
- assertIsIgnored(project.getFile("folder1/not-existing.txt"), false);
- assertIsIgnored(project.getParent(), false);
- assertIsIgnored(project, false);
- project.delete(true, true, null);
- }
-
- public void testIgnores() throws CoreException, CVSException {
- // Workspace root
- IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
- _testIgnoresInvalid(root);
-
- // Non-existant project
- IProject project = root.getProject(getName() + "-" + System.currentTimeMillis());
- assertDoesNotExistInFileSystem(project);
- _testIgnoresInvalid(project);
-
- // Project
- project.create(null);
- project.open(null);
- _testIgnoresValid(project);
-
- // Non-existant folder
- IFolder folder = project.getFolder("folder1");
- assertDoesNotExistInFileSystem(folder);
- _testIgnoresInvalid(folder);
-
- // Non-existant folder with non-existant parent
- IFolder childFolder = folder.getFolder("folder2");
- assertDoesNotExistInFileSystem(childFolder);
- _testIgnoresInvalid(childFolder);
-
- // Folder
- folder.create(false /*force*/, true /*local*/, null);
- _testIgnoresValid(folder);
-
- // Child folder
- childFolder.create(false /*force*/, true /*local*/, null);
- _testIgnoresValid(childFolder);
-
- // Deleted folder -- ignores should no longer exist
- sync.addIgnored(folder, "*.foo");
- folder.delete(false /*force*/, null);
- _testIgnoresInvalid(folder); // verifies sync info was deleted
-
- // Recreated folder -- sync info should not be preserved across deletions
- folder.create(false /*force*/, true /*local*/, null);
- sync.addIgnored(folder, "*.foo");
- folder.delete(false /*force*/, null);
- folder.create(false /*force*/, true /*local*/, null);
- _testIgnoresValid(folder); // verifies sync info has not reappeared
-
- // Deleted project
- sync.addIgnored(project, "*.foo");
- project.delete(false /*force*/, null);
- _testIgnoresInvalid(project);
- }
-
-
-
- /*
- * Test get/set ignores for things that should not support it.
- * Assumes resource does not already have ignores.
- */
- private void _testIgnoresValid(IContainer container) throws CVSException {
- String[] ignored = getIgnored(container);
- assertTrue(ignored.length == 0);
- sync.addIgnored(container, "*.xyz");
- ignored = getIgnored(container);
- assertBijection(ignored, new String[] { "*.xyz" }, null);
- sync.addIgnored(container, "*.abc");
- sync.addIgnored(container, "*.def");
- ignored = getIgnored(container);
- assertBijection(ignored, new String[] { "*.abc", "*.def", "*.xyz" }, null);
- }
-
- /**
- * TODO: should use chached ignores somehow
- * @param container
- * @return String[]
- * @throws CVSException
- */
- private String[] getIgnored(IContainer container) throws CVSException {
- if (container.getType() == IResource.ROOT) return new String[0];
- String[] ignored = SyncFileWriter.readCVSIgnoreEntries(container);
- if (ignored == null) return new String[0];
- return ignored;
- }
-
- /*
- * Test get/set ignores for things that should not support it.
- * Assumes resource does not already have ignores.
- */
- private void _testIgnoresInvalid(IContainer container) throws CVSException {
- try {
- sync.addIgnored(container, "*.xyz");
- fail("Expected CVSException");
- } catch (CVSException e) {
- }
- }
-
- public void testMembers() throws CoreException, CVSException {
- IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
- IProject project1 = getUniqueTestProject(getName() + "1");
- IProject project2 = root.getProject(getName() + "2" + System.currentTimeMillis());
-
- // Workspace root
- IResource[] members = sync.members(ResourcesPlugin.getWorkspace().getRoot());
- assertBijection(members, ResourcesPlugin.getWorkspace().getRoot().getProjects(), null);
-
- // Non-existant project
- members = sync.members(project2);
- assertEquals("Non-existant project should have no members", 0, members.length);
-
- // Non-existant folder
- IFolder folder = project1.getFolder("folder1");
- assertDoesNotExistInFileSystem(folder);
- members = sync.members(folder);
- assertEquals("Non-existant folder should have no members", 0, members.length);
-
- // Non-existant folder with non-existant parent
- IFolder childFolder = folder.getFolder("folder2");
- assertDoesNotExistInFileSystem(childFolder);
- members = sync.members(childFolder);
- assertEquals("Non-existant folder should have no members", 0, members.length);
-
- // Project
- buildResources(project1, new String[] {
- "hassync.txt", "deleted_nosync.txt", "deleted.txt", "hassync/", "deleted/", "deleted_nosync/" }, true);
-
- // initially none of the resources have sync info and they all exist
- Object[] ignores = new Object[] { project1.getFolder("CVS") };
- Set expectedMembers = new HashSet(Arrays.asList(project1.members()));
- members = sync.members(project1);
- assertBijection(expectedMembers.toArray(), members, ignores);
-
- // add sync info, resources should still appear exactly once
- IResource resource = project1.getFile("hassync.txt");
- sync.setResourceSync(resource, dummyResourceSync(resource));
- resource = project1.getFolder("hassync");
- sync.setResourceSync(resource, dummyResourceSync(resource));
-
- resource = project1.getFile("deleted.txt");
- sync.setResourceSync(resource, dummyResourceSync(resource));
- resource = project1.getFolder("deleted");
- sync.setResourceSync(resource, dummyResourceSync(resource));
-
- members = sync.members(project1);
- assertBijection(expectedMembers.toArray(), members, ignores);
-
- // delete resources, those with sync info should still appear, those without should not
- // (Note: This is only true for projects that have a CVS provider)
- resource = project1.getFile("deleted.txt");
- resource.delete(false /*force*/, null);
- expectedMembers.remove(resource); /* added for reason noted above */
- resource = project1.getFolder("deleted");
- resource.delete(false /*force*/, null);
- expectedMembers.remove(resource); /* added for reason noted above */
-
- resource = project1.getFile("deleted_nosync.txt");
- resource.delete(false /*force*/, null);
- expectedMembers.remove(resource);
- resource = project1.getFolder("deleted_nosync");
- resource.delete(false /*force*/, null);
- expectedMembers.remove(resource);
-
- members = sync.members(project1);
- assertBijection(expectedMembers.toArray(), members, ignores);
-
- // delete sync info, only those that exist should appear
- resource = project1.getFile("hassync.txt");
- sync.deleteResourceSync(resource);
- resource = project1.getFolder("hassync");
- sync.deleteResourceSync(resource);
-
- resource = project1.getFile("deleted.txt");
- sync.deleteResourceSync(resource);
- expectedMembers.remove(resource);
- resource = project1.getFolder("deleted");
- sync.deleteResourceSync(resource);
- expectedMembers.remove(resource);
-
- members = sync.members(project1);
- assertBijection(expectedMembers.toArray(), members, ignores);
- }
-
- private FolderSyncInfo dummyFolderSync(IContainer container) {
- return new FolderSyncInfo("repo", "root", CVSTag.DEFAULT, false);
- }
-
- private ResourceSyncInfo dummyResourceSync(IResource resource) {
- if (resource.getType() == IResource.FILE) {
- MutableResourceSyncInfo info = new MutableResourceSyncInfo(resource.getName(), "1.1");
- info.setTag(CVSTag.DEFAULT);
- return info;
- } else {
- return new ResourceSyncInfo(resource.getName());
- }
- }
-
- /**
- * Assert that there exists a bijection between the elements of the arrays.
- */
- private void assertBijection(Object[] a, Object[] b, Object[] ignores) {
- List listA = new LinkedList(Arrays.asList(a));
- List listB = new LinkedList(Arrays.asList(b));
- if (ignores != null) {
- for (int i = 0; i < ignores.length; ++i ) {
- listA.remove(ignores[i]);
- listB.remove(ignores[i]);
- }
- }
- assertEquals("Should have same number of elements", listA.size(), listB.size());
- for (Iterator it = listB.iterator(); it.hasNext();) {
- Object obj = it.next();
- assertTrue("Should contain the same elements", listA.contains(obj));
- listA.remove(obj);
- }
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/ResourceSyncBytesTest.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/ResourceSyncBytesTest.java
deleted file mode 100644
index 91289f03a..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/ResourceSyncBytesTest.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.cvsresources;
-
-import java.text.ParseException;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.team.internal.ccvs.core.CVSException;
-import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin;
-import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation;
-import org.eclipse.team.internal.ccvs.core.client.Session;
-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.CVSDateFormatter;
-import org.eclipse.team.internal.ccvs.core.util.Util;
-import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
-import org.eclipse.team.tests.ccvs.core.EclipseTest;
-import org.eclipse.team.tests.ccvs.core.TestConnection;
-
-public class ResourceSyncBytesTest extends EclipseTest {
-
- public ResourceSyncBytesTest() {
- super();
- }
-
- public ResourceSyncBytesTest(String name) {
- super(name);
- }
-
- public static Test suite() {
- TestSuite suite = new TestSuite(ResourceSyncBytesTest.class);
- return new CVSTestSetup(suite);
- }
-
- /**
- * Convert the input to bytes and get the bytes in the given slot delimited by slash (/).
- * Only retieve the bytes in the given slot and not the rest.
- * @param input
- * @param slot
- * @return
- */
- private byte[] getBytesForSlot(String input, int slot) {
- return getBytesForSlot(input, slot, false /* include rest */);
- }
-
- /**
- * Convert the input to bytes and get the bytes in the given slot delimited by slash (/).
- * @param input
- * @param slot
- * @return
- */
- private byte[] getBytesForSlot(String input, int slot, boolean includeRest) {
- byte[] result = Util.getBytesForSlot(input.getBytes(), (byte) '/', slot, includeRest);
- return result;
- }
-
- private void assertEqualBytes(String expected, byte[] actual) {
- assertEquals(expected, new String(actual));
- }
-
- public void testUtilGetBytesForSlot() {
- // test success cases
- String input = "zero/one/two";
- assertEqualBytes("zero", getBytesForSlot(input, 0));
- assertEqualBytes("one", getBytesForSlot(input, 1));
- assertEqualBytes("two", getBytesForSlot(input, 2));
- assertEqualBytes("one/two", getBytesForSlot(input, 1, true /* include rest */));
- assertEqualBytes("", getBytesForSlot("///", 0));
- assertEqualBytes("", getBytesForSlot("///", 1));
- assertEqualBytes("", getBytesForSlot("///", 2));
- assertEqualBytes("/", getBytesForSlot("///", 2, true /* include rest */));
-
- // test failure cases
- input = "zero/one/two";
- assertNull(getBytesForSlot(input, 3));
- assertNull(getBytesForSlot(input, 4));
- assertNull(getBytesForSlot(input, -1));
- }
-
- public void testSendEntry() throws CVSException, ParseException {
- ICVSRepositoryLocation location = CVSProviderPlugin.getPlugin().getRepository(":test:user:password@host:/path");
- // disable version detemrination to reduce traffic
- CVSProviderPlugin.getPlugin().setDetermineVersionEnabled(false);
- // create and open a session
- Session session = new Session(location, CVSWorkspaceRoot.getCVSFolderFor(ResourcesPlugin.getWorkspace().getRoot()));
- session.open(DEFAULT_MONITOR);
-
- // test a normal entry line
- byte[] entryLine = "/plugin.xml/1.27/Tue Mar 4 19:47:36 2003/-ko/".getBytes();
- session.sendEntry(entryLine, ResourceSyncInfo.getTimestampToServer(entryLine, CVSDateFormatter.entryLineToDate("Tue Mar 4 19:47:36 2003")));
- assertEquals("Entry /plugin.xml/1.27//-ko/", TestConnection.getLastLine());
-
- // test a server merged with conflict entry line
- entryLine = "/newfile.txt/1.10/Result of merge+Thu Mar 20 16:36:56 2003//".getBytes();
- session.sendEntry(entryLine, ResourceSyncInfo.getTimestampToServer(entryLine, CVSDateFormatter.entryLineToDate("Thu Mar 20 16:36:56 2003")));
- assertEquals("Entry /newfile.txt/1.10/+=//", TestConnection.getLastLine());
-
- // test a server merged entry line
- entryLine = "/newfile.txt/1.10/Result of merge+Thu Mar 20 16:36:56 2003//".getBytes();
- session.sendEntry(entryLine, ResourceSyncInfo.getTimestampToServer(entryLine, CVSDateFormatter.entryLineToDate("Thu Mar 20 16:37:56 2003")));
- assertEquals("Entry /newfile.txt/1.10/+modified//", TestConnection.getLastLine());
-
- // test added entry line
- entryLine = "/plugin.xml/0/dummy timestamp/-ko/".getBytes();
- session.sendEntry(entryLine, ResourceSyncInfo.getTimestampToServer(entryLine, CVSDateFormatter.entryLineToDate("Tue Mar 4 19:47:36 2003")));
- assertEquals("Entry /plugin.xml/0//-ko/", TestConnection.getLastLine());
-
- // test empty timestamp entry line
- entryLine = "/plugin.xml/1.1//-ko/".getBytes();
- session.sendEntry(entryLine, ResourceSyncInfo.getTimestampToServer(entryLine, CVSDateFormatter.entryLineToDate("Tue Mar 4 19:47:36 2003")));
- assertEquals("Entry /plugin.xml/1.1//-ko/", TestConnection.getLastLine());
-
- }
-
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/ResourceSyncInfoTest.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/ResourceSyncInfoTest.java
deleted file mode 100644
index b35ed23c9..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/ResourceSyncInfoTest.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.cvsresources;
-import java.util.Date;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.team.internal.ccvs.core.CVSException;
-import org.eclipse.team.internal.ccvs.core.syncinfo.ResourceSyncInfo;
-import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
-import org.eclipse.team.tests.ccvs.core.EclipseTest;
-
-public class ResourceSyncInfoTest extends EclipseTest {
-
- public ResourceSyncInfoTest() {
- super();
- }
-
- public ResourceSyncInfoTest(String name) {
- super(name);
- }
-
- public static Test suite() {
- TestSuite suite = new TestSuite(ResourceSyncInfoTest.class);
- return new CVSTestSetup(suite);
- }
-
- public void testEntryLineParsing() {
- String entryLine;
-
- // testing malformed entry lines first
- try {
- new ResourceSyncInfo("//////", null, null);
- fail();
- } catch(CVSException e) {
- }
- try {
- new ResourceSyncInfo("//1.1///", null, null);
- fail();
- } catch(CVSException e) {
- }
- try {
- new ResourceSyncInfo("/file.txt////", null, null);
- fail();
- } catch(CVSException e) {
- }
- try {
- new ResourceSyncInfo("/file.txt//////////", null, null);
- fail();
- } catch(CVSException e) {
- }
- }
-
- public void testEntryLineConstructor() throws CVSException {
- ResourceSyncInfo info;
- info = new ResourceSyncInfo("/file.java/-1.1/Mon Feb 25 21:44:02 2002/-k/", null, null);
- assertTrue(info.isDeleted());
-
- info = new ResourceSyncInfo("/file.java/0/something/-k/", null, null);
- assertTrue(info.isAdded());
-
- info = new ResourceSyncInfo("/file.java/1.0/Mon Feb 25 21:44:02 2002/-k/Tv1", null, null);
- assertTrue(info.getTag() != null);
-
- Date timestamp = new Date(123000);
- info = new ResourceSyncInfo("/file.java/1.0/Mon Feb 25 21:44:02 2002/-k/Tv1", null, timestamp);
- assertTrue(info.getTimeStamp().equals(timestamp));
-
- info = new ResourceSyncInfo("/file.java/0/Mon Feb 25 21:44:02 2002/-k/", null, timestamp);
- assertTrue(info.getTimeStamp().equals(timestamp));
-
- String permissions = "u=rwx,g=rwx,o=rwx";
- info = new ResourceSyncInfo("/file.java/2.0/Mon Feb 25 21:44:02 2002/-k/Tv1", permissions, null);
- assertTrue(info.getPermissions().equals(permissions));
-
- info = new ResourceSyncInfo("D/file.java////", null, null);
- assertTrue(info.isDirectory());
- }
-
- public void testConstructor() throws CVSException {
- ResourceSyncInfo info;
-
- info = new ResourceSyncInfo("folder");
- assertTrue(info.isDirectory());
-
- Date timestamp = new Date(123000);
- info = new ResourceSyncInfo("/file.java/-2.34/Mon Feb 25 21:44:02 2002/-k/Tv1", null, null);
- assertTrue(info.isDeleted());
- assertTrue(info.getRevision().equals("2.34"));
-
- info = new ResourceSyncInfo("/file.java/0/Mon Feb 25 21:44:02 2002/-k/Tv1", null, null);
- String entry = info.getEntryLine();
- assertTrue(info.isAdded());
- }
-
- public void testMergeTimestamps() throws CVSException {
- ResourceSyncInfo info, info2;
- Date timestamp = new Date(123000);
- Date timestamp2 = new Date(654000);
-
- info = new ResourceSyncInfo("/file.java/1.1//-kb/", null, timestamp);
- assertTrue(!info.isMerged());
- assertTrue(!info.isNeedsMerge(timestamp));
-
- // test merged entry lines the server and ensure that their entry line format is compatible
- info = new ResourceSyncInfo("/file.java/1.1/+=/-kb/", null, timestamp);
- String entryLine = info.getEntryLine();
- info2 = new ResourceSyncInfo(entryLine, null, null);
- assertTrue(info.isMerged() && info2.isMerged());
- assertTrue(info.isNeedsMerge(timestamp) && info2.isNeedsMerge(timestamp));
- assertTrue(!info.isNeedsMerge(timestamp2) && !info2.isNeedsMerge(timestamp2));
- assertTrue(info.getTimeStamp().equals(timestamp) && info2.getTimeStamp().equals(timestamp));
-
- info = new ResourceSyncInfo("/file.java/1.1/+modified/-kb/", null, null);
- entryLine = info.getEntryLine();
- info2 = new ResourceSyncInfo(entryLine, null, null);
- assertTrue(info.isMerged() && info2.isMerged());
- assertTrue(!info.isNeedsMerge(timestamp) && !info2.isNeedsMerge(timestamp));
- assertTrue(!info.isNeedsMerge(timestamp2) && !info2.isNeedsMerge(timestamp2));
- assertTrue(info.getTimeStamp()==null && info2.getTimeStamp()==null);
- }
-
- public void testTimestampCompatibility() throws CVSException, CoreException {
- String entryLine1 = "/a.bin/1.1/Mon Feb 9 21:44:02 2002/-kb/";
- String entryLine2 = "/a.bin/1.1/Mon Feb 9 21:44:02 2002/-kb/";
- String entryLine3 = "/a.bin/1.1/Mon Feb 09 21:44:02 2002/-kb/";
- ResourceSyncInfo info1 = new ResourceSyncInfo(entryLine1, null, null);
- ResourceSyncInfo info2 = new ResourceSyncInfo(entryLine2, null, null);
- ResourceSyncInfo info3 = new ResourceSyncInfo(entryLine3, null, null);
- Date date1 = info1.getTimeStamp();
- Date date2 = info2.getTimeStamp();
- Date date3 = info3.getTimeStamp();
- assertTrue(date1.equals(date2));
- assertTrue(date1.equals(date3));
- assertTrue(date2.equals(date3));
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/AllTestsProvider.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/AllTestsProvider.java
deleted file mode 100644
index 86c4beb4a..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/AllTestsProvider.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.provider;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
-import org.eclipse.team.tests.ccvs.core.EclipseTest;
-
-/**
- * @version 1.0
- * @author ${user}
- */
-public class AllTestsProvider extends EclipseTest {
-
- /**
- * Constructor for AllTests.
- */
- public AllTestsProvider() {
- super();
- }
-
- /**
- * Constructor for AllTests.
- * @param name
- */
- public AllTestsProvider(String name) {
- super(name);
- }
-
- public static Test suite() {
- TestSuite suite = new TestSuite();
- //suite.addTestSuite(ModuleTest.class);
- suite.addTest(ImportTest.suite());
- suite.addTest(RemoteResourceTest.suite());
- suite.addTest(CVSProviderTest.suite());
- suite.addTest(SyncElementTest.suite());
- suite.addTest(ResourceDeltaTest.suite());
- suite.addTest(WatchEditTest.suite());
- suite.addTest(LinkResourcesTest.suite());
- suite.addTest(IsModifiedTests.suite());
- return new CVSTestSetup(suite);
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/CVSProviderTest.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/CVSProviderTest.java
deleted file mode 100644
index 8379bdfa0..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/CVSProviderTest.java
+++ /dev/null
@@ -1,501 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.provider;
-import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.util.HashMap;
-import java.util.Map;
-
-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.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.team.core.RepositoryProvider;
-import org.eclipse.team.core.Team;
-import org.eclipse.team.core.TeamException;
-import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin;
-import org.eclipse.team.internal.ccvs.core.CVSTag;
-import org.eclipse.team.internal.ccvs.core.CVSTeamProvider;
-import org.eclipse.team.internal.ccvs.core.ICVSFile;
-import org.eclipse.team.internal.ccvs.core.ICVSFolder;
-import org.eclipse.team.internal.ccvs.core.client.Command;
-import org.eclipse.team.internal.ccvs.core.client.Command.KSubstOption;
-import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot;
-import org.eclipse.team.internal.ccvs.core.syncinfo.ResourceSyncInfo;
-import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
-import org.eclipse.team.tests.ccvs.core.EclipseTest;
-
-/*
- * This class tests both the CVSProvider and the CVSTeamProvider
- */
-public class CVSProviderTest extends EclipseTest {
-
- /**
- * Constructor for CVSProviderTest
- */
- public CVSProviderTest() {
- super();
- }
-
- /**
- * Constructor for CVSProviderTest
- */
- public CVSProviderTest(String name) {
- super(name);
- }
-
- public static Test suite() {
- String testName = System.getProperty("eclipse.cvs.testName");
- if (testName == null) {
- TestSuite suite = new TestSuite(CVSProviderTest.class);
- return new CVSTestSetup(suite);
- } else {
- return new CVSTestSetup(new CVSProviderTest(testName));
- }
- }
-
- public void testAdd() throws TeamException, CoreException {
-
- // Test add with cvsignores
- /*
- IProject project = createProject("testAdd", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" });
- IFile file = project.getFile(".cvsignore");
- file.create(new ByteArrayInputStream("ignored.txt".getBytes()), false, null);
- file = project.getFile("ignored.txt");
- file.create(new ByteArrayInputStream("some text".getBytes()), false, null);
- file = project.getFile("notignored.txt");
- file.create(new ByteArrayInputStream("some more text".getBytes()), false, null);
- file = project.getFile("folder1/.cvsignore");
- file.create(new ByteArrayInputStream("ignored.txt".getBytes()), false, null);
- file = project.getFile("folder1/ignored.txt");
- file.create(new ByteArrayInputStream("some text".getBytes()), false, null);
- file = project.getFile("folder1/notignored.txt");
- file.create(new ByteArrayInputStream("some more text".getBytes()), false, null);
-
- getProvider(project).add(new IResource[] {project}, IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
-
- assertTrue( ! CVSWorkspaceRoot.getCVSResourceFor(project.getFile("ignored.txt")).isManaged());
- assertTrue( ! CVSWorkspaceRoot.getCVSResourceFor(project.getFile("folder1/ignored.txt")).isManaged());
-
- assertTrue(CVSWorkspaceRoot.getCVSResourceFor(project.getFile("notignored.txt")).isManaged());
- assertTrue(CVSWorkspaceRoot.getCVSResourceFor(project.getFile("folder1/notignored.txt")).isManaged());
- assertTrue(CVSWorkspaceRoot.getCVSResourceFor(project.getFile(".cvsignore")).isManaged());
- assertTrue(CVSWorkspaceRoot.getCVSResourceFor(project.getFile("folder1/.cvsignore")).isManaged());
- */
- }
-
- public void testDeleteHandling() throws TeamException, CoreException {
-
- IProject project = createProject("testDeleteHandling", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" });
-
- // Delete a file and ensure that it is an outgoing deletion
- project.getFile("deleted.txt").delete(false, false, null);
- ICVSFile file = CVSWorkspaceRoot.getCVSFileFor(project.getFile("deleted.txt"));
- assertTrue("File is not outgoing deletion", file.getSyncInfo().isDeleted());
-
- // Delete a folder and ensure that the file is managed but doesn't exist
- // (Special behavior is provider by the CVS move/delete hook but this is not part of CVS core)
- project.getFolder("folder1").delete(false, false, null);
- ICVSFolder folder = CVSWorkspaceRoot.getCVSFolderFor(project.getFolder("folder1"));
- assertTrue("Deleted folder not in proper state", ! folder.exists() && folder.isManaged());
- }
-
- public void testCheckin() throws TeamException, CoreException, IOException {
- IProject project = createProject("testCheckin", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" });
-
- // Perform some operations on the project
- IResource[] newResources = buildResources(project, new String[] { "added.txt", "folder2/", "folder2/added.txt" }, false);
- setContentsAndEnsureModified(project.getFile("changed.txt"));
- getProvider(project).add(newResources, IResource.DEPTH_ZERO, DEFAULT_MONITOR);
- getProvider(project).delete(new IResource[] {project.getFile("deleted.txt")}, DEFAULT_MONITOR);
- assertIsModified("testDeepCheckin: ", newResources);
- assertIsModified("testDeepCheckin: ", new IResource[] {project.getFile("deleted.txt"), project.getFile("changed.txt")});
- getProvider(project).checkin(new IResource[] {project}, IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
- assertLocalStateEqualsRemote(project);
- }
-
- public void testMoveHandling() throws TeamException, CoreException {
- IProject project = createProject("testMoveHandling", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" });
-
- // Move a file and ensure that it is an outgoing deletion at the source and unmanaged at the destination
- project.getFile("deleted.txt").move(new Path("moved.txt"), false, false, null);
- ICVSFile file = CVSWorkspaceRoot.getCVSFileFor(project.getFile("deleted.txt"));
- assertTrue("Source is not outgoing deletion", file.getSyncInfo().isDeleted());
- file = CVSWorkspaceRoot.getCVSFileFor(project.getFile("moved.txt"));
- assertTrue("Destination not in proper state", ! file.isManaged());
-
- // Move a folder and ensure the source is deleted
- project.getFolder("folder1").move(new Path("moved"), false, false, null);
- ICVSFolder folder = CVSWorkspaceRoot.getCVSFolderFor(project.getFolder("folder1"));
- assertTrue("Deleted folder not in proper state", ! folder.exists() && folder.isManaged());
- folder = CVSWorkspaceRoot.getCVSFolderFor(project.getFolder("moved"));
- assertTrue("Moved folder should not be managed", ! folder.isManaged());
- assertTrue("Moved folder should not be a CVS folder", ! folder.isCVSFolder());
- }
-
- public void testUpdate() throws TeamException, CoreException, IOException {
- // Create a test project, import it into cvs and check it out
- IProject project = createProject("testUpdate", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" });
-
- // Check the project out under a different name
- IProject copy = checkoutCopy(project, "-copy");
-
- // Perform some operations on the copy
- addResources(copy, new String[] { "added.txt", "folder2/", "folder2/added.txt" }, false);
- setContentsAndEnsureModified(copy.getFile("changed.txt"));
- getProvider(copy).delete(new IResource[] {copy.getFile("deleted.txt")}, DEFAULT_MONITOR);
-
- // Commit the copy and update the project
- getProvider(copy).checkin(new IResource[] {copy}, IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
- getProvider(project).update(new IResource[] {project}, Command.NO_LOCAL_OPTIONS, null, true /*createBackups*/, DEFAULT_MONITOR);
- assertEquals(project, copy);
- }
-
- public void testVersionTag() throws TeamException, CoreException, IOException {
-
- // Create a test project, import it into cvs and check it out
- IProject project = createProject("testVersionTag", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" });
-
- // Perform some operations on the copy and commit
- IProject copy = checkoutCopy(project, "-copy");
- addResources(copy, new String[] { "added.txt", "folder2/", "folder2/added.txt" }, false);
- changeResources(copy, new String[] {"changed.txt"}, false);
- deleteResources(copy, new String[] {"deleted.txt"}, false);
- commitResources(copy, true);
-
- // Tag the original, checkout the tag and compare with original
- CVSTag v1Tag = new CVSTag("v1", CVSTag.VERSION);
- tagProject(project, v1Tag, false);
- IProject v1 = checkoutCopy(project, v1Tag);
- assertEquals(project, v1);
-
- // Update original to HEAD and compare with copy including tags
- updateProject(project, null, false);
- assertEquals(project, copy, false, true);
-
- // Update copy to v1 and compare with the copy (including tag)
- updateProject(copy, v1Tag, false);
- assertEquals(copy, v1, false, true);
-
- // Update copy back to HEAD and compare with project (including tag)
- updateProject(copy, CVSTag.DEFAULT, false);
- assertEquals(project, copy, false, true);
- }
-
- public void testMakeBranch() throws TeamException, CoreException, IOException {
- // Create a test project
- IProject project = createProject("testMakeBranch", new String[] { "file1.txt", "file2.txt", "file3.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
-
- // Make some local modifications including "cvs adds" and "cvs removes"
- addResources(project, new String[] {"folder1/c.txt"}, false);
- deleteResources(project, new String[] {"folder1/b.txt"}, false);
- changeResources(project, new String[] {"file2.txt"}, false);
-
- // Make the branch including a pre-version
- CVSTag version = new CVSTag("v1", CVSTag.BRANCH);
- CVSTag branch = new CVSTag("branch1", CVSTag.BRANCH);
- getProvider(project).makeBranch(new IResource[] {project}, version, branch, true, DEFAULT_MONITOR);
-
- // Checkout a copy from the branch and version and compare
- IProject branchCopy = checkoutCopy(project, branch);
- IProject versionCopy = checkoutCopy(project, branch);
- assertEquals(branchCopy, versionCopy, true, false);
-
- // Commit the project, update the branch and compare
- commitProject(project);
- updateProject(branchCopy, null, false);
- assertEquals(branchCopy, project, false, true);
- }
-
- public void testPruning() throws TeamException, CoreException, IOException {
- // Create a project with empty folders
- CVSProviderPlugin.getPlugin().setPruneEmptyDirectories(false);
- IProject project = createProject("testPruning", new String[] { "file.txt", "folder1/", "folder2/folder3/" });
-
- // Disable pruning, checkout a copy and ensure original and copy are the same
- IProject copy = checkoutCopy(project, "-copy");
- assertEquals(project, copy);
-
- // Enable pruning, update copy and ensure emtpy folders are gone
- CVSProviderPlugin.getPlugin().setPruneEmptyDirectories(true);
- updateProject(copy, null, false);
- assertDoesNotExistInFileSystem(new IResource[] {copy.getFolder("folder1"), copy.getFolder("folder2"), copy.getFolder("folder2/folder3")});
-
- // Checkout another copy and ensure that the two copies are the same (with pruning enabled)
- IProject copy2 = checkoutCopy(project, "-copy2");
- assertEquals(copy, copy2);
-
- // Disable pruning, update copy and ensure directories come back
- CVSProviderPlugin.getPlugin().setPruneEmptyDirectories(false);
- updateProject(copy, null, false);
- assertEquals(project, copy);
-
- // Enable pruning again since it's the default
- CVSProviderPlugin.getPlugin().setPruneEmptyDirectories(true);
- }
-
- public void testGet() throws TeamException, CoreException, IOException {
-
- // Create a project
- IProject project = createProject("testGet", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" });
-
- // Checkout a copy and modify locally
- IProject copy = checkoutCopy(project, "-copy");
- //addResources(copy, new String[] { "added.txt", "folder2/", "folder2/added.txt" }, false);
- deleteResources(copy, new String[] {"deleted.txt"}, false);
- setContentsAndEnsureModified(copy.getFile("changed.txt"));
-
- // get the remote conetns
- getProvider(copy).get(new IResource[] {copy}, IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
- assertEquals(project, copy);
- }
-
- public void testReadOnly() throws TeamException, CoreException, IOException {
- IProject project = createProject("testReadOnly", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" });
- // Need to check the project out as read-only
- }
-
- public void testCleanLineDelimiters() throws TeamException, CoreException, IOException {
- // Create a project
- IProject project = getUniqueTestProject("testCleanLineDelimiters");
- IFile file = project.getFile("testfile");
- IProgressMonitor monitor = new NullProgressMonitor();
-
- // empty file
- setFileContents(file, "");
- CVSTeamProvider.cleanLineDelimiters(file, false, monitor);
- assertEqualsFileContents(file, "");
- CVSTeamProvider.cleanLineDelimiters(file, true, monitor);
- assertEqualsFileContents(file, "");
-
- // one byte
- setFileContents(file, "a");
- CVSTeamProvider.cleanLineDelimiters(file, false, monitor);
- assertEqualsFileContents(file, "a");
- CVSTeamProvider.cleanLineDelimiters(file, true, monitor);
- assertEqualsFileContents(file, "a");
-
- // single orphan carriage return (should be preserved)
- setFileContents(file, "\r");
- CVSTeamProvider.cleanLineDelimiters(file, false, monitor);
- assertEqualsFileContents(file, "\r");
- CVSTeamProvider.cleanLineDelimiters(file, true, monitor);
- assertEqualsFileContents(file, "\r");
-
- // single line feed
- setFileContents(file, "\n");
- CVSTeamProvider.cleanLineDelimiters(file, false, monitor);
- assertEqualsFileContents(file, "\n");
- CVSTeamProvider.cleanLineDelimiters(file, true, monitor);
- assertEqualsFileContents(file, "\r\n");
-
- // single carriage return line feed
- setFileContents(file, "\r\n");
- CVSTeamProvider.cleanLineDelimiters(file, true, monitor);
- assertEqualsFileContents(file, "\r\n");
- CVSTeamProvider.cleanLineDelimiters(file, false, monitor);
- assertEqualsFileContents(file, "\n");
-
- // mixed text with orphaned CR's
- setFileContents(file, "The \r\n quick brown \n fox \r\r\r\n jumped \n\n over \r\n the \n lazy dog.\r\n");
- CVSTeamProvider.cleanLineDelimiters(file, false, monitor);
- assertEqualsFileContents(file, "The \n quick brown \n fox \r\r\n jumped \n\n over \n the \n lazy dog.\n");
- setFileContents(file, "The \r\n quick brown \n fox \r\r\r\n jumped \n\n over \r\n the \n lazy dog.\r\n");
- CVSTeamProvider.cleanLineDelimiters(file, true, monitor);
- assertEqualsFileContents(file, "The \r\n quick brown \r\n fox \r\r\r\n jumped \r\n\r\n over \r\n the \r\n lazy dog.\r\n");
- }
-
- public void testKeywordSubstitution() throws TeamException, CoreException, IOException {
- testKeywordSubstitution(Command.KSUBST_BINARY); // -kb
- testKeywordSubstitution(Command.KSUBST_TEXT); // -ko
- testKeywordSubstitution(Command.KSUBST_TEXT_EXPAND); // -kkv
- }
-
- private void testKeywordSubstitution(KSubstOption ksubst) throws TeamException, CoreException, IOException {
- // setup some known file types
- Team.setAllTypes( new String[] {"xbin", "xtxt"}, new int[] {Team.BINARY, Team.TEXT});
-
- // create a test project
- IProject project = createProject("testKeywordSubstitution", new String[] { "dummy" });
- addResources(project, new String[] { "binary.xbin", "text.xtxt", "folder1/", "folder1/a.xtxt" }, true);
- addResources(project, new String[] { "added.xbin", "added.xtxt" }, false);
- assertHasKSubstOption(project, "binary.xbin", Command.KSUBST_BINARY);
- assertHasKSubstOption(project, "added.xbin", Command.KSUBST_BINARY);
- assertHasKSubstOption(project, "text.xtxt", CVSProviderPlugin.DEFAULT_TEXT_KSUBST_OPTION);
- assertHasKSubstOption(project, "folder1/a.xtxt", CVSProviderPlugin.DEFAULT_TEXT_KSUBST_OPTION);
- assertHasKSubstOption(project, "added.xtxt", CVSProviderPlugin.DEFAULT_TEXT_KSUBST_OPTION);
-
- // change keyword substitution
- Map map = new HashMap();
- map.put(project.getFile("binary.xbin"), ksubst);
- map.put(project.getFile("added.xbin"), ksubst);
- map.put(project.getFile("text.xtxt"), ksubst);
- map.put(project.getFile("folder1/a.xtxt"), ksubst);
- map.put(project.getFile("added.xtxt"), ksubst);
-
- waitMsec(1500);
- IStatus status = getProvider(project).setKeywordSubstitution(map, null, null);
- assertTrue("Status should be ok, was: " + status.toString(), status.isOK());
- assertHasKSubstOption(project, "binary.xbin", ksubst);
- assertHasKSubstOption(project, "text.xtxt", ksubst);
- assertHasKSubstOption(project, "folder1/a.xtxt", ksubst);
- assertHasKSubstOption(project, "added.xtxt", ksubst);
- assertHasKSubstOption(project, "added.xbin", ksubst);
-
- // verify that substitution mode changed remotely and "added.xtxt", "added.xbin" don't exist
- IProject copy = checkoutCopy(project, "-copy");
- assertHasKSubstOption(copy, "binary.xbin", ksubst);
- assertHasKSubstOption(copy, "text.xtxt", ksubst);
- assertHasKSubstOption(copy, "folder1/a.xtxt", ksubst);
- assertDoesNotExistInWorkspace(copy.getFile("added.xtxt"));
- assertDoesNotExistInWorkspace(copy.getFile("added.xbin"));
-
- // commit added files then checkout the copy again
- commitResources(project, new String[] { "added.xbin", "added.xtxt" });
- IProject copy2 = checkoutCopy(project, "-copy2");
- assertHasKSubstOption(copy2, "added.xtxt", ksubst);
- assertHasKSubstOption(copy2, "added.xbin", ksubst);
-
- // verify that local contents are up to date
- assertEquals(project, copy2);
- }
-
- public static void setFileContents(IFile file, String string) throws CoreException {
- InputStream is = new ByteArrayInputStream(string.getBytes());
- if (file.exists()) {
- file.setContents(is, false /*force*/, true /*keepHistory*/, null);
- } else {
- file.create(is, false /*force*/, null);
- }
- }
- public static String getFileContents(IFile file) throws CoreException, IOException {
- StringBuffer buf = new StringBuffer();
- Reader reader = new InputStreamReader(new BufferedInputStream(file.getContents()));
- try {
- int c;
- while ((c = reader.read()) != -1) buf.append((char) c);
- } finally {
- reader.close();
- }
- return buf.toString();
- }
-
- public static void assertEqualsFileContents(IFile file, String string) throws CoreException, IOException {
- String other = getFileContents(file);
- assertEquals(string, other);
- }
-
- public static void assertHasKSubstOption(IContainer container, String filename, KSubstOption ksubst)
- throws TeamException {
- IFile file = container.getFile(new Path(filename));
- ICVSFile cvsFile = CVSWorkspaceRoot.getCVSFileFor(file);
- ResourceSyncInfo info = cvsFile.getSyncInfo();
- assertEquals(ksubst, info.getKeywordMode());
- }
-
- public void testUnmap() throws CoreException, TeamException {
- // Create a project
- IProject project = createProject("testUnmap", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt", "folder1/", "folder1/folder2/deep.txt", "folder2/b.txt" });
- // delete a file and folder to create phantoms
- project.getFile("deleted.txt").delete(false, false, null);
- assertTrue(project.getFile("deleted.txt").isPhantom());
- project.getFolder("folder2").delete(false, false, null);
- assertTrue(project.getFolder("folder2").isPhantom());
- // unmap
- RepositoryProvider.unmap(project);
- // ensure that phantoms for the resoucrs no longer exist
- assertFalse(project.getFile("deleted.txt").isPhantom());
- assertFalse(project.getFolder("folder2").isPhantom());
-
- // Create a project
- project = createProject("testUnmap2", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt", "folder1/", "folder1/folder2/deep.txt", "folder2/b.txt" });
- // delete a deep folder to create phantoms
- project.getFolder("folder1/folder2").delete(false, false, null);
- assertTrue(project.getFolder("folder1/folder2").isPhantom());
- // unmap
- RepositoryProvider.unmap(project);
- // ensure that phantoms for the resources no longer exist
- assertFalse(project.getFolder("folder1/folder2").isPhantom());
- }
-
- public void testForBinaryLinefeedCorruption() throws CoreException, TeamException, IOException {
- String EOL = "\n";
- IProject project = createProject("testForBinaryLinefeedCorruption", new String[] { "binaryFile" });
- ICVSFile cvsFile = CVSWorkspaceRoot.getCVSFileFor(project.getFile("binaryFile"));
- assertTrue(ResourceSyncInfo.isBinary(cvsFile.getSyncBytes()));
- setContentsAndEnsureModified(project.getFile("binaryFile"), "line 1" + EOL + "line 2");
- commitProject(project);
-
- // Checkout a copy and ensure the file was not corrupted
- IProject copy = checkoutCopy(project, "-copy");
- assertEquals(project, copy);
- }
-
- public void test33984CannotCommitAfterConflictsMergedLocally() throws CoreException, TeamException, IOException {
- String EOL = System.getProperty("line.separator");
-
- IProject project = createProject("test33984", new String[] { "a.txt", "b.txt" });
- setContentsAndEnsureModified(project.getFile("a.txt"), "line 1");
- setContentsAndEnsureModified(project.getFile("b.txt"), ("line 1" + EOL + "line 2" + EOL + "line3"));
-
- Map kMode = new HashMap();
- kMode.put(project.getFile("a.txt"), Command.KSUBST_TEXT);
- kMode.put(project.getFile("b.txt"), Command.KSUBST_TEXT);
- getProvider(project).setKeywordSubstitution(kMode, "", null);
-
- commitProject(project);
-
-
-
- // Checkout a copy and ensure the file was not corrupted
- IProject copy = checkoutCopy(project, "-copy");
- assertEquals(project, copy);
-
- // TEST 1: simulate modifying same file by different users
- // b.txt has non-conflicting changes
- setContentsAndEnsureModified(copy.getFile("b.txt"), ("line 1a" + EOL + "line 2" + EOL + "line3"));
-
- commitProject(copy);
-
- // user updates which would cause a merge with conflict, a commit should not be allowed
-
- setContentsAndEnsureModified(project.getFile("b.txt"), ("line 1" + EOL + "line 2" + EOL + "line3a"));
- updateProject(project, CVSTag.DEFAULT, false /* don't ignore local changes */);
- commitProject(project);
-
- // TEST 2: a.txt has conflicting changes
- setContentsAndEnsureModified(copy.getFile("a.txt"), "line 1dfgdfne3");
-
- commitProject(copy);
-
- // user updates which would cause a merge with conflict, a commit should not be allowed
- setContentsAndEnsureModified(project.getFile("a.txt"), "some other text");
- updateProject(project, CVSTag.DEFAULT, false /* don't ignore local changes */);
- try {
- commitProject(project);
- fail("should not be allowed to commit a resource with merged conflicts");
- } catch(TeamException e) {
- }
- }
-}
-
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/ImportTest.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/ImportTest.java
deleted file mode 100644
index 99d22d990..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/ImportTest.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.provider;
-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.team.core.TeamException;
-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");
- 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"));
-
-
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/IsModifiedTests.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/IsModifiedTests.java
deleted file mode 100644
index f1eed906a..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/IsModifiedTests.java
+++ /dev/null
@@ -1,538 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.provider;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-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.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-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.ICVSResource;
-import org.eclipse.team.internal.ccvs.core.ICVSResourceVisitor;
-import org.eclipse.team.internal.ccvs.core.IResourceStateChangeListener;
-import org.eclipse.team.internal.ccvs.core.client.Command;
-import org.eclipse.team.internal.ccvs.core.client.Update;
-import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot;
-import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
-import org.eclipse.team.tests.ccvs.core.EclipseTest;
-
-/**
- * Test isModified on file, folders and projects.
- */
-public class IsModifiedTests extends EclipseTest {
-
- Set previouslyModified = new HashSet();
- Map changedResources = new HashMap();
- IResourceStateChangeListener listener = new IResourceStateChangeListener() {
- public void resourceSyncInfoChanged(IResource[] changedResources) {
- try {
- for (int i = 0; i < changedResources.length; i++) {
- IResource resource = changedResources[i];
- ICVSResource cvsResource = CVSWorkspaceRoot.getCVSResourceFor(resource);
- recordModificationState(cvsResource);
- recordParents(cvsResource);
- if (cvsResource.isFolder()) {
- recordChildren((ICVSFolder)cvsResource);
- }
- }
- } catch (CVSException e) {
- fail(e.getMessage());
- }
- }
- private void recordChildren(ICVSFolder folder) {
- try {
- folder.accept(new ICVSResourceVisitor() {
- public void visitFile(ICVSFile file) throws CVSException {
- recordModificationState(file);
- }
- public void visitFolder(ICVSFolder folder) throws CVSException {
- recordModificationState(folder);
- folder.acceptChildren(this);
- }
- });
- } catch (CVSException e) {
- fail(e.getMessage());
- }
- }
- private void recordParents(ICVSResource cvsResource) throws CVSException {
- if (cvsResource.getIResource().getType() == IResource.ROOT) return;
- recordModificationState(cvsResource);
- recordParents(cvsResource.getParent());
- }
- private void recordModificationState(ICVSResource cvsResource) throws CVSException {
- IsModifiedTests.this.changedResources.put(cvsResource.getIResource(), cvsResource.isModified(null) ? Boolean.TRUE : Boolean.FALSE);
- }
- public void resourceModified(IResource[] changedResources) {
- try {
- for (int i = 0; i < changedResources.length; i++) {
- IResource resource = changedResources[i];
- ICVSResource cvsResource = CVSWorkspaceRoot.getCVSResourceFor(resource);
- IsModifiedTests.this.changedResources.put(resource, cvsResource.isModified(null) ? Boolean.TRUE : Boolean.FALSE);
- recordParents(cvsResource);
- if (cvsResource.isFolder()) {
- recordChildren((ICVSFolder)cvsResource);
- }
- }
- } catch (CVSException e) {
- fail(e.getMessage());
- }
- }
- public void projectConfigured(IProject project) {
- }
- public void projectDeconfigured(IProject project) {
- }
- };
-
- /**
- * Constructor for CVSProviderTest
- */
- public IsModifiedTests() {
- super();
- }
-
- /**
- * Constructor for CVSProviderTest
- */
- public IsModifiedTests(String name) {
- super(name);
- }
-
- public static Test suite() {
- String testName = System.getProperty("eclipse.cvs.testName");
- if (testName == null) {
- TestSuite suite = new TestSuite(IsModifiedTests.class);
- return new CVSTestSetup(suite);
- } else {
- return new CVSTestSetup(new IsModifiedTests(testName));
- }
- }
-
- /**
- * @see junit.framework.TestCase#setUp()
- */
- protected void setUp() throws Exception {
- super.setUp();
- previouslyModified.clear();
- changedResources.clear();
- CVSProviderPlugin.addResourceStateChangeListener(listener);
- }
-
- /**
- * @see junit.framework.TestCase#tearDown()
- */
- protected void tearDown() throws Exception {
- previouslyModified.clear();
- changedResources.clear();
- CVSProviderPlugin.removeResourceStateChangeListener(listener);
- super.tearDown();
- }
-
- /*
- * Assert that the modification state of the provided resources matches the
- * provided state and that the other are the opposite state.
- */
- private void assertModificationState(IContainer container, String[] resources, final boolean listedResourcesShouldBeModified) throws CVSException {
- final ICVSFolder rootFolder = CVSWorkspaceRoot.getCVSFolderFor(container);
- final List resourceList = new ArrayList();
- final Set modifiedResources = new HashSet();
- if (resources != null) {
- for (int i = 0; i < resources.length; i++) {
- String string = resources[i];
- resourceList.add(new Path(string));
- }
- }
- rootFolder.accept(new ICVSResourceVisitor() {
- public void visitFile(ICVSFile file) throws CVSException {
- assertModificationState(file);
- }
- public void visitFolder(ICVSFolder folder) throws CVSException {
- // find the deepest mistake
- folder.acceptChildren(this);
- assertModificationState(folder);
- }
- public void assertModificationState(ICVSResource resource) throws CVSException {
- IPath relativePath = new Path(resource.getRelativePath(rootFolder));
- boolean resourceModified = resource.isModified(null);
- boolean resourceListed = resourceList.contains(relativePath);
- assertTrue(resource.getIResource().getFullPath().toString()
- + (resourceModified ? " should not be modified but is" : " should be modified but isn't"),
- (listedResourcesShouldBeModified && (resourceModified == resourceListed)) ||
- (!listedResourcesShouldBeModified && (!resourceModified == resourceListed)));
-
-// Commented because the CVS core doesn't rely on resourceModify to be called.
-// IResource iResource = resource.getIResource();
-// if (resource.isModified()) {
-// modifiedResources.add(iResource);
-// if (!wasPreviouslyModified(iResource)) {
-// // the state has changed, make sure we got a notification
-// Boolean b = (Boolean)changedResources.get(iResource);
-// assertTrue("No notification received for state change of " + iResource.getFullPath().toString(),
-// b == Boolean.TRUE);
-// }
-// } else {
-// if (wasPreviouslyModified(iResource)) {
-// // the state has changed, make sure we got a notification
-// Boolean b = (Boolean)changedResources.get(iResource);
-// assertTrue("No notification received for state change of " + iResource.getFullPath().toString(),
-// b == Boolean.FALSE);
-// }
-// }
- }
- public boolean wasPreviouslyModified(IResource iResource) {
- return previouslyModified.contains(iResource);
- }
- });
- changedResources.clear();
- previouslyModified.clear();
- previouslyModified.addAll(modifiedResources);
- }
-
- /**
- * Assert that a project (and all it's children) is clean after it is
- * created and shared.
- *
- * @see org.eclipse.team.tests.ccvs.core.EclipseTest#createProject(java.lang.String, java.lang.String)
- */
- protected IProject createProject(String prefix, String[] resources) throws CoreException, TeamException {
- IProject project = super.createProject(prefix, resources);
- assertModificationState(project, null, true);
- return project;
- }
-
-
- public void testFileModifications() throws CoreException, TeamException {
- IProject project = createProject("testFileModifications", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" });
- // change two files, commit one and revert the other
- setContentsAndEnsureModified(project.getFile("changed.txt"));
- assertModificationState(project, new String[] {".", "changed.txt"}, true);
- setContentsAndEnsureModified(project.getFile(new Path("folder1/a.txt")));
- assertModificationState(project, new String[] {".", "changed.txt", "folder1/", "folder1/a.txt"}, true);
- commitResources(project, new String[] {"folder1/a.txt"});
- assertModificationState(project, new String[] {".", "changed.txt"}, true);
- getProvider(project).get(new IResource[] {project.getFile("changed.txt")}, IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
- assertModificationState(project, null, true);
- }
-
- public void testFileDeletions() throws CoreException, TeamException {
- IProject project = createProject("testFileDeletions", new String[] { "changed.txt", "folder1/", "folder1/deleted.txt", "folder1/a.txt" });
- // delete and commit a file
- project.getFile("folder1/deleted.txt").delete(false, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/deleted.txt"}, true);
- commitResources(project, new String[] {"folder1/deleted.txt"});
- assertModificationState(project, null, true);
- // modify, delete and revert a file
- setContentsAndEnsureModified(project.getFile("changed.txt"));
- assertModificationState(project, new String[] {".", "changed.txt"}, true);
- project.getFile("changed.txt").delete(false, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "changed.txt"}, true);
- getProvider(project).get(new IResource[] {project.getFile("changed.txt")}, IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
- assertModificationState(project, null, true);
- // modify, delete and commit a file
- setContentsAndEnsureModified(project.getFile("changed.txt"));
- assertModificationState(project, new String[] {".", "changed.txt"}, true);
- project.getFile("changed.txt").delete(false, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "changed.txt"}, true);
- commitResources(project, new String[] {"changed.txt"});
- assertModificationState(project, null, true);
- // delete, recreate and commit
- project.getFile("folder1/a.txt").delete(false, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/a.txt"}, true);
- IResource[] addedResources = buildResources(project, new String[] {"folder1/a.txt"}, false);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/a.txt"}, true);
- commitResources(project, new String[] {"folder1/a.txt"});
- assertModificationState(project, null, true);
-
- }
-
- public void testFileAdditions() throws CoreException, TeamException {
- IProject project = createProject("testFileAdditions", new String[] { "changed.txt", "folder1/", "folder1/deleted.txt", "folder1/a.txt" });
- // create, add and commit a file
- IResource[] addedResources = buildResources(project, new String[] {"folder1/added.txt"}, false);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/added.txt"}, true);
- getProvider(project).add(addedResources, IResource.DEPTH_ZERO, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/added.txt"}, true);
- commitResources(project, new String[] {"folder1/added.txt"});
- assertModificationState(project, null, true);
- // create, add and delete a file
- addResources(project, new String[] {"added.txt"}, false);
- assertModificationState(project, new String[] {".", "added.txt"}, true);
- project.getFile("added.txt").delete(false, false, DEFAULT_MONITOR);
- assertModificationState(project, null, true);
- // create and delete a file
- addedResources = buildResources(project, new String[] {"folder1/another.txt"}, false);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/another.txt"}, true);
- project.getFile("folder1/another.txt").delete(false, false, DEFAULT_MONITOR);
- assertModificationState(project, null, true);
- // create and ignore a file
- addedResources = buildResources(project, new String[] {"ignored.txt"}, false);
- assertModificationState(project, new String[] {".", "ignored.txt"}, true);
- project.getFile(".cvsignore").create(new ByteArrayInputStream("ignored.txt".getBytes()), false, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", ".cvsignore"}, true);
- getProvider(project).add(new IResource[] {project.getFile(".cvsignore")}, IResource.DEPTH_ZERO, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", ".cvsignore"}, true);
- commitResources(project, new String[] {".cvsignore"});
- assertModificationState(project, null, true);
- // delete the .cvsignore to see the modification come back
- project.getFile(".cvsignore").delete(false, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "ignored.txt", ".cvsignore"}, true);
- commitResources(project, new String[] {".cvsignore"});
- assertModificationState(project, new String[] {".", "ignored.txt"}, true);
- // re-add the ignore and then delete the ignored
- project.getFile(".cvsignore").create(new ByteArrayInputStream("ignored.txt".getBytes()), false, DEFAULT_MONITOR);
- getProvider(project).add(new IResource[] {project.getFile(".cvsignore")}, IResource.DEPTH_ZERO, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", ".cvsignore"}, true);
- commitResources(project, new String[] {".cvsignore"});
- assertModificationState(project, null, true);
- project.getFile("ignored.txt").delete(false, DEFAULT_MONITOR);
- assertModificationState(project, null, true);
- // add the ignored file to version control
- buildResources(project, new String[] {"ignored.txt"}, false);
- assertModificationState(project, null, true);
- getProvider(project).add(new IResource[] {project.getFile("ignored.txt")}, IResource.DEPTH_ZERO, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "ignored.txt"}, true);
- commitProject(project);
- assertModificationState(project, null, true);
- }
-
- public void testFileMoveAndCopy() throws CoreException, TeamException {
- IProject project = createProject("testFileMoveAndCopy", new String[] { "changed.txt", "folder1/", "folder2/", "folder1/a.txt" });
- // move a file
- project.getFile("folder1/a.txt").move(project.getFile("folder2/a.txt").getFullPath(), false, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/a.txt", "folder2/", "folder2/a.txt"}, true);
- // commit the source
- commitResources(project, new String[] {"folder1/a.txt"});
- assertModificationState(project, new String[] {".", "folder2/", "folder2/a.txt"}, true);
- // copy the destination back to the source
- project.getFolder("folder1").create(false, true, DEFAULT_MONITOR);
- project.getFile("folder2/a.txt").copy(project.getFile("folder1/a.txt").getFullPath(), false, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/a.txt", "folder2/", "folder2/a.txt"}, true);
- // add the source, delete the destination and commit
- getProvider(project).add(new IResource[] {project.getFile("folder1/a.txt")}, IResource.DEPTH_ZERO, DEFAULT_MONITOR);
- project.getFile("folder2/a.txt").delete(false, DEFAULT_MONITOR);
- commitProject(project);
- assertModificationState(project, null, true);
- // Do the above without committing the source
- project.getFile("folder1/a.txt").move(project.getFile("folder2/a.txt").getFullPath(), false, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/a.txt", "folder2/", "folder2/a.txt"}, true);
- // copy the destination back to the source
- project.getFile("folder2/a.txt").copy(project.getFile("folder1/a.txt").getFullPath(), false, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder2/", "folder2/a.txt"}, true);
- getProvider(project).add(new IResource[] {project.getFile("folder2/a.txt")}, IResource.DEPTH_ZERO, DEFAULT_MONITOR);
- commitProject(project);
- assertModificationState(project, null, true);
- }
-
- public void testFolderAdditions() throws CoreException, TeamException {
- IProject project = createProject("testFileAdditions", new String[] { "changed.txt", "folder1/", "folder1/deleted.txt", "folder1/a.txt" });
- // create a folder
- project.getFolder("folder1/folder2").create(false, true, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/folder2/"}, true);
- getProvider(project).add(new IResource[] {project.getFolder("folder1/folder2/")}, IResource.DEPTH_ZERO, DEFAULT_MONITOR);
- assertModificationState(project, null, true);
-
- // create a folder
- project.getFolder("folder1/folder2/folder3").create(false, true, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/folder2/", "folder1/folder2/folder3"}, true);
- // add some children
- buildResources(project, new String[] {
- "folder1/folder2/folder3/add1.txt",
- "folder1/folder2/folder3/add2.txt",
- "folder1/folder2/folder3/folder4/",
- "folder1/folder2/folder3/folder5/"}, false);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/folder2/", "folder1/folder2/folder3",
- "folder1/folder2/folder3/add1.txt",
- "folder1/folder2/folder3/add2.txt",
- "folder1/folder2/folder3/folder4/",
- "folder1/folder2/folder3/folder5/"}, true);
- // delete some children
- project.getFile("folder1/folder2/folder3/add2.txt").delete(false, DEFAULT_MONITOR);
- project.getFolder("folder1/folder2/folder3/folder5/").delete(false, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/folder2/", "folder1/folder2/folder3",
- "folder1/folder2/folder3/add1.txt",
- "folder1/folder2/folder3/folder4/"}, true);
- // add to version control
- getProvider(project).add(new IResource[] {
- project.getFile("folder1/folder2/folder3/add1.txt"),
- project.getFolder("folder1/folder2/folder3/folder4/")}, IResource.DEPTH_ZERO, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/folder2/", "folder1/folder2/folder3",
- "folder1/folder2/folder3/add1.txt"}, true);
- // commit
- commitResources(project, new String[] {"folder1/folder2/folder3/add1.txt"});
- assertModificationState(project, null, true);
-
- // create a folder
- project.getFolder("folder1/ignored").create(false, true, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/ignored/"}, true);
- // add some files
- buildResources(project, new String[] {"folder1/ignored/file.txt"}, false);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/ignored/", "folder1/ignored/file.txt"}, true);
- // ignore the folder
- project.getFile("folder1/.cvsignore").create(new ByteArrayInputStream("ignored".getBytes()), false, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/.cvsignore"}, true);
- getProvider(project).add(new IResource[] {project.getFile("folder1/.cvsignore")}, IResource.DEPTH_ZERO, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/.cvsignore"}, true);
- commitResources(project, new String[] {"folder1/.cvsignore"});
- assertModificationState(project, null, true);
- // delete the .cvsignore to see the modification come back
- project.getFile("folder1/.cvsignore").delete(false, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/.cvsignore", "folder1/ignored/", "folder1/ignored/file.txt"}, true);
- commitResources(project, new String[] {"folder1/.cvsignore"});
- assertModificationState(project, new String[] {".", "folder1/", "folder1/ignored/", "folder1/ignored/file.txt"}, true);
- // re-add the .cvsignore and then delete the ignored
- project.getFile("folder1/.cvsignore").create(new ByteArrayInputStream("ignored".getBytes()), false, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/.cvsignore"}, true);
- getProvider(project).add(new IResource[] {project.getFile("folder1/.cvsignore")}, IResource.DEPTH_ZERO, DEFAULT_MONITOR);
- commitResources(project, new String[] {"folder1/.cvsignore"});
- assertModificationState(project, null, true);
- project.getFolder("folder/ignored").delete(false, DEFAULT_MONITOR);
- assertModificationState(project, null, true);
- // add the ignored file to version control
- buildResources(project, new String[] {"folder1/ignored/file.txt"}, false);
- assertModificationState(project, null, true);
- getProvider(project).add(new IResource[] {project.getFile("folder1/ignored/file.txt")}, IResource.DEPTH_ZERO, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/ignored/", "folder1/ignored/file.txt"}, true);
- commitProject(project);
- assertModificationState(project, null, true);
- }
-
- public void testFolderDeletions() throws CoreException, TeamException {
- IProject project = createProject("testFileAdditions", new String[] { "changed.txt", "folder1/", "folder1/deleted.txt", "folder1/a.txt" });
- // create a folder
- project.getFolder("folder1/folder2").create(false, true, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/folder2/"}, true);
- // delete the folder
- project.getFolder("folder1/folder2").delete(false, DEFAULT_MONITOR);
- assertModificationState(project, null, true);
-
- // create a folder
- project.getFolder("folder1/folder2").create(false, true, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/folder2/"}, true);
- // add some children
- buildResources(project, new String[] {"folder1/folder2/file.txt"}, false);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/folder2/", "folder1/folder2/file.txt"}, true);
- // delete the folder
- project.getFolder("folder1/folder2").delete(false, DEFAULT_MONITOR);
- assertModificationState(project, null, true);
-
- // delete a shared folder with files
- project.getFolder("folder1").delete(false, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/deleted.txt", "folder1/a.txt"}, true);
- // recreate folders and files
- project.getFolder("folder1").create(false, true, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/deleted.txt", "folder1/a.txt"}, true);
- getProvider(project).get(new IResource[] {project.getFile("folder1/deleted.txt"), project.getFile("folder1/a.txt")}, IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
- assertModificationState(project, null, true);
-
- // delete a shared folder with files
- project.getFolder("folder1").delete(false, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/deleted.txt", "folder1/a.txt"}, true);
- // commit file deletions
- commitProject(project);
- assertModificationState(project, null, true);
- }
-
- public void testFolderMoveAndCopy() throws CoreException, TeamException {
- IProject project = createProject("testFolderMoveAndCopy", new String[] { "changed.txt", "folder1/", "folder2/", "folder1/a.txt" , "folder1/folder3/file.txt"});
- // move a file
- project.getFolder("folder1/folder3").move(project.getFolder("folder2/folder3").getFullPath(), false, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/folder3", "folder1/folder3/file.txt", "folder2/", "folder2/folder3/", "folder2/folder3/file.txt"}, true);
- // commit the source
- commitResources(project, new String[] {"folder1/folder3"});
- assertModificationState(project, new String[] {".", "folder2/", "folder2/folder3/", "folder2/folder3/file.txt"}, true);
- // copy the destination back to the source
- project.getFolder("folder2/folder3/").copy(project.getFolder("folder1/folder3").getFullPath(), false, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/folder3", "folder1/folder3/file.txt", "folder2/", "folder2/folder3/", "folder2/folder3/file.txt"}, true);
- // add the source, delete the destination and commit
- getProvider(project).add(new IResource[] {project.getFile("folder1/folder3/file.txt")}, IResource.DEPTH_ZERO, DEFAULT_MONITOR);
- project.getFolder("folder2/folder3").delete(false, DEFAULT_MONITOR);
- commitProject(project);
- assertModificationState(project, null, true);
- // Do the above without committing the source
- project.getFolder("folder1/folder3").move(project.getFolder("folder2/folder3").getFullPath(), false, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder1/", "folder1/folder3", "folder1/folder3/file.txt", "folder2/", "folder2/folder3/", "folder2/folder3/file.txt"}, true);
- // copy the destination back to the source
- project.getFolder("folder2/folder3/").copy(project.getFolder("folder1/folder3").getFullPath(), false, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "folder2/", "folder2/folder3/", "folder2/folder3/file.txt"}, true);
- getProvider(project).add(new IResource[] {project.getFolder("folder2/folder3/")}, IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
- commitProject(project);
- assertModificationState(project, null, true);
- }
-
- public void testUpdate() throws TeamException, CoreException, IOException {
- // Create a test project, import it into cvs and check it out
- IProject project = createProject("testUpdate", new String[] { "changed.txt", "merged.txt", "deleted.txt", "folder1/", "folder1/a.txt" });
-
- // Check the project out under a different name
- IProject copy = checkoutCopy(project, "-copy");
- assertModificationState(copy, null, true);
-
- // Perform some operations on the copy and commit
- addResources(copy, new String[] { "added.txt", "folder2/", "folder2/added.txt" }, false);
- setContentsAndEnsureModified(copy.getFile("changed.txt"));
- setContentsAndEnsureModified(copy.getFile("merged.txt"));
- getProvider(copy).delete(new IResource[] {copy.getFile("deleted.txt")}, DEFAULT_MONITOR);
- assertModificationState(copy, new String[] {".", "added.txt", "folder2/", "folder2/added.txt", "changed.txt", "merged.txt", "deleted.txt"}, true);
- getProvider(copy).checkin(new IResource[] {copy}, IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
- assertModificationState(copy, null, true);
-
- // update the project and check status
- setContentsAndEnsureModified(project.getFile("merged.txt"));
- getProvider(project).update(new IResource[] {project}, Command.NO_LOCAL_OPTIONS, null, true /*createBackups*/, DEFAULT_MONITOR);
- assertModificationState(project, new String[] {".", "merged.txt"}, true);
- // can't commit because of merge
- // commitProject(project);
- // assertModificationState(project, null, true);
- }
-
- public void testUpdateIgnoreLocal() throws TeamException, CoreException, IOException {
- // Create a test project, import it into cvs and check it out
- IProject project = createProject("testUpdateIgnoreLocal", new String[] { "changed.txt", "merged.txt", "deleted.txt", "folder1/", "folder1/a.txt" });
-
- // modifiy a file
- setContentsAndEnsureModified(project.getFile("changed.txt"));
- assertModificationState(project, new String[] {".", "changed.txt"}, true);
-
- // peform un update -C
- getProvider(project).update(new IResource[] {project}, new Command.LocalOption[] {Update.IGNORE_LOCAL_CHANGES}, null, true /*createBackups*/, DEFAULT_MONITOR);
- assertModificationState(project, null, true);
- }
-
- public void testExternalDeletion() throws CoreException, TeamException {
- IProject project = createProject("testExternalDeletion", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt", "folder1/folder2/b.txt"});
- IFile file = project.getFile("folder1/unmanaged.txt");
- file.create(new ByteArrayInputStream("stuff".getBytes()), false, DEFAULT_MONITOR);
- file.getLocation().toFile().delete();
- file.refreshLocal(IResource.DEPTH_ZERO, DEFAULT_MONITOR);
- assertTrue(!file.exists());
- assertModificationState(project, null, true);
- }
-
-}
-
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/LinkResourcesTest.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/LinkResourcesTest.java
deleted file mode 100644
index 6dfd62382..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/LinkResourcesTest.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.provider;
-
-import java.io.IOException;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.resources.IFolder;
-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.RepositoryProvider;
-import org.eclipse.team.core.TeamException;
-import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin;
-import org.eclipse.team.internal.ccvs.core.resources.EclipseSynchronizer;
-import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
-import org.eclipse.team.tests.ccvs.core.EclipseTest;
-
-/**
- * Test linked resources
- */
-public class LinkResourcesTest extends EclipseTest {
-
- /**
- * Constructor for CVSProviderTest
- */
- public LinkResourcesTest() {
- super();
- }
-
- /**
- * Constructor for CVSProviderTest
- */
- public LinkResourcesTest(String name) {
- super(name);
- }
-
- public static Test suite() {
- TestSuite suite = new TestSuite(LinkResourcesTest.class);
- return new CVSTestSetup(suite);
- //return new CVSTestSetup(new WatchEditTest("testReadOnly"));
- }
-
-
- public void testMapSuccess() throws CoreException, TeamException {
- IProject project = getUniqueTestProject("testLinkSuccess");
- buildResources(project, new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" }, true);
- IFolder folder = project.getFolder("link");
- folder.createLink(new Path("C:/temp"), IResource.ALLOW_MISSING_LOCAL, null);
- RepositoryProvider.map(project, CVSProviderPlugin.getTypeId());
- }
-
- public void testLinkSuccess() throws CoreException, TeamException {
- IProject project = createProject("testLinkFailure", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" });
- IFolder folder = project.getFolder("link");
- folder.createLink(new Path("C:/temp"), IResource.ALLOW_MISSING_LOCAL, null);
- assertIsIgnored(folder, true);
- }
-
- public void testLinkCVSFolder() throws CoreException, TeamException, IOException {
- IProject source = createProject("testLinkSource", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" });
- IProject sourceCopy = checkoutCopy(source, "copy");
- EclipseSynchronizer.getInstance().flush(source, true, true, DEFAULT_MONITOR);
- IProject target = createProject("testLinkTarget", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" });
- IFolder folder = target.getFolder("link");
- folder.createLink(source.getLocation(), 0, null);
- assertEquals(sourceCopy, source);
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/ModuleTest.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/ModuleTest.java
deleted file mode 100644
index 3d4371d2d..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/ModuleTest.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-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.internal.plugins.PluginDescriptor;
-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.core.sync.IRemoteSyncElement;
-import org.eclipse.team.internal.ccvs.core.CVSTag;
-import org.eclipse.team.internal.ccvs.core.ICVSFolder;
-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;
-
-/**
- * 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
- PluginDescriptor testPlugin = (PluginDescriptor)Platform.getPluginRegistry().getPluginDescriptor("org.eclipse.team.tests.cvs.core");
- String filePath = testPlugin.getLocation().concat(RESOURCE_PATH + "CVSROOT/modules");
- URL url = null;
- try {
- url = new URL (filePath);
- } catch (java.net.MalformedURLException e) {
- assertTrue("Bad URL for " + filePath, true);
- }
-
- 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);
- 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()) {
- getProvider(project).add(new IResource[] {project.getFile(".vcm_meta")}, IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
- 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);
- IRemoteSyncElement tree = CVSWorkspaceRoot.getRemoteSyncTree(project1, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertEquals(Path.EMPTY, CVSWorkspaceRoot.getCVSResourceFor(project1), (ICVSResource)tree.getRemote(), false, false);
- RemoteModule module = getRemoteModule("project1");
- assertEquals(Path.EMPTY, (RemoteFolder)tree.getRemote(), 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);
- IRemoteSyncElement tree = CVSWorkspaceRoot.getRemoteSyncTree(docs, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertEquals(Path.EMPTY, CVSWorkspaceRoot.getCVSResourceFor(docs), (ICVSResource)tree.getRemote(), false, false);
- RemoteModule module = getRemoteModule("docs");
- assertEquals(Path.EMPTY, (RemoteFolder)tree.getRemote(), module, false);
-
- IProject macros = checkoutProject("macros", null);
- tree = CVSWorkspaceRoot.getRemoteSyncTree(macros, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertEquals(Path.EMPTY, CVSWorkspaceRoot.getCVSResourceFor(macros), (ICVSResource)tree.getRemote(), false, false);
- module = getRemoteModule("macros");
- assertEquals(Path.EMPTY, (RemoteFolder)tree.getRemote(), 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);
- IRemoteSyncElement tree = CVSWorkspaceRoot.getRemoteSyncTree(project2, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertEquals(Path.EMPTY, CVSWorkspaceRoot.getCVSResourceFor(project2), (ICVSResource)tree.getRemote(), false, false);
-
- RemoteModule module = getRemoteModule("project2");
- assertEquals(Path.EMPTY, (RemoteFolder)tree.getRemote(), module, false);
-
- project2 = checkoutProject("project2-only", null);
- tree = CVSWorkspaceRoot.getRemoteSyncTree(project2, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertEquals(Path.EMPTY, CVSWorkspaceRoot.getCVSResourceFor(project2), (ICVSResource)tree.getRemote(), false, false);
-
- module = getRemoteModule("project2-only");
- assertEquals(Path.EMPTY, (RemoteFolder)tree.getRemote(), 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);
- IRemoteSyncElement tree = CVSWorkspaceRoot.getRemoteSyncTree(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 = CVSWorkspaceRoot.getRemoteSyncTree(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 = CVSWorkspaceRoot.getRemoteSyncTree(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);
- IRemoteSyncElement tree = CVSWorkspaceRoot.getRemoteSyncTree(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 = CVSWorkspaceRoot.getRemoteSyncTree(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 = CVSWorkspaceRoot.getRemoteSyncTree(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;
- }
-}
-
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/RemoteResourceTest.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/RemoteResourceTest.java
deleted file mode 100644
index 9040c8ca1..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/RemoteResourceTest.java
+++ /dev/null
@@ -1,332 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-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 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.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.team.core.TeamException;
-import org.eclipse.team.core.sync.IRemoteResource;
-import org.eclipse.team.core.sync.IRemoteSyncElement;
-import org.eclipse.team.internal.ccvs.core.CVSException;
-import org.eclipse.team.internal.ccvs.core.CVSTag;
-import org.eclipse.team.internal.ccvs.core.CVSTeamProvider;
-import org.eclipse.team.internal.ccvs.core.ICVSFolder;
-import org.eclipse.team.internal.ccvs.core.ICVSRemoteFile;
-import org.eclipse.team.internal.ccvs.core.ICVSRemoteFolder;
-import org.eclipse.team.internal.ccvs.core.ICVSRemoteResource;
-import org.eclipse.team.internal.ccvs.core.ICVSResource;
-import org.eclipse.team.internal.ccvs.core.ILogEntry;
-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.RemoteFolderTree;
-import org.eclipse.team.internal.ccvs.core.resources.RemoteFolderTreeBuilder;
-import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
-import org.eclipse.team.tests.ccvs.core.EclipseTest;
-
-public class RemoteResourceTest extends EclipseTest {
-
- public RemoteResourceTest() {
- super();
- }
-
- public RemoteResourceTest(String name) {
- super(name);
- }
-
- public static Test suite() {
- String testName = System.getProperty("eclipse.cvs.testName");
- if (testName == null) {
- TestSuite suite = new TestSuite(RemoteResourceTest.class);
- return new CVSTestSetup(suite);
- } else {
- return new CVSTestSetup(new RemoteResourceTest(testName));
- }
- }
-
- protected void assertRemoteMatchesLocal(String message, RemoteFolder remote, IContainer container) throws CVSException, IOException, CoreException {
- assertEquals(Path.EMPTY, (ICVSResource)remote, CVSWorkspaceRoot.getCVSFolderFor(container), false, false);
- }
-
- protected void getMembers(ICVSRemoteFolder folder, boolean deep) throws TeamException {
- IRemoteResource[] children = folder.members(DEFAULT_MONITOR);
- if (deep) {
- for (int i=0;i<children.length;i++) {
- if (children[i].isContainer())
- getMembers((ICVSRemoteFolder)children[i], deep);
- }
- }
- }
-
- /**
- * RemoteFolderTreeBuilder test
- *
- * Perform some remote additions, changes and deletions
- */
- public void testSimpleChanges() throws TeamException, CoreException, IOException {
-
- // Create a test project and a copy of it
- IProject project = createProject("testRemoteTreeBuilder", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" });
- IProject copy = checkoutCopy(project, "-copy");
-
- // Make some changes to the copy and commit
- IResource[] newResources = buildResources(copy, new String[] { "added.txt", "folder2/", "folder2/added.txt" }, false);
- setContentsAndEnsureModified(copy.getFile("changed.txt"));
- CVSTeamProvider provider = getProvider(copy);
- provider.add(newResources, IResource.DEPTH_ZERO, DEFAULT_MONITOR);
- provider.delete(new IResource[] {copy.getFile("deleted.txt")}, DEFAULT_MONITOR);
- provider.checkin(new IResource[] {copy}, IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
-
- // Build the remote tree from the original and ensure it matches the copy
- RemoteFolderTree tree = RemoteFolderTreeBuilder.buildRemoteTree(getRepository(), project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertRemoteMatchesLocal("testSimpleChanges", tree, copy);
- }
-
- /**
- * RemoteFolderTreeBuilder test
- *
- * Create a remote tree from a local workspace with no remote changes.
- */
- public void testNoRemoteChanges() throws TeamException, CoreException, IOException {
- IProject project = createProject("testNoRemoteChanges", new String[] { "file1.txt", "file2.txt", "folder1/a.txt", "folder2/folder3/b.txt"});
- RemoteFolderTree tree = RemoteFolderTreeBuilder.buildRemoteTree(getRepository(), project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertRemoteMatchesLocal("testNoRemoteChanges", tree, project);
- }
-
- /**
- * RemoteFolderTreeBuilder test
- *
- * Create a base remote tree from a local workspace with no remote changes.
- */
- public void testGetBase() throws TeamException, CoreException, IOException {
- IProject project = createProject("testGetBase", new String[] { "file1.txt", "file2.txt", "folder1/a.txt", "folder2/folder3/b.txt"});
- RemoteFolderTree tree = RemoteFolderTreeBuilder.buildBaseTree(getRepository(), CVSWorkspaceRoot.getCVSFolderFor(project), CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertRemoteMatchesLocal("testGetBase", tree, project);
- }
-
- /**
- * RemoteFolderTreeBuilder test
- *
- * Add a nested folder structure remotely and build the remote tree
- * from the root.
- */
- public void testFolderAddition() throws TeamException, CoreException, IOException {
-
- // Create a test project
- IProject project = createProject("testFolderAddition", new String[] { "file1.txt", "file2.txt", "folder1/", "folder1/a.txt"});
-
- // Checkout and modify a copy
- IProject copy = checkoutCopy(project, "-copy");
- addResources(copy, new String[] { "folder2/folder3/b.txt" }, false);
- getProvider(copy).checkin(new IResource[] {copy}, IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
-
- // Build the remote tree from the project
- RemoteFolderTree tree = RemoteFolderTreeBuilder.buildRemoteTree(getRepository(), project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertRemoteMatchesLocal("testFolderAddition", tree, copy);
- }
-
- /**
- * RemoteFolderTreeBuilder test
- *
- * Add a nested folder structure remotely and build the remote tree
- * from a child
- */
- public void testNonRootBuild() throws CoreException, TeamException, IOException {
-
- // Create a test project
- IProject project = createProject("testNonRootBuild", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder2/", "folder2/a.txt", "folder2/folder3/", "folder2/folder3/b.txt", "folder2/folder3/c.txt"});
-
- // Checkout and modify a copy
- IProject copy = checkoutCopy(project, "-copy");
- setContentsAndEnsureModified(copy.getFile("folder2/folder3/c.txt"));
- addResources(copy, new String[] { "folder2/folder3/add.txt" }, false);
- getProvider(copy).delete(new IResource[] {copy.getFile("folder2/folder3/b.txt")}, DEFAULT_MONITOR);
- getProvider(copy).checkin(new IResource[] {copy}, IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
-
- // Build the remote tree from the project
- RemoteFolderTree tree = RemoteFolderTreeBuilder.buildRemoteTree(getRepository(), project.getFolder("folder2"), CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertRemoteMatchesLocal("testNonRootBuild", tree, copy.getFolder("folder2"));
- }
-
- /**
- * RemoteResource test
- *
- */
- public void testGetRemoteResource() throws CoreException, TeamException, IOException {
- IProject project = createProject("testGetRemoteResource", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder2/", "folder2/a.txt", "folder2/folder3/", "folder2/folder3/b.txt", "folder2/folder3/c.txt"});
- ICVSRemoteResource file = CVSWorkspaceRoot.getRemoteResourceFor(project.getFile("folder1/a.txt"));
- assertTrue("File should exist remotely", file.exists(DEFAULT_MONITOR));
- assertEquals(Path.EMPTY, (ICVSResource)file, (ICVSResource)CVSWorkspaceRoot.getRemoteResourceFor(project.getFile("folder1/a.txt")), false, false);
- ICVSRemoteResource folder = CVSWorkspaceRoot.getRemoteResourceFor(project.getFolder("folder2/folder3/"));
- getMembers((ICVSRemoteFolder)folder, true);
- assertTrue("Folder should exist remotely", folder.exists(DEFAULT_MONITOR));
- // XXX this didn't work right. I'll need to check into it later
-// assertEquals("Remote folder should match local folder", (ICVSResource)folder, (ICVSResource)Client.getManagedFolder(project.getFolder("folder2/folder3/").getLocation().toFile()));
- }
-
- /*
- * Test that the fetch of a tagged tree matches what is checked out for that tag
- */
- public void testVersionTag() throws TeamException, CoreException, IOException {
- // Create a test project and version it
- CVSTag v1Tag = new CVSTag("v1", CVSTag.VERSION);
- IProject project = createProject("testVersionTag", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt", "folder2/folder3/c.txt"});
- tagProject(project, v1Tag, false);
-
- // Make some changes, additions (including folders) and deletions and commit
- IFile file = project.getFile("folder1/a.txt");
- file.setContents(getRandomContents(), false, false, null);
- addResources(project, new String[] { "folder2/folder3/add.txt" }, false);
- deleteResources(project, new String[] {"folder1/b.txt"}, false);
- getProvider(project).checkin(new IResource[] {project}, IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
-
- // Fetch the remote tree for the version
- IRemoteSyncElement tree = CVSWorkspaceRoot.getRemoteSyncTree(project, v1Tag, DEFAULT_MONITOR);
-
- // Check out the project version
- project = checkoutCopy(project, v1Tag);
-
- // Compare the two
- assertEquals(Path.EMPTY, (ICVSResource)tree.getRemote(), (ICVSResource)CVSWorkspaceRoot.getCVSResourceFor(project), false, false);
- }
-
- /*
- * Test the fetching of the contents of an empty file
- */
- public void testEmptyFile() throws TeamException, CoreException, IOException {
-
- // Create a project with an empty file
- IProject project = createProject("testEmptyFile", new String[] { "file.txt"});
- IFile file = project.getFile("file.txt");
- setContentsAndEnsureModified(file, "");
- commitResources(project, new String[] {"file.txt"});
-
- ICVSRemoteResource remote = CVSWorkspaceRoot.getRemoteResourceFor(file);
- InputStream in = remote.getContents(DEFAULT_MONITOR);
- int count = 0;
- while(in.read() != -1) {
- count++;
- }
- assertTrue("Remote file should be empty", count==0);
- }
-
- /*
- * Test the fetching of the contents from multiple remote revisions of a file
- */
- public void testFileRevisions() throws TeamException, CoreException, IOException {
-
- // Create a project with an empty file
- IProject project = createProject("testFileRevisions", new String[] { "file.txt"});
- setContentsAndEnsureModified(project.getFile("file.txt"), "hi there");
- commitResources(project, new String[] {"file.txt"});
- setContentsAndEnsureModified(project.getFile("file.txt"), "bye there");
- commitResources(project, new String[] {"file.txt"});
-
- ICVSRemoteFile remote = (ICVSRemoteFile)CVSWorkspaceRoot.getRemoteResourceFor(project.getFile("file.txt"));
- ILogEntry[] entries = remote.getLogEntries(DEFAULT_MONITOR);
- for (int i=0;i<entries.length;i++) {
- InputStream in = entries[i].getRemoteFile().getContents(DEFAULT_MONITOR);
-
- if (entries[i].getRevision().equals("1.2")) {
- int count = 0;
- byte[] buffer = new byte[1024];
- int c;
- while((c = in.read()) != -1) {
- buffer[count] = (byte)c;
- count++;
- }
- String contents = new String(buffer, 0, count);
- assertEquals("the contents of revision 1.2 are not equal", contents, "hi there");
- } else if (entries[i].getRevision().equals("1.3")) {
- int count = 0;
- byte[] buffer = new byte[1024];
- int c;
- while((c = in.read()) != -1) {
- buffer[count] = (byte)c;
- count++;
- }
- String contents = new String(buffer, 0, count);
- assertEquals("the contents of revision 1.3 are not equal", contents, "bye there");
- }
- }
- }
-
- public void testTag() throws TeamException, CoreException, IOException {
- IProject project = createProject("testTag", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder2/folder3/b.txt", "folder2/folder3/c.txt"});
-
- ICVSRemoteFolder remote = (ICVSRemoteFolder)CVSWorkspaceRoot.getRemoteResourceFor(project);
- CVSTag tag = new CVSTag("v1", CVSTag.VERSION);
- tagRemoteResource(remote, tag, false);
- ICVSRemoteFolder v1 = (ICVSRemoteFolder)CVSWorkspaceRoot.getRemoteTree(project, tag, DEFAULT_MONITOR);
- assertEquals(Path.EMPTY, remote, v1, false);
-
- CVSTag tag2 = new CVSTag("v2", CVSTag.VERSION);
- tagRemoteResource(v1, tag2, false);
- ICVSRemoteFolder v2 = (ICVSRemoteFolder)CVSWorkspaceRoot.getRemoteTree(project, tag2, DEFAULT_MONITOR);
- assertEquals(Path.EMPTY, remote, v2, false);
-
- // Test tag with existing
- setContentsAndEnsureModified(project.getFile("file1.txt"));
- commitProject(project);
- remote = (ICVSRemoteFolder)CVSWorkspaceRoot.getRemoteResourceFor(project);
- tagRemoteResource(remote, tag, true /* force */);
- v1 = (ICVSRemoteFolder)CVSWorkspaceRoot.getRemoteTree(project, tag, DEFAULT_MONITOR);
- assertEquals(Path.EMPTY, remote, v1, false);
-
- // Test local tag with existing.
- setContentsAndEnsureModified(project.getFile("file1.txt"));
- commitProject(project);
- tagProject(project, tag2, true);
- IProject copy = checkoutCopy(project, tag2);
- assertEquals(project, copy, false, false);
- }
-
- public void testExists() throws TeamException, CoreException, IOException, InterruptedException {
- IProject project = createProject("testExists", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder2/", "folder2/a.txt", "folder2/folder3/", "folder2/folder3/b.txt", "folder2/folder3/c.txt"});
- ICVSRemoteResource resource1 = CVSWorkspaceRoot.getRemoteResourceFor(project.getFile("file1.txt"));
- assertTrue(resource1.exists(DEFAULT_MONITOR));
- ICVSRemoteResource resource2 = (ICVSRemoteFolder)CVSWorkspaceRoot.getRemoteResourceFor(project.getFolder("folder2/folder3/"));
- assertTrue(resource2.exists(DEFAULT_MONITOR));
- deleteResources(project, new String[] {"file1.txt", "folder2/folder3/b.txt", "folder2/folder3/c.txt" }, true);
- assertTrue( ! resource1.exists(DEFAULT_MONITOR));
- assertTrue(resource2.exists(DEFAULT_MONITOR));
- if (CVSTestSetup.INITIALIZE_REPO) {
- CVSTestSetup.executeRemoteCommand(getRepository(), "rm -rf " + ((ICVSFolder)resource2).getFolderSyncInfo().getRemoteLocation());
- assertTrue( ! resource2.exists(DEFAULT_MONITOR));
- }
- }
-
-// /**
-// * Test building a sync tree using the RemoteFolderTreeBuilder using a remote resource as the
-// * starting point instead of a local one.
-// */
-// public void testBuildRemoteTree() throws TeamException, CoreException, IOException, InterruptedException {
-// // Create a project and then delete it locally
-// IProject project = createProject("testBuildRemoteTree", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder2/", "folder2/a.txt", "folder2/folder3/", "folder2/folder3/b.txt", "folder2/folder3/c.txt"});
-// String name = project.getName();
-// project.delete(true, false, DEFAULT_MONITOR);
-// // Create a remote resource for the project and build a sync tree from it
-// RemoteFolder folder = new RemoteFolder(null, getRepository(), new Path(name), null);
-// RemoteFolderTree tree = RemoteFolderTreeBuilder.buildRemoteTree((CVSRepositoryLocation)folder.getRepository(), folder, null, DEFAULT_MONITOR);
-// // Reload the project from the repository and ensure that the tree and project are equal.
-// checkoutProject(project, name, null);
-// assertEquals(Path.EMPTY, CVSWorkspaceRoot.getCVSResourceFor(project), tree, false, true);
-// }
-}
-
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/ResourceDeltaTest.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/ResourceDeltaTest.java
deleted file mode 100644
index 8cdcea0bf..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/ResourceDeltaTest.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.provider;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceProxy;
-import org.eclipse.core.resources.IResourceProxyVisitor;
-import org.eclipse.core.resources.IResourceStatus;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-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.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.resources.EclipseSynchronizer;
-import org.eclipse.team.internal.ccvs.core.syncinfo.ResourceSyncInfo;
-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() {
- String testName = System.getProperty("eclipse.cvs.testName");
- if (testName == null) {
- TestSuite suite = new TestSuite(ResourceDeltaTest.class);
- return new CVSTestSetup(suite);
- } else {
- return new CVSTestSetup(new ResourceDeltaTest(testName));
- }
- }
-
- public void assertNotManaged(ICVSFile cvsFile) throws CVSException {
- assertTrue("File " + cvsFile.getName() + " should not be managed", ! cvsFile.isManaged());
- }
-
- public void assertNotManaged(ICVSFolder cvsFolder) throws CVSException {
- assertNotManaged(cvsFolder, false);
- }
-
- public void assertNotManaged(ICVSFolder cvsFolder, boolean rootManaged) throws CVSException {
- if (!rootManaged)
- 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, false);
- }
- });
- }
-
- public void assertAdditionMarkerFor(IResource resource, boolean exists) throws CoreException {
- // Addition markers are no longer used
- }
-
- public void assertDeletionMarkerFor(IResource resource, boolean exists) throws CoreException {
- }
-
- 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 testOrphanedSubsubtree() throws TeamException, CoreException {
- IProject project = createProject("testOrphanedSubsubtree", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt", "folder1/folder2/b.txt"});
- IFolder folder = project.getFolder(new Path("folder1"));
- IFolder target = project.getFolder("sub");
- target.create(false, true, null);
- folder.move(new Path("sub/moved"), false, false, null);
- folder = project.getFolder(new Path("sub/moved"));
- ICVSFolder cvsFolder = CVSWorkspaceRoot.getCVSFolderFor(folder);
- assertNotManaged(cvsFolder);
- assertAdditionMarkerFor(target, true);
- assertAdditionMarkerFor(folder, false);
- }
-
- 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);
- }
-
- 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);
- }
-
- /**
- * Method setContents is used to set the contents of a java.io.File so we
- * can test out-of-sync situations
- *
- * @param ioFile
- */
- private void setContents(File ioFile) throws IOException {
- // wait to ensure the timestamp differs from the one Core has
- waitMsec(1500);
- InputStream in = new BufferedInputStream(getRandomContents());
- OutputStream out = new BufferedOutputStream(new FileOutputStream(ioFile));
- try {
- int next = in.read();
- while (next != -1) {
- out.write(next);
- next = in.read();
- }
- } finally {
- out.close();
- }
- }
-
- /**
- * This tests maks sure that performing a CVS operation on a file that is
- * out-of-sync results in the proper exception.
- */
- public void testOperationOnOutOfSync() throws CoreException, TeamException, IOException {
- IProject project = createProject("testFolderAdditionHandling", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt", "folder1/folder2/b.txt"});
- IFile file = project.getFile("changed.txt");
- setContentsAndEnsureModified(file);
- File ioFile = file.getLocation().toFile();
- setContents(ioFile);
- try {
- updateProject(project, null, false);
- } catch (CVSException e) {
- // We expect to get an out-of-sync exception
- if (e.getStatus().getCode() != IResourceStatus.OUT_OF_SYNC_LOCAL)
- throw e;
- }
- }
-
- public void testAllCVSFolderRemoval() throws CoreException, TeamException {
- IProject project = createProject("testAllCVSFolderRemoval", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt", "folder1/folder2/b.txt"});
- // ensure that all th sync info is loaded
- EclipseSynchronizer.getInstance().ensureSyncInfoLoaded(new IResource[] {project}, IResource.DEPTH_INFINITE);
- // delete the CVS folders from the file system and refresh
- String[] cvsFolders = new String[] {"CVS", "folder1/CVS", "folder1/folder2/CVS"};
- deleteIOFiles(project, cvsFolders);
- // The project should no longer be managed
- assertNotManaged(CVSWorkspaceRoot.getCVSFolderFor(project));
- }
-
- public void testSomeCVSFolderRemoval() throws CoreException, TeamException {
- IProject project = createProject("testAllCVSFolderRemoval", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt", "folder1/folder2/b.txt"});
- // ensure that all th sync info is loaded
- EclipseSynchronizer.getInstance().ensureSyncInfoLoaded(new IResource[] {project}, IResource.DEPTH_INFINITE);
- // delete the CVS folders from the file system and refresh
- String[] cvsFolders = new String[] {"folder1/CVS", "folder1/folder2/CVS"};
- deleteIOFiles(project, cvsFolders);
- // The project should no longer be managed
- assertNotManaged(CVSWorkspaceRoot.getCVSFolderFor(project.getFolder("folder1")), true);
- }
-
- public void deleteIOFiles(IProject project, String[] cvsFolders)
- throws CoreException {
- IPath rootPath = project.getLocation();
- for (int i = 0; i < cvsFolders.length; i++) {
- String childPath = cvsFolders[i];
- IPath fullPath = rootPath.append(childPath);
- deepDelete(fullPath.toFile());
- }
- project.refreshLocal(IResource.DEPTH_INFINITE, null);
- }
-
- private static void deepDelete(File resource) {
- if (resource.isDirectory()) {
- File[] fileList = resource.listFiles();
- for (int i = 0; i < fileList.length; i++) {
- deepDelete(fileList[i]);
- }
- }
- resource.delete();
- }
-
- public void testCVSFodlersMarkedTeamPrivate() throws CoreException, TeamException {
- IProject project = createProject("testTeamPrivatefolders", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt", "folder1/folder2/b.txt"});
-
- project.delete(false /* preserve contents */, true, null);
- project.create(null);
- project.open(null);
- project.accept(new IResourceProxyVisitor() {
- public boolean visit(IResourceProxy proxy) throws CoreException {
- if(proxy.getName().equals("CVS")) {
- fail("all folders should be marked as team private. This one was not:" + proxy.requestResource().getFullPath());
- }
- return true;
- }
- }, 0);
- }
-
- public void testExternalDeletion() throws CoreException, TeamException {
- IProject project = createProject("testExternalDeletion", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt", "folder1/folder2/b.txt"});
- IFile file = project.getFile("folder1/a.txt");
- deepDelete(file.getLocation().toFile());
- file.refreshLocal(IResource.DEPTH_ZERO, DEFAULT_MONITOR);
- assertTrue(!file.exists());
- ICVSFile cvsFile = CVSWorkspaceRoot.getCVSFileFor(file);
- assertTrue(cvsFile.isManaged());
- byte[] syncBytes = cvsFile.getSyncBytes();
- assertTrue(ResourceSyncInfo.isDeletion(syncBytes));
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/SyncElementTest.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/SyncElementTest.java
deleted file mode 100644
index e43324aaa..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/SyncElementTest.java
+++ /dev/null
@@ -1,840 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.provider;
-import java.io.IOException;
-
-import junit.framework.AssertionFailedError;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.resources.IFile;
-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.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.team.core.TeamException;
-import org.eclipse.team.core.sync.ILocalSyncElement;
-import org.eclipse.team.core.sync.IRemoteResource;
-import org.eclipse.team.core.sync.IRemoteSyncElement;
-import org.eclipse.team.core.sync.RemoteSyncElement;
-import org.eclipse.team.internal.ccvs.core.CVSTag;
-import org.eclipse.team.internal.ccvs.core.ICVSFolder;
-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.Update;
-import org.eclipse.team.internal.ccvs.core.resources.CVSRemoteSyncElement;
-import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot;
-import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
-import org.eclipse.team.tests.ccvs.core.EclipseTest;
-
-public class SyncElementTest extends EclipseTest {
-
- /**
- * Constructor for SyncElementTest.
- */
- public SyncElementTest() {
- super();
- }
-
- /**
- * Constructor for SyncElementTest.
- * @param name
- */
- public SyncElementTest(String name) {
- super(name);
- }
-
- public static Test suite() {
- TestSuite suite = new TestSuite(SyncElementTest.class);
- return new CVSTestSetup(suite);
- //return new CVSTestSetup(new SyncElementTest("testAdditionConflicts"));
- }
-
- /*
- * Get the child in the sync tree
- */
- protected ILocalSyncElement getChild(ILocalSyncElement tree, IPath path) throws TeamException {
- if (path.segmentCount() == 0)
- return tree;
- ILocalSyncElement[] children = tree.members(DEFAULT_MONITOR);
- for (int i=0;i<children.length;i++) {
- if (children[i].getName().equals(path.segment(0)))
- return getChild(children[i], path.removeFirstSegments(1));
- }
- assertTrue("Child " + path.toString() + " does not exist", false);
- return null;
- }
-
- /*
- * Assert that the specified resources in the tree have the specified sync kind
- * Ignore conflict types if they are not specified in the assert statement
- */
- public void assertSyncEquals(String message, ILocalSyncElement tree, String[] resources, int[] syncKinds, int granularity) throws TeamException {
- assertTrue(resources.length == syncKinds.length);
- for (int i=0;i<resources.length;i++) {
- int conflictTypeMask = 0x0F; // ignore manual and auto merge sync types for now.
- ILocalSyncElement child = getChild(tree, new Path(resources[i]));
- int kind = child.getSyncKind(granularity, DEFAULT_MONITOR) & conflictTypeMask;
- int kindOther = syncKinds[i] & conflictTypeMask;
- assertTrue(message + ": improper sync state for " + resources[i] + " expected " +
- RemoteSyncElement.kindToString(kindOther) + " but was " +
- RemoteSyncElement.kindToString(kind), kind == kindOther);
- }
- }
-
- public void assertSyncEquals(String message, ILocalSyncElement tree, String[] resources, int[] syncKinds) throws TeamException {
- assertSyncEquals(message, tree, resources, syncKinds, ILocalSyncElement.GRANULARITY_TIMESTAMP);
- }
-
- /*
- * Update the sync info of the resources so they can be committed
- */
- public void makeOutgoing(IRemoteSyncElement tree, String[] hierarchy) throws CoreException, TeamException {
- for (int i=0;i<hierarchy.length;i++) {
- ((CVSRemoteSyncElement)getChild(tree, new Path(hierarchy[i]))).makeOutgoing(DEFAULT_MONITOR);
- }
- }
-
- public void makeIncoming(IRemoteSyncElement tree, String[] hierarchy) throws CoreException, TeamException {
- for (int i=0;i<hierarchy.length;i++) {
- ((CVSRemoteSyncElement)getChild(tree, new Path(hierarchy[i]))).makeIncoming(DEFAULT_MONITOR);
- }
- }
-
- public void makeInSync(IRemoteSyncElement tree, String[] hierarchy) throws CoreException, TeamException {
- for (int i=0;i<hierarchy.length;i++) {
- ((CVSRemoteSyncElement)getChild(tree, new Path(hierarchy[i]))).makeInSync(DEFAULT_MONITOR);
- }
- }
- /*
- * Assert that the named resources have no local resource or sync info
- */
- public void assertDeleted(String message, IRemoteSyncElement tree, String[] resources) throws CoreException, TeamException {
- for (int i=0;i<resources.length;i++) {
- try {
- ILocalSyncElement element = getChild(tree, new Path(resources[i]));
- if (! element.getLocal().exists())
- break;
- } catch (AssertionFailedError e) {
- break;
- }
- assertTrue(message + ": resource " + resources[i] + " still exists in some form", false);
- }
- }
-
- /*
- * Perform a simple test that checks for the different types of incoming changes
- */
- public void testIncomingChanges() throws TeamException, CoreException, IOException {
- // Create a test project
- IProject project = createProject("testIncomingChanges", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
-
- // Checkout and modify a copy
- IProject copy = checkoutCopy(project, "-copy");
- setContentsAndEnsureModified(copy.getFile("folder1/a.txt"));
- addResources(copy, new String[] { "folder2/folder3/add.txt" }, false);
- deleteResources(copy, new String[] {"folder1/b.txt"}, false);
- getProvider(copy).checkin(new IResource[] {copy}, IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
-
- // Get the sync tree for the project
- IRemoteSyncElement tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testIncomingChanges", tree,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt", "folder2/", "folder2/folder3/", "folder2/folder3/add.txt"},
- new int[] {
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.INCOMING | IRemoteSyncElement.CHANGE,
- IRemoteSyncElement.INCOMING | IRemoteSyncElement.DELETION,
- IRemoteSyncElement.INCOMING | IRemoteSyncElement.ADDITION,
- IRemoteSyncElement.INCOMING | IRemoteSyncElement.ADDITION,
- IRemoteSyncElement.INCOMING | IRemoteSyncElement.ADDITION});
-
- // Catch up to the incoming changes
- // XXX SPECIAL CASE: Update must be run on a resource whose parent is managed at the time of the update.
- makeInSync(tree, new String[] {"folder2/", "folder2/folder3/"});
- updateResources(project, new String[] {"folder1/a.txt", "folder1/b.txt", /* "folder2/", "folder2/folder3/", */ "folder2/folder3/add.txt"}, false);
-
- // Verify that we are in sync (except for "folder1/b.txt", which was deleted)
- tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testIncomingChanges", tree,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder2/", "folder2/folder3/", "folder2/folder3/add.txt"},
- new int[] {
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC});
-
- // Ensure "folder1/b.txt" was deleted
- assertDeleted("testIncomingChanges", tree, new String[] {"folder1/b.txt"});
-
- // Verify that the copy equals the original
- assertEquals(project, copy);
- }
-
- /*
- * Perform a simple test that checks for the different types of outgoing changes
- */
- public void testOutgoingChanges() throws TeamException, CoreException {
- // Create a test project (which commits it as well)
- IProject project = createProject("testIncomingChanges", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
-
- // Make some modifications
- setContentsAndEnsureModified(project.getFile("folder1/a.txt"));
- addResources(project, new String[] { "folder2/folder3/add.txt" }, false);
- deleteResources(project, new String[] {"folder1/b.txt"}, false);
-
- // Get the sync tree for the project
- IRemoteSyncElement tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testOutgoingChanges", tree,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt", "folder2/", "folder2/folder3/", "folder2/folder3/add.txt"},
- new int[] {
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.OUTGOING | IRemoteSyncElement.CHANGE,
- IRemoteSyncElement.OUTGOING | IRemoteSyncElement.DELETION,
- IRemoteSyncElement.IN_SYNC, /* adding a folder creates it remotely */
- IRemoteSyncElement.IN_SYNC, /* adding a folder creates it remotely */
- IRemoteSyncElement.OUTGOING | IRemoteSyncElement.ADDITION});
-
- // Commit the changes
- commitResources(project, new String[] {"folder1/a.txt", "folder1/b.txt", "folder2/folder3/add.txt"});
-
- // Ensure we're in sync
- tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testOutgoingChanges", tree,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder2/", "folder2/folder3/", "folder2/folder3/add.txt"},
- new int[] {
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC});
-
- // Ensure deleted resource "folder1/b.txt" no longer exists
- assertDeleted("testOutgoingChanges", tree, new String[] {"folder1/b.txt"});
- }
-
- /*
- * Perform a test that checks for outgoing changes that are CVS questionables (no add or remove)
- */
- public void testOutgoingQuestionables() throws TeamException, CoreException {
- // Create a test project (which commits it as well)
- IProject project = createProject("testIncomingChanges", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
-
- // Make some modifications
- buildResources(project, new String[] {"folder2/folder3/add.txt"}, false);
- IFile file = project.getFile("folder1/b.txt");
- file.delete(true, DEFAULT_MONITOR);
-
- // Get the sync tree for the project
- IRemoteSyncElement tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testOutgoingQuestionables", tree,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt", "folder2/", "folder2/folder3/", "folder2/folder3/add.txt"},
- new int[] {
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.OUTGOING | IRemoteSyncElement.DELETION,
- IRemoteSyncElement.OUTGOING | IRemoteSyncElement.ADDITION,
- IRemoteSyncElement.OUTGOING | IRemoteSyncElement.ADDITION,
- IRemoteSyncElement.OUTGOING | IRemoteSyncElement.ADDITION});
-
- // Update the resource sync info so the resources can be commited
- // Merge won't work for folders so we'll add them explicilty!!!
- addResources(project, new String[] {"folder2/", "folder2/folder3/", "folder2/folder3/add.txt"}, false);
- deleteResources(project, new String[] {"folder1/b.txt"}, false);
- commitResources(project, new String[] {"folder1/b.txt", "folder2/folder3/add.txt"});
-
- // Ensure we are in sync
- tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testOutgoingQuestionables", tree,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder2/", "folder2/folder3/", "folder2/folder3/add.txt"},
- new int[] {
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC});
-
- // Ensure "folder1/b.txt" was deleted
- assertDeleted("testOutgoingQuestionables", tree, new String[] {"folder1/b.txt"});
- }
-
- /*
- * Test simple file conflicts
- */
- public void testFileConflict() throws TeamException, CoreException, IOException {
- // Create a test project (which commits it as well)
- IProject project = createProject("testFileConflict", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
-
- // Checkout a copy and make some modifications
- IProject copy = checkoutCopy(project, "-copy");
- appendText(copy.getFile("file1.txt"), "prefix\n", true);
- setContentsAndEnsureModified(copy.getFile("folder1/a.txt"), "Use a custom string to avoid intermitant errors!");
- getProvider(copy).checkin(new IResource[] {copy}, IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
-
- // Make the same modifications to the original (We need to test both M and C!!!)
- appendText(project.getFile("file1.txt"), "\npostfix", false); // This will test merges (M)
- setContentsAndEnsureModified(project.getFile("folder1/a.txt"));
-
- // Get the sync tree for the project
- IRemoteSyncElement tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testFileConflict", tree,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt"},
- new int[] {
- IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE });
-
- // Catch up to the file1.txt conflict using UPDATE with ignoreLocalChanges
- getProvider(project).update(new IResource[] {project.getFile("file1.txt")},
- new Command.LocalOption[] {Update.IGNORE_LOCAL_CHANGES, Command.DO_NOT_RECURSE},
- null, true /*createBackups*/, DEFAULT_MONITOR);
- tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testFileConflict", tree,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt"},
- new int[] {
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE });
-
- // Release the folder1/a.txt conflict by merging and then committing
- makeOutgoing(tree, new String[] {"folder1/a.txt"});
- tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testFileConflict", tree,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt"},
- new int[] {
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.OUTGOING | IRemoteSyncElement.CHANGE });
- getProvider(project).checkin(new IResource[] {project.getFile("folder1/a.txt")}, IResource.DEPTH_ZERO, DEFAULT_MONITOR);
- tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testFileConflict", tree,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt"},
- new int[] {
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC });
- }
-
- /*
- * Test conflicts involving additions
- */
- public void testAdditionConflicts() throws TeamException, CoreException {
-
- // CASE 1: The user adds (using CVS add) a remotely added file
- // (a) catchup is simply get?
- // (b) release must do a merge
- // CASE 2: The user adds (but not using cvs add) a remotely added file
- // (a) catchup is simply get?
- // (b) release must do a merge
- // CASE 3: The user adds a remotely added then deleted file
- // catchup is not applicable
- // release is normal
-
- // Create a test project (which commits it as well) and add an uncommited resource
- IProject project = createProject("testAdditionConflicts", new String[] { "file.txt"});
- addResources(project, new String[] { "add1a.txt", "add1b.txt" }, false);
- addResources(project, new String[] { "add3.txt" }, false);
- buildResources(project, new String[] {"add2a.txt", "add2b.txt"}, false);
-
- // Checkout a copy, add the same resource and commit
- IProject copy = checkoutCopy(project, "-copy");
- addResources(copy, new String[] { "add1a.txt", "add1b.txt", "add2a.txt", "add2b.txt", "add3.txt"}, true);
- deleteResources(copy, new String[] { "add3.txt"}, true);
-
- // Get the sync tree for the project
- IRemoteSyncElement tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testAdditionConflicts", tree,
- new String[] { "file.txt", "add1a.txt", "add1b.txt", "add2a.txt", "add2b.txt", "add3.txt"},
- new int[] {
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.ADDITION,
- IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.ADDITION,
- IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.ADDITION,
- IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.ADDITION,
- IRemoteSyncElement.OUTGOING | IRemoteSyncElement.ADDITION });
-
- // Release the conflict cases (MERGE is not required for add3.txt but we do it anyway to ensure it doesn't cause problems)
- makeOutgoing(tree, new String[]{"add1b.txt", "add2b.txt", "add3.txt"});
- tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testAdditionConflicts", tree,
- new String[] { "file.txt", "add1b.txt", "add2b.txt", "add3.txt"},
- new int[] {
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.OUTGOING | IRemoteSyncElement.CHANGE,
- IRemoteSyncElement.OUTGOING | IRemoteSyncElement.CHANGE,
- IRemoteSyncElement.OUTGOING | IRemoteSyncElement.ADDITION });
- getProvider(project).checkin(new IResource[] {project.getFile("add1b.txt"), project.getFile("add2b.txt"), project.getFile("add3.txt")}, IResource.DEPTH_ZERO, DEFAULT_MONITOR);
- tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testAdditionConflicts", tree,
- new String[] { "file.txt", "add1b.txt", "add2b.txt", "add3.txt"},
- new int[] {
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC });
-
- // Catch-up to conflicting cases using UPDATE
- // XXX SPECIAL CASE: We need to unmanage the resources and delete it before getting the remote
- makeIncoming(tree, new String[] {"add1a.txt"});
- IFile file = project.getFile("add1a.txt");
- file.delete(false, DEFAULT_MONITOR);
- file = project.getFile("add2a.txt");
- file.delete(false, DEFAULT_MONITOR);
- getProvider(project).update(new IResource[] {project.getFile("add1a.txt"), project.getFile("add2a.txt")},
- new Command.LocalOption[] {Command.DO_NOT_RECURSE},
- null, true /*createBackups*/, DEFAULT_MONITOR);
- tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testAdditionConflicts", tree,
- new String[] { "add1a.txt", "add2a.txt"},
- new int[] {
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC });
- }
-
- /*
- * Test conflicts involving deletions
- */
- public void testDeletionConflicts() throws TeamException, CoreException {
-
- // CASE 1: The user deletes a remotely modified file
- // (a) catchup must do an update
- // (b) release must do a merge
- // CASE 2: The user deletes (and removes) a remotely modified file
- // (a) catchup must do an unmanage and update
- // (b) release must do a merge
- // CASE 3: The user modified a remotely deleted file
- // (a) catchup must do an unmanage and local delete
- // (b) release must do a merge
- // CASE 4: The user deletes a remotely deleted file
- // (a) catchup can update (or unmanage?)
- // (b) release must unmanage
- // CASE 5: The user deletes (and removes) a remotely deleted file
- // (a) catchup can update (or unmanage?)
- // (b) release must unmanage
-
- // Perform the test case for case A first
-
- // Create a test project (which commits it as well) and delete the resource without committing
- IProject project = createProject("testDeletionConflictsA", new String[] { "delete1.txt", "delete2.txt", "delete3.txt", "delete4.txt", "delete5.txt"});
- IFile file = project.getFile("delete1.txt"); // WARNING: This does a "cvs remove"!!!
- file.delete(false, DEFAULT_MONITOR);
- deleteResources(project, new String[] {"delete2.txt"}, false);
- setContentsAndEnsureModified(project.getFile("delete3.txt"));
- file = project.getFile("delete4.txt");
- file.delete(false, DEFAULT_MONITOR);
- deleteResources(project, new String[] {"delete5.txt"}, false);
-
- // Checkout a copy and commit the deletion
- IProject copy = checkoutCopy(project, "-copy");
- setContentsAndEnsureModified(copy.getFile("delete1.txt"));
- setContentsAndEnsureModified(copy.getFile("delete2.txt"));
- deleteResources(copy, new String[] {"delete3.txt", "delete4.txt", "delete5.txt"}, false);
- getProvider(copy).checkin(new IResource[] {copy}, IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
-
- // Get the sync tree for the project
- IRemoteSyncElement tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testDeletionConflictsA", tree,
- new String[] { "delete1.txt", "delete2.txt", "delete3.txt", "delete4.txt", "delete5.txt"},
- new int[] {
- IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE,
- IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE,
- IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC });
-
- // Catch up to remote changes.
- // XXX SPECIAL CASE: delete1.txt must be unmanaged before the catch-up
- makeIncoming(tree, new String[] {"delete1.txt"});
- // XXX SPECIAL CASE: delete2.txt must be unmanaged before the catch-up
- makeIncoming(tree, new String[] {"delete2.txt"});
- // XXX SPECIAL CASE: delete3.txt must ignore local changes (and -C doesn't work so we'll unmanage and delete the local resource)
- makeIncoming(tree, new String[] {"delete3.txt"});
- project.getFile("delete3.txt").delete(false, DEFAULT_MONITOR);
- updateResources(project, new String[] {"delete1.txt", "delete2.txt", "delete3.txt", "delete4.txt", "delete5.txt"}, true);
- tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testDeletionConflictsA", tree,
- new String[] { "delete1.txt", "delete2.txt"},
- new int[] {
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC });
- assertDeleted("testDeletionConflictsA", tree, new String[] {"delete3.txt", "delete4.txt", "delete5.txt"});
-
- // Now redo the test case for case B
-
- // Create a test project (which commits it as well) and delete the resource without committing
- project = createProject("testDeletionConflictsB", new String[] { "delete1.txt", "delete2.txt", "delete3.txt", "delete4.txt", "delete5.txt"});
- file = project.getFile("delete1.txt");
- file.delete(false, DEFAULT_MONITOR);
- deleteResources(project, new String[] {"delete2.txt"}, false);
- setContentsAndEnsureModified(project.getFile("delete3.txt"));
- file = project.getFile("delete4.txt");
- file.delete(false, DEFAULT_MONITOR);
- deleteResources(project, new String[] {"delete5.txt"}, false);
-
- // Checkout a copy and commit the deletion
- copy = checkoutCopy(project, "-copy");
- setContentsAndEnsureModified(copy.getFile("delete1.txt"));
- setContentsAndEnsureModified(copy.getFile("delete2.txt"));
- deleteResources(copy, new String[] {"delete3.txt", "delete4.txt", "delete5.txt"}, false);
- getProvider(copy).checkin(new IResource[] {copy}, IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
-
- // Get the sync tree for the project
- tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testDeletionConflictsB", tree,
- new String[] { "delete1.txt", "delete2.txt", "delete3.txt", "delete4.txt", "delete5.txt"},
- new int[] {
- IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE,
- IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE,
- IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC });
-
- // Release the resources
- // XXX SPECIAL CASE: "delete1.txt", "delete2.txt" and "delete3.txt" must be merged
- makeOutgoing(tree, new String[]{"delete1.txt", "delete2.txt", "delete3.txt"});
- // XXX SPECIAL CASE: "delete4.txt" and "delete5.txt" must be unmanaged
- unmanageResources(project, new String[]{"delete4.txt", "delete5.txt"});
- commitResources(project, new String[] { "delete1.txt", "delete2.txt", "delete3.txt", "delete4.txt", "delete5.txt"});
- tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testDeletionConflictsB", tree,
- new String[] { "delete3.txt"},
- new int[] {
- IRemoteSyncElement.IN_SYNC });
- assertDeleted("testDeletionConflictsB", tree, new String[] {"delete1.txt", "delete2.txt", "delete4.txt", "delete5.txt"});
- }
-
- /*
- * Test the creation and sync of an empty local project that has remote contents
- */
- public void testSyncOnEmptyProject() throws TeamException {
- }
-
- /*
- * Test syncing on a folder that has been deleted from the server
- */
- public void testSyncOnDeletedFolder() throws TeamException {
- }
-
- /*
- * Test syncing on a folder that is empty on the server and has been pruned, then added locally
- */
- public void testSyncOnPrunedFolder() throws TeamException {
- }
-
- /*
- * Test sync involving pruned directories
- */
- public void testSyncWithPruning() throws TeamException {
- }
-
- /*
- * Test a conflict with an incomming foler addition and an unmanaqged lcoal folder
- */
- public void testFolderConflict() throws TeamException, CoreException {
-
- // Create a test project (which commits it as well) and delete the resource without committing
- IProject project = createProject("testFolderConflict", new String[] { "file.txt"});
-
- // Checkout a copy and add some folders
- IProject copy = checkoutCopy(project, "-copy");
- addResources(copy, new String[] {"folder1/file.txt", "folder2/file.txt"}, true);
-
- // Add a folder to the original project (but not using cvs)
- IResource[] resources = buildResources(project, new String[] {"folder1/"});
- ((IFolder)resources[0]).create(false, true, DEFAULT_MONITOR);
-
- IRemoteSyncElement tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testFolderConflict", tree,
- new String[] { "file.txt", "folder1/", "folder1/file.txt", "folder2/", "folder2/file.txt"},
- new int[] {
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.ADDITION,
- IRemoteSyncElement.INCOMING | IRemoteSyncElement.ADDITION,
- IRemoteSyncElement.INCOMING | IRemoteSyncElement.ADDITION,
- IRemoteSyncElement.INCOMING | IRemoteSyncElement.ADDITION});
-
- makeInSync(tree, new String[] {"folder1/"});
- tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testFolderConflict", tree,
- new String[] { "file.txt", "folder1/", "folder1/file.txt", "folder2/", "folder2/file.txt"},
- new int[] {
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.INCOMING | IRemoteSyncElement.ADDITION,
- IRemoteSyncElement.INCOMING | IRemoteSyncElement.ADDITION,
- IRemoteSyncElement.INCOMING | IRemoteSyncElement.ADDITION});
- }
-
- /*
- * Test that a deleted file can still be deleted through the team provider
- */
- public void testOutgoingDeletion() throws TeamException, CoreException {
-
- // Create a test project (which commits it as well)
- IProject project = createProject("testOutgoingDeletion", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
-
- // Delete a file
- IFile file = project.getFile("folder1/b.txt");
- file.delete(true, DEFAULT_MONITOR); // WARNING: As of 2002/03/05, this is equivalent to a cvs remove
-
- // Get the sync tree for the project
- IRemoteSyncElement tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testOutgoingDeletion", tree,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"},
- new int[] {
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.OUTGOING | IRemoteSyncElement.DELETION});
-
- // Commit the deletion
- getProvider(file).checkin(new IResource[] {file}, IResource.DEPTH_ZERO, DEFAULT_MONITOR);
-
- // Get the sync tree again for the project and ensure others aren't effected
- tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testOutgoingDeletion", tree,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt"},
- new int[] {
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC});
-
- // Assert that deletion no longer appears in remote tree
- assertDeleted("testOutgoingDeletion", tree, new String[] {"folder1/b.txt"});
- }
-
- /*
- * Test catching up to an incoming addition
- */
- public void testIncomingAddition() throws TeamException, CoreException {
- // Create a test project
- IProject project = createProject("testIncomingAddition", new String[] { "file1.txt", "folder1/", "folder1/a.txt"});
-
- // Checkout and modify a copy
- IProject copy = checkoutCopy(project, "-copy");
- addResources(copy, new String[] { "folder1/add.txt" }, true);
-
- // Get the sync tree for the project
- IRemoteSyncElement tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testIncomingAddition", tree,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/add.txt"},
- new int[] {
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.INCOMING | IRemoteSyncElement.ADDITION});
-
- // Get the resource from the tree
- ILocalSyncElement element = getChild(tree, new Path("folder1/add.txt"));
-
- // Catch up to the addition by updating
- getProvider(project).update(new IResource[] {element.getLocal()}, new Command.LocalOption[] {Command.DO_NOT_RECURSE},
- null, true /*createBackups*/, DEFAULT_MONITOR);
-
- // Get the sync tree again for the project and ensure the added resource is in sync
- tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testIncomingAddition", tree,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/add.txt"},
- new int[] {
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC});
- }
-
- /*
- * Test changes using a granularity of contents
- */
- public void testGranularityContents() throws TeamException, CoreException, IOException {
- // Create a test project (which commits it as well)
- IProject project = createProject("testGranularityContents", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
-
- // Checkout a copy and make some modifications
- IProject copy = checkoutCopy(project, "-copy");
- appendText(copy.getFile("file1.txt"), "", true);
- setContentsAndEnsureModified(copy.getFile("folder1/a.txt"));
- getProvider(copy).checkin(new IResource[] {copy}, IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
-
- // Make the same modifications to the original
- appendText(project.getFile("file1.txt"), "", false);
- setContentsAndEnsureModified(project.getFile("folder1/a.txt"), "unique text");
-
- // Get the sync tree for the project
- IRemoteSyncElement tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testGranularityContents", tree,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt"},
- new int[] {
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE },
- IRemoteSyncElement.GRANULARITY_CONTENTS);
- }
-
- public void testGetBase() throws TeamException, CoreException, IOException {
- // Create a test project (which commits it as well)
- IProject project = createProject("testIncomingChanges", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
-
- // Checkout and modify a copy
- IProject copy = checkoutCopy(project, "-copy");
-
- // Make some modifications
- setContentsAndEnsureModified(project.getFile("folder1/a.txt"));
- addResources(project, new String[] { "folder1/add.txt" }, false);
- deleteResources(project, new String[] {"folder1/b.txt"}, false);
-
- // Get the sync tree for the project
- IRemoteSyncElement tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertEquals(Path.EMPTY, (ICVSResource)tree.getBase(), CVSWorkspaceRoot.getCVSResourceFor(copy), false, false);
-
- }
-
- public void testSimpleMerge() throws TeamException, CoreException, IOException {
- // Create a test project (which commits it as well)
- IProject project = createProject("testSimpleMerge", new String[] { "file1.txt", "file2.txt", "file3.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
-
- // Checkout and modify a copy
- IProject copy = checkoutCopy(project, "-copy");
- copy.refreshLocal(IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
-
- tagProject(project, new CVSTag("v1", CVSTag.VERSION), false);
- tagProject(project, new CVSTag("branch1", CVSTag.BRANCH), false);
-
- getProvider(copy).update(new IResource[] {copy}, Command.NO_LOCAL_OPTIONS,
- new CVSTag("branch1", CVSTag.BRANCH), true /*createBackups*/, DEFAULT_MONITOR);
-
- // make changes on the branch
- addResources(copy, new String[] {"addition.txt", "folderAddition/", "folderAddition/new.txt"}, true);
- deleteResources(copy, new String[] {"folder1/b.txt"}, true);
- changeResources(copy, new String[] {"file1.txt", "file2.txt"}, true);
-
- // make change to workspace working on HEAD
- changeResources(project, new String[] {"file2.txt"}, false);
- changeResources(project, new String[] {"file3.txt"}, true);
-
- IRemoteResource base = CVSWorkspaceRoot.getRemoteTree(project, new CVSTag("v1", CVSTag.VERSION), DEFAULT_MONITOR);
- IRemoteResource remote = CVSWorkspaceRoot.getRemoteTree(project, new CVSTag("branch1", CVSTag.BRANCH), DEFAULT_MONITOR);
- IRemoteSyncElement tree = new CVSRemoteSyncElement(true /*three way*/, project, base, remote);
-
- // watch for empty directories and the prune option!!!
- assertSyncEquals("testSimpleMerge sync check", tree,
- new String[] { "addition.txt", "folderAddition/", "folderAddition/new.txt",
- "folder1/b.txt", "file1.txt", "file2.txt", "file3.txt"},
- new int[] { IRemoteSyncElement.INCOMING | IRemoteSyncElement.ADDITION,
- IRemoteSyncElement.INCOMING | IRemoteSyncElement.ADDITION,
- IRemoteSyncElement.INCOMING | IRemoteSyncElement.ADDITION,
- IRemoteSyncElement.INCOMING | IRemoteSyncElement.DELETION,
- IRemoteSyncElement.INCOMING | IRemoteSyncElement.CHANGE,
- IRemoteSyncElement.CONFLICTING | IRemoteSyncElement.CHANGE,
- IRemoteSyncElement.OUTGOING | IRemoteSyncElement.CHANGE });
- }
-
- public void testSyncOnBranch() throws TeamException, CoreException, IOException {
-
- // Create a test project and a branch
- IProject project = createProject("testSyncOnBranch", new String[] { "file1.txt", "file2.txt", "file3.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
- CVSTag branch = new CVSTag("branch1", CVSTag.BRANCH);
- tagProject(project, branch, false);
- getProvider(project).update(new IResource[] {project}, Command.NO_LOCAL_OPTIONS, branch, true /*createBackups*/, DEFAULT_MONITOR);
-
- // Checkout and modify a copy
- IProject copy = checkoutCopy(project, branch);
- addResources(copy, new String[] {"addition.txt", "folderAddition/", "folderAddition/new.txt"}, true);
- deleteResources(copy, new String[] {"folder1/b.txt"}, true);
- changeResources(copy, new String[] {"file1.txt", "file2.txt"}, true);
-
- // Sync on the original and assert the result equals the copy
- IRemoteSyncElement tree = CVSWorkspaceRoot.getRemoteSyncTree(project, null, DEFAULT_MONITOR);
- assertEquals(Path.EMPTY, (ICVSResource)tree.getRemote(), CVSWorkspaceRoot.getCVSResourceFor(copy), false, false);
- }
-
- public void testRenameProject() throws TeamException, CoreException, IOException {
- String[] resourceNames = new String[] { "changed.txt", "folder1/", "folder1/a.txt" };
- int[] inSync = new int[] {IRemoteSyncElement.IN_SYNC, IRemoteSyncElement.IN_SYNC, IRemoteSyncElement.IN_SYNC};
- IProject project = createProject("testRenameProject", new String[] { "changed.txt", "folder1/", "folder1/a.txt" });
-
- IRemoteSyncElement tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("sync should be in sync", tree, resourceNames, inSync);
- IProjectDescription desc = project.getDescription();
- String newName = project.getName() + "_renamed";
- desc.setName(newName);
- project.move(desc, false, null);
- project = ResourcesPlugin.getWorkspace().getRoot().getProject(newName);
- assertTrue(project.exists());
- tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("sync should be in sync", tree, resourceNames, inSync);
- }
-
- public void testFolderDeletion() throws TeamException, CoreException {
-
- IProject project = createProject("testFolderDeletion", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt", "folder1/folder2/file.txt"});
-
- // Delete a folder and ensure that the file is managed but doesn't exist
- // (Special behavior is provider by the CVS move/delete hook but this is not part of CVS core)
- project.getFolder("folder1").delete(false, false, null);
- ICVSFolder folder = CVSWorkspaceRoot.getCVSFolderFor(project.getFolder("folder1"));
- assertTrue("Deleted folder not in proper state", ! folder.exists() && folder.isManaged() && folder.isCVSFolder());
-
- // The files should show up as outgoing deletions
- IRemoteSyncElement tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testFolderDeletion sync check", tree,
- new String[] { "folder1", "folder1/a.txt", "folder1/folder2", "folder1/folder2/file.txt"},
- new int[] { IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.OUTGOING | IRemoteSyncElement.DELETION,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.OUTGOING | IRemoteSyncElement.DELETION});
-
- // commit folder1/a.txt
- commitResources(project, new String[] { "folder1/a.txt" });
-
- // Resync and verify that above file is gone and others remain the same
- tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertSyncEquals("testFolderDeletion sync check", tree,
- new String[] { "folder1", "folder1/folder2", "folder1/folder2/file.txt"},
- new int[] { IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.IN_SYNC,
- IRemoteSyncElement.OUTGOING | IRemoteSyncElement.DELETION});
- assertDeleted("testFolderDeletion", tree, new String[] {"folder1/a.txt"});
-
- // Commit folder1/folder2/file.txt
- commitResources(project, new String[] { "folder1/folder2/file.txt" });
-
- // Resync and verify that all are deleted
- tree = CVSWorkspaceRoot.getRemoteSyncTree(project, CVSTag.DEFAULT, DEFAULT_MONITOR);
- assertDeleted("testFolderDeletion", tree, new String[] {"folder1", "folder1/folder2", "folder1/folder2/file.txt"});
- }
- /**
- * There is special handling required when building a sync tree for a tag when there are undiscovered folders
- * that only contain other folders.
- */
- public void testTagRetrievalForFolderWithNoFile() throws TeamException, CoreException {
- IProject project = createProject("testTagRetrievalForFolderWithNoFile", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt"});
- // Checkout, branch and modify a copy
- IProject copy = checkoutCopy(project, "-copy");
- CVSTag version = new CVSTag("v1", CVSTag.BRANCH);
- CVSTag branch = new CVSTag("branch1", CVSTag.BRANCH);
- getProvider(copy).makeBranch(new IResource[] {copy}, version, branch, true, DEFAULT_MONITOR);
- addResources(copy, new String[] {"folder2/folder3/a.txt"}, true);
-
- // Fetch the tree corresponding to the branch using the original as the base.
- // XXX This will fail for CVSNT with directory pruning on
- IRemoteSyncElement tree = CVSWorkspaceRoot.getRemoteSyncTree(project, branch, DEFAULT_MONITOR);
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/WatchEditTest.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/WatchEditTest.java
deleted file mode 100644
index ddade19ed..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/WatchEditTest.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.provider;
-
-import java.io.IOException;
-
-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.IResource;
-import org.eclipse.core.resources.IResourceVisitor;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.team.core.TeamException;
-import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin;
-import org.eclipse.team.internal.ccvs.core.CVSTag;
-import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
-import org.eclipse.team.tests.ccvs.core.EclipseTest;
-
-/**
- * Test the cvs watch/edit functionality
- */
-public class WatchEditTest extends EclipseTest {
-
- /**
- * Constructor for CVSProviderTest
- */
- public WatchEditTest() {
- super();
- }
-
- /**
- * Constructor for CVSProviderTest
- */
- public WatchEditTest(String name) {
- super(name);
- }
-
- public static Test suite() {
- TestSuite suite = new TestSuite(WatchEditTest.class);
- return new CVSTestSetup(suite);
- //return new CVSTestSetup(new WatchEditTest("testReadOnly"));
- }
-
- private void setReadOnly(boolean b) {
- CVSProviderPlugin.getPlugin().getPluginPreferences().setValue(CVSProviderPlugin.READ_ONLY, b);
- }
-
- /**
- * Method assertAllFilesReadOnly.
- * @param copy
- */
- private void assertAllFilesReadOnly(IContainer folder) throws CoreException {
- folder.accept(new IResourceVisitor() {
- public boolean visit(IResource resource) throws CoreException {
- if (resource.getType() == IResource.FILE) {
- assertTrue(resource.isReadOnly());
- }
- return true;
- }
- });
- }
-
- public void testReadOnlyCheckout() throws CoreException, TeamException {
- // Create a project
- IProject project = createProject("testReadOnlyCheckout", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" });
- // XXX project will not be read-only at this point because "cvs add" followed by a "cvs commit" doesn't set the resource "read-only"
- IProject copy = checkoutCopy(project, "copy");
- assertReadOnly(new IResource[] {copy}, true /* isReadOnly */, true /* recurse */);
- }
-
- public void testEditUnedit() throws CoreException, TeamException, IOException {
- // Create a project
- IProject project = createProject("testEditUnedit", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" });
- // XXX project will not be read-only at this point because "cvs add" followed by a "cvs commit" doesn't set the resource "read-only"
- IProject copy = checkoutCopy(project, "copy");
- assertReadOnly(new IResource[] {copy}, true /* isReadOnly */, true /* recurse */);
- editResources(copy, new String[] {"changed.txt", "deleted.txt"});
- setContentsAndEnsureModified(copy.getFile("changed.txt"));
- deleteResources(copy, new String[] {"deleted.txt"}, false);
- uneditResources(copy, new String[] {"changed.txt", "deleted.txt"});
- assertEquals(project, copy);
- }
-
- public void testCommit() throws CoreException, TeamException, IOException {
- // Create a project
- IProject project = createProject("testCommit", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" });
- // XXX project will not be read-only at this point because "cvs add" followed by a "cvs commit" doesn't set the resource "read-only"
- IProject copy = checkoutCopy(project, "copy");
- editResources(copy, new String[] {"changed.txt"});
- setContentsAndEnsureModified(copy.getFile("changed.txt"));
- commitProject(copy);
- assertReadOnly(new IResource[] {copy.getFile("changed.txt")}, true /* isReadOnly */, true /* recurse */);
- }
-
- public void testEditMergeUnedit() throws CoreException, TeamException, IOException {
- // Create a project
- IProject project = createProject("testEditMergeUnedit", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" });
- // XXX project will not be read-only at this point because "cvs add" followed by a "cvs commit" doesn't set the resource "read-only"
- IProject copy = checkoutCopy(project, "copy");
- IProject copy2 = checkoutCopy(project, "copy2");
- // Modify the second copy and commit changes
- editResources(copy2, new String[] {"changed.txt"});
- setContentsAndEnsureModified(copy2.getFile("changed.txt"));
- commitProject(copy2);
- // Edit first copy, merge then unedit
- editResources(copy, new String[] {"changed.txt"});
- setContentsAndEnsureModified(copy.getFile("changed.txt"));
- updateProject(copy, CVSTag.DEFAULT, false);
- // XXX Update may or may not make the file read-only so it may need to be re-edited
- if (copy.getFile("changed.txt").isReadOnly()) {
- editResources(copy, new String[] {"changed.txt"});
- }
- uneditResources(copy, new String[] {"changed.txt", "deleted.txt"});
- IFile backup = copy.getFile(".#changed.txt.1.1");
- if (backup.exists()) backup.delete(true, false, null);
- assertEquals(project, copy);
- }
-
- /**
- * @see junit.framework.TestCase#setUp()
- */
- protected void setUp() throws Exception {
- super.setUp();
- setReadOnly(true);
- }
-
- /**
- * @see junit.framework.TestCase#tearDown()
- */
- protected void tearDown() throws Exception {
- super.tearDown();
- setReadOnly(false);
- }
-
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/AllTestsTeamSubscriber.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/AllTestsTeamSubscriber.java
deleted file mode 100644
index eaab5ee77..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/AllTestsTeamSubscriber.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.subscriber;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
-import org.eclipse.team.tests.ccvs.core.EclipseTest;
-
-public class AllTestsTeamSubscriber extends EclipseTest {
-
- public AllTestsTeamSubscriber() {
- super();
- }
-
- public AllTestsTeamSubscriber(String name) {
- super(name);
- }
-
- public static Test suite() {
- TestSuite suite = new TestSuite();
- suite.addTest(CVSMergeSubscriberTest.suite());
- suite.addTest(CVSWorkspaceSubscriberTest.suite());
- suite.addTest(SyncSetTests.suite());
- CVSSyncSubscriberTest.setSyncSource(new SyncInfoSource());
- return new CVSTestSetup(suite);
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/CVSMergeSubscriberTest.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/CVSMergeSubscriberTest.java
deleted file mode 100644
index 4933f23be..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/CVSMergeSubscriberTest.java
+++ /dev/null
@@ -1,390 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.subscriber;
-
-import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.team.core.RepositoryProvider;
-import org.eclipse.team.core.TeamException;
-import org.eclipse.team.core.subscribers.SyncInfo;
-import org.eclipse.team.core.subscribers.TeamProvider;
-import org.eclipse.team.core.subscribers.TeamSubscriber;
-import org.eclipse.team.internal.ccvs.core.CVSException;
-import org.eclipse.team.internal.ccvs.core.CVSMergeSubscriber;
-import org.eclipse.team.internal.ccvs.core.CVSTag;
-import org.eclipse.team.internal.ccvs.core.CVSTeamProvider;
-import org.eclipse.team.internal.ccvs.core.ICVSFolder;
-import org.eclipse.team.internal.ccvs.core.client.Command;
-import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot;
-import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
-import org.eclipse.team.ui.sync.SyncInfoSet;
-
-
-/**
- * Tests the CVSMergeSubscriber
- */
-public class CVSMergeSubscriberTest extends CVSSyncSubscriberTest {
-
- public static Test suite() {
- String testName = System.getProperty("eclipse.cvs.testName");
- if (testName == null) {
- TestSuite suite = new TestSuite(CVSMergeSubscriberTest.class);
- return new CVSTestSetup(suite);
- } else {
- return new CVSTestSetup(new CVSMergeSubscriberTest(testName));
- }
- }
-
- public CVSMergeSubscriberTest() {
- super();
- }
-
- public CVSMergeSubscriberTest(String name) {
- super(name);
- }
-
- private IProject branchProject(IProject project, CVSTag root, CVSTag branch) throws TeamException {
- IProject copy = checkoutCopy(project, "-copy");
- tagProject(project, root, false);
- tagProject(project, branch, false);
- getProvider(copy).update(new IResource[] {copy}, Command.NO_LOCAL_OPTIONS,
- branch, false /*createBackups*/, DEFAULT_MONITOR);
- return copy;
- }
-
- private void mergeResources(CVSMergeSubscriber subscriber, IProject project, String[] resourcePaths, boolean allowOverwrite) throws CoreException, TeamException, InvocationTargetException, InterruptedException {
- IResource[] resources = getResources(project, resourcePaths);
- SyncInfo[] infos = createSyncInfos(subscriber, resources);
- mergeResources(subscriber, infos, allowOverwrite);
- }
-
- private void mergeResources(TeamSubscriber subscriber, SyncInfo[] infos, boolean allowOverwrite) throws TeamException, InvocationTargetException, InterruptedException {
- TestMergeUpdateAction action = new TestMergeUpdateAction(allowOverwrite);
- action.setSubscriber(subscriber);
- action.getRunnable(new SyncInfoSet(infos)).run(DEFAULT_MONITOR);
- }
-
- private CVSMergeSubscriber createMergeSubscriber(IProject project, CVSTag root, CVSTag branch) {
- CVSMergeSubscriber subscriber = new CVSMergeSubscriber(new IResource[] { project }, root, branch);
- TeamProvider.registerSubscriber(subscriber);
- return subscriber;
- }
-
- /**
- * Test the basic incoming changes cases
- * - incoming addition
- * - incoming deletion
- * - incoming change
- * - incoming addition of a folder containing files
- */
- public void testIncomingChanges() throws TeamException, CoreException, InvocationTargetException, InterruptedException {
- // Create a test project
- IProject project = createProject("testIncomingChanges", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
-
- // Checkout and branch a copy
- CVSTag root = new CVSTag("root_branch1", CVSTag.VERSION);
- CVSTag branch = new CVSTag("branch1", CVSTag.BRANCH);
- IProject copy = branchProject(project, root, branch);
-
- // Modify the branch
- addResources(copy, new String[] {"addition.txt", "folderAddition/", "folderAddition/new.txt"}, true);
- deleteResources(copy, new String[] {"folder1/a.txt"}, true);
- changeResources(copy, new String[] {"file1.txt"}, true);
-
- // create a merge subscriber
- CVSMergeSubscriber subscriber = createMergeSubscriber(project, root, branch);
-
- // check the sync states
- assertSyncEquals("testIncomingChanges", subscriber, project,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt", "addition.txt", "folderAddition/", "folderAddition/new.txt"},
- true, new int[] {
- SyncInfo.INCOMING | SyncInfo.CHANGE,
- SyncInfo.IN_SYNC,
- SyncInfo.INCOMING | SyncInfo.DELETION,
- SyncInfo.INCOMING | SyncInfo.ADDITION,
- SyncInfo.INCOMING | SyncInfo.ADDITION,
- SyncInfo.INCOMING | SyncInfo.ADDITION});
-
- // Perform a merge
- mergeResources(subscriber, project, new String[] {
- "file1.txt",
- "folder1/a.txt",
- "addition.txt",
- "folderAddition/",
- "folderAddition/new.txt"},
- false /* allow overwrite */);
-
- // check the sync states for the workspace subscriber
- assertSyncEquals("testIncomingChanges", getWorkspaceSubscriber(), project,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt", "addition.txt", "folderAddition/", "folderAddition/new.txt"},
- true, new int[] {
- SyncInfo.OUTGOING | SyncInfo.CHANGE,
- SyncInfo.IN_SYNC,
- SyncInfo.OUTGOING | SyncInfo.DELETION,
- SyncInfo.OUTGOING | SyncInfo.ADDITION,
- SyncInfo.IN_SYNC,
- SyncInfo.OUTGOING | SyncInfo.ADDITION});
- }
-
- public void testMergableConflicts() throws IOException, TeamException, CoreException, InvocationTargetException, InterruptedException {
- // Create a test project
- IProject project = createProject("testMergableConflicts", new String[] { "file1.txt", "file2.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
- setContentsAndEnsureModified(project.getFile("file1.txt"), "some text\nwith several lines\n");
- setContentsAndEnsureModified(project.getFile("file2.txt"), "some text\nwith several lines\n");
- commitProject(project);
-
- // Checkout and branch a copy
- CVSTag root = new CVSTag("root_branch1", CVSTag.VERSION);
- CVSTag branch = new CVSTag("branch1", CVSTag.BRANCH);
- IProject branchedProject = branchProject(project, root, branch);
-
- // modify the branch
- appendText(branchedProject.getFile("file1.txt"), "first line\n", true);
- appendText(branchedProject.getFile("file2.txt"), "last line\n", false);
- commitProject(branchedProject);
-
- // modify HEAD
- appendText(project.getFile("file1.txt"), "last line\n", false);
- commitProject(project);
- // have one local change
- appendText(project.getFile("file2.txt"), "first line\n", true);
-
- // create a merge subscriber
- CVSMergeSubscriber subscriber = createMergeSubscriber(project, root, branch);
-
- // check the sync states
- assertSyncEquals("testMergableConflicts", subscriber, project,
- new String[] { "file1.txt", "file2.txt"},
- true, new int[] {
- SyncInfo.CONFLICTING | SyncInfo.CHANGE,
- SyncInfo.CONFLICTING | SyncInfo.CHANGE});
-
- // Perform a merge
- mergeResources(subscriber, project, new String[] {
- "file1.txt",
- "file2.txt"},
- false /* allow overwrite */);
-
- // check the sync states for the workspace subscriber
- assertSyncEquals("testMergableConflicts", getWorkspaceSubscriber(), project,
- new String[] { "file1.txt", "file2.txt"},
- true, new int[] {
- SyncInfo.OUTGOING | SyncInfo.CHANGE,
- SyncInfo.OUTGOING | SyncInfo.CHANGE});
-
- //TODO: How do we know if the right thing happened to the file contents?
- }
-
- public void testUnmergableConflicts() throws IOException, TeamException, CoreException, InvocationTargetException, InterruptedException {
- // Create a test project
- IProject project = createProject("testUnmergableConflicts", new String[] { "delete.txt", "file1.txt", "file2.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
- setContentsAndEnsureModified(project.getFile("file1.txt"), "some text\nwith several lines\n");
- setContentsAndEnsureModified(project.getFile("file2.txt"), "some text\nwith several lines\n");
- commitProject(project);
-
- // Checkout and branch a copy
- CVSTag root = new CVSTag("root_branch1", CVSTag.VERSION);
- CVSTag branch = new CVSTag("branch1", CVSTag.BRANCH);
- IProject branchedProject = branchProject(project, root, branch);
-
- // modify the branch
- appendText(branchedProject.getFile("file1.txt"), "first line\n", true);
- appendText(branchedProject.getFile("file2.txt"), "last line\n", false);
- addResources(branchedProject, new String[] {"addition.txt"}, false);
- deleteResources(branchedProject, new String[] {"delete.txt", "folder1/a.txt"}, false);
- setContentsAndEnsureModified(branchedProject.getFile("folder1/b.txt"));
- commitProject(branchedProject);
-
- // modify local workspace
- appendText(project.getFile("file1.txt"), "conflict line\n", true);
- setContentsAndEnsureModified(project.getFile("folder1/a.txt"));
- deleteResources(project, new String[] {"delete.txt", "folder1/b.txt"}, false);
- addResources(project, new String[] {"addition.txt"}, false);
- appendText(project.getFile("file2.txt"), "conflict line\n", false);
-
- // create a merge subscriber
- CVSMergeSubscriber subscriber = createMergeSubscriber(project, root, branch);
-
- // check the sync states
- assertSyncEquals("testUnmergableConflicts", subscriber, project,
- new String[] { "delete.txt", "file1.txt", "file2.txt", "addition.txt", "folder1/a.txt", "folder1/b.txt"},
- true, new int[] {
- SyncInfo.IN_SYNC, /* TODO: is this OK */
- SyncInfo.CONFLICTING | SyncInfo.CHANGE,
- SyncInfo.CONFLICTING | SyncInfo.CHANGE,
- SyncInfo.CONFLICTING | SyncInfo.ADDITION,
- SyncInfo.CONFLICTING | SyncInfo.CHANGE,
- SyncInfo.CONFLICTING | SyncInfo.CHANGE});
-
- // TODO: Should actually perform the merge and check the results
- // However, this would require the changes to be redone
-
- // commit to modify HEAD
- commitProject(project);
-
- // check the sync states
- assertSyncEquals("testUnmergableConflicts", subscriber, project,
- new String[] { "delete.txt", "file1.txt", "file2.txt", "addition.txt", "folder1/a.txt", "folder1/b.txt"},
- true, new int[] {
- SyncInfo.IN_SYNC, /* TODO: is this OK */
- SyncInfo.CONFLICTING | SyncInfo.CHANGE,
- SyncInfo.CONFLICTING | SyncInfo.CHANGE,
- SyncInfo.CONFLICTING | SyncInfo.ADDITION,
- SyncInfo.CONFLICTING | SyncInfo.CHANGE,
- SyncInfo.CONFLICTING | SyncInfo.CHANGE});
-
- // Perform a merge
- mergeResources(subscriber, project, new String[] { "delete.txt", "file1.txt", "file2.txt", "addition.txt", "folder1/a.txt", "folder1/b.txt"}, true /* allow overwrite */);
-
- // check the sync states for the workspace subscriber
- assertSyncEquals("testUnmergableConflicts", getWorkspaceSubscriber(), project,
- new String[] { "file1.txt", "file2.txt", "addition.txt", "folder1/a.txt", "folder1/b.txt"},
- true, new int[] {
- SyncInfo.OUTGOING | SyncInfo.CHANGE,
- SyncInfo.OUTGOING | SyncInfo.CHANGE,
- SyncInfo.OUTGOING | SyncInfo.CHANGE,
- SyncInfo.OUTGOING | SyncInfo.DELETION,
- SyncInfo.OUTGOING | SyncInfo.ADDITION});
- assertDeleted("testUnmergableConflicts", project, new String[] { "delete.txt" });
-
- //TODO: How do we know if the right thing happend to the file contents?
- }
-
- public void testLocalScrub() throws IOException, TeamException, CoreException, InvocationTargetException, InterruptedException {
- // Create a test project
- IProject project = createProject("testLocalScrub", new String[] { "delete.txt", "file1.txt", "file2.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
- setContentsAndEnsureModified(project.getFile("file1.txt"), "some text\nwith several lines\n");
- setContentsAndEnsureModified(project.getFile("file2.txt"), "some text\nwith several lines\n");
- commitProject(project);
-
- // Checkout and branch a copy
- CVSTag root = new CVSTag("root_branch1", CVSTag.VERSION);
- CVSTag branch = new CVSTag("branch1", CVSTag.BRANCH);
- IProject branchedProject = branchProject(project, root, branch);
-
- // modify the branch
- appendText(branchedProject.getFile("file1.txt"), "first line\n", true);
- appendText(branchedProject.getFile("file2.txt"), "last line\n", false);
- addResources(branchedProject, new String[] {"addition.txt"}, false);
- deleteResources(branchedProject, new String[] {"delete.txt", "folder1/a.txt"}, false);
- setContentsAndEnsureModified(branchedProject.getFile("folder1/b.txt"));
- commitProject(branchedProject);
-
- // create a merge subscriber
- CVSMergeSubscriber subscriber = createMergeSubscriber(project, root, branch);
-
- // check the sync states
- assertSyncEquals("testLocalScrub", subscriber, project,
- new String[] { "delete.txt", "file1.txt", "file2.txt", "addition.txt", "folder1/a.txt", "folder1/b.txt"},
- true, new int[] {
- SyncInfo.INCOMING | SyncInfo.DELETION,
- SyncInfo.INCOMING | SyncInfo.CHANGE,
- SyncInfo.INCOMING | SyncInfo.CHANGE,
- SyncInfo.INCOMING | SyncInfo.ADDITION,
- SyncInfo.INCOMING | SyncInfo.DELETION,
- SyncInfo.INCOMING | SyncInfo.CHANGE});
-
- // scrub the project contents
- IResource[] members = project.members();
- for (int i = 0; i < members.length; i++) {
- IResource resource = members[i];
- if (resource.getName().equals(".project")) continue;
- resource.delete(false, DEFAULT_MONITOR);
- }
-
- // update
- mergeResources(subscriber, project,
- new String[] {
- "delete.txt",
- "file1.txt",
- "file2.txt",
- "addition.txt",
- "folder1/a.txt",
- "folder1/b.txt"},
- true /* allow overwrite */);
-
- // commit
- commitProject(project);
- }
-
- public void testCancel() throws CVSException, CoreException, IOException {
-
- // Create a test project
- IProject project = createProject("testMergableConflicts", new String[] { "file1.txt", "file2.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
- setContentsAndEnsureModified(project.getFile("file1.txt"), "some text\nwith several lines\n");
- setContentsAndEnsureModified(project.getFile("file2.txt"), "some text\nwith several lines\n");
- commitProject(project);
-
- // Checkout and branch a copy
- CVSTag root = new CVSTag("root_branch1", CVSTag.VERSION);
- CVSTag branch = new CVSTag("branch1", CVSTag.BRANCH);
- IProject branchedProject = branchProject(project, root, branch);
-
- // modify the branch
- appendText(branchedProject.getFile("file1.txt"), "first line\n", true);
- appendText(branchedProject.getFile("file2.txt"), "last line\n", false);
- commitProject(branchedProject);
-
- // modify HEAD
- appendText(project.getFile("file1.txt"), "last line\n", false);
- commitProject(project);
- // have one local change
- appendText(project.getFile("file2.txt"), "first line\n", true);
-
- // create a merge subscriber
- CVSMergeSubscriber subscriber = createMergeSubscriber(project, root, branch);
-
- // check the sync states
- assertSyncEquals("testMergableConflicts", subscriber, project,
- new String[] { "file1.txt", "file2.txt"},
- true, new int[] {
- SyncInfo.CONFLICTING | SyncInfo.CHANGE,
- SyncInfo.CONFLICTING | SyncInfo.CHANGE});
-
- // cancel the subscriber
- subscriber.cancel();
- }
-
- public void testDisconnectingProject() throws CoreException, IOException, TeamException, InterruptedException {
- // Create a test project (which commits it as well)
- // Create a test project
- IProject project = createProject("testDisconnect", new String[] { "file1.txt", "file2.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
- setContentsAndEnsureModified(project.getFile("file1.txt"), "some text\nwith several lines\n");
- setContentsAndEnsureModified(project.getFile("file2.txt"), "some text\nwith several lines\n");
- commitProject(project);
-
- // Checkout and branch a copy
- CVSTag root = new CVSTag("root_branch1", CVSTag.VERSION);
- CVSTag branch = new CVSTag("branch1", CVSTag.BRANCH);
- IProject branchedProject = branchProject(project, root, branch);
-
- // modify the branch
- appendText(branchedProject.getFile("file1.txt"), "first line\n", true);
- appendText(branchedProject.getFile("file2.txt"), "last line\n", false);
- commitProject(branchedProject);
-
- // create a merge subscriber
- CVSMergeSubscriber subscriber = createMergeSubscriber(project, root, branch);
-
- ICVSFolder cvsProject = CVSWorkspaceRoot.getCVSFolderFor(project);
- CVSTeamProvider provider = (CVSTeamProvider)RepositoryProvider.getProvider(project);
- cvsProject.unmanage(new NullProgressMonitor());
- assertProjectRemoved(subscriber, project);
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/CVSSyncSubscriberTest.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/CVSSyncSubscriberTest.java
deleted file mode 100644
index ca4fe3318..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/CVSSyncSubscriberTest.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.subscriber;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import junit.framework.AssertionFailedError;
-
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceVisitor;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.team.core.TeamException;
-import org.eclipse.team.core.subscribers.ITeamResourceChangeListener;
-import org.eclipse.team.core.subscribers.SyncInfo;
-import org.eclipse.team.core.subscribers.TeamDelta;
-import org.eclipse.team.core.subscribers.TeamProvider;
-import org.eclipse.team.core.subscribers.TeamSubscriber;
-import org.eclipse.team.core.sync.RemoteSyncElement;
-import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin;
-import org.eclipse.team.tests.ccvs.core.EclipseTest;
-
-/**
- * Provides test methods common to CVS sync subscribers
- */
-public abstract class CVSSyncSubscriberTest extends EclipseTest {
-
- private ITeamResourceChangeListener listener;
- private List accumulatedTeamDeltas = new ArrayList();
- private static SyncInfoSource source = null;
-
- public CVSSyncSubscriberTest() {
- super();
- }
-
- public CVSSyncSubscriberTest(String name) {
- super(name);
- }
-
- public static void setSyncSource(SyncInfoSource newSource) {
- source = newSource;
- }
-
- protected TeamSubscriber getWorkspaceSubscriber() throws TeamException {
- TeamSubscriber subscriber = TeamProvider.getSubscriber(CVSProviderPlugin.CVS_WORKSPACE_SUBSCRIBER_ID);
- if (subscriber == null) fail("The CVS sync subsciber is not registered");
- return subscriber;
- }
-
- public SyncInfoSource getSyncInfoSource() {
- assertNotNull(source);
- return source;
- }
-
- protected void refresh(TeamSubscriber subscriber, IResource resource) throws TeamException {
- getSyncInfoSource().refresh(subscriber, resource);
- }
-
- /*
- * Assert that the specified resources in the subscriber have the specified sync kind
- * Ignore conflict types if they are not specified in the assert statement
- */
- protected void assertSyncEquals(String message, TeamSubscriber subscriber, IContainer root, String[] resourcePaths, boolean refresh, int[] syncKinds) throws CoreException, TeamException {
- assertTrue(resourcePaths.length == syncKinds.length);
- if (refresh) refresh(subscriber, root);
- IResource[] resources = getResources(root, resourcePaths);
- for (int i=0;i<resources.length;i++) {
- assertSyncEquals(message, subscriber, resources[i], syncKinds[i]);
- }
-
- }
-
- protected void assertSyncEquals(String message, TeamSubscriber subscriber, IResource resource, int syncKind) throws TeamException {
- int conflictTypeMask = 0x0F; // ignore manual and auto merge sync types for now.
- SyncInfo info = getSyncInfo(subscriber, resource);
- int kind;
- int kindOther = syncKind & conflictTypeMask;
- if (info == null) {
- kind = SyncInfo.IN_SYNC;
- } else {
- kind = info.getKind() & conflictTypeMask;
- }
- assertTrue(message + ": improper sync state for " + resource + " expected " +
- RemoteSyncElement.kindToString(kindOther) + " but was " +
- RemoteSyncElement.kindToString(kind), kind == kindOther);
- }
-
- protected SyncInfo getSyncInfo(TeamSubscriber subscriber, IResource resource) throws TeamException {
- return getSyncInfoSource().getSyncInfo(subscriber, resource);
- }
-
- /**
- * @param changes
- * @param resources
- */
- protected void assertSyncChangesMatch(TeamDelta[] changes, IResource[] resources) {
- // First, ensure that all the resources appear in the delta
- for (int i = 0; i < resources.length; i++) {
- IResource resource = resources[i];
- boolean found = false;
- for (int j = 0; j < changes.length; j++) {
- TeamDelta delta = changes[j];
- if (delta.getResource().equals(resource)) {
- found = true;
- break;
- }
- }
- assertTrue("No change reported for " + resource, found);
- }
- // TODO: We'll worry about extra deltas later
-// // Next, ensure there are no extra deltas
-// List changedResources = new ArrayList(resources.length);
-// changedResources.addAll(Arrays.asList(resources));
-// for (int i = 0; i < changes.length; i++) {
-// TeamDelta change = changes[i];
-// IResource resource = change.getResource();
-// assertTrue("Unanticipated change reported for " + resource, changedResources.contains(resource));
-// }
- }
-
- /*
- * Assert that the named resources have no local resource or sync info
- */
- protected void assertDeleted(String message, IContainer root, String[] resourcePaths) throws CoreException, TeamException {
- IResource[] resources = getResources(root, resourcePaths);
- for (int i=0;i<resources.length;i++) {
- try {
- if (! resources[i].exists())
- break;
- } catch (AssertionFailedError e) {
- break;
- }
- assertTrue(message + ": resource " + resources[i] + " still exists in some form", false);
- }
- }
-
- public static class ResourceCondition {
- public boolean matches(IResource resource) throws CoreException, TeamException {
- return true;
- }
- }
-
- protected IResource[] collect(IResource[] resources, final ResourceCondition condition, int depth) throws CoreException, TeamException {
- final Set affected = new HashSet();
- for (int i = 0; i < resources.length; i++) {
- IResource resource = resources[i];
- if (resource.exists() || resource.isPhantom()) {
- resource.accept(new IResourceVisitor() {
- public boolean visit(IResource r) throws CoreException {
- try {
- if (condition.matches(r)) {
- affected.add(r);
- }
- } catch (TeamException e) {
- throw new CoreException(e.getStatus());
- }
- return true;
- }
- }, depth, true /* include phantoms */);
- } else {
- if (condition.matches(resource)) {
- affected.add(resource);
- }
- }
- }
- return (IResource[]) affected.toArray(new IResource[affected.size()]);
- }
-
- /**
- * @param resources
- * @param condition
- * @return
- */
- protected IResource[] collectAncestors(IResource[] resources, ResourceCondition condition) throws CoreException, TeamException {
- Set affected = new HashSet();
- for (int i = 0; i < resources.length; i++) {
- IResource resource = resources[i];
- while (resource.getType() != IResource.ROOT) {
- if (condition.matches(resource)) {
- affected.add(resource);
- } else {
- break;
- }
- resource = resource.getParent();
- }
- }
- return (IResource[]) affected.toArray(new IResource[affected.size()]);
- }
-
- protected TeamDelta[] deregisterSubscriberListener(TeamSubscriber subscriber) throws TeamException {
- subscriber.removeListener(listener);
- return (TeamDelta[]) accumulatedTeamDeltas.toArray(new TeamDelta[accumulatedTeamDeltas.size()]);
- }
-
- protected ITeamResourceChangeListener registerSubscriberListener(TeamSubscriber subscriber) throws TeamException {
- listener = new ITeamResourceChangeListener() {
- public void teamResourceChanged(TeamDelta[] deltas) {
- accumulatedTeamDeltas.addAll(Arrays.asList(deltas));
- }
- };
- accumulatedTeamDeltas.clear();
- subscriber.addListener(listener);
- return listener;
- }
-
- protected SyncInfo[] createSyncInfos(TeamSubscriber subscriber, IResource[] resources) throws TeamException {
- SyncInfo[] result = new SyncInfo[resources.length];
- for (int i = 0; i < resources.length; i++) {
- IResource resource = resources[i];
- result[i] = getSyncInfo(subscriber, resource);
- }
- return result;
- }
-
- protected void assertProjectRemoved(TeamSubscriber subscriber, IProject project) throws TeamException, InterruptedException {
- getSyncInfoSource().assertProjectRemoved(subscriber, project);
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/CVSWorkspaceSubscriberTest.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/CVSWorkspaceSubscriberTest.java
deleted file mode 100644
index ef51ce85e..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/CVSWorkspaceSubscriberTest.java
+++ /dev/null
@@ -1,1152 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.subscriber;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-
-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.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectDescription;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceVisitor;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.team.core.RepositoryProvider;
-import org.eclipse.team.core.TeamException;
-import org.eclipse.team.core.subscribers.SyncInfo;
-import org.eclipse.team.core.subscribers.TeamDelta;
-import org.eclipse.team.core.subscribers.TeamSubscriber;
-import org.eclipse.team.internal.ccvs.core.CVSException;
-import org.eclipse.team.internal.ccvs.core.CVSTag;
-import org.eclipse.team.internal.ccvs.core.CVSTeamProvider;
-import org.eclipse.team.internal.ccvs.core.ICVSFolder;
-import org.eclipse.team.internal.ccvs.core.ICVSResource;
-import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot;
-import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
-import org.eclipse.team.ui.sync.SyncInfoSet;
-
-/**
- * This class tests the CVSWorkspaceSubscriber
- */
-public class CVSWorkspaceSubscriberTest extends CVSSyncSubscriberTest {
-
- /**
- * Constructor for CVSProviderTest
- */
- public CVSWorkspaceSubscriberTest() {
- super();
- }
-
- /**
- * Constructor for CVSProviderTest
- */
- public CVSWorkspaceSubscriberTest(String name) {
- super(name);
- }
-
- public static Test suite() {
- String testName = System.getProperty("eclipse.cvs.testName");
- if (testName == null) {
- TestSuite suite = new TestSuite(CVSWorkspaceSubscriberTest.class);
- return new CVSTestSetup(suite);
- } else {
- return new CVSTestSetup(new CVSWorkspaceSubscriberTest(testName));
- }
- }
-
- protected TeamSubscriber getSubscriber() throws TeamException {
- return getWorkspaceSubscriber();
- }
-
- /* (non-Javadoc)
- *
- * The shareProject method is invoked when creating new projects.
- * @see org.eclipse.team.tests.ccvs.core.EclipseTest#shareProject(org.eclipse.core.resources.IProject)
- */
- protected void shareProject(final IProject project) throws TeamException, CoreException {
- mapNewProject(project);
- // Everything should be outgoing addition except he project
- assertSyncEquals(project.getName(), getSubscriber(), project, SyncInfo.IN_SYNC);
- assertAllSyncEquals(project.members(true), SyncInfo.OUTGOING | SyncInfo.ADDITION, IResource.DEPTH_INFINITE);
-
- commitNewProject(project);
- // Everything should be in-sync
- assertAllSyncEquals(project, SyncInfo.IN_SYNC, IResource.DEPTH_INFINITE);
- }
-
- protected void assertAllSyncEquals(final IResource rootResource, final int kind, int depth) throws CoreException {
- if (!rootResource.exists() && !rootResource.isPhantom()) {
- assertTrue(kind == SyncInfo.IN_SYNC);
- return;
- }
- rootResource.accept(new IResourceVisitor() {
- public boolean visit(IResource resource) throws CoreException {
- assertSyncEquals(rootResource.getName(), getSubscriber(), resource, kind);
- return true;
- }
- }, depth, true);
- }
-
- private void assertAllSyncEquals(IResource[] resources, int kind, int depth) throws CoreException {
- for (int i = 0; i < resources.length; i++) {
- IResource resource = resources[i];
- assertAllSyncEquals(resource, kind, depth);
- }
- }
-
- /* (non-Javadoc)
- *
- * Override to check that the proper sync state is achieved.
- *
- * @see org.eclipse.team.tests.ccvs.core.EclipseTest#setContentsAndEnsureModified(org.eclipse.core.resources.IFile)
- */
- protected void setContentsAndEnsureModified(IFile file) throws CoreException, TeamException {
- // The delta will indicate to any interested parties that the sync state of the
- // file has changed
- super.setContentsAndEnsureModified(file);
- assertSyncEquals("Setting contents: ", file, SyncInfo.OUTGOING | SyncInfo.CHANGE);
- }
-
- private void assertSyncEquals(String string, IProject project, String[] strings, boolean refresh, int[] kinds) throws CoreException, TeamException {
- assertSyncEquals(string, getSubscriber(), project, strings, refresh, kinds);
- }
-
- private void assertSyncEquals(String message, IResource resource, int syncKind) throws TeamException {
- assertSyncEquals(message, getSubscriber(), resource, syncKind);
-
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.tests.ccvs.core.EclipseTest#addResources(org.eclipse.core.resources.IResource[])
- */
- protected void addResources(IResource[] resources) throws TeamException, CVSException, CoreException {
- // first, get affected children
- IResource[] affectedChildren = collect(resources, new ResourceCondition() {
- public boolean matches(IResource resource) throws CoreException, TeamException {
- ICVSResource cvsResource = CVSWorkspaceRoot.getCVSResourceFor(resource);
- return (!cvsResource.isManaged() && !cvsResource.isIgnored());
- }
- }, IResource.DEPTH_INFINITE);
- // also get affected parents
- IResource[] affectedParents = collectAncestors(resources, new ResourceCondition() {
- public boolean matches(IResource resource) throws CoreException, TeamException {
- if (resource.getType() == IResource.PROJECT) return false;
- ICVSResource cvsResource = CVSWorkspaceRoot.getCVSResourceFor(resource);
- return (!cvsResource.isManaged() && !cvsResource.isIgnored());
- }
- });
- Set affected = new HashSet();
- affected.addAll(Arrays.asList(affectedChildren));
- affected.addAll(Arrays.asList(affectedParents));
-
- registerSubscriberListener();
- super.addResources(resources);
- TeamDelta[] changes = deregisterSubscriberListener();
- assertSyncChangesMatch(changes, (IResource[]) affected.toArray(new IResource[affected.size()]));
- for (int i = 0; i < resources.length; i++) {
- IResource resource = resources[i];
- if (resource.getType() == IResource.FILE) {
- assertSyncEquals("Add", resource, SyncInfo.OUTGOING | SyncInfo.ADDITION);
- } else {
- // TODO: a folder should be in sync but isn't handled properly
- assertSyncEquals("Add", resource, SyncInfo.IN_SYNC);
- }
-
- }
- }
-
- /**
- *
- */
- private void registerSubscriberListener() throws TeamException {
- registerSubscriberListener(getSubscriber());
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.tests.ccvs.core.EclipseTest#deleteResources(org.eclipse.core.resources.IResource[])
- */
- protected void deleteResources(IResource[] resources) throws TeamException, CoreException {
- IResource[] affected = collect(resources, new ResourceCondition(), IResource.DEPTH_INFINITE);
- registerSubscriberListener();
- super.deleteResources(resources);
- TeamDelta[] changes = deregisterSubscriberListener();
- assertSyncChangesMatch(changes, affected);
- for (int i = 0; i < resources.length; i++) {
- IResource resource = resources[i];
- // After deletion, folders should be in-sync while files should be outgoing deletions
- if (resource.getType() == IResource.FILE) {
- assertSyncEquals("Delete", resource, SyncInfo.OUTGOING | SyncInfo.DELETION);
- } else {
- assertSyncEquals("Delete", resource, SyncInfo.IN_SYNC);
- }
- }
- }
-
- /**
- * @return
- */
- private TeamDelta[] deregisterSubscriberListener() throws TeamException {
- return deregisterSubscriberListener(getSubscriber());
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.tests.ccvs.core.EclipseTest#commitResources(org.eclipse.core.resources.IResource[])
- */
- protected void commitResources(IResource[] resources, int depth) throws TeamException, CVSException, CoreException {
- IResource[] affected = collect(resources, new ResourceCondition() {
- public boolean matches(IResource resource) throws CoreException, TeamException {
- ICVSResource cvsResource = CVSWorkspaceRoot.getCVSResourceFor(resource);
- return (!cvsResource.isFolder() && cvsResource.isManaged() && cvsResource.isModified(DEFAULT_MONITOR));
- }
- }, IResource.DEPTH_INFINITE);
- registerSubscriberListener();
- super.commitResources(resources, depth);
- TeamDelta[] changes = deregisterSubscriberListener();
- assertSyncChangesMatch(changes, affected);
- for (int i = 0; i < resources.length; i++) {
- IResource resource = resources[i];
- if (resource.exists())
- assertSyncEquals("Commit", resource, SyncInfo.IN_SYNC);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.tests.ccvs.core.EclipseTest#unmanageResources(org.eclipse.core.resources.IResource[])
- */
- protected void unmanageResources(IResource[] resources) throws CoreException, TeamException {
- IResource[] affected = collect(resources, new ResourceCondition() {
- public boolean matches(IResource resource) throws CoreException, TeamException {
- ICVSResource cvsResource = CVSWorkspaceRoot.getCVSResourceFor(resource);
- return (cvsResource.isManaged());
- }
- }, IResource.DEPTH_INFINITE);
- registerSubscriberListener();
- super.unmanageResources(resources);
- TeamDelta[] changes = deregisterSubscriberListener();
- assertSyncChangesMatch(changes, affected);
- for (int i = 0; i < resources.length; i++) {
- IResource resource = resources[i];
- if (resource.exists())
- assertSyncEquals("Unmanage", resource, SyncInfo.IN_SYNC);
- }
- }
-
- /**
- * Update the resources from an existing container with the changes from the CVS repository.
- * This update uses the SubscriberUpdateAction to perform the update so that all special
- * cases should be handled properly
- */
- public IResource[] update(IContainer container, String[] hierarchy, boolean allowOverwrite) throws CoreException, TeamException, InvocationTargetException, InterruptedException {
- IResource[] resources = getResources(container, hierarchy);
- SyncInfo[] syncResources = createSyncInfos(resources);
- update(syncResources,allowOverwrite);
- return resources;
- }
-
- /**
- * @param resources
- * @return
- */
- private SyncInfo[] createSyncInfos(IResource[] resources) throws TeamException {
- return createSyncInfos(getSubscriber(), resources);
- }
-
- /**
- * Commit the resources from an existing container to the CVS repository.
- * This commit uses the SubscriberCommitAction to perform the commit so that all special
- * cases should be handled properly
- */
- public IResource[] commitResources(IContainer container, String[] hierarchy) throws CoreException, TeamException {
- IResource[] resources = getResources(container, hierarchy);
- SyncInfo[] syncResources = createSyncInfos(resources);
- commitResources(syncResources);
- return resources;
- }
-
- private void update(SyncInfo[] infos, final boolean allowOverwrite) throws TeamException {
- TestWorkspaceUpdateAction action = new TestWorkspaceUpdateAction(allowOverwrite);
- action.setSubscriber(getSubscriber());
- try {
- action.getRunnable(new SyncInfoSet(infos)).run(DEFAULT_MONITOR);
- } catch (InvocationTargetException e) {
- throw CVSException.wrapException(e);
- } catch (InterruptedException e) {
- fail("Operation was interupted");
- }
- }
-
- private void commitResources(SyncInfo[] syncResources) throws TeamException {
- TestCommitAction action = new TestCommitAction();
- action.setSubscriber(getSubscriber());
- try {
- action.getRunnable(new SyncInfoSet(syncResources)).run(DEFAULT_MONITOR);
- } catch (InvocationTargetException e) {
- throw CVSException.wrapException(e);
- } catch (InterruptedException e) {
- fail("Operation was interupted");
- }
- }
-
- /*
- * Perform a simple test that checks for the different types of incoming changes
- */
- public void testIncomingChanges() throws IOException, TeamException, CoreException, InvocationTargetException, InterruptedException {
- // Create a test project
- IProject project = createProject("testIncomingChanges", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
-
- // Checkout and modify a copy
- IProject copy = checkoutCopy(project, "-copy");
- setContentsAndEnsureModified(copy.getFile("folder1/a.txt"));
- addResources(copy, new String[] { "folder2/folder3/add.txt" }, false);
- deleteResources(copy, new String[] {"folder1/b.txt"}, false);
- commitProject(copy);
-
- // Get the sync tree for the project
- assertSyncEquals("testIncomingChanges", project,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt", "folder2/", "folder2/folder3/", "folder2/folder3/add.txt"},
- true, new int[] {
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.INCOMING | SyncInfo.CHANGE,
- SyncInfo.INCOMING | SyncInfo.DELETION,
- SyncInfo.INCOMING | SyncInfo.ADDITION,
- SyncInfo.INCOMING | SyncInfo.ADDITION,
- SyncInfo.INCOMING | SyncInfo.ADDITION});
-
- // Catch up to the incoming changes
- update(
- project,
- new String[] {
- "folder1/a.txt",
- "folder1/b.txt",
- "folder2/",
- "folder2/folder3/",
- "folder2/folder3/add.txt"},
- false /* allow overwrite */);
-
- // Verify that we are in sync (except for "folder1/b.txt", which was deleted)
- assertSyncEquals("testIncomingChanges", project,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder2/", "folder2/folder3/", "folder2/folder3/add.txt"},
- true, new int[] {
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC});
-
- // Ensure "folder1/b.txt" was deleted
- assertDeleted("testIncomingChanges", project, new String[] {"folder1/b.txt"});
-
- // Verify that the copy equals the original
- assertEquals(project, copy);
- }
-
- /*
- * Perform a simple test that checks for the different types of outgoing changes
- */
- public void testOutgoingChanges() throws TeamException, CoreException {
- // Create a test project (which commits it as well)
- IProject project = createProject("testOutgoingChanges", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
-
- // Make some modifications
- setContentsAndEnsureModified(project.getFile("folder1/a.txt"));
- addResources(project, new String[] { "folder2/folder3/add.txt" }, false);
- deleteResources(project, new String[] {"folder1/b.txt"}, false);
-
- // Get the sync tree for the project
- assertSyncEquals("testOutgoingChanges", project,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt", "folder2/", "folder2/folder3/", "folder2/folder3/add.txt"},
- true, new int[] {
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.OUTGOING | SyncInfo.CHANGE,
- SyncInfo.OUTGOING | SyncInfo.DELETION,
- SyncInfo.IN_SYNC, /* adding a folder creates it remotely */
- SyncInfo.IN_SYNC, /* adding a folder creates it remotely */
- SyncInfo.OUTGOING | SyncInfo.ADDITION});
-
- // Commit the changes
- commitResources(project, new String[] {"folder1/a.txt", "folder1/b.txt", "folder2/folder3/add.txt"});
-
- // Ensure we're in sync
- assertSyncEquals("testOutgoingChanges", project,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder2/", "folder2/folder3/", "folder2/folder3/add.txt"},
- true, new int[] {
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC});
-
- // Ensure deleted resource "folder1/b.txt" no longer exists
- assertDeleted("testOutgoingChanges", project, new String[] {"folder1/b.txt"});
- }
-
- /*
- * Perform a simple test that checks for the different types of outgoing changes
- */
- public void testOverrideOutgoingChanges() throws IOException, TeamException, CoreException, InvocationTargetException, InterruptedException {
- // Create a test project (which commits it as well)
- IProject project = createProject("testOverrideOutgoingChanges", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
- // Checkout a copy for later verification
- IProject original = checkoutCopy(project, "-copy");
-
- // Make some modifications
- setContentsAndEnsureModified(project.getFile("folder1/a.txt"));
- addResources(project, new String[] { "folder2/folder3/add.txt" }, false);
- deleteResources(project, new String[] {"folder1/b.txt"}, false);
-
- // Get the sync tree for the project
- assertSyncEquals("testOverrideOutgoingChanges", project,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt", "folder2/", "folder2/folder3/", "folder2/folder3/add.txt"},
- true, new int[] {
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.OUTGOING | SyncInfo.CHANGE,
- SyncInfo.OUTGOING | SyncInfo.DELETION,
- SyncInfo.IN_SYNC, /* adding a folder creates it remotely */
- SyncInfo.IN_SYNC, /* adding a folder creates it remotely */
- SyncInfo.OUTGOING | SyncInfo.ADDITION});
-
- // Override the changes
- update(
- project,
- new String[] {
- "folder1/a.txt",
- "folder1/b.txt",
- "folder2/folder3/add.txt"},
- true /* allow overwrite */);
-
- // Ensure added resources no longer exist
- assertDeleted("testOverrideOutgoingChanges", project, new String[] {"folder2/", "folder2/folder3/","folder2/folder3/add.txt"});
-
- // Ensure other resources are in sync
- assertSyncEquals("testOverrideOutgoingChanges", project,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt", "folder2/"},
- true, new int[] {
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC});
-
- // Verify that the original has reverted to its original contents
- assertEquals(project, original);
- }
-
- /*
- * Perform a test that checks for outgoing changes that are CVS questionables (no add or remove)
- */
- public void testOutgoingQuestionables() throws TeamException, CoreException {
- // Create a test project (which commits it as well)
- IProject project = createProject("testIncomingChanges", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
-
- // Create a new file without adding it to version control
- buildResources(project, new String[] {"folder2/folder3/add.txt"}, false);
-
- // Delete a file without an explicit cvs remove
- // NOTE: This will result in an implicit cvs remove
- IFile file = project.getFile("folder1/b.txt");
- file.delete(true, DEFAULT_MONITOR);
-
- // Get the sync tree for the project
- assertSyncEquals("testOutgoingQuestionables", project,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt", "folder2/", "folder2/folder3/", "folder2/folder3/add.txt"},
- true, new int[] {
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.OUTGOING | SyncInfo.DELETION,
- SyncInfo.OUTGOING | SyncInfo.ADDITION,
- SyncInfo.OUTGOING | SyncInfo.ADDITION,
- SyncInfo.OUTGOING | SyncInfo.ADDITION});
-
- commitResources(project, new String[] {"folder1/b.txt", "folder2/", "folder2/folder3/", "folder2/folder3/add.txt"});
-
- // Ensure we are in sync
- assertSyncEquals("testOutgoingQuestionables", project,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder2/", "folder2/folder3/", "folder2/folder3/add.txt"},
- true, new int[] {
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC});
-
- // Ensure "folder1/b.txt" was deleted
- assertDeleted("testOutgoingQuestionables", project, new String[] {"folder1/b.txt"});
- }
-
- /*
- * Test simple file conflicts
- */
- public void testFileConflict() throws IOException, TeamException, CoreException, InvocationTargetException, InterruptedException {
- String eol = System.getProperty("line.separator");
- if (eol == null) eol = "\n";
-
- // Create a test project (which commits it as well)
- IProject project = createProject("testFileConflict", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
-
- // Set the contents of file1.txt to ensure proper merging
- setContentsAndEnsureModified(project.getFile("file1.txt"), "Use a custom string" + eol + " to ensure proper merging");
- commitProject(project);
-
- // Checkout a copy and make some modifications
- IProject copy = checkoutCopy(project, "-copy");
- appendText(copy.getFile("file1.txt"), "prefix" + eol, true);
- setContentsAndEnsureModified(copy.getFile("folder1/a.txt"), "Use a custom string to avoid intermitant errors!");
- commitProject(copy);
-
- // Make the same modifications to the original (We need to test both M and C!!!)
- appendText(project.getFile("file1.txt"), eol + "postfix", false); // This will test merges (M)
- setContentsAndEnsureModified(project.getFile("folder1/a.txt"));
-
- // Get the sync tree for the project
- assertSyncEquals("testFileConflict", project,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt"},
- true, new int[] {
- SyncInfo.CONFLICTING | SyncInfo.CHANGE,
- SyncInfo.IN_SYNC,
- SyncInfo.CONFLICTING | SyncInfo.CHANGE });
-
- // Catch up to the file1.txt conflict using UPDATE
- update(
- project,
- new String[] {"file1.txt"},
- false /* allow overwrite */);
-
- assertSyncEquals("testFileConflict", project,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt"},
- true, new int[] {
- SyncInfo.OUTGOING | SyncInfo.CHANGE,
- SyncInfo.IN_SYNC,
- SyncInfo.CONFLICTING | SyncInfo.CHANGE });
-
- // Release the folder1/a.txt conflict by merging and then committing
- commitResources(project, new String[] {"file1.txt", "folder1/a.txt"});
-
- assertSyncEquals("testFileConflict", project,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt"},
- true, new int[] {
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC });
- }
-
- /*
- * Test conflicts involving additions
- */
- public void testAdditionConflicts() throws TeamException, CoreException, InvocationTargetException, InterruptedException {
-
- // CASE 1: The user adds (using CVS add) a remotely added file
- // (a) catchup is simply get?
- // (b) release must do a merge
- // CASE 2: The user adds (but not using cvs add) a remotely added file
- // (a) catchup is simply get?
- // (b) release must do a merge
- // CASE 3: The user adds a remotely added then deleted file
- // catchup is not applicable
- // release is normal
-
- // Create a test project (which commits it as well) and add an uncommited resource
- IProject project = createProject("testAdditionConflicts", new String[] { "file.txt"});
- addResources(project, new String[] { "add1a.txt", "add1b.txt" }, false);
- addResources(project, new String[] { "add3.txt" }, false);
- buildResources(project, new String[] {"add2a.txt", "add2b.txt"}, false);
-
- // Checkout a copy, add the same resource and commit
- IProject copy = checkoutCopy(project, "-copy");
- addResources(copy, new String[] { "add1a.txt", "add1b.txt", "add2a.txt", "add2b.txt", "add3.txt"}, true);
- deleteResources(copy, new String[] { "add3.txt"}, true);
-
- // Get the sync tree for the project
- assertSyncEquals("testAdditionConflicts", project,
- new String[] { "file.txt", "add1a.txt", "add1b.txt", "add2a.txt", "add2b.txt", "add3.txt"},
- true, new int[] {
- SyncInfo.IN_SYNC,
- SyncInfo.CONFLICTING | SyncInfo.ADDITION,
- SyncInfo.CONFLICTING | SyncInfo.ADDITION,
- SyncInfo.CONFLICTING | SyncInfo.ADDITION,
- SyncInfo.CONFLICTING | SyncInfo.ADDITION,
- SyncInfo.OUTGOING | SyncInfo.ADDITION });
-
- // Commit conflicting add1b.txt and add2b.txt and outgoing add3.txt
- commitResources(project, new String[]{"add1b.txt", "add2b.txt", "add3.txt"});
-
- assertSyncEquals("testAdditionConflicts", project,
- new String[] { "file.txt", "add1b.txt", "add2b.txt", "add3.txt"},
- true, new int[] {
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC });
-
- // Catch-up to conflicting cases using UPDATE
- update(
- project,
- new String[] {"add1a.txt", "add2a.txt"},
- true /* allow overwrite */);
-
-
- assertSyncEquals("testAdditionConflicts", project,
- new String[] { "add1a.txt", "add2a.txt"},
- true, new int[] {
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC });
- }
-
- /*
- * Test conflicts involving deletions
- */
- public void testDeletionConflicts() throws TeamException, CoreException, InvocationTargetException, InterruptedException {
-
- // CASE 1: The user deletes a remotely modified file
- // (a) catchup must do an update
- // (b) release must do a merge
- // CASE 2: The user deletes (and removes) a remotely modified file
- // (a) catchup must do an unmanage and update
- // (b) release must do a merge
- // CASE 3: The user modified a remotely deleted file
- // (a) catchup must do an unmanage and local delete
- // (b) release must do a merge
- // CASE 4: The user deletes a remotely deleted file
- // (a) catchup can update (or unmanage?)
- // (b) release must unmanage
- // CASE 5: The user deletes (and removes) a remotely deleted file
- // (a) catchup can update (or unmanage?)
- // (b) release must unmanage
-
- // Perform the test case for case A first
-
- // Create a test project (which commits it as well) and delete the resource without committing
- IProject project = createProject("testDeletionConflictsA", new String[] { "delete1.txt", "delete2.txt", "delete3.txt", "delete4.txt", "delete5.txt"});
- IFile file = project.getFile("delete1.txt"); // WARNING: This does a "cvs remove"!!!
- file.delete(false, DEFAULT_MONITOR);
- deleteResources(project, new String[] {"delete2.txt"}, false);
- setContentsAndEnsureModified(project.getFile("delete3.txt"));
- file = project.getFile("delete4.txt");
- file.delete(false, DEFAULT_MONITOR);
- deleteResources(project, new String[] {"delete5.txt"}, false);
-
- // Checkout a copy and commit the deletion
- IProject copy = checkoutCopy(project, "-copy");
- setContentsAndEnsureModified(copy.getFile("delete1.txt"));
- setContentsAndEnsureModified(copy.getFile("delete2.txt"));
- deleteResources(copy, new String[] {"delete3.txt", "delete4.txt", "delete5.txt"}, false);
- commitProject(copy);
-
- // Get the sync tree for the project
- assertSyncEquals("testDeletionConflictsA", project,
- new String[] { "delete1.txt", "delete2.txt", "delete3.txt", "delete4.txt", "delete5.txt"},
- true, new int[] {
- SyncInfo.CONFLICTING | SyncInfo.CHANGE,
- SyncInfo.CONFLICTING | SyncInfo.CHANGE,
- SyncInfo.CONFLICTING | SyncInfo.CHANGE,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC });
-
- // Catch up to remote changes.
- update(
- project,
- new String[] {
- "delete1.txt",
- "delete2.txt",
- "delete3.txt",
- "delete4.txt",
- "delete5.txt"},
- true /* allow overwrite */);
-
- assertSyncEquals("testDeletionConflictsA", project,
- new String[] { "delete1.txt", "delete2.txt"},
- true, new int[] {
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC });
-
- assertDeleted("testDeletionConflictsA", project, new String[] {"delete3.txt", "delete4.txt", "delete5.txt"});
-
- // Now redo the test case for case B
-
- // Create a test project (which commits it as well) and delete the resource without committing
- project = createProject("testDeletionConflictsB", new String[] { "delete1.txt", "delete2.txt", "delete3.txt", "delete4.txt", "delete5.txt"});
- file = project.getFile("delete1.txt");
- file.delete(false, DEFAULT_MONITOR);
- deleteResources(project, new String[] {"delete2.txt"}, false);
- setContentsAndEnsureModified(project.getFile("delete3.txt"));
- file = project.getFile("delete4.txt");
- file.delete(false, DEFAULT_MONITOR);
- deleteResources(project, new String[] {"delete5.txt"}, false);
-
- // Checkout a copy and commit the deletion
- copy = checkoutCopy(project, "-copy");
- setContentsAndEnsureModified(copy.getFile("delete1.txt"));
- setContentsAndEnsureModified(copy.getFile("delete2.txt"));
- deleteResources(copy, new String[] {"delete3.txt", "delete4.txt", "delete5.txt"}, false);
- commitProject(copy);
-
- // Get the sync tree for the project
- assertSyncEquals("testDeletionConflictsB", project,
- new String[] { "delete1.txt", "delete2.txt", "delete3.txt", "delete4.txt", "delete5.txt"},
- true, new int[] {
- SyncInfo.CONFLICTING | SyncInfo.CHANGE,
- SyncInfo.CONFLICTING | SyncInfo.CHANGE,
- SyncInfo.CONFLICTING | SyncInfo.CHANGE,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC });
-
- // Release the resources
- commitResources(project, new String[] { "delete1.txt", "delete2.txt", "delete3.txt", "delete4.txt", "delete5.txt"});
-
- assertSyncEquals("testDeletionConflictsB", project,
- new String[] { "delete3.txt"},
- true, new int[] {
- SyncInfo.IN_SYNC });
-
- assertDeleted("testDeletionConflictsB", project, new String[] {"delete1.txt", "delete2.txt", "delete4.txt", "delete5.txt"});
- }
-
- /*
- * Test the creation and sync of an empty local project that has remote contents
- */
- public void testSyncOnEmptyProject() throws TeamException {
- }
-
- /*
- * Test syncing on a folder that has been deleted from the server
- */
- public void testSyncOnDeletedFolder() throws TeamException {
- }
-
- /*
- * Test syncing on a folder that is empty on the server and has been pruned, then added locally
- */
- public void testSyncOnPrunedFolder() throws TeamException {
- }
-
- /*
- * Test sync involving pruned directories
- */
- public void testSyncWithPruning() throws TeamException {
- }
-
- /*
- * Test a conflict with an incomming foler addition and an unmanaqged lcoal folder
- */
- public void testFolderConflict() throws TeamException, CoreException, InvocationTargetException, InterruptedException {
-
- // Create a test project (which commits it as well) and delete the resource without committing
- IProject project = createProject("testFolderConflict", new String[] { "file.txt"});
-
- // Checkout a copy and add some folders
- IProject copy = checkoutCopy(project, "-copy");
- addResources(copy, new String[] {"folder1/file.txt", "folder2/file.txt"}, true);
-
- // Add a folder to the original project (but not using cvs)
- IResource[] resources = buildResources(project, new String[] {"folder1/"});
- ((IFolder)resources[0]).create(false, true, DEFAULT_MONITOR);
-
- assertSyncEquals("testFolderConflict", project,
- new String[] { "file.txt", "folder1/", "folder1/file.txt", "folder2/", "folder2/file.txt"},
- true, new int[] {
- SyncInfo.IN_SYNC,
- SyncInfo.CONFLICTING | SyncInfo.ADDITION,
- SyncInfo.INCOMING | SyncInfo.ADDITION,
- SyncInfo.INCOMING | SyncInfo.ADDITION,
- SyncInfo.INCOMING | SyncInfo.ADDITION});
-
- update(
- project,
- new String[] {"folder1/"},
- false /* allow overwrite */);
-
- assertSyncEquals("testFolderConflict", project,
- new String[] { "file.txt", "folder1/", "folder1/file.txt", "folder2/", "folder2/file.txt"},
- true, new int[] {
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.INCOMING | SyncInfo.ADDITION,
- SyncInfo.INCOMING | SyncInfo.ADDITION,
- SyncInfo.INCOMING | SyncInfo.ADDITION});
- }
-
- /*
- * Test that a deleted file can still be deleted through the team provider
- */
- public void testOutgoingDeletion() throws TeamException, CoreException {
-
- // Create a test project (which commits it as well)
- IProject project = createProject("testOutgoingDeletion", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
-
- // Delete a file
- IFile file = project.getFile("folder1/b.txt");
- file.delete(true, DEFAULT_MONITOR); // WARNING: As of 2002/03/05, this is equivalent to a cvs remove
-
- // Get the sync tree for the project
- assertSyncEquals("testOutgoingDeletion", project,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"},
- true, new int[] {
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.OUTGOING | SyncInfo.DELETION});
-
- // Commit the deletion
- commitResources(project , new String[] {"folder1/b.txt"});
-
- // Get the sync tree again for the project and ensure others aren't effected
- assertSyncEquals("testOutgoingDeletion", project,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt"},
- true, new int[] {
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC});
-
- // Assert that deletion no longer appears in remote tree
- assertDeleted("testOutgoingDeletion", project, new String[] {"folder1/b.txt"});
- }
-
- /*
- * Test catching up to an incoming addition
- */
- public void testIncomingAddition() throws TeamException, CoreException, InvocationTargetException, InterruptedException {
- // Create a test project
- IProject project = createProject("testIncomingAddition", new String[] { "file1.txt", "folder1/", "folder1/a.txt"});
-
- // Checkout and modify a copy
- IProject copy = checkoutCopy(project, "-copy");
- addResources(copy, new String[] { "folder1/add.txt" }, true);
-
- // Get the sync tree for the project
- assertSyncEquals("testIncomingAddition", project,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/add.txt"},
- true, new int[] {
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.INCOMING | SyncInfo.ADDITION});
-
- // Catch up to the addition by updating
- update(
- project,
- new String[] {"folder1/add.txt"},
- false /* allow overwrite */);
-
- // Get the sync tree again for the project and ensure the added resource is in sync
- assertSyncEquals("testIncomingAddition", project,
- new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/add.txt"},
- true, new int[] {
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC});
- }
-
- /*
- * Test changes using a granularity of contents
- */
-// public void testGranularityContents() throws TeamException, CoreException, IOException {
-// // Create a test project (which commits it as well)
-// IProject project = createProject("testGranularityContents", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
-//
-// // Checkout a copy and make some modifications
-// IProject copy = checkoutCopy(project, "-copy");
-// appendText(copy.getFile("file1.txt"), "same text", false);
-// setContentsAndEnsureModified(copy.getFile("folder1/a.txt"));
-// commitProject(copy);
-//
-// // Make the same modifications to the original
-// appendText(project.getFile("file1.txt"), "same text", false);
-// setContentsAndEnsureModified(project.getFile("folder1/a.txt"), "unique text");
-//
-// // Get the sync tree for the project
-// String oldId = getSubscriber().getCurrentComparisonCriteria().getId();
-// // TODO: There should be a better way to handle the selection of comparison criteria
-// getSubscriber().setCurrentComparisonCriteria("org.eclipse.team.comparisoncriteria.content");
-// assertSyncEquals("testGranularityContents", project,
-// new String[] { "file1.txt", "folder1/", "folder1/a.txt"},
-// true, new int[] {
-// SyncInfo.IN_SYNC,
-// SyncInfo.IN_SYNC,
-// SyncInfo.CONFLICTING | SyncInfo.CHANGE });
-// getSubscriber().setCurrentComparisonCriteria(oldId);
-//
-// }
-
-// public void testSimpleMerge() throws TeamException, CoreException, IOException {
-// // Create a test project (which commits it as well)
-// IProject project = createProject("testSimpleMerge", new String[] { "file1.txt", "file2.txt", "file3.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
-//
-// // Checkout and modify a copy
-// IProject copy = checkoutCopy(project, "-copy");
-// copy.refreshLocal(IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
-//
-// tagProject(project, new CVSTag("v1", CVSTag.VERSION));
-// tagProject(project, new CVSTag("branch1", CVSTag.BRANCH));
-//
-// getProvider(copy).update(new IResource[] {copy}, Command.NO_LOCAL_OPTIONS,
-// new CVSTag("branch1", CVSTag.BRANCH), true /*createBackups*/, DEFAULT_MONITOR);
-//
-// // make changes on the branch
-// addResources(copy, new String[] {"addition.txt", "folderAddition/", "folderAddition/new.txt"}, true);
-// deleteResources(copy, new String[] {"folder1/b.txt"}, true);
-// changeResources(copy, new String[] {"file1.txt", "file2.txt"}, true);
-//
-// // make change to workspace working on HEAD
-// changeResources(project, new String[] {"file2.txt"}, false);
-// changeResources(project, new String[] {"file3.txt"}, true);
-//
-// IRemoteResource base = CVSWorkspaceRoot.getRemoteTree(project, new CVSTag("v1", CVSTag.VERSION), DEFAULT_MONITOR);
-// IRemoteResource remote = CVSWorkspaceRoot.getRemoteTree(project, new CVSTag("branch1", CVSTag.BRANCH), DEFAULT_MONITOR);
-// SyncInfo tree = new CVSRemoteSyncElement(true /*three way*/, project, base, remote);
-//
-// // watch for empty directories and the prune option!!!
-// assertSyncEquals("testSimpleMerge sync check", tree,
-// new String[] { "addition.txt", "folderAddition/", "folderAddition/new.txt",
-// "folder1/b.txt", "file1.txt", "file2.txt", "file3.txt"},
-// new int[] { SyncInfo.INCOMING | SyncInfo.ADDITION,
-// SyncInfo.INCOMING | SyncInfo.ADDITION,
-// SyncInfo.INCOMING | SyncInfo.ADDITION,
-// SyncInfo.INCOMING | SyncInfo.DELETION,
-// SyncInfo.INCOMING | SyncInfo.CHANGE,
-// SyncInfo.CONFLICTING | SyncInfo.CHANGE,
-// SyncInfo.OUTGOING | SyncInfo.CHANGE });
-// }
-//
-// public void testSyncOnBranch() throws TeamException, CoreException, IOException {
-//
-// // Create a test project and a branch
-// IProject project = createProject("testSyncOnBranch", new String[] { "file1.txt", "file2.txt", "file3.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
-// CVSTag branch = new CVSTag("branch1", CVSTag.BRANCH);
-// tagProject(project, branch);
-// getProvider(project).update(new IResource[] {project}, Command.NO_LOCAL_OPTIONS, branch, true /*createBackups*/, DEFAULT_MONITOR);
-//
-// // Checkout and modify a copy
-// IProject copy = checkoutCopy(project, branch);
-// addResources(copy, new String[] {"addition.txt", "folderAddition/", "folderAddition/new.txt"}, true);
-// deleteResources(copy, new String[] {"folder1/b.txt"}, true);
-// changeResources(copy, new String[] {"file1.txt", "file2.txt"}, true);
-//
-// // Sync on the original and assert the result equals the copy
-// SyncInfo tree = CVSWorkspaceRoot.getRemoteSyncTree(project, null, DEFAULT_MONITOR);
-// assertEquals(Path.EMPTY, (ICVSResource)tree.getRemote(), CVSWorkspaceRoot.getCVSResourceFor(copy), false, false);
-// }
-
- public void testRenameProject() throws TeamException, CoreException, IOException {
- String[] resourceNames = new String[] { "changed.txt", "folder1/", "folder1/a.txt" };
- int[] inSync = new int[] {SyncInfo.IN_SYNC, SyncInfo.IN_SYNC, SyncInfo.IN_SYNC};
- IProject project = createProject("testRenameProject", new String[] { "changed.txt", "folder1/", "folder1/a.txt" });
-
- assertSyncEquals("sync should be in sync", project, resourceNames, true, inSync);
- IProjectDescription desc = project.getDescription();
- String newName = project.getName() + "_renamed";
- desc.setName(newName);
- project.move(desc, false, null);
- project = ResourcesPlugin.getWorkspace().getRoot().getProject(newName);
- assertTrue(project.exists());
- assertSyncEquals("sync should be in sync", project, resourceNames, true, inSync);
- }
-
- public void testDeleteProject() throws CoreException, IOException, TeamException, InterruptedException {
- String[] resourceNames = new String[] { "deleted.txt", "file1.txt", "folder1/", "folder1/a.txt" };
- int[] inSync = new int[] {SyncInfo.IN_SYNC, SyncInfo.IN_SYNC, SyncInfo.IN_SYNC, SyncInfo.IN_SYNC};
- IProject project = createProject("testDeleteProject", resourceNames);
- assertSyncEquals("sync should be in sync", project, resourceNames, true, inSync);
-
- // Make some modifications
- setContentsAndEnsureModified(project.getFile("folder1/a.txt"));
- addResources(project, new String[] { "folder2/folder3/add.txt" }, false);
- deleteResources(project, new String[] {"deleted.txt"}, false);
-
- // Get the sync tree for the project
- assertSyncEquals("testOutgoingChanges", project,
- new String[] { "file1.txt", "folder1/", "deleted.txt", "folder1/a.txt", "folder2/", "folder2/folder3/", "folder2/folder3/add.txt"},
- true, new int[] {
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.OUTGOING | SyncInfo.DELETION,
- SyncInfo.OUTGOING | SyncInfo.CHANGE,
- SyncInfo.IN_SYNC, /* adding a folder creates it remotely */
- SyncInfo.IN_SYNC, /* adding a folder creates it remotely */
- SyncInfo.OUTGOING | SyncInfo.ADDITION});
-
- project.delete(true, false, DEFAULT_MONITOR);
-
- assertProjectRemoved(getWorkspaceSubscriber(), project);
- }
-
- public void testFolderDeletion() throws TeamException, CoreException {
-
- IProject project = createProject("testFolderDeletion", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt", "folder1/folder2/file.txt"});
-
- // Delete a folder and ensure that the file is managed but doesn't exist
- // (Special behavior is provider by the CVS move/delete hook but this is not part of CVS core)
- project.getFolder("folder1").delete(false, false, null);
- ICVSFolder folder = CVSWorkspaceRoot.getCVSFolderFor(project.getFolder("folder1"));
- assertTrue("Deleted folder not in proper state", ! folder.exists() && folder.isManaged() && folder.isCVSFolder());
-
- // The files should show up as outgoing deletions
- assertSyncEquals("testFolderDeletion sync check", project,
- new String[] { "folder1/", "folder1/a.txt", "folder1/folder2/", "folder1/folder2/file.txt"},
- true, new int[] { SyncInfo.IN_SYNC,
- SyncInfo.OUTGOING | SyncInfo.DELETION,
- SyncInfo.IN_SYNC,
- SyncInfo.OUTGOING | SyncInfo.DELETION});
-
- // commit folder1/a.txt
- commitResources(project, new String[] { "folder1/a.txt" });
-
- // Resync and verify that above file is gone and others remain the same
- assertSyncEquals("testFolderDeletion sync check", project,
- new String[] { "folder1/", "folder1/folder2/", "folder1/folder2/file.txt"},
- true, new int[] { SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC,
- SyncInfo.OUTGOING | SyncInfo.DELETION});
- assertDeleted("testFolderDeletion", project, new String[] {"folder1/a.txt"});
-
- // Commit folder1/folder2/file.txt
- commitResources(project, new String[] { "folder1/folder2/file.txt" });
-
- // Resync and verify that all are deleted
- assertDeleted("testFolderDeletion", project, new String[] {"folder1/", "folder1/folder2/", "folder1/folder2/file.txt"});
- }
- /**
- * There is special handling required when building a sync tree for a tag when there are undiscovered folders
- * that only contain other folders.
- */
- public void testTagRetrievalForFolderWithNoFile() throws TeamException, CoreException {
- IProject project = createProject("testTagRetrievalForFolderWithNoFile", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt"});
- // Checkout, branch and modify a copy
- IProject copy = checkoutCopy(project, "-copy");
- CVSTag version = new CVSTag("v1", CVSTag.BRANCH);
- CVSTag branch = new CVSTag("branch1", CVSTag.BRANCH);
- getProvider(copy).makeBranch(new IResource[] {copy}, version, branch, true, DEFAULT_MONITOR);
- addResources(copy, new String[] {"folder2/folder3/a.txt"}, true);
-
- // Fetch the tree corresponding to the branch using the original as the base.
- // XXX This will fail for CVSNT with directory pruning on
- refresh(getSubscriber(), project);
- }
-
- public void testIgnoredResource() throws CoreException, TeamException {
- // Create a test project (which commits it as well)
- IProject project = createProject("testIgnoredResource", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
-
- // Create a new file without adding it to version control
- buildResources(project, new String[] {"ignored.txt"}, false);
-
- // Get the sync tree for the project
- assertSyncEquals("testIgnoredResource", project,
- new String[] { "ignored.txt"},
- true, new int[] {SyncInfo.OUTGOING | SyncInfo.ADDITION});
-
- IFile ignores = project.getFile(".cvsignore");
- ignores.create(new ByteArrayInputStream("ignored.txt".getBytes()), false, DEFAULT_MONITOR);
- addResources(new IResource[] {ignores});
-
- assertSyncEquals("testIgnoredResource", project,
- new String[] { "ignored.txt", ".cvsignore"},
- true, new int[] {
- SyncInfo.IN_SYNC,
- SyncInfo.OUTGOING | SyncInfo.ADDITION});
- }
-
- public void testRenameUnshared() throws CoreException, TeamException {
- // Create a test project (which commits it as well)
- IProject project = createProject("testRenameUnshared", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
-
- // Create a new file without adding it to version control
- buildResources(project, new String[] {"oldName.txt"}, false);
-
- // Get the sync tree for the project
- assertSyncEquals("testRenameUnshared", project,
- new String[] { "oldName.txt" },
- true, new int[] {SyncInfo.OUTGOING | SyncInfo.ADDITION});
-
- IFile rename = project.getFile("oldName.txt");
- rename.move(new Path("newName.txt"), false, false, DEFAULT_MONITOR);
-
- assertDeleted("testRenameUnshared", project, new String[] {"oldName.txt"});
-
- assertSyncEquals("testRenameUnshared", project,
- new String[] { "newName.txt"},
- true, new int[] {
- SyncInfo.OUTGOING | SyncInfo.ADDITION});
- }
-
- public void testOutgoingEmptyFolder() throws CoreException, TeamException {
- // Create a test project (which commits it as well)
- IProject project = createProject("testOutgoingEmptyFolder", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
-
- // Create an empty folder without adding it to version control
- buildResources(project, new String[] {"folder2/"}, false);
-
- assertSyncEquals("testOutgoingEmptyFolder", project,
- new String[] { "folder2/" },
- true, new int[] {
- SyncInfo.OUTGOING | SyncInfo.ADDITION});
-
- commitResources(project, new String[] { "folder2" });
-
- assertSyncEquals("testOutgoingEmptyFolder", project,
- new String[] { "folder2/" },
- true, new int[] {
- SyncInfo.IN_SYNC});
-
- // Ensure that the folder still exists (i.e. wasn't pruned)
- assertTrue("Folder should still exist", project.getFolder("folder2").exists());
- }
-
- public void testDisconnectingProject() throws CoreException, TeamException, InterruptedException {
- // Create a test project (which commits it as well)
- IProject project = createProject("testDisconnect", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
- ICVSFolder cvsProject = CVSWorkspaceRoot.getCVSFolderFor(project);
- CVSTeamProvider provider = (CVSTeamProvider)RepositoryProvider.getProvider(project);
- cvsProject.unmanage(new NullProgressMonitor());
- assertProjectRemoved(getWorkspaceSubscriber(), project);
- }
-
- /*
- * @see https://bugs.eclipse.org/bugs/show_bug.cgi?id=40221
- */
- public void testConflictingFolderDeletion() throws TeamException, CoreException {
- // Create a test project (which commits it as well)
- IProject project = createProject("testConflictingFolderDeletion", new String[] { "file1.txt", "folder1/", "folder1/a.txt", "folder1/b.txt"});
-
- // Checkout a copy
- IProject copy = checkoutCopy(project, "-copy");
-
- // Delete a folder in both projects and checkin one of the deletions
- deleteResources(project, new String[] { "folder1/" }, false /* checkin */);
- deleteResources(copy, new String[] { "folder1/" }, true /* checkin */);
-
- // The files should show up as outgoing deletions
- assertSyncEquals("testConflictingFolderDeletion sync check", project,
- new String[] { "folder1/", "folder1/a.txt", "folder1/b.txt"},
- true, new int[] {
- SyncInfo.IN_SYNC,
- SyncInfo.IN_SYNC, /* conflicting deletions are handled automatically */
- SyncInfo.IN_SYNC});
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/SyncInfoSource.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/SyncInfoSource.java
deleted file mode 100644
index cf4a2ac64..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/SyncInfoSource.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.subscriber;
-
-import junit.framework.AssertionFailedError;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.team.core.TeamException;
-import org.eclipse.team.core.subscribers.SyncInfo;
-import org.eclipse.team.core.subscribers.TeamSubscriber;
-
-/**
- * This class acts as the source for the sync info used by the subscriber tests.
- * The purpose is to allow the sync info to be obtained directly from the subscriber
- * or through the sync set visible in the sync view.
- */
-public class SyncInfoSource {
-
- protected static IProgressMonitor DEFAULT_MONITOR = new NullProgressMonitor();
-
- /**
- * Return the sync info for the given subscriber for the given resource.
- */
- public SyncInfo getSyncInfo(TeamSubscriber subscriber, IResource resource) throws TeamException {
- return subscriber.getSyncInfo(resource, DEFAULT_MONITOR = new NullProgressMonitor());
- }
-
- /**
- * Refresh the subscriber for the given resource
- */
- public void refresh(TeamSubscriber subscriber, IResource resource) throws TeamException {
- subscriber.refresh(new IResource[] { resource}, IResource.DEPTH_INFINITE, DEFAULT_MONITOR);
- }
-
- protected void assertProjectRemoved(TeamSubscriber subscriber, IProject project) throws TeamException {
- IResource[] roots = subscriber.roots();
- for (int i = 0; i < roots.length; i++) {
- IResource resource = roots[i];
- if (resource.equals(project)) {
- throw new AssertionFailedError();
- }
- }
- }
-
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/SyncSetTests.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/SyncSetTests.java
deleted file mode 100644
index dfcc4360d..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/SyncSetTests.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.subscriber;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.IJobChangeEvent;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.core.runtime.jobs.JobChangeAdapter;
-import org.eclipse.team.core.TeamException;
-import org.eclipse.team.core.subscribers.SyncInfo;
-import org.eclipse.team.internal.ui.sync.sets.SyncSet;
-import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
-
-
-public class SyncSetTests extends CVSSyncSubscriberTest {
-
- public SyncSetTests() {
- super();
- }
-
- public SyncSetTests(String name) {
- super(name);
- }
-
- public static Test suite() {
- String testName = System.getProperty("eclipse.cvs.testName");
- if (testName == null) {
- TestSuite suite = new TestSuite(SyncSetTests.class);
- return new CVSTestSetup(suite);
- } else {
- return new CVSTestSetup(new SyncSetTests(testName));
- }
- }
-
- class TestSyncInfo extends SyncInfo {
- protected int calculateKind(IProgressMonitor progress) throws TeamException {
- return 0;
- }
- public TestSyncInfo() throws TeamException {
- super(ResourcesPlugin.getWorkspace().getRoot(), null, null, null, null);
- }
- }
-
- /**
- * Test that ensures that SyncSet can be modified concurrently. This is a quick test
- * that doesn't validate the actual contents of the sync set.
- */
- public void testConcurrentAccessToSyncSet() throws Throwable {
- final SyncSet set = new SyncSet();
- final boolean[] done = {false};
- final IStatus[] error = {null};
-
- for(int numJobs = 0; numJobs < 10; numJobs++) {
- Job job = new Job("SyncSetTests" + numJobs) {
- public IStatus run(IProgressMonitor monitor) {
- while(! done[0]) {
- try {
- set.add(new TestSyncInfo());
- set.getOutOfSyncDescendants(ResourcesPlugin.getWorkspace().getRoot());
- set.getSyncInfo(ResourcesPlugin.getWorkspace().getRoot());
- set.allMembers();
- } catch (Exception e) {
- error[0] = new Status(IStatus.ERROR, "this", 1, "", e);
- return error[0];
- }
- }
- return Status.OK_STATUS;
- }
- };
-
- job.addJobChangeListener(new JobChangeAdapter() {
- public void done(IJobChangeEvent event) {
- if(event.getResult() != Status.OK_STATUS) {
- error[0] = event.getResult();
- }
- }
- });
-
- job.schedule();
- }
-
- for(int i = 0; i < 10000; i++) {
- set.add(new TestSyncInfo());
- set.getOutOfSyncDescendants(ResourcesPlugin.getWorkspace().getRoot());
- set.getSyncInfo(ResourcesPlugin.getWorkspace().getRoot());
- set.allMembers();
- set.members(ResourcesPlugin.getWorkspace().getRoot());
- set.reset();
- }
- done[0] = true;
- if(error[0] != null) {
- throw error[0].getException();
- }
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/TestCommitAction.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/TestCommitAction.java
deleted file mode 100644
index e00269322..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/TestCommitAction.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.subscriber;
-
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.team.internal.ccvs.ui.subscriber.OverrideAndCommitAction;
-import org.eclipse.team.ui.sync.SyncInfoSet;
-
-class TestCommitAction extends OverrideAndCommitAction {
-
- public IRunnableWithProgress getRunnable(SyncInfoSet syncSet) {
- return super.getRunnable(syncSet);
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/TestMergeUpdateAction.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/TestMergeUpdateAction.java
deleted file mode 100644
index fab86de1e..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/TestMergeUpdateAction.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.subscriber;
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.team.internal.ccvs.ui.subscriber.MergeUpdateAction;
-import org.eclipse.team.tests.ccvs.core.EclipseTest;
-import org.eclipse.team.ui.sync.SyncInfoSet;
-
-
-class TestMergeUpdateAction extends MergeUpdateAction {
- boolean allowOverwrite = false;
-
- public TestMergeUpdateAction(boolean allowOverwrite) {
- this.allowOverwrite = allowOverwrite;
- }
-
- protected boolean promptForOverwrite(SyncInfoSet syncSet) {
- if (allowOverwrite) return true;
- if (syncSet.isEmpty()) return true;
- IResource[] resources = syncSet.getResources();
- EclipseTest.fail(resources[0].getFullPath().toString() + " failed to merge properly");
- return false;
- }
-
- public IRunnableWithProgress getRunnable(SyncInfoSet syncSet) {
- return super.getRunnable(syncSet);
- }
-
-} \ No newline at end of file
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/TestWorkspaceUpdateAction.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/TestWorkspaceUpdateAction.java
deleted file mode 100644
index 5ea7464f8..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/TestWorkspaceUpdateAction.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.core.subscriber;
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.team.internal.ccvs.ui.subscriber.WorkspaceUpdateAction;
-import org.eclipse.team.tests.ccvs.core.EclipseTest;
-import org.eclipse.team.ui.sync.SyncInfoSet;
-
-class TestWorkspaceUpdateAction extends WorkspaceUpdateAction {
- boolean allowOverwrite = false;
-
- /* (non-Javadoc)
- * @see org.eclipse.team.internal.ccvs.ui.subscriber.SafeUpdateAction#warnAboutFailedResources(org.eclipse.team.ui.sync.SyncInfoSet)
- */
- protected void warnAboutFailedResources(SyncInfoSet syncSet) {
- return;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.internal.ccvs.ui.subscriber.SafeUpdateAction#getOverwriteLocalChanges()
- */
- protected boolean getOverwriteLocalChanges() {
- return allowOverwrite;
- }
-
- public TestWorkspaceUpdateAction(boolean allowOverwrite) {
- this.allowOverwrite = allowOverwrite;
- }
-
- protected boolean promptForOverwrite(SyncInfoSet syncSet) {
- if (allowOverwrite) return true;
- if (syncSet.isEmpty()) return true;
- IResource[] resources = syncSet.getResources();
- EclipseTest.fail(resources[0].getFullPath().toString() + " failed to update properly");
- return false;
- }
-
- public IRunnableWithProgress getRunnable(SyncInfoSet syncSet) {
- return super.getRunnable(syncSet);
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/CVSUITestCase.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/CVSUITestCase.java
deleted file mode 100644
index 21ecd5074..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/CVSUITestCase.java
+++ /dev/null
@@ -1,486 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui;
-
-
-import java.io.File;
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import junit.framework.Test;
-
-import org.eclipse.compare.structuremergeviewer.DiffNode;
-import org.eclipse.compare.structuremergeviewer.IDiffContainer;
-import org.eclipse.compare.structuremergeviewer.IDiffElement;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.IWorkspaceDescription;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.team.core.RepositoryProvider;
-import org.eclipse.team.internal.ccvs.core.CVSException;
-import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin;
-import org.eclipse.team.internal.ccvs.core.CVSTag;
-import org.eclipse.team.internal.ccvs.core.ICVSRemoteFolder;
-import org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation;
-import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin;
-import org.eclipse.team.internal.ccvs.ui.Console;
-import org.eclipse.team.internal.ccvs.ui.ICVSUIConstants;
-import org.eclipse.team.internal.ccvs.ui.actions.AddToWorkspaceAction;
-import org.eclipse.team.internal.ccvs.ui.actions.CommitAction;
-import org.eclipse.team.internal.ccvs.ui.actions.ReplaceWithRemoteAction;
-import org.eclipse.team.internal.ccvs.ui.actions.UpdateAction;
-import org.eclipse.team.internal.ccvs.ui.operations.ITagOperation;
-import org.eclipse.team.internal.ccvs.ui.operations.TagOperation;
-import org.eclipse.team.internal.ccvs.ui.repo.RepositoryManager;
-import org.eclipse.team.internal.ccvs.ui.sync.CVSSyncCompareInput;
-import org.eclipse.team.internal.ccvs.ui.sync.CommitSyncAction;
-import org.eclipse.team.internal.ccvs.ui.sync.ForceCommitSyncAction;
-import org.eclipse.team.internal.ccvs.ui.sync.ForceUpdateSyncAction;
-import org.eclipse.team.internal.ccvs.ui.sync.UpdateSyncAction;
-import org.eclipse.team.internal.ccvs.ui.wizards.SharingWizard;
-import org.eclipse.team.internal.ui.dialogs.IPromptCondition;
-import org.eclipse.team.internal.ui.sync.ITeamNode;
-import org.eclipse.team.internal.ui.sync.SyncSet;
-import org.eclipse.team.internal.ui.sync.SyncView;
-import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
-import org.eclipse.ui.IActionDelegate;
-import org.eclipse.ui.IObjectActionDelegate;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.WorkbenchException;
-
-public class CVSUITestCase extends LoggingTestCase {
- protected static Set installedTrap = new HashSet();
- private List testWindows;
- protected IWorkbenchWindow testWindow;
- protected CVSRepositoryLocation testRepository;
- protected boolean USE_CONSOLE = System.getProperty("cvs.tests.use_console") != null;
- protected boolean SHOW_CONSOLE = System.getProperty("cvs.tests.show_console") != null;
-
- public CVSUITestCase(Test test) {
- super(test);
- testWindows = new ArrayList(3);
- }
-
- public void setUp() throws CVSException {
- super.setUp();
- testRepository = CVSTestSetup.repository;
- testWindow = openTestWindow();
-
- Display display = testWindow.getShell().getDisplay();
- if (! installedTrap.contains(display)) {
- installedTrap.add(display);
- Util.waitForErrorDialog(display, 10000 /*ms*/, new Waiter() {
- public boolean notify(Object object) {
- Dialog dialog = (Dialog) object;
- printWarning("Encountered error dialog with title: " + dialog.getShell().getText(), null, null);
- dialog.close();
- return true;
- }
- });
- }
-
- // disable auto-build
- IWorkspace workspace = ResourcesPlugin.getWorkspace();
- IWorkspaceDescription description = workspace.getDescription();
- description.setAutoBuilding(false);
- try {
- workspace.setDescription(description);
- } catch (CoreException e) {
- throw new CVSException(e);
- }
-
- // disable CVS GZIP compression
- IPreferenceStore store = CVSUIPlugin.getPlugin().getPreferenceStore();
- store.setValue(ICVSUIConstants.PREF_COMPRESSION_LEVEL, 0);
- CVSProviderPlugin.getPlugin().setCompressionLevel(0);
-
- // default case is to not show the console but don't disable it, this is
- // the typical user experience.
- if(SHOW_CONSOLE) {
- showConsole();
- } else if(!USE_CONSOLE) {
- CVSProviderPlugin.getPlugin().setConsoleListener(null);
- }
-
- // wait for UI to settle
- Util.processEventsUntil(100);
- }
-
- public void tearDown() throws CVSException {
- // wait for UI to settle
- Util.processEventsUntil(100);
- closeAllTestWindows();
- super.tearDown();
- }
-
- protected void showConsole() {
- try {
- IWorkbenchPage page = CVSUIPlugin.getActivePage();
- IViewPart consolePart = page.findView(Console.CONSOLE_ID);
- if (consolePart == null) {
- IWorkbenchPart activePart = page.getActivePart();
- consolePart = page.showView(Console.CONSOLE_ID);
- //restore focus stolen by the creation of the console
- if (activePart != null) page.activate(activePart);
- } else {
- page.bringToTop(consolePart);
- }
- } catch (PartInitException pe) {
- }
- }
-
- /**
- * Open a test window with the empty perspective.
- */
- protected IWorkbenchWindow openTestWindow() {
- try {
- IWorkbenchWindow win = PlatformUI.getWorkbench().openWorkbenchWindow(
- EmptyPerspective.PERSP_ID, ResourcesPlugin.getWorkspace());
- testWindows.add(win);
- return win;
- } catch (WorkbenchException e) {
- fail();
- return null;
- }
- }
-
- /**
- * Close all test windows.
- */
- protected void closeAllTestWindows() {
- Iterator iter = testWindows.iterator();
- IWorkbenchWindow win;
- while (iter.hasNext()) {
- win = (IWorkbenchWindow) iter.next();
- win.close();
- }
- testWindows.clear();
- }
-
- /**
- * Checks out the projects with the specified tags from the test repository.
- */
- protected void actionCheckoutProjects(String[] projectNames, CVSTag[] tags) throws Exception {
- ICVSRemoteFolder[] projects = lookupRemoteProjects(projectNames, tags);
- AddToWorkspaceAction action = new AddToWorkspaceAction() {
- protected IPromptCondition getOverwriteLocalAndFileSystemPrompt() {
- return new DummyPromptCondition();
- }
- };
- runActionDelegate(action, projects, "Repository View Checkout action");
- timestampGranularityHiatus();
- }
-
- /**
- * Replaces the specified resources with the remote contents using the action contribution.
- */
- protected void actionReplaceWithRemote(IResource[] resources) {
- ReplaceWithRemoteAction action = new ReplaceWithRemoteAction() {
- protected IPromptCondition getPromptCondition(IResource[] resources) {
- return new DummyPromptCondition();
- }
- };
- runActionDelegate(action, resources, "Replace with Remote action");
- timestampGranularityHiatus();
- }
-
- /**
- * Shares the specified project with the test repository.
- * @param project the project to share
- */
- protected void actionShareProject(IProject project) {
- final SharingWizard wizard = new SharingWizard();
- wizard.init(PlatformUI.getWorkbench(), project);
- Util.waitForWizardToOpen(testWindow.getShell(), wizard, new Waiter() {
- public boolean notify(Object object) {
- WizardDialog dialog = (WizardDialog) object;
- startTask("set sharing, pop up sync viewer");
- wizard.performFinish();
- endTask();
- dialog.close();
- return false;
- }
- });
- timestampGranularityHiatus();
- }
-
- /**
- * Updates the specified resources using the action contribution.
- */
- protected void actionCVSCommit(IResource[] resources, final String comment) {
- assertNotNull(comment);
- CommitAction action = new CommitAction() {
- protected String promptForComment() {
- return comment;
- }
- };
- runActionDelegate(action, resources, "CVS Commit action");
- timestampGranularityHiatus();
- }
-
- /**
- * Tags the specified resources using the action contribution.
- */
- protected void actionCVSTag(IResource[] resources, final String name) {
- assertNotNull(name);
- ITagOperation op = new TagOperation(null, resources);
- op.setTag(new CVSTag(name, CVSTag.VERSION));
- try {
- op.run();
- } catch (InterruptedException e) {
- printWarning("Tag interrupted", e, null);
- } catch (CVSException e) {
- printWarning("Tag failed", e, null);
- }
- }
-
- /**
- * Updates the specified resources using the action contribution.
- */
- protected void actionCVSUpdate(IResource[] resources) {
- runActionDelegate(new UpdateAction(), resources, "CVS Update action");
- timestampGranularityHiatus();
- }
-
- /**
- * Pops up the synchronizer view for the specified resources.
- * @param resources the resources to sync
- * @return the compare input used
- */
- protected CVSSyncCompareInput syncResources(IResource[] resources) {
- startTask("Synchronize with Repository action");
- SyncView syncView = getSyncView();
- CVSSyncCompareInput input = new CVSSyncCompareInput(resources) {
- // overridden to prevent "nothing to synchronize" dialog from popping up
- public void run(IProgressMonitor monitor)
- throws InvocationTargetException, InterruptedException {
- super.run(monitor);
- DiffNode result = getDiffRoot(); // (DiffNode) getCompareResult()
- if (result == null || Util.isEmpty(result)) throw new InterruptedException();
- }
- };
- syncView.showSync(input);
- endTask();
- return input;
- }
-
- /**
- * Commits the specified resources using the synchronizer view.
- * @param resources the resources to commit
- * @param input the compare input for the sync view, or null to create a new one
- * @param comment the comment string, or ""
- */
- protected void syncCommitResources(IResource[] resources, CVSSyncCompareInput input, String comment) {
- if (input == null) input = syncResources(resources);
- IDiffContainer diffRoot = input.getDiffRoot();
- if (Util.isEmpty(diffRoot)) {
- startTask("Nothing to Commit");
- } else {
- ITeamNode[] nodes = getTeamNodesForResources(diffRoot, resources);
- startTask("Sync View Commit action");
- syncCommitInternal(input, nodes, comment);
- }
- endTask();
- timestampGranularityHiatus();
- }
-
- /**
- * Updates the specified resources using the synchronizer view.
- * @param resources the resources to update
- * @param input the compare input for the sync view, or null to create a new one
- * @param comment the comment string, or ""
- */
- protected void syncUpdateResources(IResource[] resources, CVSSyncCompareInput input) {
- if (input == null) input = syncResources(resources);
- IDiffContainer diffRoot = input.getDiffRoot();
- if (Util.isEmpty(diffRoot)) {
- startTask("Nothing to Update");
- } else {
- ITeamNode[] nodes = getTeamNodesForResources(diffRoot, resources);
- startTask("Sync View Update action");
- syncGetInternal(input, nodes);
- }
- endTask();
- timestampGranularityHiatus();
- }
-
- /**
- * Creates and imports project contents from a zip file.
- */
- protected IProject createAndImportProject(String prefix, File zipFile) throws Exception {
- IProject project = Util.createUniqueProject(prefix);
- Util.importZip(project, zipFile);
- return project;
- }
-
- /**
- * Looks up handles for remote projects by name.
- */
- protected ICVSRemoteFolder[] lookupRemoteProjects(String[] projectNames, CVSTag[] tags) throws Exception {
- ICVSRemoteFolder[] folders = new ICVSRemoteFolder[projectNames.length];
- for (int i = 0; i < projectNames.length; ++i) {
- folders[i] = testRepository.getRemoteFolder(projectNames[i], tags[i]);
- }
- return folders;
- }
-
- /**
- * Gets an instance of the Synchronize view
- */
- protected SyncView getSyncView() {
- SyncView view = SyncView.findViewInActivePage(null);
- assertNotNull("Could not obtain a Sync View.", view);
- return view;
- }
-
- /**
- * Runs an IActionDelegate prototype instance on a given selection.
- */
- protected void runActionDelegate(IActionDelegate delegate, Object[] selection, String taskName) {
- Action action = new Action() { };
- if (delegate instanceof IObjectActionDelegate) {
- ((IObjectActionDelegate) delegate).setActivePart(action,
- PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService().getActivePart());
- }
- delegate.selectionChanged(action, new StructuredSelection(selection));
- startTask(taskName);
- delegate.run(action);
- endTask();
- }
-
- /**
- * Commits NON-CONFLICTING and CONFLICTING resources represented by an array of synchronizer nodes.
- */
- private void syncCommitInternal(CVSSyncCompareInput input, ITeamNode[] nodes, final String comment) {
- FakeSelectionProvider selectionProvider = new FakeSelectionProvider(nodes);
- // Commit ONLY NON-CONFLICTING changes
- CommitSyncAction commitAction = new CommitSyncAction(input, selectionProvider, "Commit",
- testWindow.getShell()) {
- protected int promptForConflicts(SyncSet syncSet) {
- return 0; // yes! sync conflicting changes
- }
- protected String promptForComment(RepositoryManager manager, IResource[] resourcesToCommit) {
- return comment;
- }
- protected IResource[] promptForResourcesToBeAdded(RepositoryManager manager, IResource[] unadded) {
- return unadded;
- }
- };
- commitAction.run();
- // Commit ONLY CONFLICTING changes
- ForceCommitSyncAction forceCommitAction = new ForceCommitSyncAction(input, selectionProvider, "Force Commit",
- testWindow.getShell()) {
- protected int promptForConflicts(SyncSet syncSet) {
- return 0; // yes! sync conflicting changes
- }
- protected String promptForComment(RepositoryManager manager, IResource[] resourcesToCommit) {
- return comment;
- }
- protected IResource[] promptForResourcesToBeAdded(RepositoryManager manager, IResource[] unadded) {
- return unadded;
- }
- };
- forceCommitAction.run();
- }
-
- /**
- * Updates NON-CONFLICTING and CONFLICTING resources represented by an array of synchronizer nodes.
- */
- private void syncGetInternal(CVSSyncCompareInput input, ITeamNode[] nodes) {
- FakeSelectionProvider selectionProvider = new FakeSelectionProvider(nodes);
- // Update ONLY NON-CONFLICTING changes
- UpdateSyncAction updateAction = new UpdateSyncAction(input, selectionProvider, "Update",
- testWindow.getShell()) {
- protected boolean promptForConflicts() {
- return true;
- }
- protected int promptForMergeableConflicts() {
- return 2;
- }
- };
- updateAction.run();
- // Update ONLY CONFLICTING changes
- ForceUpdateSyncAction forceUpdateAction = new ForceUpdateSyncAction(input, selectionProvider, "Force Update",
- testWindow.getShell()) {
- protected boolean promptForConflicts() {
- return true;
- }
- protected int promptForMergeableConflicts() {
- return 2;
- }
- };
- forceUpdateAction.run();
- }
-
- /**
- * Gets an array of synchronizer nodes corresponding to an array of resouces.
- */
- protected static ITeamNode[] getTeamNodesForResources(IDiffContainer root, IResource[] resources) {
- ITeamNode[] nodes = new ITeamNode[resources.length];
- for (int i = 0; i < resources.length; ++i) {
- nodes[i] = findTeamNodeForResource(root, resources[i]);
- assertNotNull(nodes[i]);
- }
- return nodes;
- }
-
- private static ITeamNode findTeamNodeForResource(IDiffElement root, IResource resource) {
- RepositoryProvider provider = RepositoryProvider.getProvider(resource.getProject(), CVSProviderPlugin.getTypeId());
- assertNotNull("Resource " + resource.getFullPath() + " must have an associated CVSProvider", provider);
-
- if (root instanceof ITeamNode) {
- ITeamNode node = (ITeamNode) root;
- if (resource.equals(node.getResource())) return node;
- // prune the backtracking tree
- IResource parent = resource.getParent();
- do {
- if (parent == null) return null; // can't possibly be child of this node
- } while (! resource.equals(parent));
- }
- if (root instanceof IDiffContainer) {
- IDiffContainer container = (IDiffContainer) root;
- if (container.hasChildren()) {
- IDiffElement[] children = container.getChildren();
- for (int i = 0; i < children.length; ++i) {
- ITeamNode node = findTeamNodeForResource(children[i], resource);
- if (node != null) return node;
- }
- }
- }
- return null;
- }
-
- /**
- * Waits for a small amount of time to compensate for file system time stamp granularity.
- */
- private void timestampGranularityHiatus() {
- //JUnitTestCase.waitMsec(1500);
- Util.processEventsUntil(1500);
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/DummyPromptCondition.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/DummyPromptCondition.java
deleted file mode 100644
index c20d8d496..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/DummyPromptCondition.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui;
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.team.internal.ui.dialogs.IPromptCondition;
-
-public class DummyPromptCondition implements IPromptCondition {
- public boolean needsPrompt(IResource resource) {
- return false;
- }
- public String promptMessage(IResource resource) {
- // this method should never be called
- return resource.getName();
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/EclipseUITestHarnessApplication.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/EclipseUITestHarnessApplication.java
deleted file mode 100644
index f38785951..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/EclipseUITestHarnessApplication.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui;
-
-
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.PrintStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-
-import junit.framework.Test;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.tests.harness.EclipseTestHarnessApplication;
-import org.eclipse.jface.window.Window;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.internal.Workbench;
-
-/**
- * A test harness with UI and logging support.
- * <pre>
- * Supported arguments:
- * -test <suite> : id of suite to run (must be plugged into extension point)
- * -log <file> : specify a file for logging
- * -nolog : do not write a log file
- * -repeat <n> : number of iterations to run
- * -ignorefirst : ignore (do not record) results from first iteration
- * -purge : purge all projects from the workspace before each iteration
- * <anything else> : passed verbatim to the org.eclipse.ui.workbench application
- * </pre>
- */
-public class EclipseUITestHarnessApplication extends EclipseTestHarnessApplication {
- protected boolean purgeWorkspace;
- protected boolean ignoreFirst;
- protected int repeatCount;
- protected LoggingTestResult logResult;
-
- /**
- * Application entry point.
- */
- public Object run(Object userArgs) throws Exception {
- PrintStream logStream = System.err;
- String logFilename = null;
- purgeWorkspace = false;
- ignoreFirst = false;
- repeatCount = 1;
- if (userArgs instanceof String[]) {
- // parse args, no error handling
- String[] args = (String[]) userArgs;
- List argsList = new ArrayList(args.length);
- for (int i = 0; i < args.length; ++i) {
- if ("-repeat".equals(args[i])) {
- repeatCount = Integer.parseInt(args[++i]);
- } else if ("-ignorefirst".equals(args[i])) {
- ignoreFirst = true;
- } else if ("-nolog".equals(args[i])) {
- logStream = null;
- } else if ("-log".equals(args[i])) {
- logFilename = args[++i];
- } else if ("-purge".equals(args[i])) {
- purgeWorkspace = true;
- } else {
- argsList.add(args[i]);
- }
- }
- userArgs = argsList.toArray(new String[argsList.size()]);
- }
- // setup logging
- if (logFilename != null) {
- File file = new File(logFilename);
- logStream = new PrintStream(new BufferedOutputStream(new FileOutputStream(logFilename)));
- }
- logResult = new LoggingTestResult(logStream);
- try {
- logResult.startLog(System.currentTimeMillis(), getSDKBuildId());
- return launchWorkbench(userArgs);
- } finally {
- logResult.endLog();
- if (logFilename != null) logStream.close();
- }
- }
-
- /**
- * Launches the Workbench UI.
- */
- protected Object launchWorkbench(final Object userArgs) throws Exception {
- final Exception[] exception = new Exception[1];
- Workbench workbench = new Workbench() {
- /*** this code should be kept in sync with Workbench.runEventLoop() ***/
- protected void runEventLoop(Window.IExceptionHandler handler) {
- // Dispatch all events.
- Display display = Display.getCurrent();
- while (true) {
- try {
- if (!display.readAndDispatch())
- break;
- } catch (Throwable e) {
- break;
- }
- }
-
- // Run our hook.
- try {
- workbenchHook(this);
- } catch (Exception e) {
- exception[0] = e;
- }
-
- // Close the workbench.
- close();
- }
- };
- Object result = workbench.run(userArgs);
- if (exception[0] != null) throw exception[0];
- return result;
- }
-
- /**
- * Callback from Workbench if it launched successfully.
- */
- protected Object workbenchHook(Workbench workbench) throws Exception {
- // run the underlying non-ui test launcher to locate and start the test cases
- return super.run(workbench.getCommandLineArgs());
- }
-
- /**
- * Runs the specified test. Called from the non-ui test launcher.
- */
- protected void run(Test test) {
- for (int i = 0; i < repeatCount; ++i) {
- if (purgeWorkspace) purgeWorkspaceProjects();
- LoggingTestRunner runner = new LoggingTestRunner();
- runner.doRun(test, (i == 0 && ignoreFirst) ? null : logResult, false);
- }
- }
-
- /**
- * Purges the projects in the workspace.
- */
- public static void purgeWorkspaceProjects() {
- IWorkspace workspace = ResourcesPlugin.getWorkspace();
- // purge all known projects from the workspace
- IProject[] projects = workspace.getRoot().getProjects();
- for (int i = 0; i < projects.length; ++i) {
- IProject project = projects[i];
- try {
- project.delete(true, true, null);
- } catch (CoreException e) {
- System.err.println("Could not purge project: " + project.getName());
- }
- }
- }
-
- /**
- * Gets the SDK build id.
- */
- public static String getSDKBuildId() {
- try {
- URL url = Platform.getPluginRegistry().getPluginDescriptor("org.eclipse.sdk").getInstallURL();
- url = new URL(url, "platform.ini");
- InputStream is = url.openStream();
- try {
- Properties sdkProperties = new Properties();
- sdkProperties.load(is);
- String buildId = sdkProperties.getProperty("buildID");
- if (buildId != null) return buildId;
- } finally {
- is.close();
- }
- } catch (Exception e) {
- }
- return "unknown";
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/EmptyPerspective.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/EmptyPerspective.java
deleted file mode 100644
index c708f3050..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/EmptyPerspective.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui;
-
-
-import org.eclipse.ui.IPageLayout;
-import org.eclipse.ui.IPerspectiveFactory;
-
-/**
- * This perspective is used for testing api. It defines an initial
- * layout with no parts, just an editor area.
- *
- * Note: originally borrowed from org.eclipse.jdt.junit.eclipse.util
- */
-public class EmptyPerspective implements IPerspectiveFactory {
-
- /**
- * The perspective id.
- */
- public static final String PERSP_ID = "org.eclipse.team.tests.ccvs.ui.EmptyPerspective";
-
- /**
- * Constructs a new Default layout engine.
- */
- public EmptyPerspective() {
- super();
- }
-
- /**
- * Defines the initial layout for a perspective.
- *
- * Implementors of this method may add additional views to a
- * perspective. The perspective already contains an editor folder
- * with <code>ID = ILayoutFactory.ID_EDITORS</code>. Add additional views
- * to the perspective in reference to the editor folder.
- *
- * This method is only called when a new perspective is created. If
- * an old perspective is restored from a persistence file then
- * this method is not called.
- *
- * @param factory the factory used to add views to the perspective
- */
- public void createInitialLayout(IPageLayout layout) {
- //layout.addView( MockViewPart.ID, IPageLayout.BOTTOM, 0.5f, layout.getEditorArea() );
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/FakeSelectionProvider.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/FakeSelectionProvider.java
deleted file mode 100644
index cd7cf4c0f..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/FakeSelectionProvider.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui;
-
-
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.StructuredSelection;
-
-/**
- * Serves up fake selections.
- *
- * Note: originally borrowed from org.eclipse.jdt.ui.tests.actions
- */
-public class FakeSelectionProvider implements ISelectionProvider {
- private Object[] fElems;
- public FakeSelectionProvider(Object[] elements){
- fElems = elements;
- }
-
- public void addSelectionChangedListener(ISelectionChangedListener listener) {
- }
-
- public ISelection getSelection() {
- return new StructuredSelection(fElems);
- }
-
- public void removeSelectionChangedListener(ISelectionChangedListener listener) {
- }
-
- public void setSelection(ISelection selection) {
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/ICriteria.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/ICriteria.java
deleted file mode 100644
index d9f466885..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/ICriteria.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui;
-
-
-/**
- * Generic object filter mechanism.
- */
-public interface ICriteria {
- /**
- * Returns true if the candidate object satisfies the specified
- * criteria value according to a particular algorithm.
- */
- public boolean test(Object candidate, Object value);
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/LoggingTestCase.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/LoggingTestCase.java
deleted file mode 100644
index a1dccc563..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/LoggingTestCase.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui;
-
-
-import junit.framework.Assert;
-import junit.framework.Test;
-import junit.framework.TestResult;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
-
-public class LoggingTestCase extends CVSTestSetup {
- private LoggingTestResult logResult;
- private int disableLogStack;
-
- /**
- * Creates a new logging test case.
- */
- public LoggingTestCase(Test test) {
- super(test);
- }
-
- /**
- * Runs a test.
- * @param result the result object
- */
- public void run(TestResult result) {
- // run the garbage collector now to improve benchmark precision
- for (int i = 0; i < 4; ++i) {
- System.runFinalization();
- System.gc();
- }
- if (result instanceof LoggingTestResult) {
- logResult = (LoggingTestResult) result;
- disableLogStack = 0;
- } else {
- logResult = null;
- disableLogStack = 1;
- }
- super.run(result);
- }
-
- /**
- * Marks the beginning of a new task group.
- * @param groupName the name for the group
- */
- protected void startGroup(String groupName) {
- if (disableLogStack == 0) logResult.startGroup(groupName);
- }
-
- /**
- * Marks the ends of the active task group.
- */
- protected void endGroup() {
- if (disableLogStack == 0) logResult.endGroup();
- }
-
- /**
- * Marks the beginning of a new task.
- * @param taskName the name for the task
- */
- protected void startTask(String taskName) {
- if (disableLogStack == 0) logResult.startTask(taskName);
- }
-
- /**
- * Marks the ends of the active task.
- */
- protected void endTask() {
- if (disableLogStack == 0) logResult.endTask();
- }
-
- /**
- * Disables logging until re-enabled. (this call nests)
- */
- protected void disableLog() {
- disableLogStack += 1;
- }
-
- /**
- * Enables logging when all previous calls to disableLog are matched.
- */
- protected void enableLog() {
- Assert.assertTrue(disableLogStack > 0);
- disableLogStack -= 1;
- Assert.assertTrue(disableLogStack != 0 || logResult != null);
- }
-
- /**
- * Prints a warning message to the log.
- * @param message the message, or null
- * @param error an exception with a stack trace, or null
- * @param status a status code, or null
- */
- protected void printWarning(String message, Throwable error, IStatus status) {
- if (disableLogStack == 0) logResult.printWarning(message, error, status);
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/LoggingTestResult.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/LoggingTestResult.java
deleted file mode 100644
index f4843ba57..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/LoggingTestResult.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui;
-
-
-import java.io.PrintStream;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Stack;
-import java.util.StringTokenizer;
-
-import junit.framework.Assert;
-import junit.framework.AssertionFailedError;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestResult;
-import junit.runner.BaseTestRunner;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.team.core.TeamException;
-
-public class LoggingTestResult extends TestResult {
- protected Stack groupStack;
- protected PerformanceTimer currentTask;
- protected PrintStream logStream;
- protected Stack /* of String */ elements;
- protected String indent;
-
- /**
- * Creates a logging test result.
- * @param logStream the output stream, or null to disable logging
- */
- public LoggingTestResult(PrintStream logStream) {
- this.logStream = logStream;
- this.elements = new Stack();
- this.indent = "";
- groupStack = new Stack();
- currentTask = null;
- }
-
- /**
- * Marks the beginning of a series of log entries.
- */
- public void startLog(long timestamp, String sdkBuild) {
- println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
- startXMLElement("log", new String[] { "timestamp", "sdkbuild" }, new String[] {
- new SimpleDateFormat("dd/MMM/yyyy HH:mm:ss").format(new Date(timestamp)),
- sdkBuild });
- }
-
- /**
- * Marks the end of a series of log entries.
- */
- public void endLog() {
- endXMLElement();
- }
-
- /**
- * Prints a warning message to the log file.
- * @param message the message, or null
- * @param error an exception with a stack trace, or null
- * @param status a status code, or null
- */
- public void printWarning(String message, Throwable error, IStatus status) {
- printAbort("warning", message, error, status);
- }
-
- /**
- * Called by the JUnit framework when an error occurs.
- * @param test the test
- * @param error the exception that occurred
- */
- public void addError(Test test, Throwable error) {
- printAbort("error", null, error, null);
- super.addError(test, error);
- }
-
- /**
- * Called by the JUnit framework when an assertion failure occurs.
- * @param test the test
- * @param error the exception that occurred
- */
- public void addFailure(Test test, AssertionFailedError error) {
- printAbort("failure", null, error, null);
- super.addFailure(test, error);
- }
-
- /**
- * Called by the JUnit framework to mark the beginning of a test case.
- * @param test the test
- */
- public void startTest(Test test) {
- if (test instanceof TestCase) {
- TestCase testCase = (TestCase) test;
- startXMLElement("case", new String[] { "class", "name" },
- new String[] { testCase.getClass().getName(), testCase.getName() });
- groupStack.clear();
- currentTask = null;
- }
- super.startTest(test);
- }
-
- /**
- * Called by the JUnit framework to mark the end of a test case.
- * @param test the test
- */
- public void endTest(Test test) {
- if (test instanceof TestCase) {
- TestCase testCase = (TestCase) test;
- if (currentTask != null) endTask();
- while (! groupStack.isEmpty()) endGroup();
- endXMLElement();
- }
- super.endTest(test);
- }
-
- /**
- * Marks the beginning of a new task group.
- * @param groupName the name for the group
- */
- public void startGroup(String groupName) {
- Assert.assertNull(currentTask);
- startXMLElement("group", new String[] { "name" }, new String[] { groupName });
- groupStack.push(groupName);
- }
-
- /**
- * Marks the end of the active task group.
- */
- public void endGroup() {
- Assert.assertNull(currentTask);
- Assert.assertTrue(! groupStack.empty());
- endXMLElement();
- groupStack.pop();
- }
-
- /**
- * Marks the beginning of a new task.
- * @param taskName the name for the task
- */
- public void startTask(String taskName) {
- Assert.assertNull(currentTask);
- startXMLElement("task", new String[] { "name" }, new String[] { taskName });
- currentTask = new PerformanceTimer(taskName);
- currentTask.start();
- }
-
- /**
- * Marks the end of the active task.
- */
- public void endTask() {
- Assert.assertNotNull(currentTask);
- currentTask.stop();
- printXMLElement("result", new String[] { "elapsed" },
- new String[] { Integer.toString(currentTask.getTotalMillis()) });
- endXMLElement();
- currentTask = null;
- }
-
- protected void startXMLElement(String name, String[] attributes, String[] values) {
- println(formatXMLElement(name, attributes, values, false));
- elements.push(name);
- indent += " ";
- }
-
- protected void printXMLElement(String name, String[] attributes, String[] values) {
- println(formatXMLElement(name, attributes, values, true));
- }
-
- protected String formatXMLElement(String name, String[] attributes, String[] values, boolean quickEnd) {
- // XXX need to escape certain characters in attribute values
- StringBuffer buffer = new StringBuffer("<");
- buffer.append(name);
- if (attributes != null && values != null) {
- for (int i = 0; i < attributes.length; ++i) {
- buffer.append(' ');
- buffer.append(attributes[i]);
- buffer.append("=\"");
- buffer.append(values[i]);
- buffer.append('"');
- }
- }
- if (quickEnd) buffer.append('/');
- buffer.append('>');
- return buffer.toString();
- }
-
- protected void endXMLElement() {
- indent = indent.substring(2);
- String name = (String) elements.pop();
- println("</" + name + ">");
- }
-
- protected void printXMLElementData(String line) {
- // XXX need to escape certain characters in element data
- println(line);
- }
-
- protected void printAbort(String type, String message, Throwable error, IStatus status) {
- if (status == null && error != null) {
- if (error instanceof CoreException) {
- status = ((CoreException) error).getStatus();
- } else if (error instanceof TeamException) {
- status = ((TeamException) error).getStatus();
- }
- }
- if (message == null && error != null) {
- message = error.getMessage();
- if (message == null) {
- message = error.getClass().getName();
- }
- }
- if (message == null && status != null) {
- message = status.getMessage();
- }
- if (message == null) message = "";
- startXMLElement("abort", new String[] { "type", "message" },
- new String[] { type, message });
- if (status != null) printStatus(status);
- if (error != null) printStackTrace(error);
- endXMLElement();
- }
-
- protected void printStatus(IStatus status) {
- startXMLElement("status", new String[] { "severity", "code", "plugin", "message" },
- new String[] {
- Integer.toString(status.getSeverity()),
- Integer.toString(status.getCode()),
- status.getPlugin(), status.getMessage() });
- if (status.isMultiStatus()) {
- IStatus[] children = status.getChildren();
- for (int i = 0; i < children.length; ++i) {
- printStatus(children[i]);
- }
- }
- endXMLElement();
- }
-
- protected void printStackTrace(Throwable error) {
- // XXX need a better way to serialize the stack trace
- String trace = BaseTestRunner.getFilteredTrace(error);
- StringTokenizer tok = new StringTokenizer(trace, "\r\n");
- if (! tok.hasMoreTokens()) return; // empty trace?
- tok.nextToken(); // skip message line
- startXMLElement("trace", null, null);
- while (tok.hasMoreTokens()) {
- String frame = tok.nextToken();
- printXMLElementData(frame);
- }
- endXMLElement();
- }
-
- protected void println(String line) {
- if (logStream != null) logStream.println(indent + line);
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/LoggingTestRunner.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/LoggingTestRunner.java
deleted file mode 100644
index 395bf1ccc..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/LoggingTestRunner.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui;
-
-
-import junit.framework.Test;
-import junit.framework.TestResult;
-import junit.textui.TestRunner;
-
-public class LoggingTestRunner extends TestRunner {
- protected LoggingTestResult logResult;
-
- protected TestResult createTestResult() {
- TestResult result = logResult;
- logResult = null;
- if (result == null) result = new LoggingTestResult(null);
- return result;
- }
-
- /**
- * Runs a logging test suite.
- * @param suite the test suite
- * @param logResult the result object to use, or null to create a new one
- * @param wait if true, pauses between test runs
- */
- public void doRun(Test suite, LoggingTestResult logResult, boolean wait) {
- this.logResult = logResult;
- super.doRun(suite, wait);
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/PerformanceTimer.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/PerformanceTimer.java
deleted file mode 100644
index 89bad073d..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/PerformanceTimer.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui;
-
-
-public class PerformanceTimer {
- private long startTime;
- private int totalMillis;
- private String name;
-
- /**
- * Creates a timer, initially not running.
- */
- public PerformanceTimer(String name) {
- this.totalMillis = 0;
- this.name = name;
- }
-
- /**
- * Starts the timer. Timer must not be running.
- */
- public void start() {
- startTime = System.currentTimeMillis();
- }
-
- /**
- * Stops the timer. Timer must be running.
- */
- public void stop() {
- totalMillis += System.currentTimeMillis() - startTime;
- startTime = 0;
- }
-
- /**
- * Returns the total number of milliseconds elapsed over all measured intervals.
- */
- public int getTotalMillis() {
- return totalMillis;
- }
-
- /**
- * Returns the name of this timer.
- */
- public String getName() {
- return name;
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/SequenceGenerator.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/SequenceGenerator.java
deleted file mode 100644
index d1eb6daef..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/SequenceGenerator.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui;
-
-
-import java.util.Random;
-
-/**
- * Encapsulates algorithms and state for generating deterministic sequences.
- * The sequence of numbers generated will always follow the same pattern,
- * regardless of the time, place, or platform.
- */
-public class SequenceGenerator {
- private static long globalSeqNum = System.currentTimeMillis() * 1000;
- private final Random random;
- private int uniqueInt;
-
- /**
- * Constructs a new sequence generator with a known seed.
- */
- public SequenceGenerator() {
- random = new Random(3141592653589793238L); // a known constant
- uniqueInt = 1000000;
- }
-
- /**
- * Returns a globally unique long integer.
- */
- public static long nextGloballyUniqueLong() {
- return globalSeqNum++;
- }
-
- /**
- * Returns a unique 7-digit integer.
- */
- public int nextUniqueInt() {
- return uniqueInt++;
- }
-
- /**
- * Returns a pseudo-random integer between 0 and n-1.
- * @see Random#nextInt(int)
- */
- public int nextInt(int n) {
- return random.nextInt(n);
- }
-
- /**
- * Returns a pseudo-random real number following a gaussian distribution.
- * @see Random#nextGaussian()
- */
- public double nextGaussian() {
- return random.nextGaussian();
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/Util.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/Util.java
deleted file mode 100644
index 413596339..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/Util.java
+++ /dev/null
@@ -1,796 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui;
-
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.List;
-import java.util.zip.ZipException;
-import java.util.zip.ZipFile;
-
-import junit.framework.Assert;
-import org.eclipse.compare.structuremergeviewer.DiffNode;
-import org.eclipse.compare.structuremergeviewer.IDiffContainer;
-import org.eclipse.compare.structuremergeviewer.IDiffElement;
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFile;
-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.runtime.CoreException;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jface.dialogs.ErrorDialog;
-import org.eclipse.jface.wizard.IWizard;
-import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Widget;
-import org.eclipse.team.internal.ccvs.core.CVSStatus;
-import org.eclipse.ui.internal.dialogs.InternalErrorDialog;
-import org.eclipse.ui.wizards.datatransfer.ImportOperation;
-import org.eclipse.ui.wizards.datatransfer.ZipFileStructureProvider;
-
-/**
- * Provides helpers for:
- * <ul>
- * <li>Resource manipulation</li>
- * <li>Diff trees</li>
- * <li>UI automation</li>
- * <li>Parallel development simulation</li>
- * </ul>
- *
- * Note: This class is referenced from the VCM 1.0 performance tests.
- */
-public class Util {
- /*** RESOURCE MANIPULATION SUPPORT ***/
-
- /**
- * Gets a handle for a project of a given name.
- * @param name the project name
- * @return the project handle
- */
- public static IProject getProject(String name) throws CoreException {
- return ResourcesPlugin.getWorkspace().getRoot().getProject(name);
- }
-
- /**
- * Creates a new project.
- * @param name the project name
- * @return the project handle
- */
- public static IProject createProject(String name) throws CoreException {
- IProject project = getProject(name);
- if (!project.exists()) project.create(null);
- if (!project.isOpen()) project.open(null);
- return project;
- }
-
- /**
- * Deletes a project.
- * @param project the project
- */
- public static void deleteProject(IProject project) throws CoreException {
- project.delete(false /*force*/, null);
- }
-
- /**
- * Deletes a file and prunes empty containing folders.
- * @param file the file to delete
- */
- public static void deleteFileAndPrune(IFile file) throws CoreException {
- file.delete(false /*force*/, null);
- IContainer container = file.getParent();
- while (container != null && container instanceof IFolder &&
- isFolderEmpty((IFolder) container)) {
- deleteFolder((IFolder) container);
- container = container.getParent();
- }
- }
-
- /**
- * Deletes a folder.
- */
- public static void deleteFolder(IFolder folder) throws CoreException {
- try {
- folder.delete(false /*force*/, null);
- } catch (CoreException e) {
- IStatus status = e.getStatus();
- // ignore errors caused by attempting to delete folders that CVS needs to have around
- if (findStatusByCode(status, CVSStatus.FOLDER_NEEDED_FOR_FILE_DELETIONS) == null) {
- throw e;
- }
- }
- }
-
- /**
- * Finds an IStatus instance in a multi-status by status code.
- */
- public static IStatus findStatusByCode(IStatus status, int code) {
- if (status.getCode() == code) return status;
- IStatus[] children = status.getChildren();
- for (int i = 0; i < children.length; i++) {
- IStatus found = findStatusByCode(children[i], code);
- if (found != null) return found;
- }
- return null;
- }
-
- /**
- * Creates a uniquely named project.
- * @param prefix a string prepended to the generated name
- * @return the new project
- */
- public static IProject createUniqueProject(String prefix) throws CoreException {
- return createProject(makeUniqueName(null, prefix, null));
- }
-
- /**
- * Creates a uniquely named file in the parent folder or project with random contents.
- * @param gen the sequence generator
- * @param parent the parent IFolder or IProject for the new file
- * @param meanSize the mean size of file to create (in bytes)
- * @param variance 69% of files with be within this amount of the mean
- * @param probBinary the probability of a new file being binary as a percentage
- * @return the new file
- */
- public static IFile createUniqueFile(SequenceGenerator gen, IContainer parent,
- int meanSize, int variance, int probBinary) throws IOException, CoreException {
- int fileSize;
- do {
- fileSize = (int) Math.abs(gen.nextGaussian() * variance + meanSize);
- } while (fileSize > meanSize + variance * 4); // avoid huge files
-
- ByteArrayOutputStream os = new ByteArrayOutputStream();
- String fileName;
- if (gen.nextInt(100) < probBinary) {
- fileName = makeUniqueName(gen, "file", "class"); // binary
- writeRandomBytes(gen, os, fileSize);
- } else {
- fileName = makeUniqueName(gen, "file", "txt"); // text
- writeRandomText(gen, os, fileSize);
- }
- IFile file = parent.getFile(new Path(fileName));
- file.create(new ByteArrayInputStream(os.toByteArray()), true, null);
- os.close();
- return file;
- }
-
- /**
- * Creates a uniquely named folder in the parent folder.
- * @param gen the sequence generator
- * @param parent the parent IFolder or IProject for the new folder
- * @return the new folder
- */
- public static IFolder createUniqueFolder(SequenceGenerator gen, IContainer parent) throws CoreException {
- IFolder folder = parent.getFolder(new Path(Util.makeUniqueName(gen, "folder", null)));
- folder.create(false /*force*/, true /*local*/, null);
- return folder;
- }
-
- /**
- * Renames a resource.
- * The resource handle becomes invalid.
- * @param resource the existing resource
- * @param newName the new name for the resource
- */
- public static void renameResource(IResource resource, String newName) throws CoreException {
- switch (resource.getType()) {
- case IResource.PROJECT: {
- IProject project = (IProject) resource;
- IProjectDescription desc = project.getDescription();
- desc.setName(newName);
- project.move(desc, false /*force*/, true /*keepHistory*/, null);
- } break;
- case IResource.FOLDER: {
- try {
- resource.move(new Path(newName), false /*force*/, null);
- } catch (CoreException e) {
- IStatus status = e.getStatus();
- // ignore errors caused by attempting to delete folders that CVS needs to have around
- if (findStatusByCode(status, CVSStatus.FOLDER_NEEDED_FOR_FILE_DELETIONS) == null) {
- throw e;
- }
- }
- } break;
- default:
- resource.move(new Path(newName), false /*force*/, null);
- break;
- }
- }
-
- /**
- * Modified a resource.
- * @param gen the sequence generator
- * @param file the file to modify
- */
- public static void modifyFile(SequenceGenerator gen, IFile file)
- throws IOException, CoreException {
- ByteArrayOutputStream os = new ByteArrayOutputStream();
- try {
- InputStream is = file.getContents(true);
- try {
- byte[] buffer = new byte[8192];
- int rsize;
- boolean changed = false;
- while ((rsize = is.read(buffer)) != -1) {
- double gaussian;
- do {
- gaussian = gen.nextGaussian() * 0.5; // large changes are less likely than small ones
- } while (gaussian > 1.0 || gaussian < -1.0);
- int changeSize = (int) (gaussian * rsize);
- changed = changed || changeSize != 0;
- os.write(buffer, 0, changeSize < 0 ? - changeSize : rsize); // shrink file
- writeRandomText(gen, os, changeSize); // enlarge file
- }
- if (! changed) os.write('!'); // make sure we actually did change the file
- file.setContents(new ByteArrayInputStream(os.toByteArray()), false /*force*/, true /*keepHistory*/, null);
- } finally {
- is.close();
- }
- } finally {
- os.close();
- }
- }
-
- /**
- * Creates a unique name.
- * Ensures that a deterministic sequence of names is generated for all files
- * and folders within a project, though not across sessions.
- *
- * @param gen the generator, or null if this name is to be globally unique
- * @param prefix a string prepended to the generated name
- * @param extension the file extension not including the period, null if none
- * @return the new name
- */
- public static String makeUniqueName(SequenceGenerator gen, String prefix, String extension)
- throws CoreException {
- StringBuffer name = new StringBuffer(prefix);
- name.append('-');
- if (gen == null) {
- name.append(SequenceGenerator.nextGloballyUniqueLong());
- } else {
- name.append(gen.nextUniqueInt());
- }
- if (extension != null) {
- name.append('.');
- name.append(extension);
- }
- return name.toString();
- }
-
- /**
- * Imports a .zip file into a container's root folder.
- * @param container the container
- * @param file the path of the .zip file
- */
- public static void importZip(IContainer container, File file)
- throws IOException, ZipException, InterruptedException, InvocationTargetException {
- ZipFile zipFile = new ZipFile(file);
- ZipFileStructureProvider provider = new ZipFileStructureProvider(zipFile);
- ImportOperation importOperation = new ImportOperation(container.getFullPath(),
- provider.getRoot(), provider, null);
- importOperation.setOverwriteResources(true); // don't ask
- importOperation.run(new NullProgressMonitor());
- Assert.assertTrue(importOperation.getStatus().isOK());
- }
-
- /**
- * Writes random text to an output stream.
- * @param gen the sequence generator
- */
- public static void writeRandomText(SequenceGenerator gen, OutputStream os, int count) throws IOException {
- while (count-- > 0) {
- int c = gen.nextInt(99);
- os.write((c >= 95) ? '\n' : c + ' ');
- }
- }
-
- /**
- * Writes random bytes to an output stream.
- * @param gen the sequence generator
- */
- public static void writeRandomBytes(SequenceGenerator gen, OutputStream os, int count) throws IOException {
- while (count-- > 0) {
- os.write(gen.nextInt(256));
- }
- }
-
- /**
- * Creates a random folder deeply below the root folder.
- * @param gen the sequence generator
- * @param root the root IFolder or IProject for the operation
- * @return the new folder
- */
- public static IFolder createRandomDeepFolder(SequenceGenerator gen, IContainer root) throws CoreException {
- IContainer container = pickRandomDeepContainer(gen, root);
- for (;;) {
- IFolder folder = createUniqueFolder(gen, container);
- container = folder;
- // 12.5% chance of creating a nested folder
- if (gen.nextInt(8) != 0) return folder;
- }
- }
-
- /**
- * Creates several random files deeply below the root folder.
- * @param gen the sequence generator
- * @param root the root IFolder or IProject for the operation
- * @param count the number of files to create
- * @param meanSize the mean size of file to create (in bytes)
- * @param probBinary the probability of a new file being binary as a percentage
- */
- public static void createRandomDeepFiles(SequenceGenerator gen, IContainer root, int count,
- int meanSize, int variance, int probBinary) throws IOException, CoreException {
- while (count-- > 0) {
- createUniqueFile(gen, pickRandomDeepContainer(gen, root), meanSize, variance, probBinary);
- }
- }
-
- /**
- * Deletes several random files deeply below the root folder.
- * @param gen the sequence generator
- * @param root the root IFolder or IProject for the operation
- * @param count the number of files to delete
- */
- public static void deleteRandomDeepFiles(SequenceGenerator gen, IContainer root, int count) throws CoreException {
- while (count-- > 0) {
- IFile file = pickRandomDeepFile(gen, root);
- if (file == null) break;
- deleteFileAndPrune(file);
- }
- }
-
- /**
- * Modifies several random files deeply below the root folder.
- * @param gen the sequence generator
- * @param root the root IFolder or IProject for the operation
- * @param count the number of files to modify
- */
- public static void modifyRandomDeepFiles(SequenceGenerator gen, IContainer root, int count)
- throws IOException, CoreException {
- // perhaps we can add a parameter for the "magnitude" of the change
- while (count-- > 0) {
- IFile file = pickRandomDeepFile(gen, root);
- if (file == null) break;
- modifyFile(gen, file);
- }
- }
-
- /**
- * Touches several random files deeply below the root folder.
- * @param gen the sequence generator
- * @param root the root IFolder or IProject for the operation
- * @param count the number of files to touch
- */
- public static void touchRandomDeepFiles(SequenceGenerator gen, IContainer root, int count) throws CoreException {
- while (count-- > 0) {
- IFile file = pickRandomDeepFile(gen, root);
- if (file == null) break;
- file.touch(null);
- }
- }
-
- /**
- * Renames several random files deeply below the root folder.
- * @param gen the sequence generator
- * @param root the root IFolder or IProject for the operation
- * @param count the number of files to touch
- */
- public static void renameRandomDeepFiles(SequenceGenerator gen, IContainer root, int count) throws CoreException {
- IProject project = root.getProject();
- while (count-- > 0) {
- IFile file = pickRandomDeepFile(gen, root);
- if (file == null) break;
- renameResource(file, makeUniqueName(gen, "file", file.getFileExtension()));
- }
- }
-
- /**
- * Picks a random file from the parent folder or project.
- * @param gen the sequence generator
- * @param parent the parent IFolder or IProject for the operation
- * @return the file that was chosen, or null if no suitable files
- */
- public static IFile pickRandomFile(SequenceGenerator gen, IContainer parent) throws CoreException {
- IResource[] members = filterResources(parent.members());
- for (int size = members.length; size != 0; --size) {
- int elem = gen.nextInt(size);
- if (members[elem] instanceof IFile) return (IFile) members[elem];
- System.arraycopy(members, elem + 1, members, elem, size - elem - 1);
- }
- return null;
- }
-
- /**
- * Picks a random folder from the parent folder or project.
- * @param gen the sequence generator
- * @param parent the parent IFolder or IProject for the operation
- * @return the folder, or null if no suitable folders
- */
- public static IFolder pickRandomFolder(SequenceGenerator gen, IContainer parent) throws CoreException {
- IResource[] members = filterResources(parent.members());
- for (int size = members.length; size != 0; --size) {
- int elem = gen.nextInt(size);
- if (members[elem] instanceof IFolder) return (IFolder) members[elem];
- System.arraycopy(members, elem + 1, members, elem, size - elem - 1);
- }
- return null;
- }
-
- /**
- * Picks a random file deeply from the root folder or project.
- * @param gen the sequence generator
- * @param root the root IFolder or IProject for the operation
- * @return the file that was chosen, or null if no suitable files
- */
- public static IFile pickRandomDeepFile(SequenceGenerator gen, IContainer root) throws CoreException {
- IResource[] members = filterResources(root.members());
- for (int size = members.length; size != 0; --size) {
- int elem = gen.nextInt(size);
- IResource resource = members[elem];
- if (resource instanceof IFile) return (IFile) resource;
- if (resource instanceof IFolder) {
- IFile file = pickRandomDeepFile(gen, (IFolder) resource);
- if (file != null) return file;
- }
- System.arraycopy(members, elem + 1, members, elem, size - elem - 1);
- }
- return null;
- }
-
- /**
- * Picks a random folder deeply from the root folder or project.
- * May pick the project's root container.
- * @param gen the sequence generator
- * @param root the root IFolder or IProject for the operation
- * @return the container that was chosen, never null
- */
- public static IContainer pickRandomDeepContainer(SequenceGenerator gen, IContainer root) throws CoreException {
- if (gen.nextInt(6) == 0) {
- IResource[] members = filterResources(root.members());
- for (int size = members.length; size != 0; --size) {
- int elem = gen.nextInt(size);
- IResource resource = members[elem];
- if (resource instanceof IFolder) {
- return pickRandomDeepContainer(gen, (IFolder) resource);
- }
- System.arraycopy(members, elem + 1, members, elem, size - elem - 1);
- }
- }
- Assert.assertTrue(isValidContainer(root));
- return root;
- }
-
- /**
- * Returns true if the folder does not contain any real files.
- */
- public static boolean isFolderEmpty(IFolder folder) throws CoreException {
- IResource[] members = folder.members();
- for (int i = 0; i < members.length; ++i) {
- if (isValidFile(members[i]) || isValidFolder(members[i])) return false;
- }
- return true;
- }
-
- /**
- * Returns true iff file is a valid IFile (that should not be ignored).
- */
- public static boolean isValidFile(IResource file) throws CoreException {
- String name = file.getName();
- return file instanceof IFile
- && ! file.isPhantom()
- && ! name.equals(".classpath")
- && ! name.equals(".project")
- && ! name.equals(".vcm_meta");
- }
-
- /**
- * Returns true iff folder is a valid IFolder (that should not be ignored).
- */
- public static boolean isValidFolder(IResource folder) throws CoreException {
- String name = folder.getName();
- return folder instanceof IFolder
- && ! folder.isPhantom()
- && ! name.equals("CVS")
- && ! name.equals("bin");
- }
-
- /**
- * Returns true iff container is a valid IFolder or IProject (that should not be ignored).
- */
- public static boolean isValidContainer(IResource container) throws CoreException {
- return container instanceof IProject || isValidFolder(container);
- }
-
- /**
- * Returns true iff resource is a valid IFile, IFolder or IProject (that should not be ignored).
- */
- public static boolean isValidResource(IResource resource) throws CoreException {
- return isValidFile(resource) || isValidContainer(resource);
- }
-
- /**
- * Filters and sorts an array of resources to ensure deterministic behaviour across
- * sessions. The general idea is to guarantee that given a known sequence of
- * pseudo-random numbers, we will always pick the same sequence of files and
- * folders each time we repeat the test.
- */
- public static IResource[] filterResources(IResource[] resources) throws CoreException {
- List list = new ArrayList(resources.length);
- for (int i = 0; i < resources.length; ++i) {
- if (isValidResource(resources[i])) list.add(resources[i]);
- }
- if (list.size() != resources.length) {
- resources = (IResource[]) list.toArray(new IResource[list.size()]);
- }
- Arrays.sort(resources, new Comparator() {
- public int compare(Object a, Object b) {
- return ((IResource) a).getName().compareTo(((IResource) b).getName());
- }
- });
- return resources;
- }
-
- /*** DIFF SUPPORT ***/
-
- public static boolean isEmpty(IDiffContainer node) {
- if (node == null) return true;
- if (node.getKind() != 0) return false;
- IDiffElement[] children = node.getChildren();
- for (int i = 0; i < children.length; i++) {
- if (!isEmpty(children[i])) return false;
- }
- return true;
- }
- public static boolean isEmpty(IDiffElement element) {
- if (element == null) return true;
- if (element.getKind() != 0) return false;
- if (element instanceof IDiffContainer) {
- IDiffElement[] children = ((DiffNode)element).getChildren();
- for (int i = 0; i < children.length; i++) {
- if (!isEmpty(children[i])) return false;
- }
- }
- return true;
- }
-
- /*** UI SUPPORT ***/
-
- /**
- * Opens the specified wizard, then notifies the waiter.
- * The WizardDialog instance is passed as argument to notify() in the waiter.
- */
- public static void waitForWizardToOpen(Shell parent, IWizard wizard, final Waiter waiter) {
- WizardDialog dialog = new WizardDialog(parent, wizard) {
- public int open() {
- // create the window's controls
- create();
- // hook into the event loop so we get called back when the wizard is up and running
- final Display display = getContents().getDisplay();
- final WizardDialog dialog = this;
- display.asyncExec(new Runnable() {
- public void run() {
- while (display.readAndDispatch()); // process any other pending messages first
- waiter.notify(dialog);
- }
- });
- // call open (does not create the window's controls a second time)
- return super.open();
- }
- };
- dialog.open();
- }
-
- /**
- * Notifies the waiter when a Shell matching the specified criteria opens.
- * The Shell instance is passed as argument to notify() in the waiter.
- *
- * @param display the root display
- * @param pollingPeriod the number of milliseconds to wait between polls
- * @param value a value used for matching
- * @param criteria a strategy for matching the controls with a value,
- * or null to match any Shell.
- * @param waiter the waiter to be notified
- */
- public static void waitForShellToOpen(final Display display, final int pollingPeriod,
- final Object value, final ICriteria criteria, final Waiter waiter) {
- final Runnable hook = new Runnable() {
- public void run() {
- if (display.isDisposed()) return;
- Shell[] shells = display.getShells();
- for (int i = 0; i < shells.length; ++i) {
- Shell shell = shells[i];
- if (criteria != null && ! criteria.test(shell, value)) continue;
- if (! waiter.notify(shell)) return;
- }
- // poll again as soon as possible
- if (waiter.keepWaiting()) {
- display.timerExec(pollingPeriod, this);
- }
- }
- };
- hook.run();
- }
-
-
- /**
- * Installs a watchdog for JFace error dialogs for the current display.
- * The Dialog instance is passed as argument to notify() in the waiter.
- * Recognized dialogs:
- * - ErrorDialog
- * - InternalErrorDialog
- *
- * @param display the root display
- * @param pollingPeriod the number of milliseconds to wait between polls
- * @param waiter the waiter to be notified
- */
- public static void waitForErrorDialog(Display display, int pollingPeriod, final Waiter waiter) {
- ICriteria criteria = new ICriteria() {
- public boolean test(Object candidate, Object value) {
- Shell shell = (Shell) candidate;
- if (shell.isDisposed()) return false;
- Object data = shell.getData();
- if (data == null) return false;
- return data instanceof ErrorDialog || data instanceof InternalErrorDialog;
- }
- };
- waitForShellToOpen(display, pollingPeriod, null, criteria, new Waiter() {
- public boolean keepWaiting() {
- return waiter.keepWaiting();
- }
-
- public boolean notify(Object object) {
- return waiter.notify(((Shell) object).getData());
- }
- });
- }
-
- /**
- * Finds a Control in a Composite hierarchy matching the specified criteria.
- *
- * @param root the root of the hierarchy to search
- * @param clazz the Class representing the precise type of Control to find
- * @param value a value used for matching
- * @param criteria a strategy for matching the controls with a value,
- * or null to match anything of the right class.
- * @return the first matching Control, or null if none found.
- */
- public static Control findControl(Composite root, Class clazz, Object value, ICriteria criteria) {
- if (clazz.isAssignableFrom(root.getClass())) {
- if (criteria == null || criteria.test(root, value)) return root;
- }
- Control[] children = root.getChildren();
- for (int i = 0; i < children.length; ++i) {
- final Control candidate = children[i];
- if (candidate instanceof Composite) {
- Control c = findControl((Composite) candidate, clazz, value, criteria);
- if (c != null) return c;
- } else {
- if (clazz.isAssignableFrom(candidate.getClass())) {
- if (criteria == null || criteria.test(candidate, value)) return candidate;
- }
- }
- }
- return null;
- }
-
- /**
- * Finds a Control in a Composite hierarchy with the specified text string.
- * Note: clazz must specify a Control subclass that defines getText()
- *
- * @param root the root of the hierarchy to search
- * @param clazz the Class representing the precise type of Control to find
- * @param text the text string to find
- * @return the first matching Control, or null if none found.
- */
- public static Control findControlWithText(Composite root, Class clazz, String text) {
- return findControl(root, clazz, text, new ICriteria() {
- public boolean test(Object control, Object value) {
- // getText is only defined on certain subclasses of Composite
- // so we must use reflection to find the method
- try {
- Method m = control.getClass().getMethod("getText", new Class[0]);
- String text = (String) m.invoke(control, new Object[0]);
- return value.equals(stripMnemonicEscapes(text));
- } catch (Exception e) {
- e.printStackTrace();
- Assert.fail("Could not invoke method getText()");
- }
- return false;
- }
- });
- }
-
- /**
- * Posts a fake event to the queue.
- * Fills in the event type and widget fields.
- * @param event the Event
- */
- public static void postEvent(final Widget widget, final int eventType, final Event event) {
- Display display = widget.getDisplay();
- event.type = eventType;
- event.widget = widget;
- display.asyncExec(new Runnable() {
- public void run() {
- widget.notifyListeners(eventType, event);
- }
- });
- }
-
- /**
- * Strips mnemonic escapes from a text label.
- */
- public static String stripMnemonicEscapes(String label) {
- StringBuffer buf = new StringBuffer();
- int length = label.length();
- for (int i = 0; i < length; ++i) {
- char c = label.charAt(i);
- if (c == '&') {
- i += 1;
- if (i < length) c = label.charAt(i);
- }
- buf.append(c);
- }
- return buf.toString();
- }
-
- /**
- * Process pending events for the current display, until at least the
- * specified number of milliseconds elapses.
- */
- public static void processEventsUntil(int hiatus) {
- Display display = Display.getCurrent();
- Assert.assertNotNull(display);
- final boolean done[] = new boolean[] { hiatus == 0 };
- if (hiatus != 0) display.timerExec(hiatus, new Runnable() {
- public void run() { done[0] = true; }
- });
- for (;;) {
- while (display.readAndDispatch());
- if (done[0]) return;
- display.sleep();
- }
- }
-
- /**
- * Process pending events for the current display, until resumed by the user.
- * Very useful for inspecting intermediate results while debugging.
- */
- public static void processEventsUntilResumed(String title) {
- Display display = Display.getCurrent();
- Assert.assertNotNull(display);
- Shell shell = new Shell(display, SWT.CLOSE);
- shell.setText("Close me to resume: " + title);
- shell.setBounds(0, 0, 500, 30);
- shell.open();
- while (! shell.isDisposed()) {
- while (! display.readAndDispatch()) display.sleep();
- }
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/Waiter.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/Waiter.java
deleted file mode 100644
index 8fb02047a..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/Waiter.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui;
-
-
-
-/**
- * Abstract listener used for the generic problem of waiting for
- * something to happen and retrieving some related information.
- * e.g. Waiting for a window with a given title to open and getting its handle.
- */
-public abstract class Waiter {
- /**
- * Called when the desired event has occurred.
- * @param object an object related to the event, type depends on the context
- * @return true to keep waiting, otherwise false
- */
- public abstract boolean notify(Object object);
-
- /**
- * Called after each unsuccessful poll for the event.
- * @return true to keep waiting, otherwise false
- */
- public boolean keepWaiting() {
- return true;
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/AllTests.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/AllTests.java
deleted file mode 100644
index 29c6e3ff6..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/AllTests.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.benchmark;
-
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class AllTests extends TestSuite {
- public static Test suite() {
- TestSuite suite = new TestSuite();
- suite.addTestSuite(SyncTests.class);
- suite.addTestSuite(WorkflowTests.class);
- //suite.addTestSuite(CommandTests.class);
- return new BenchmarkTestSetup(suite);
- }
-
- public AllTests(String name) {
- super(name);
- }
- public AllTests() {
- super();
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/BenchmarkTestSetup.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/BenchmarkTestSetup.java
deleted file mode 100644
index 4dc51844d..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/BenchmarkTestSetup.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.benchmark;
-
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-
-import junit.framework.Test;
-import org.eclipse.core.runtime.IPluginDescriptor;
-import org.eclipse.core.runtime.IPluginRegistry;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
-
-public class BenchmarkTestSetup extends CVSTestSetup {
- public static final File BIG_ZIP_FILE;
- public static final File SMALL_ZIP_FILE;
- public static final File TINY_ZIP_FILE;
-
- // Static initializer for constants
- static {
- try {
- BIG_ZIP_FILE = getTestFile("benchmarkBig.zip");
- SMALL_ZIP_FILE = getTestFile("benchmarkSmall.zip");
- TINY_ZIP_FILE = getTestFile("benchmarkTiny.zip");
- } catch (IOException e) {
- throw new Error(e.getMessage());
- }
- }
-
- public static File getTestFile(String name) throws IOException {
- IPluginRegistry registry = Platform.getPluginRegistry();
- IPluginDescriptor descriptor = registry.getPluginDescriptor("org.eclipse.team.tests.cvs.core");
- URL baseURL = descriptor.getInstallURL();
- URL url = new URL(baseURL, "resources/BenchmarkTest/" + name);
- url = Platform.asLocalURL(url);
- if (url.getProtocol().equals("file")) {
- return new File(url.getFile()).getAbsoluteFile();
- }
- throw new IOException("Cannot find test file: " + name);
- }
-
- public BenchmarkTestSetup(Test test) {
- super(test);
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/CommandTests.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/CommandTests.java
deleted file mode 100644
index ab2378048..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/CommandTests.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.benchmark;
-
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-
-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.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceVisitor;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.team.internal.ccvs.core.CVSException;
-import org.eclipse.team.internal.ccvs.core.CVSTag;
-import org.eclipse.team.internal.ccvs.core.client.Command.KSubstOption;
-import org.eclipse.team.tests.ccvs.core.CommandLineCVSClient;
-import org.eclipse.team.tests.ccvs.core.EclipseCVSClient;
-import org.eclipse.team.tests.ccvs.core.ICVSClient;
-import org.eclipse.team.tests.ccvs.ui.CVSUITestCase;
-import org.eclipse.team.tests.ccvs.ui.Util;
-
-public class CommandTests extends CVSUITestCase {
- private String baseName;
- private IProject referenceProject;
- private IProject eclipseProject;
- private IProject uiProject;
-
- public CommandTests(Test test) {
- super(test);
- }
- public static Test suite() {
- return new BenchmarkTestSetup(new TestSuite(CommandTests.class));
- }
-
- public void setUp() throws CVSException {
- super.setUp();
- try {
- baseName = Util.makeUniqueName(null, "thisproject", null);
- referenceProject = Util.createProject(baseName + "-reference");
- eclipseProject = Util.createProject(baseName + "-eclipse");
- uiProject = Util.createProject(baseName);
- } catch (CoreException e) {
- throw new CVSException(e);
- }
- }
-
- public void testImportAddCommitCheckout() throws Throwable {
- // import a project using each client
- new ComparativeTest("import/add/commit big project") {
- protected void runCommandTest(final IContainer localRoot, ICVSClient client) throws Exception {
- // use the import command to create a new module
- IFolder folder = localRoot.getFolder(new Path("empty_folder"));
- folder.create(false /*force*/, true /*local*/, null);
- execute(client, "import empty module", folder, "import",
- new String[] { },
- new String[] { "-m", "initial import" },
- new String[] { localRoot.getName(), "vendor", "start" });
- folder.delete(false /*force*/, null);
-
- // checkout the project
- localRoot.delete(false /*force*/, null);
- execute(client, "checkout module", localRoot.getParent(), "co",
- new String[] { },
- new String[] { },
- new String[] { localRoot.getName() });
-
- // prepare contents
- prepareContents(localRoot);
-
- // determine the set of files and folders to be added
- final Map /* from KSubstOption to String */ files = new HashMap();
- final Set /* of String */ folders = new TreeSet();
- final int trim = localRoot.getProjectRelativePath().segmentCount();
- localRoot.accept(new IResourceVisitor() {
- public boolean visit(IResource resource) throws CoreException {
- if (! resource.equals(localRoot)) {
- String name = resource.getProjectRelativePath().removeFirstSegments(trim).toString();
- if (resource.getType() == IResource.FILE) {
- KSubstOption ksubst = KSubstOption.fromFile((IFile) resource);
- Set set = (Set) files.get(ksubst);
- if (set == null) {
- set = new HashSet();
- files.put(ksubst, set);
- }
- set.add(name);
- } else {
- folders.add(name);
- }
- }
- return true;
- }
- }, IResource.DEPTH_INFINITE, false);
-
- // add all folders
- if (!folders.isEmpty()) {
- executeInParts(client, "add folders", localRoot, "add",
- new String[] { },
- new String[] { },
- (String[])folders.toArray(new String[folders.size()]));
- }
- // add all files
- for (Iterator it = files.entrySet().iterator(); it.hasNext();) {
- Map.Entry entry = (Map.Entry) it.next();
- KSubstOption ksubst = (KSubstOption) entry.getKey();
- Set set = (Set) entry.getValue();
- executeInParts(client, "add files (" + ksubst.getShortDisplayText() + ")", localRoot, "add",
- new String[] { },
- new String[] { ksubst.toString() },
- (String[])set.toArray(new String[set.size()]));
- }
-
- // commit everything
- execute(client, "commit module", localRoot, "ci",
- new String[] { },
- new String[] { "-m", "dummy message" },
- new String[] { });
- }
- protected void runUITest(IContainer localRoot) throws Exception {
- prepareContents(localRoot);
- actionShareProject(uiProject);
- syncCommitResources(new IResource[] { uiProject }, null, "initial");
- }
- private void prepareContents(IContainer localRoot) throws Exception {
- Util.importZip(localRoot, BenchmarkTestSetup.BIG_ZIP_FILE);
- }
- }.run();
-
- // check it out using each client
- new ComparativeTest("checkout big project") {
- protected void runCommandTest(IContainer localRoot, ICVSClient client) throws Exception {
- execute(client, "checkout module", localRoot.getParent(), "co",
- new String[] { },
- new String[] { "-P" },
- new String[] { localRoot.getName() });
- }
- protected void runUITest(IContainer localRoot) throws Exception {
- actionCheckoutProjects(new String[] { localRoot.getName() }, new CVSTag[] { CVSTag.DEFAULT });
- }
- protected void setUp(IContainer localRoot) throws Exception {
- // delete then recreate the container
- IProject project = (IProject) localRoot;
- Util.deleteProject(project);
- project.create(null);
- project.open(null);
- // delete the .project file (avoid .project is in the way error)
- IFile file = project.getFile(".project");
- file.delete(false /*force*/, null);
- }
- }.run();
- }
-
- protected abstract class ComparativeTest {
- private String name;
- public ComparativeTest(String name) {
- this.name = name;
- }
- public void run() throws Exception {
- startGroup(name);
-
- startGroup("command line client");
- setUp(referenceProject);
- runCommandTest(referenceProject, CommandLineCVSClient.INSTANCE);
- tearDown(referenceProject);
- endGroup();
-
- startGroup("eclipse client");
- setUp(eclipseProject);
- runCommandTest(eclipseProject, EclipseCVSClient.INSTANCE);
- tearDown(eclipseProject);
- endGroup();
-
- startGroup("user interface");
- setUp(uiProject);
- runUITest(uiProject);
- tearDown(uiProject);
- endGroup();
-
- endGroup();
- }
- protected abstract void runCommandTest(IContainer localRoot, ICVSClient client) throws Exception ;
- protected abstract void runUITest(IContainer localRoot) throws Exception;
- protected void setUp(IContainer localRoot) throws Exception {
- }
- protected void tearDown(IContainer localRoot) throws Exception {
- }
- protected void execute(ICVSClient client, String taskname,
- IContainer localRoot, String command,
- String[] globalOptions, String[] localOptions, String[] arguments) throws CVSException {
- // The execution time for the client will include overhead associated with
- // computing the command to be run and cleaning up Eclipse state once it has
- // completed, including notifying resource delta listener. Since all clients
- // in the Eclipse environment are subject to this overhead, the theory is that
- // it will be a constant factor that we can neglect.
- startTask(taskname);
- client.executeCommand(testRepository, localRoot, command, globalOptions, localOptions, arguments);
- endTask();
- }
- protected void executeInParts(ICVSClient client, String taskname,
- IContainer localRoot, String command,
- String[] globalOptions, String[] localOptions, String[] arguments) throws CVSException {
- // There are problems executing commands with too many arguments
- // so we have to break them up into chunks.
- startTask(taskname);
- int i = 0;
- do {
- int len = Math.min(200, arguments.length - i);
- String[] args;
- if (i == 0 && len == arguments.length) {
- args = arguments;
- } else {
- args = new String[len];
- System.arraycopy(arguments, i, args, 0, len);
- }
- client.executeCommand(testRepository, localRoot, command, globalOptions, localOptions, args);
- i += len;
- } while (arguments.length - i > 0);
- endTask();
- }
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/SyncTests.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/SyncTests.java
deleted file mode 100644
index 8a605054d..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/SyncTests.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.benchmark;
-
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.team.internal.ccvs.core.CVSTag;
-import org.eclipse.team.tests.ccvs.ui.CVSUITestCase;
-import org.eclipse.team.tests.ccvs.ui.SequenceGenerator;
-import org.eclipse.team.tests.ccvs.ui.Util;
-
-public class SyncTests extends CVSUITestCase {
- private static final int FILE_SIZE_MEAN = 16384;
- private static final int FILE_SIZE_VARIANCE = 0;
- private static final int PROB_BINARY = 0;
-
- public SyncTests(Test test) {
- super(test);
- }
-
- public static Test suite() {
- return new BenchmarkTestSetup(new TestSuite(SyncTests.class));
- }
-
- public void testSync0() throws Exception {
- // test sync on project with no changes
- IProject project = setupOutProject();
- startGroup("test sync with no changes");
- syncCommitResources(new IResource[] { project }, null, "");
- endGroup();
- }
-
- public void testSync1() throws Exception {
- runTestSync(1);
- }
-
- public void testSync10() throws Exception {
- runTestSync(10);
- }
-
- public void testSync100() throws Exception {
- runTestSync(100);
- }
-
- protected IProject setupOutProject() throws Exception {
- IProject project = createAndImportProject("testSync", BenchmarkTestSetup.SMALL_ZIP_FILE);
- disableLog();
- actionShareProject(project);
- syncCommitResources(new IResource[] { project }, null, "initial");
- enableLog();
- return project;
- }
-
- /**
- * Runs a sequence of operations for the synchronizer tests.
- * A parallel project is used to generate incoming changes.
- */
- protected void runTestSync(int size) throws Exception {
- final SequenceGenerator gen = new SequenceGenerator();
-
- // setup out project then move it out of the way
- IProject outProject = setupOutProject();
- String moduleName = outProject.getName();
- Util.renameResource(outProject, moduleName + "out");
- outProject = Util.getProject(moduleName + "out");
-
- // setup in project
- disableLog();
- actionCheckoutProjects(new String[] { moduleName }, new CVSTag[] { new CVSTag() });
- enableLog();
- IProject inProject = Util.getProject(moduleName);
-
- /*** outgoing and incoming changes ***/
- startGroup("synchronize " + size + " added file(s)");
- Util.createRandomDeepFiles(gen, outProject, size, FILE_SIZE_MEAN, FILE_SIZE_VARIANCE, PROB_BINARY);
- startGroup("as outgoing changes");
- syncCommitResources(new IResource[] { outProject }, null, "");
- endGroup();
- startGroup("as incoming changes");
- syncUpdateResources(new IResource[] { inProject }, null);
- endGroup();
- endGroup();
-
- startGroup("synchronize " + size + " modified file(s)");
- Util.modifyRandomDeepFiles(gen, outProject, size);
- startGroup("as outgoing changes");
- syncCommitResources(new IResource[] { outProject }, null, "");
- endGroup();
- startGroup("as incoming changes");
- syncUpdateResources(new IResource[] { inProject }, null);
- endGroup();
- endGroup();
-
- startGroup("synchronize " + size + " removed file(s)");
- Util.deleteRandomDeepFiles(gen, outProject, size);
- startGroup("as outgoing changes");
- syncCommitResources(new IResource[] { outProject }, null, "");
- endGroup();
- startGroup("as incoming changes");
- syncUpdateResources(new IResource[] { inProject }, null);
- endGroup();
- endGroup();
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/WorkflowTests.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/WorkflowTests.java
deleted file mode 100644
index 530023dbc..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/WorkflowTests.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.benchmark;
-
-
-import java.io.File;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.team.internal.ccvs.core.CVSTag;
-import org.eclipse.team.tests.ccvs.ui.CVSUITestCase;
-import org.eclipse.team.tests.ccvs.ui.SequenceGenerator;
-import org.eclipse.team.tests.ccvs.ui.Util;
-
-public class WorkflowTests extends CVSUITestCase {
- private int FILE_SIZE_MEAN = 16384;
- private int FILE_SIZE_VARIANCE = 12288;
- private int PROB_BINARY = 5;
- public WorkflowTests(Test test) {
- super(test);
- }
-
- public static Test suite() {
- return new BenchmarkTestSetup(new TestSuite(WorkflowTests.class));
- //return new BenchmarkTestSetup(new WorkflowTests("testTinyWorkflow"));
- }
-
- public void testBigWorkflow() throws Exception {
- runWorkflowTests("testBig", BenchmarkTestSetup.BIG_ZIP_FILE);
- }
-
- public void testSmallWorkflow() throws Exception {
- runWorkflowTests("testSmall", BenchmarkTestSetup.SMALL_ZIP_FILE);
- }
-
- public void testTinyWorkflow() throws Exception {
- runWorkflowTests("testTiny", BenchmarkTestSetup.TINY_ZIP_FILE);
- }
-
- /**
- * Runs a series of incoming and outgoing workflow-related tests.
- */
- protected void runWorkflowTests(String name, File initialContents) throws Exception {
- final SequenceGenerator gen = new SequenceGenerator();
- IProject outProject = createAndImportProject(name, initialContents);
-
- // test project sharing
- startGroup("test project sharing");
- actionShareProject(outProject);
- endGroup();
-
- // test initial project commit
- startGroup("test initial project commit");
- syncCommitResources(new IResource[] { outProject }, null, "initial");
- endGroup();
-
- // move the project out of the way
- String moduleName = outProject.getName();
- Util.renameResource(outProject, moduleName + "out");
- outProject = Util.getProject(moduleName + "out");
-
- // test initial project checkout
- startGroup("test initial project checkout");
- actionCheckoutProjects(new String[] { moduleName }, new CVSTag[] { new CVSTag() });
- endGroup();
- IProject inProject = Util.getProject(moduleName);
-
- // test scenarios
- startGroup("test incoming and outgoing change scenarios");
- startGroup("adding a new component - localized additions and some changes");
- Util.modifyRandomDeepFiles(gen, outProject, 5);
- Util.touchRandomDeepFiles(gen, outProject, 2);
- IFolder componentRoot = Util.createRandomDeepFolder(gen, outProject);
- Util.createRandomDeepFiles(gen, componentRoot, 12, FILE_SIZE_MEAN, FILE_SIZE_VARIANCE, PROB_BINARY);
- syncCommitResources(new IResource[] { outProject }, null, "");
- endGroup();
-
- startGroup("catching up to a new component - localized additions and some changes");
- syncUpdateResources(new IResource[] { inProject }, null);
- endGroup();
-
- startGroup("fixing a bug - localized changes");
- Util.modifyRandomDeepFiles(gen, componentRoot, 2);
- Util.touchRandomDeepFiles(gen, componentRoot, 2);
- syncCommitResources(new IResource[] { outProject }, null, "");
- endGroup();
-
- startGroup("catching up to a bug fix - localized changes");
- syncUpdateResources(new IResource[] { inProject }, null);
- endGroup();
-
- startGroup("moving a package - scattered changes, files moved");
- Util.modifyRandomDeepFiles(gen, outProject, 5); // a few scattered changes
- Util.modifyRandomDeepFiles(gen, componentRoot, 12); // changes to "package" stmt
- Util.renameResource(componentRoot, Util.makeUniqueName(gen, "folder", null));
- syncCommitResources(new IResource[] { outProject }, null, "");
- endGroup();
-
- startGroup("catching up to a moved package - scattered changes, files moved");
- syncUpdateResources(new IResource[] { inProject }, null);
- endGroup();
-
- startGroup("big refactoring - scattered changes, files renamed and balanced additions/deletions");
- Util.deleteRandomDeepFiles(gen, outProject, 4); // some stuff deleted
- Util.modifyRandomDeepFiles(gen, outProject, 20); // many scattered changes
- Util.renameRandomDeepFiles(gen, outProject, 5); // renamed some stuff
- Util.createRandomDeepFiles(gen, outProject, 4, FILE_SIZE_MEAN, FILE_SIZE_VARIANCE, PROB_BINARY); // some new stuff added
- syncCommitResources(new IResource[] { outProject }, null, "");
- endGroup();
-
- startGroup("catching up to a big refactoring - scattered changes, files renamed and balanced additions/deletions");
- syncUpdateResources(new IResource[] { inProject }, null);
- endGroup();
- endGroup();
-
- // test tagging a project
- startGroup("tag project");
- actionCVSTag(new IResource[] { outProject }, "v101");
- endGroup();
-
- // replace with remote contents
- startGroup("test replace with remote contents scenarios");
- startGroup("no local dirty files, no remote changes");
- actionReplaceWithRemote(new IResource[] { inProject });
- endGroup();
-
- startGroup("abandoning some local work, no remote changes");
- Util.deleteRandomDeepFiles(gen, inProject, 4); // some stuff locally deleted
- Util.modifyRandomDeepFiles(gen, inProject, 6); // a few unimportant changes to forget
- Util.createRandomDeepFiles(gen, inProject, 4, FILE_SIZE_MEAN, FILE_SIZE_VARIANCE, PROB_BINARY); // some new work to abandon
- actionReplaceWithRemote(new IResource[] { inProject });
- endGroup();
-
- startGroup("no local dirty files, many remote changes");
- // e.g. returning from a long vacation
- Util.deleteRandomDeepFiles(gen, outProject, 10); // some components obsoleted
- Util.modifyRandomDeepFiles(gen, outProject, 42); // many changes
- Util.renameRandomDeepFiles(gen, outProject, 8); // evidence of some refactoring
- Util.createRandomDeepFiles(gen, outProject, 10, FILE_SIZE_MEAN, FILE_SIZE_VARIANCE, PROB_BINARY); // a few new components added
- disableLog();
- syncCommitResources(new IResource[] { outProject }, null, "");
- enableLog();
- actionReplaceWithRemote(new IResource[] { inProject });
- endGroup();
- endGroup();
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/ArgumentParser.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/ArgumentParser.java
deleted file mode 100644
index aa6ca6925..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/ArgumentParser.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.logformatter;
-
-
-public class ArgumentParser {
- protected ArgumentParser() {
- }
-
- public boolean parse(String[] args) {
- int index = 0;
- String option = null;
- for (int i = 0; i < args.length; i++) {
- String arg = args[i];
- if (arg == null) continue;
- if (arg.charAt(0) == '-') {
- if (option != null && ! handleOption(option, null)) return false;
- option = arg;
- } else if (option != null) {
- if (! handleOption(option, arg)) return false;
- option = null;
- } else {
- if (! handleArgument(index++, arg)) return false;
- }
- }
- if (option != null && ! handleOption(option, null)) return false;
- return handleFinished();
- }
-
- protected boolean handleFinished() {
- return true;
- }
-
- protected boolean handleArgument(int index, String arg) {
- return false;
- }
-
- protected boolean handleOption(String option, String arg) {
- return false;
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/CaseEntry.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/CaseEntry.java
deleted file mode 100644
index 754c6809b..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/CaseEntry.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.logformatter;
-
-
-import org.xml.sax.Attributes;
-
-public class CaseEntry extends LogEntryContainer {
- private String className;
-
- public CaseEntry(LogEntryContainer parent, Attributes attributes) {
- this(parent, attributes.getValue("name"), attributes.getValue("class"));
- }
-
- public CaseEntry(LogEntryContainer parent, String name, String className) {
- super(parent, name);
- this.className = (className != null) ? className : "unknown";
- }
-
- public void accept(ILogEntryVisitor visitor) {
- visitor.visitCaseEntry(this);
- }
-
- /**
- * Returns the class name of the test case.
- */
- public String getClassName() {
- return className;
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/DelimitedValuesWriter.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/DelimitedValuesWriter.java
deleted file mode 100644
index 662043555..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/DelimitedValuesWriter.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.logformatter;
-
-
-import java.io.PrintStream;
-
-public class DelimitedValuesWriter {
- private static final String BEGIN_QUOTE = "\"";
- private static final String END_QUOTE = "\"";
- private PrintStream ps;
- private String delimiter;
- private boolean quoted;
- private boolean firstField;
-
- public DelimitedValuesWriter(PrintStream ps, String delimiter, boolean quoted) {
- this.ps = ps;
- this.delimiter = delimiter;
- this.quoted = quoted;
- this.firstField = true;
- }
-
- public void printField(String field) {
- if (firstField) {
- firstField = false;
- } else {
- ps.print(delimiter);
- }
- if (quoted) ps.print(BEGIN_QUOTE);
- ps.print(field);
- if (quoted) ps.print(END_QUOTE);
- }
- public void printFields(String[] fields) {
- for (int i = 0; i < fields.length; i++) {
- printField(fields[i]);
- }
- }
- public void printRecord(String[] fields) {
- printFields(fields);
- endRecord();
- }
- public void endRecord() {
- ps.println();
- firstField = true;
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/GroupEntry.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/GroupEntry.java
deleted file mode 100644
index 6a59cdfd0..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/GroupEntry.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.logformatter;
-
-
-import org.xml.sax.Attributes;
-
-public class GroupEntry extends LogEntryContainer {
- public GroupEntry(LogEntryContainer parent, Attributes attributes) {
- this(parent, attributes.getValue("name"));
- }
-
- public GroupEntry(LogEntryContainer parent, String name) {
- super(parent, name);
- }
-
- public void accept(ILogEntryVisitor visitor) {
- visitor.visitGroupEntry(this);
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/ILogEntryVisitor.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/ILogEntryVisitor.java
deleted file mode 100644
index dce734c51..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/ILogEntryVisitor.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.logformatter;
-
-
-public interface ILogEntryVisitor {
- public void visitRootEntry(RootEntry entry);
- public void visitCaseEntry(CaseEntry entry);
- public void visitGroupEntry(GroupEntry entry);
- public void visitTaskEntry(TaskEntry entry);
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/LogEntry.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/LogEntry.java
deleted file mode 100644
index 3650b9300..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/LogEntry.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.logformatter;
-
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-
-import junit.framework.Assert;
-import org.xml.sax.Attributes;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.XMLReader;
-import org.xml.sax.helpers.DefaultHandler;
-import org.xml.sax.helpers.XMLReaderFactory;
-
-public abstract class LogEntry {
- LogEntryContainer parent;
- String name;
-
- /**
- * Creates a new log entry with the specified parent.
- * @param parent the parent container
- * @param name the name of the entry
- */
- public LogEntry(LogEntryContainer parent, String name) {
- this.parent = parent;
- this.name = name != null ? name : "unknown";
- if (parent != null) parent.addEntry(this);
- }
-
- /**
- * Accepts a visitor.
- * @param visitor the visitor
- */
- public abstract void accept(ILogEntryVisitor visitor);
-
- /**
- * Returns the name of this entry.
- */
- public String getName() {
- return name;
- }
-
- /**
- * Returns the parent container of this entry, or null if none.
- */
- public LogEntryContainer getParent() {
- return parent;
- }
-
- /**
- * Reads an array of log entries from a file.
- * @return the log entries
- */
- public static RootEntry readLog(File file) throws IOException, SAXException {
- XMLReader reader = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
- LogContentHandler contentHandler = new LogContentHandler();
- reader.setContentHandler(contentHandler);
- reader.parse(new InputSource(new FileInputStream(file)));
- return contentHandler.getLogEntries();
- }
-
- private static class LogContentHandler extends DefaultHandler implements ContentHandler {
- private RootEntry root = null;
- private LogEntry current = null;
-
- public RootEntry getLogEntries() {
- return root;
- }
- public void startElement(String uri, String localName, String qName, Attributes attributes)
- throws SAXException {
- if ("log".equals(localName)) {
- Assert.assertNull(current);
- current = root = new RootEntry(null, attributes);
- } else if ("case".equals(localName)) {
- Assert.assertNotNull(current);
- Assert.assertTrue(current instanceof RootEntry);
- current = new CaseEntry((LogEntryContainer) current, attributes);
- } else if ("group".equals(localName)) {
- Assert.assertNotNull(current);
- Assert.assertTrue(current instanceof CaseEntry || current instanceof GroupEntry);
- current = new GroupEntry((LogEntryContainer) current, attributes);
- } else if ("task".equals(localName)) {
- Assert.assertNotNull(current);
- Assert.assertTrue(current instanceof CaseEntry || current instanceof GroupEntry);
- current = new TaskEntry((LogEntryContainer) current, attributes);
- } else if ("result".equals(localName)) {
- Assert.assertNotNull(current);
- Assert.assertTrue(current instanceof TaskEntry);
- ((TaskEntry) current).addResult(new Result(attributes));
- } else if ("abort".equals(localName)) {
- // currently we ignore failure entries
- // XXX need a good way to represent failures
- } else if ("trace".equals(localName)) {
- // currently we ignore stack frames associated with failure entries
- } else if ("status".equals(localName)) {
- // currently we ignore status associated with failure entries
- } else {
- throw new SAXException("Unrecognized element: " + localName);
- }
- }
- public void endElement(String uri, String localName, String qName)
- throws SAXException {
- Assert.assertNotNull(current);
- if ("result".equals(localName) || "abort".equals(localName) ||
- "trace".equals(localName) || "status".equals(localName)) {
- // nothing to do
- } else {
- current = current.getParent();
- }
- }
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/LogEntryContainer.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/LogEntryContainer.java
deleted file mode 100644
index 9692f0848..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/LogEntryContainer.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.logformatter;
-
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-public abstract class LogEntryContainer extends LogEntry {
- private List /* of LogEntry */ list = new ArrayList();
-
- public LogEntryContainer(LogEntryContainer parent, String name) {
- super(parent, name);
- }
-
- /**
- * Accepts a visitor for each child in the order in which they are listed.
- * @param visitor the visitor
- */
- public void acceptChildren(ILogEntryVisitor visitor) {
- Iterator it = list.iterator();
- while (it.hasNext()) {
- LogEntry entry = (LogEntry) it.next();
- entry.accept(visitor);
- }
- }
-
- /**
- * Returns the list of children in this container.
- */
- public LogEntry[] members() {
- return (LogEntry[]) list.toArray(new LogEntry[list.size()]);
- }
-
- /**
- * Returns the member with the specified name and class.
- */
- public LogEntry findMember(String name, Class clazz) {
- Iterator it = list.iterator();
- while (it.hasNext()) {
- LogEntry entry = (LogEntry) it.next();
- if (name.equals(entry.getName()) &&
- clazz.isAssignableFrom(entry.getClass())) return entry;
- }
- return null;
- }
-
- /*
- * Adds the specified entry to the end of the list.
- */
- void addEntry(LogEntry entry) {
- list.add(entry);
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/LogFormatterUIMain.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/LogFormatterUIMain.java
deleted file mode 100644
index 6f1225802..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/LogFormatterUIMain.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.logformatter;
-
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.FileDialog;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.TabFolder;
-import org.eclipse.swt.widgets.TabItem;
-import org.eclipse.swt.widgets.Text;
-
-/**
- * Quick and dirty UI frontend for the log formatters.
- */
-public class LogFormatterUIMain {
-
- public LogFormatterUIMain() {
- }
-
- public static void main(String[] args) {
- new LogFormatterUIMain().run();
- }
-
- public void run() {
- Display display = new Display();
- Shell shell = new Shell(display);
-
- shell.setText("Log Formatter UI");
- createContents(shell);
-
- shell.setSize(500, 300);
- shell.open();
- while (! shell.isDisposed()) {
- if (! display.readAndDispatch()) display.sleep();
- }
- shell.dispose();
- display.dispose();
- }
-
- protected void createContents(Composite parent) {
- parent.setLayout(new FillLayout());
- TabFolder tabFolder = new TabFolder(parent, SWT.NONE);
- createSummaryTabContents(new TabItem(tabFolder, SWT.NONE));
- createDiffTabContents(new TabItem(tabFolder, SWT.NONE));
- }
-
- protected void createSummaryTabContents(TabItem item) {
- Composite top = new Composite(item.getParent(), SWT.NONE);
- item.setControl(top);
- item.setText("Create Log Summary");
- GridLayout layout = new GridLayout();
- layout.numColumns = 3;
- top.setLayout(layout);
-
- final Text logFileText = createFileSelector(top, "Log file path: ");
- final Text outputFileText = createFileSelector(top, "Output file path: ");
-
- final Button csvCheckButton = new Button(top, SWT.CHECK);
- csvCheckButton.setText("Produce comma separated values data");
- GridData data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_CENTER);
- data.horizontalSpan = 3;
- csvCheckButton.setLayoutData(data);
-
- final Button rawCheckButton = new Button(top, SWT.CHECK);
- rawCheckButton.setText("Do not merge results from successive iterations");
- data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_CENTER);
- data.horizontalSpan = 3;
- rawCheckButton.setLayoutData(data);
-
- createRunButton(top, new Runnable() {
- public void run() {
- PrintSummaryMain.main(new String[] {
- logFileText.getText(),
- "-out", outputFileText.getText(),
- csvCheckButton.getSelection() ? "-csv" : null,
- rawCheckButton.getSelection() ? "-raw" : null });
- }
- });
- }
-
- protected void createDiffTabContents(TabItem item) {
- Composite top = new Composite(item.getParent(), SWT.NONE);
- item.setControl(top);
- item.setText("Create Log Diff");
- GridLayout layout = new GridLayout();
- layout.numColumns = 3;
- top.setLayout(layout);
-
- final Text newerLogFileText = createFileSelector(top, "Newer log file path: ");
- final Text olderLogFileText = createFileSelector(top, "Older log file path: ");
- final Text outputFileText = createFileSelector(top, "Output file path: ");
-
- Label label = new Label(top, SWT.NONE);
- label.setText("Threshold %");
- label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER));
-
- final Text thresholdText = new Text(top, SWT.BORDER);
- thresholdText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER));
- thresholdText.setText("0");
-
- new Label(top, SWT.NONE);
-
- final Button csvCheckButton = new Button(top, SWT.CHECK);
- csvCheckButton.setText("Produce comma separated values data");
- GridData data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_CENTER);
- data.horizontalSpan = 3;
- csvCheckButton.setLayoutData(data);
-
- final Button ignoreCheckButton = new Button(top, SWT.CHECK);
- ignoreCheckButton.setText("Ignore negligible changes in results");
- data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_CENTER);
- data.horizontalSpan = 3;
- ignoreCheckButton.setLayoutData(data);
-
- createRunButton(top, new Runnable() {
- public void run() {
- PrintDiffMain.main(new String[] {
- newerLogFileText.getText(),
- olderLogFileText.getText(),
- "-out", outputFileText.getText(),
- "-t", thresholdText.getText(),
- csvCheckButton.getSelection() ? "-csv" : null,
- ignoreCheckButton.getSelection() ? "-i" : null });
- }
- });
- }
-
- protected Text createFileSelector(Composite parent, String labelText) {
- Label label = new Label(parent, SWT.NONE);
- label.setText(labelText);
- label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER));
-
- final Text text = new Text(parent, SWT.BORDER);
- text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER));
-
- Button browseButton = new Button(parent, SWT.PUSH);
- browseButton.setText("Browse...");
- browseButton.addListener(SWT.Selection, new Listener() {
- public void handleEvent(Event event) {
- FileDialog dialog = new FileDialog(text.getShell(), SWT.OPEN);
- dialog.setFileName(text.getText());
- String name = dialog.open();
- if (name != null) {
- text.setText(name);
- }
- }
- });
- browseButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL));
- return text;
- }
-
- protected Button createRunButton(Composite parent, final Runnable runnable) {
- Label separator = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
- GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_END | GridData.GRAB_VERTICAL);
- data.horizontalSpan = 3;
- separator.setLayoutData(data);
-
- final Button runButton = new Button(parent, SWT.PUSH);
- runButton.setText("Run");
- data = new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.VERTICAL_ALIGN_FILL);
- data.horizontalSpan = 3;
- runButton.setLayoutData(data);
- runButton.addListener(SWT.Selection, new Listener() {
- public void handleEvent(Event event) {
- runButton.getDisplay().asyncExec(runnable);
- }
- });
- return runButton;
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/MergeRunsVisitor.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/MergeRunsVisitor.java
deleted file mode 100644
index 1a35031aa..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/MergeRunsVisitor.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.logformatter;
-
-
-public class MergeRunsVisitor implements ILogEntryVisitor {
- private RootEntry defaultRoot;
- private RootEntry root;
- private LogEntryContainer parent;
-
- /**
- * Creates a new visitor to merge series of log entries.
- * @param root the root of an existing log to merge into, or null
- */
- public MergeRunsVisitor(RootEntry root) {
- this.defaultRoot = root;
- this.parent = null;
- }
-
- /**
- * Returns the root of the newly merged log, or null if none.
- */
- public RootEntry getMergedRoot() {
- return root;
- }
-
- public void visitRootEntry(RootEntry entry) {
- root = defaultRoot;
- if (root == null) {
- root = new RootEntry(null, entry.getName(), entry.getSDKBuildId(), entry.getTimestamp());
- }
- parent = root;
- entry.acceptChildren(this);
- }
-
- public void visitCaseEntry(CaseEntry entry) {
- LogEntryContainer oldParent = parent;
- CaseEntry newEntry = (CaseEntry) parent.findMember(entry.getName(), CaseEntry.class);
- if (newEntry == null) {
- newEntry = new CaseEntry(parent, entry.getName(), entry.getClassName());
- }
- parent = newEntry;
- entry.acceptChildren(this);
- parent = oldParent;
- }
-
- public void visitGroupEntry(GroupEntry entry) {
- LogEntryContainer oldParent = parent;
- GroupEntry newEntry = (GroupEntry) parent.findMember(entry.getName(), GroupEntry.class);
- if (newEntry == null) {
- newEntry = new GroupEntry(parent, entry.getName());
- }
- parent = newEntry;
- entry.acceptChildren(this);
- parent = oldParent;
- }
-
- public void visitTaskEntry(TaskEntry entry) {
- TaskEntry newEntry = (TaskEntry) parent.findMember(entry.getName(), TaskEntry.class);
- if (newEntry == null) {
- newEntry = new TaskEntry(parent, entry.getName());
- }
- Result[] results = entry.getResults();
- for (int i = 0; i < results.length; i++) {
- newEntry.addResult(results[i]);
- }
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintCSVDiffVisitor.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintCSVDiffVisitor.java
deleted file mode 100644
index 07ddb8fc5..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintCSVDiffVisitor.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.logformatter;
-
-
-public class PrintCSVDiffVisitor extends PrintDiffVisitor {
- private static final String GROUP_DELIMITER = " / ";
- private DelimitedValuesWriter writer;
- private String caseName;
- private String groupName;
-
- /**
- * Creates a diff visitor that generates CSV output.
- *
- * @param writer the delimited values writer
- * @see PrintDiffVisitor
- */
- public PrintCSVDiffVisitor(DelimitedValuesWriter writer, RootEntry olderRoot, int threshold, boolean ignoreNegligible) {
- super(olderRoot, threshold, ignoreNegligible);
- this.writer = writer;
- }
-
- protected void visitRootEntry(RootEntry entry, RootEntry olderEntry) {
- entry.acceptChildren(this);
- }
-
- protected void visitCaseEntry(CaseEntry entry, CaseEntry olderEntry) {
- caseName = entry.getName();
- groupName = null;
- entry.acceptChildren(this);
- }
-
- protected void visitGroupEntry(GroupEntry entry, GroupEntry olderEntry) {
- String oldGroupName = groupName;
- if (groupName == null) {
- groupName = entry.getName();
- } else {
- groupName += GROUP_DELIMITER + entry.getName();
- }
- entry.acceptChildren(this);
- groupName = oldGroupName;
- }
-
- protected void visitTaskEntry(TaskEntry entry, TaskEntry olderEntry) {
- writer.printFields(new String[] {
- caseName, // case
- groupName, // group
- entry.getName() // task
- });
- printTaskEntry(entry);
- printTaskEntry(olderEntry);
- if (entry.getTotalRuns() != 0 && olderEntry.getTotalRuns() != 0) {
- int olderMean = olderEntry.getAverageMillis();
- int diff = entry.getAverageMillis() - olderMean;
- if (isDifferenceUncertain(entry, olderEntry)) {
- writer.printField("UNCERTAIN");
- } else if (isDifferenceNegligible(entry, olderEntry)) {
- writer.printField("NEGLIGIBLE");
- } else {
- writer.printField(diff > 0 ? "SLOWER" : "FASTER"); // change type
- }
- writer.printField(Integer.toString(Math.abs(diff))); // change
- if (olderMean != 0) {
- writer.printField(Util.formatPercentageRatio(Math.abs(diff), olderMean)); // % change
- } else {
- writer.printField("");
- }
- } else {
- writer.printFields(new String[] { "", "", "" });
- }
- writer.endRecord();
- }
-
- protected void printTaskEntry(TaskEntry entry) {
- if (entry.getTotalRuns() != 0) {
- int mean = entry.getAverageMillis();
- writer.printFields(new String[] {
- Integer.toString(entry.getTotalRuns()), // runs
- Integer.toString(mean) // average
- });
- if (entry.getTotalRuns() > 1 && mean != 0) {
- int confidence = entry.getConfidenceInterval();
- writer.printFields(new String[] {
- Integer.toString(confidence), // 95% confidence interval
- Util.formatPercentageRatio(confidence, mean) // 95% c.i. as a percentage
- });
- } else {
- writer.printFields(new String[] { "", "" });
- }
- } else {
- writer.printFields(new String[] { "0", "", "", "" });
- }
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintCSVSummaryVisitor.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintCSVSummaryVisitor.java
deleted file mode 100644
index 1b5dc1461..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintCSVSummaryVisitor.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.logformatter;
-
-
-public class PrintCSVSummaryVisitor implements ILogEntryVisitor {
- private static final String GROUP_DELIMITER = " / ";
- private DelimitedValuesWriter writer;
- private String caseName;
- private String groupName;
-
- /**
- * Creates a visitor to print a log as comma-separated values.
- * @param writer the delimited values writer
- */
- public PrintCSVSummaryVisitor(DelimitedValuesWriter writer) {
- this.writer = writer;
- }
-
- public void visitRootEntry(RootEntry entry) {
- entry.acceptChildren(this);
- }
-
- public void visitCaseEntry(CaseEntry entry) {
- caseName = entry.getName();
- groupName = null;
- entry.acceptChildren(this);
- }
-
- public void visitGroupEntry(GroupEntry entry) {
- String oldGroupName = groupName;
- if (groupName == null) {
- groupName = entry.getName();
- } else {
- groupName += GROUP_DELIMITER + entry.getName();
- }
- entry.acceptChildren(this);
- groupName = oldGroupName;
- }
-
- public void visitTaskEntry(TaskEntry entry) {
- writer.printFields(new String[] {
- caseName, // case
- groupName, // group
- entry.getName() // task
- });
- if (entry.getTotalRuns() != 0) {
- int mean = entry.getAverageMillis();
- writer.printFields(new String[] {
- Integer.toString(entry.getTotalRuns()), // runs
- Integer.toString(mean) // average
- });
- if (entry.getTotalRuns() > 1 && mean != 0) {
- int confidence = entry.getConfidenceInterval();
- writer.printFields(new String[] {
- Integer.toString(confidence), // 95% confidence interval
- Util.formatPercentageRatio(confidence, mean) // 95% c.i. as a percentage
- });
- } else {
- writer.printFields(new String[] { "", "" });
- }
- } else {
- writer.printFields(new String[] { "0", "", "", "" });
- }
- // append the result fields (ms)
- Result[] results = entry.getResults();
- for (int i = 0; i < results.length; i++) {
- Result result = results[i];
- if (result.getRuns() == 0) continue;
- writer.printField(Integer.toString(result.getMillis() / result.getRuns()));
- }
- writer.endRecord();
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintDiffMain.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintDiffMain.java
deleted file mode 100644
index 0e06a0395..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintDiffMain.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.logformatter;
-
-
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.PrintStream;
-
-import org.xml.sax.SAXException;
-
-public class PrintDiffMain {
- public static void main(String[] args) {
- Parser parser = new Parser();
- if (! parser.parse(args)) {
- System.err.println("Usage: <newer log> <older log> [-out <file>] [-csv] [-t <thresh>] [-i]");
- System.err.println(" -out <file> : specify the output file, default is console");
- System.err.println(" -csv : produce comma separated values data");
- System.err.println(" -t <thresh> : minimum non-negligible absolute % change");
- System.err.println(" -i : ignore negligible changes in results");
- return;
- }
- try {
- PrintStream ps = System.out;
- try {
- if (parser.outputFile != null) ps = new PrintStream(new BufferedOutputStream(new FileOutputStream(parser.outputFile)));
- printDiff(ps, parser.newerLogFile, parser.olderLogFile, parser.csv, parser.thresh, parser.ignore);
- } finally {
- if (ps != System.out) ps.close();
- }
- } catch (Exception e) {
- System.err.println("An error occurred:");
- e.printStackTrace();
- return;
- }
- }
-
- private static void printDiff(PrintStream ps, File newerLogFile, File olderLogFile,
- boolean csv, int thresh, boolean ignore) throws IOException, SAXException {
- // read and merge newer log
- RootEntry newerRoot = LogEntry.readLog(newerLogFile);
- MergeRunsVisitor mergeVisitor = new MergeRunsVisitor(null);
- newerRoot.accept(mergeVisitor);
- newerRoot = mergeVisitor.getMergedRoot();
-
- // read and merge older log
- RootEntry olderRoot = LogEntry.readLog(olderLogFile);
- olderRoot.accept(mergeVisitor);
- olderRoot = mergeVisitor.getMergedRoot();
-
- // format options
- StringBuffer options = new StringBuffer();
- if (thresh != 0) {
- options.append("-t ");
- options.append(Integer.toString(thresh));
- options.append(" ");
- }
- if (ignore) options.append("-i ");
-
- // format log file
- if (csv) {
- DelimitedValuesWriter writer = new DelimitedValuesWriter(ps, ",", true /*quoted*/);
- // print header
- writer.printRecord(new String[] { "", "Newer", "Older" });
- writer.printRecord(new String[] { "Log File", newerLogFile.toString(), olderLogFile.toString() });
- writer.printRecord(new String[] { "Generated", newerRoot.getTimestamp(), olderRoot.getTimestamp() });
- writer.printRecord(new String[] { "SDK Build", newerRoot.getSDKBuildId(), olderRoot.getSDKBuildId() });
- writer.endRecord();
- writer.printRecord(new String[] { "Options", "'" + options.toString() });
- writer.endRecord();
- writer.printRecord(new String[] { "", "", "",
- "Newer", "", "", "",
- "Older", "", "", "",
- "", "", "" });
- writer.printRecord(new String[] { "Case", "Group", "Task",
- "Runs", "Avg. (ms)", "95% C.I. (ms)", "95% C.I. (%)",
- "Runs", "Avg. (ms)", "95% C.I. (ms)", "95% C.I. (%)",
- "Change", "Diff (ms)", "Diff (%)" });
- // print quoted CSV data
- PrintCSVDiffVisitor diffVisitor = new PrintCSVDiffVisitor(writer, olderRoot, thresh, ignore);
- newerRoot.accept(diffVisitor);
- } else {
- // print header
- ps.println("=== LOG DIFF ===");
- ps.println("Newer File: " + newerLogFile);
- ps.println(" Generated: " + newerRoot.getTimestamp());
- ps.println(" SDK Build: " + newerRoot.getSDKBuildId());
- ps.println("Older File: " + olderLogFile);
- ps.println(" Generated: " + olderRoot.getTimestamp());
- ps.println(" SDK Build: " + olderRoot.getSDKBuildId());
- ps.println("Options: " + options.toString());
- ps.println();
- // compute and print the differences
- PrintTextDiffVisitor diffVisitor = new PrintTextDiffVisitor(ps, olderRoot, thresh, ignore);
- newerRoot.accept(diffVisitor);
- }
- }
-
- private static class Parser extends ArgumentParser {
- public File newerLogFile = null;
- public File olderLogFile = null;
- public File outputFile = null;
- public boolean csv = false;
- public int thresh = 0;
- public boolean ignore = false;
-
- protected boolean handleFinished() {
- return newerLogFile != null && olderLogFile != null;
- }
- protected boolean handleArgument(int index, String arg) {
- if (index == 0) {
- newerLogFile = new File(arg);
- } else if (index == 1) {
- olderLogFile = new File(arg);
- } else {
- return false;
- }
- return true;
- }
- protected boolean handleOption(String option, String arg) {
- if ("-out".equals(option)) {
- if (arg == null) return false;
- outputFile = new File(arg);
- } else if ("-csv".equals(option)) {
- if (arg != null) return false;
- csv = true;
- } else if ("-t".equals(option)) {
- if (arg == null) return false;
- try {
- thresh = Integer.parseInt(arg, 10);
- } catch (NumberFormatException e) {
- return false;
- }
- if (thresh < 0) return false;
- } else if ("-i".equals(option)) {
- if (arg != null) return false;
- ignore = true;
- } else {
- return false;
- }
- return true;
- }
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintDiffVisitor.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintDiffVisitor.java
deleted file mode 100644
index ca75be186..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintDiffVisitor.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.logformatter;
-
-
-public abstract class PrintDiffVisitor implements ILogEntryVisitor {
- protected RootEntry olderRoot;
- protected int threshold; // threshold for negligible changes
- protected boolean ignoreNegligible; // if true, ignores negligible changes
- protected LogEntryContainer olderParent; // corresponding parent in older root
-
- /**
- * Creates a visitor to print a summary of the changes between a log
- * and an older one. Optionally ignores differences within a certain threshold.
- * Does not print older entries for which there are no corresponding newer ones.
- *
- * @param olderRoot the root of the older log
- * @param threshold the minimum non-negligible % change
- * @param ignoreNegligible if true, does not display negligible changes
- */
- public PrintDiffVisitor(RootEntry olderRoot, int threshold, boolean ignoreNegligible) {
- this.olderRoot = olderRoot;
- this.olderParent = null;
- this.threshold = threshold;
- this.ignoreNegligible = ignoreNegligible;
- }
-
- protected abstract void visitRootEntry(RootEntry entry, RootEntry olderEntry);
- protected abstract void visitCaseEntry(CaseEntry entry, CaseEntry olderEntry);
- protected abstract void visitGroupEntry(GroupEntry entry, GroupEntry olderEntry);
- protected abstract void visitTaskEntry(TaskEntry entry, TaskEntry olderEntry);
-
- public void visitRootEntry(RootEntry entry) {
- olderParent = olderRoot;
- visitRootEntry(entry, olderRoot);
- }
-
- public void visitCaseEntry(CaseEntry entry) {
- LogEntryContainer prevOlderParent = olderParent;
- if (olderParent != null) {
- olderParent = (LogEntryContainer) olderParent.findMember(entry.getName(), CaseEntry.class);
- }
- visitCaseEntry(entry, (CaseEntry) olderParent);
- olderParent = prevOlderParent;
- }
-
- public void visitGroupEntry(GroupEntry entry) {
- LogEntryContainer prevOlderParent = olderParent;
- if (olderParent != null) {
- olderParent = (LogEntryContainer) olderParent.findMember(entry.getName(), GroupEntry.class);
- }
- visitGroupEntry(entry, (GroupEntry) olderParent);
- olderParent = prevOlderParent;
- }
-
- public void visitTaskEntry(TaskEntry entry) {
- TaskEntry olderEntry = null;
- if (olderParent != null) {
- olderEntry = (TaskEntry) olderParent.findMember(entry.getName(), TaskEntry.class);
- }
- if (ignoreNegligible && isDifferenceNegligible(entry, olderEntry)) return;
- visitTaskEntry(entry, olderEntry);
- }
-
- protected boolean isDifferenceNegligible(TaskEntry newerEntry, TaskEntry olderEntry) {
- if (newerEntry.getTotalRuns() == 0 || olderEntry.getTotalRuns() == 0) return false;
- int olderMean = olderEntry.getAverageMillis();
- if (olderMean == 0) return false;
- int newerMean = newerEntry.getAverageMillis();
- int diff = Math.abs(newerMean - olderMean);
- return diff * 100 / olderMean < threshold;
- }
-
- protected boolean isDifferenceUncertain(TaskEntry newerEntry, TaskEntry olderEntry) {
- if (newerEntry.getTotalRuns() == 0 || olderEntry.getTotalRuns() == 0) return false;
- int olderMean = olderEntry.getAverageMillis();
- int newerMean = newerEntry.getAverageMillis();
- int diff = Math.abs(newerMean - olderMean);
- int diffCI = newerEntry.getConfidenceInterval() + olderEntry.getConfidenceInterval();
- return diff < diffCI;
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintSummaryMain.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintSummaryMain.java
deleted file mode 100644
index e3bfb4026..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintSummaryMain.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.logformatter;
-
-
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.PrintStream;
-
-import org.xml.sax.SAXException;
-
-public class PrintSummaryMain {
- public static void main(String[] args) {
- Parser parser = new Parser();
- if (! parser.parse(args)) {
- System.err.println("Usage: <log file> [-out <file>] [-csv] [-raw]");
- System.err.println(" -out <file> : specify the output file, default is console");
- System.err.println(" -csv : produce comma separated values data");
- System.err.println(" -raw : do not merge results from successive iterations");
- return;
- }
- try {
- PrintStream ps = System.out;
- try {
- if (parser.outputFile != null) ps = new PrintStream(new BufferedOutputStream(new FileOutputStream(parser.outputFile)));
- printLog(ps, parser.logFile, parser.csv, parser.raw);
- } finally {
- if (ps != System.out) ps.close();
- }
- } catch (Exception e) {
- System.err.println("An error occurred:");
- e.printStackTrace();
- return;
- }
- }
-
- private static void printLog(PrintStream ps, File logFile, boolean csv, boolean raw)
- throws IOException, SAXException {
- // read and merge the log
- RootEntry root = LogEntry.readLog(logFile);
- if (! raw) {
- MergeRunsVisitor mergeVisitor = new MergeRunsVisitor(null);
- root.accept(mergeVisitor);
- root = mergeVisitor.getMergedRoot();
- }
-
- // format options
- StringBuffer options = new StringBuffer();
- if (raw) options.append("-raw ");
-
- // format log file
- if (csv) {
- DelimitedValuesWriter writer = new DelimitedValuesWriter(ps, ",", true /*quoted*/);
- // print header
- writer.printRecord(new String[] { "Log File", logFile.toString() });
- writer.printRecord(new String[] { "Generated", root.getTimestamp() });
- writer.printRecord(new String[] { "SDK Build", root.getSDKBuildId() });
- writer.endRecord();
- writer.printRecord(new String[] { "Options", "'" + options.toString() });
- writer.endRecord();
- writer.printRecord(new String[] { "Case", "Group", "Task",
- "Runs", "Avg. (ms)", "95% C.I. (ms)", "95% C.I. (%)", "Results (ms)" });
- // print quoted CSV data
- PrintCSVSummaryVisitor visitor = new PrintCSVSummaryVisitor(writer);
- root.accept(visitor);
- } else {
- // print header
- ps.println("=== LOG SUMMARY ===");
- ps.println("File: " + logFile);
- ps.println(" Generated: " + root.getTimestamp());
- ps.println(" SDK Build: " + root.getSDKBuildId());
- ps.println("Options: " + options.toString());
- ps.println();
- // print the log summary
- root.accept(new PrintTextSummaryVisitor(ps));
- }
- }
-
- private static class Parser extends ArgumentParser {
- public File logFile = null;
- public File outputFile = null;
- public boolean csv = false;
- public boolean raw = false;
-
- protected boolean handleFinished() {
- return logFile != null;
- }
- protected boolean handleArgument(int index, String arg) {
- if (index == 0) {
- logFile = new File(arg);
- } else {
- return false;
- }
- return true;
- }
- protected boolean handleOption(String option, String arg) {
- if ("-out".equals(option)) {
- if (arg == null) return false;
- outputFile = new File(arg);
- } else if ("-csv".equals(option)) {
- if (arg != null) return false;
- csv = true;
- } else if ("-raw".equals(option)) {
- if (arg != null) return false;
- raw = true;
- } else {
- return false;
- }
- return true;
- }
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintTextDiffVisitor.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintTextDiffVisitor.java
deleted file mode 100644
index 98091b290..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintTextDiffVisitor.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.logformatter;
-
-
-import java.io.PrintStream;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-
-public class PrintTextDiffVisitor extends PrintDiffVisitor {
- private PrintStream os;
- private List diffText; // list of things to print
- private String indent;
-
- /**
- * Creates a diff visitor that generates text output.
- *
- * @param os the output stream
- * @see PrintDiffVisitor
- */
- public PrintTextDiffVisitor(PrintStream os, RootEntry olderRoot, int threshold, boolean ignoreNegligible) {
- super(olderRoot, threshold, ignoreNegligible);
- this.os = os;
- this.diffText = null;
- this.indent = "";
- }
-
- protected void visitRootEntry(RootEntry entry, RootEntry olderEntry) {
- entry.acceptChildren(this);
- }
-
- protected void visitCaseEntry(CaseEntry entry, CaseEntry olderEntry) {
- String oldIndent = indent;
- indent += " ";
- StringBuffer line = new StringBuffer(indent);
- line.append("%%% ");
- line.append(entry.getName());
- line.append(", class=");
- line.append(entry.getClassName());
- line.append(':');
- os.println(line);
- diffText = null;
- entry.acceptChildren(this);
- if (diffText != null) {
- Iterator it = diffText.iterator();
- while (it.hasNext()) os.println((String) it.next());
- }
- diffText = null;
- os.println();
- indent = oldIndent;
- }
-
- protected void visitGroupEntry(GroupEntry entry, GroupEntry olderEntry) {
- String oldIndent = indent;
- List oldDiffText = diffText;
- indent += " ";
- diffText = null;
- entry.acceptChildren(this);
- indent = oldIndent;
- if (diffText != null) {
- StringBuffer line = new StringBuffer(indent);
- line.append("+ ");
- line.append(entry.getName());
- line.append(':');
- diffText.add(0, line.toString());
- if (oldDiffText != null) diffText.addAll(0, oldDiffText);
- } else {
- diffText = oldDiffText;
- }
- }
-
- protected void visitTaskEntry(TaskEntry entry, TaskEntry olderEntry) {
- // print task description
- if (diffText == null) diffText = new LinkedList(); // using a list for speedy prepending
- StringBuffer line = new StringBuffer(indent);
- line.append("- ");
- line.append(entry.getName());
- line.append(": ");
- diffText.add(line.toString());
-
- // print new entry performance
- printTaskEntry(" newer: ", entry);
-
- // print older entry performance
- if (olderEntry == null) return;
- printTaskEntry(" older: ", olderEntry);
-
- // print difference
- if (entry.getTotalRuns() == 0 || olderEntry.getTotalRuns() == 0) return;
- int olderMean = olderEntry.getAverageMillis();
- int diff = entry.getAverageMillis() - olderMean;
- line = new StringBuffer(indent);
- line.append(" diff : ");
-
- if (isDifferenceUncertain(entry, olderEntry)) {
- line.append("UNCERTAIN");
- } else if (isDifferenceNegligible(entry, olderEntry)) {
- line.append("NEGLIGIBLE");
- } else {
- line.append(diff > 0 ? "SLOWER" : "FASTER");
- line.append(" by ");
- line.append(Integer.toString(Math.abs(diff)));
- line.append(" ms");
- if (olderEntry.getAverageMillis() != 0) {
- line.append(" = ");
- line.append(Util.formatPercentageRatio(Math.abs(diff), olderMean));
- }
- line.append(" avg.");
- }
- diffText.add(line.toString());
- }
-
- protected void printTaskEntry(String prefix, TaskEntry task) {
- StringBuffer line = new StringBuffer(indent);
- line.append(prefix);
- if (task.getTotalRuns() != 0) {
- int averageTime = task.getAverageMillis();
- line.append(Integer.toString(averageTime));
- line.append(" ms");
- if (task.getTotalRuns() > 1) {
- line.append(" avg. over ");
- line.append(Integer.toString(task.getTotalRuns()));
- line.append(" runs");
- if (averageTime != 0) {
- int confidence = task.getConfidenceInterval();
- line.append(" (95% C.I. +/- ");
- line.append(Integer.toString(confidence));
- line.append(" ms = ");
- line.append(Util.formatPercentageRatio(confidence, averageTime));
- line.append(")");
- }
- }
- } else {
- line.append("skipped!");
- }
- diffText.add(line.toString());
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintTextSummaryVisitor.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintTextSummaryVisitor.java
deleted file mode 100644
index a535019c3..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintTextSummaryVisitor.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.logformatter;
-
-
-import java.io.PrintStream;
-
-public class PrintTextSummaryVisitor implements ILogEntryVisitor {
- private PrintStream os;
- private String indent;
- private int totalAverageTime;
-
- /**
- * Creates a visitor to print a summary of all entries contained in a log.
- * @param os the output stream
- */
- public PrintTextSummaryVisitor(PrintStream os) {
- this.os = os;
- this.indent = "";
- this.totalAverageTime = 0;
- }
-
- protected void visitContainer(LogEntryContainer container) {
- int oldTotalAverageTime = totalAverageTime;
- indent += " ";
- container.acceptChildren(this);
- int averageTime = totalAverageTime - oldTotalAverageTime;
- StringBuffer line = new StringBuffer(indent);
- line.append("* total: ");
- line.append(Integer.toString(averageTime));
- line.append(" ms");
- os.println(line);
- indent = indent.substring(2);
- }
-
- /**
- * Prints the root entry information.
- */
- public void visitRootEntry(RootEntry entry) {
- entry.acceptChildren(this);
- }
-
- /**
- * Prints the total average time spent by all subgroups and subtasks.
- */
- public void visitCaseEntry(CaseEntry entry) {
- StringBuffer line = new StringBuffer(indent);
- line.append("%%% ");
- line.append(entry.getName());
- line.append(", class=");
- line.append(entry.getClassName());
- line.append(':');
- os.println(line);
- visitContainer(entry);
- os.println();
- }
-
- /**
- * Prints the total average time spent by all subtasks.
- */
- public void visitGroupEntry(GroupEntry entry) {
- StringBuffer line = new StringBuffer(indent);
- line.append("+ ");
- line.append(entry.getName());
- line.append(':');
- os.println(line);
- visitContainer(entry);
- }
-
- /**
- * Prints the average amount of time spent by a task.
- */
- public void visitTaskEntry(TaskEntry task) {
- StringBuffer line = new StringBuffer(indent);
- line.append("- ");
- line.append(task.getName());
- line.append(": ");
- if (task.getTotalRuns() != 0) {
- int averageTime = task.getAverageMillis();
- totalAverageTime += averageTime;
- line.append(Integer.toString(averageTime));
- line.append(" ms");
- if (task.getTotalRuns() > 1) {
- line.append(" avg. over ");
- line.append(Integer.toString(task.getTotalRuns()));
- line.append(" runs");
- if (averageTime != 0) {
- int confidence = task.getConfidenceInterval();
- line.append(" (95% C.I. +/- ");
- line.append(Integer.toString(confidence));
- line.append(" ms = ");
- line.append(Util.formatPercentageRatio(confidence, averageTime));
- line.append(")");
- }
- }
- } else {
- line.append("skipped!");
- }
- os.println(line);
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/Result.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/Result.java
deleted file mode 100644
index b0899f741..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/Result.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.logformatter;
-
-
-import org.xml.sax.Attributes;
-
-/**
- * Holds the result of one iteration of tests.
- * Note that a test might be run multiple times per iteration, particularly if it
- * is of very short duration to reduce sampling error. This behaviour is not supported
- * at this time, but will likely be of value in the future.
- */
-public class Result {
- private int runs;
- private int millis;
-
- public Result(Attributes attributes) {
- this(1, Integer.parseInt(attributes.getValue("elapsed")));
- }
- public Result(int runs, int millis) {
- this.runs = runs;
- this.millis = millis;
- }
- public int getRuns() {
- return runs;
- }
- public int getMillis() {
- return millis;
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/RootEntry.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/RootEntry.java
deleted file mode 100644
index 12496c46a..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/RootEntry.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.logformatter;
-
-
-import org.xml.sax.Attributes;
-
-public class RootEntry extends LogEntryContainer {
- private String sdkBuildId;
- private String timestamp;
-
- public RootEntry(LogEntryContainer parent, Attributes attributes) {
- this(parent, attributes.getValue("name"),
- attributes.getValue("sdkbuild"), attributes.getValue("timestamp"));
- }
-
- public RootEntry(LogEntryContainer parent, String name, String sdkBuildId, String timestamp) {
- super(parent, name);
- this.sdkBuildId = (sdkBuildId != null) ? sdkBuildId : "unknown";
- this.timestamp = (timestamp != null) ? timestamp : "unknown";
- }
-
- public void accept(ILogEntryVisitor visitor) {
- visitor.visitRootEntry(this);
- }
-
- /**
- * Returns the SDK Build id.
- */
- public String getSDKBuildId() {
- return sdkBuildId;
- }
-
- /**
- * Returns the class name of the test case.
- */
- public String getTimestamp() {
- return timestamp;
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/TaskEntry.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/TaskEntry.java
deleted file mode 100644
index 71797e175..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/TaskEntry.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.logformatter;
-
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.xml.sax.Attributes;
-
-public class TaskEntry extends LogEntry {
- private List /* of Result */ results = new ArrayList();
-
- public TaskEntry(LogEntryContainer parent, Attributes attributes) {
- this(parent, attributes.getValue("name"));
- }
-
- public TaskEntry(LogEntryContainer parent, String name) {
- super(parent, name);
- }
-
- public void accept(ILogEntryVisitor visitor) {
- visitor.visitTaskEntry(this);
- }
-
- /**
- * Returns the average number of milliseconds elapsed, or -1 if unknown.
- */
- public int getAverageMillis() {
- int totalMillis = 0;
- int totalRuns = 0;
- for (Iterator it = results.iterator(); it.hasNext();) {
- Result result = (Result) it.next();
- totalMillis += result.getMillis();
- totalRuns += result.getRuns();
- }
- if (totalRuns == 0) return -1;
- return totalMillis / totalRuns;
- }
-
- /**
- * Returns the standard deviation of the sample.
- * sqrt((n * sum(X^2) - sum(X)^2) / (n * (n-1)))
- */
- public double getStandardDeviation() {
- double sumOfSquares = 0.0, sum = 0.0;
- int totalRuns = 0;
- for (Iterator it = results.iterator(); it.hasNext();) {
- Result result = (Result) it.next();
- if (result.getRuns() == 0) continue;
- totalRuns += result.getRuns();
- sum += result.getMillis();
- double average = (double)result.getMillis() / result.getRuns();
- sumOfSquares += average * average * result.getRuns();
- }
- if (totalRuns == 0) return 0;
- return Math.sqrt((sumOfSquares * totalRuns - sum * sum) / (totalRuns * (totalRuns - 1)));
- }
-
- /**
- * Returns a 95% confidence interval from the mean represented by getAverageMillis()
- * Uses the formula:
- * 1.960 * stdev() / sqrt(n)
- */
- public int getConfidenceInterval() {
- return (int) (1.960 * getStandardDeviation() / Math.sqrt(getTotalRuns()));
- }
-
- /**
- * Returns the number of times this task was run.
- */
- public int getTotalRuns() {
- int totalRuns = 0;
- for (Iterator it = results.iterator(); it.hasNext();) {
- Result result = (Result) it.next();
- totalRuns += result.getRuns();
- }
- return totalRuns;
- }
-
- /**
- * Returns an array of all Results for this task.
- */
- public Result[] getResults() {
- return (Result[]) results.toArray(new Result[results.size()]);
- }
-
- /**
- * Adds a result.
- * @param result the result
- */
- public void addResult(Result result) {
- results.add(result);
- }
-
-
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/Util.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/Util.java
deleted file mode 100644
index b86a962c7..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/Util.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.logformatter;
-
-
-import java.text.DecimalFormat;
-import java.text.NumberFormat;
-
-public class Util {
- private static final NumberFormat percentageFormat = new DecimalFormat("####0.00%");
-
- public static String formatPercentageRatio(int numerator, int denominator) {
- return percentageFormat.format((double)numerator / denominator);
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/sync/AllTestsSynchronizeView.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/sync/AllTestsSynchronizeView.java
deleted file mode 100644
index e292bdc34..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/sync/AllTestsSynchronizeView.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.sync;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.team.internal.ui.sync.views.SynchronizeView;
-import org.eclipse.team.tests.ccvs.core.EclipseTest;
-import org.eclipse.team.tests.ccvs.core.subscriber.CVSMergeSubscriberTest;
-import org.eclipse.team.tests.ccvs.core.subscriber.CVSSyncSubscriberTest;
-import org.eclipse.team.tests.ccvs.core.subscriber.CVSWorkspaceSubscriberTest;
-import org.eclipse.team.tests.ccvs.ui.CVSUITestCase;
-
-public class AllTestsSynchronizeView extends EclipseTest {
-
- private SynchronizeView syncView;
-
- public AllTestsSynchronizeView() {
- super();
- }
-
- public AllTestsSynchronizeView(String name) {
- super(name);
- }
-
- public static Test suite() {
- TestSuite suite = new TestSuite();
-
- // sync info tests re-using the subscribers tests but checking state based on the
- // sync set data structures in the synchronize view.
- suite.addTest(CVSMergeSubscriberTest.suite());
- suite.addTest(CVSWorkspaceSubscriberTest.suite());
- CVSSyncSubscriberTest.setSyncSource(new SyncInfoFromSyncSet());
-
- // place other ui tests here
-
- return new CVSUITestCase(suite);
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/sync/SyncInfoFromSyncSet.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/sync/SyncInfoFromSyncSet.java
deleted file mode 100644
index 09d97b3f2..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/sync/SyncInfoFromSyncSet.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.sync;
-
-import junit.framework.AssertionFailedError;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.team.core.TeamException;
-import org.eclipse.team.core.subscribers.SyncInfo;
-import org.eclipse.team.core.subscribers.TeamSubscriber;
-import org.eclipse.team.internal.ui.sync.sets.SubscriberInput;
-import org.eclipse.team.internal.ui.sync.sets.SyncSet;
-import org.eclipse.team.internal.ui.sync.views.SynchronizeView;
-import org.eclipse.team.tests.ccvs.core.subscriber.SyncInfoSource;
-
-/**
- * SyncInfoSource that obtains SyncInfo from the SynchronizeView's SyncSet.
- */
-public class SyncInfoFromSyncSet extends SyncInfoSource {
-
- public SyncInfoFromSyncSet() {
- }
-
- public void waitForEventNotification(SubscriberInput input) {
- // process UI events first, give the main thread a chance
- // to handle any syncExecs or asyncExecs posted as a result
- // of the event processing thread.
- while (Display.getCurrent().readAndDispatch()) {};
-
- // wait for the event handler to process changes.
- Job job = input.getEventHandler().getEventHandlerJob();
- while(job.getState() != Job.NONE) {
- while (Display.getCurrent().readAndDispatch()) {};
- try {
- Thread.sleep(50);
- } catch (InterruptedException e) {
- }
- }
- }
-
- public SyncInfo getSyncInfo(TeamSubscriber subscriber, IResource resource) throws TeamException {
- SubscriberInput input = getInput(subscriber);
- SyncSet set = input.getWorkingSetSyncSet();
- SyncInfo info = set.getSyncInfo(resource);
- if (info == null) {
- info = subscriber.getSyncInfo(resource, DEFAULT_MONITOR);
- if ((info != null && info.getKind() != SyncInfo.IN_SYNC)) {
- throw new AssertionFailedError();
- }
- }
- return info;
- }
-
- private SubscriberInput getInput(TeamSubscriber subscriber) throws AssertionFailedError {
- // show the sync view
- SynchronizeView syncView = (SynchronizeView)SynchronizeView.showInActivePage(null);
- SubscriberInput input = syncView.getInput();
- if (subscriber != input.getSubscriber()) {
- // ensure that the CVS subscriber is active
- syncView.activateSubscriber(subscriber);
- input = syncView.getInput();
- }
- if (subscriber != input.getSubscriber()) {
- throw new AssertionFailedError();
- }
- waitForEventNotification(input);
- return input;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.tests.ccvs.core.subscriber.SyncInfoSource#assertProjectRemoved(org.eclipse.team.core.subscribers.TeamSubscriber, org.eclipse.core.resources.IProject)
- */
- protected void assertProjectRemoved(TeamSubscriber subscriber, IProject project) throws TeamException {
- super.assertProjectRemoved(subscriber, project);
- SubscriberInput input = getInput(subscriber);
- SyncSet set = input.getFilteredSyncSet();
- if (set.getOutOfSyncDescendants(project).length != 0) {
- throw new AssertionFailedError("The sync set still contains resources from the deleted project " + project.getName());
- }
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/unit/CheckoutOperationTests.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/unit/CheckoutOperationTests.java
deleted file mode 100644
index 9d8c69fc5..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/unit/CheckoutOperationTests.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.unit;
-
-import java.io.IOException;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.resources.IProject;
-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.ICVSFolder;
-import org.eclipse.team.internal.ccvs.core.ICVSRemoteFolder;
-import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot;
-import org.eclipse.team.internal.ccvs.core.syncinfo.FolderSyncInfo;
-import org.eclipse.team.internal.ccvs.ui.operations.CheckoutMultipleProjectsOperation;
-import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
-import org.eclipse.team.tests.ccvs.core.EclipseTest;
-
-public class CheckoutOperationTests extends EclipseTest {
-
- public CheckoutOperationTests() {
- }
-
- public CheckoutOperationTests(String name) {
- super(name);
- }
-
- public static Test suite() {
- String testName = System.getProperty("eclipse.cvs.testName");
- if (testName == null) {
- TestSuite suite = new TestSuite(CheckoutOperationTests.class);
- return new CVSTestSetup(suite);
- } else {
- return new CVSTestSetup(new CheckoutOperationTests(testName));
- }
- }
- public void testSimpleCheckout() throws CoreException, TeamException, IOException {
- IProject project = createProject("testSimpleCheckout", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" });
-
- // move the created project so we can do a simple checkout
- project.move(new Path("moved-project"), false /* force */, DEFAULT_MONITOR);
- IProject movedProject = ResourcesPlugin.getWorkspace().getRoot().getProject("moved-project");
-
- // checkout the project to the default location
- try {
- new CheckoutMultipleProjectsOperation(
- null /* shell */,
- new ICVSRemoteFolder[] { (ICVSRemoteFolder)CVSWorkspaceRoot.getRemoteResourceFor(movedProject) },
- null /*target location*/).runInContext(DEFAULT_MONITOR);
- } catch (InterruptedException e) {
- fail("Operation should not have been interrupted");
- }
-
- assertEquals(project, movedProject);
- }
-
- public void testNonRootCheckout() throws CoreException, TeamException, IOException {
- IProject project = createProject("testNonRootCheckout", new String[] { "changed.txt", "deleted.txt", "folder1/", "folder1/a.txt" });
-
- // checkout the non-root folder as a project to the default location
- try {
- new CheckoutMultipleProjectsOperation(
- null /* shell */,
- new ICVSRemoteFolder[] { (ICVSRemoteFolder)CVSWorkspaceRoot.getRemoteResourceFor(project.getFolder("folder1")) },
- null /*target location*/).runInContext(DEFAULT_MONITOR);
- } catch (InterruptedException e) {
- fail("Operation should not have been interrupted");
- }
-
- IProject newProject = ResourcesPlugin.getWorkspace().getRoot().getProject("folder1");
- assertTrue(newProject.exists());
- ICVSFolder cvsFolder = CVSWorkspaceRoot.getCVSFolderFor(newProject);
- FolderSyncInfo projectInfo = cvsFolder.getFolderSyncInfo();
- assertTrue(projectInfo != null);
- ICVSFolder cvsFolder2 = CVSWorkspaceRoot.getCVSFolderFor(project.getFolder("folder1"));
- FolderSyncInfo folderInfo = cvsFolder2.getFolderSyncInfo();
- assertTrue(folderInfo != null);
- assertTrue(projectInfo.equals(folderInfo));
- }
-
- public void testMulitpleCheckout() throws CoreException, TeamException {
- IProject project1 = createProject("testNonRootCheckout1", new String[] { "file.txt", "folder1/", "folder1/a.txt" });
- IProject project2 = createProject("testNonRootCheckout2", new String[] { "file2.txt", "folder2/", "folder2/b.txt" });
-
- // move the created project so we can do a simple checkout
- project1.move(new Path("moved-project1"), false /* force */, DEFAULT_MONITOR);
- IProject movedProject1 = ResourcesPlugin.getWorkspace().getRoot().getProject("moved-project1");
- project2.move(new Path("moved-project2"), false /* force */, DEFAULT_MONITOR);
- IProject movedProject2 = ResourcesPlugin.getWorkspace().getRoot().getProject("moved-project2");
-
-
- // checkout the project to the default location
- try {
- new CheckoutMultipleProjectsOperation(
- null /* shell */,
- new ICVSRemoteFolder[] {
- (ICVSRemoteFolder)CVSWorkspaceRoot.getRemoteResourceFor(movedProject1),
- (ICVSRemoteFolder)CVSWorkspaceRoot.getRemoteResourceFor(movedProject2)
- },
- null /*target location*/).runInContext(DEFAULT_MONITOR);
- } catch (InterruptedException e) {
- fail("Operation should not have been interrupted");
- }
-
- }
-}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/unit/MenuEnablementTest.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/unit/MenuEnablementTest.java
deleted file mode 100644
index 5896454df..000000000
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/unit/MenuEnablementTest.java
+++ /dev/null
@@ -1,533 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.tests.ccvs.ui.unit;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.team.core.TeamException;
-import org.eclipse.team.internal.ccvs.core.CVSException;
-import org.eclipse.team.internal.ccvs.core.resources.EclipseSynchronizer;
-import org.eclipse.team.internal.ccvs.ui.actions.AddAction;
-import org.eclipse.team.internal.ccvs.ui.actions.BranchAction;
-import org.eclipse.team.internal.ccvs.ui.actions.CommitAction;
-import org.eclipse.team.internal.ccvs.ui.actions.CompareWithRemoteAction;
-import org.eclipse.team.internal.ccvs.ui.actions.CompareWithRevisionAction;
-import org.eclipse.team.internal.ccvs.ui.actions.CompareWithTagAction;
-import org.eclipse.team.internal.ccvs.ui.actions.GenerateDiffFileAction;
-import org.eclipse.team.internal.ccvs.ui.actions.IgnoreAction;
-import org.eclipse.team.internal.ccvs.ui.actions.MergeAction;
-import org.eclipse.team.internal.ccvs.ui.actions.ReplaceWithRemoteAction;
-import org.eclipse.team.internal.ccvs.ui.actions.ReplaceWithTagAction;
-import org.eclipse.team.internal.ccvs.ui.actions.SetKeywordSubstitutionAction;
-import org.eclipse.team.internal.ccvs.ui.actions.ShowResourceInHistoryAction;
-import org.eclipse.team.internal.ccvs.ui.actions.SyncAction;
-import org.eclipse.team.internal.ccvs.ui.actions.TagLocalAction;
-import org.eclipse.team.internal.ccvs.ui.actions.UnmanageAction;
-import org.eclipse.team.internal.ccvs.ui.actions.UpdateAction;
-import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
-import org.eclipse.team.tests.ccvs.core.EclipseTest;
-import org.eclipse.ui.IActionDelegate;
-
-/**
- * Test the menu enablement code for the CVS menus
- */
-public class MenuEnablementTest extends EclipseTest {
-
- private static final int MANAGED = 1;
- private static final int ADDED = 2;
- private static final int UNMANAGED = 4;
- private static final int IGNORED = 8;
- private static final int SINGLE_ONLY = 16;
- private static final int FOLDERS = 32;
- private static final int FILES = 64;
- private static final int UNMANAGED_PARENT = 128;
-
- /**
- * Constructor for CVSProviderTest
- */
- public MenuEnablementTest() {
- super();
- }
-
- /**
- * Constructor for CVSProviderTest
- */
- public MenuEnablementTest(String name) {
- super(name);
- }
-
- public static Test suite() {
- TestSuite suite = new TestSuite(MenuEnablementTest.class);
- return new CVSTestSetup(suite);
- //return new CVSTestSetup(new MenuEnablementTest("testReadOnly"));
- }
-
- /**
- * Create a test project for the given action delegate. The structure of
- * this test project is used by the get resource methods to return resources
- * of the proper type.
- *
- * @param actionDelegate
- * @throws CoreException
- * @throws TeamException
- */
- private IProject createTestProject(IActionDelegate actionDelegate) throws CoreException, TeamException {
- String actionName = getName(actionDelegate);
- return createProject(actionName, new String[] { "file.txt", "folder1/", "folder1/a.txt" });
- }
-
- private List getManagedResources(IProject testProject, boolean includeFolders, boolean multiple) {
- List result = new ArrayList();
- if (includeFolders) {
- result.add(testProject.getFolder("folder1"));
- } else {
- result.add(testProject.getFile("folder1/a.txt"));
- }
- if (multiple) {
- result.add(testProject.getFile("file.txt"));
- }
- return result;
- }
-
- private List getAddedResources(IProject testProject) throws CoreException, TeamException {
- List result = new ArrayList();
- IFile file = testProject.getFile("added.txt");
- if (!file.exists()) {
- addResources(testProject, new String[] {"added.txt"}, false);
- }
- result.add(file);
- return result;
- }
-
- private List getIgnoredResources(IProject testProject) throws CoreException, TeamException {
- List result = new ArrayList();
- IFile file = testProject.getFile("ignored.txt");
- if (!file.exists()) {
- file.create(getRandomContents(), false, null);
- }
- result.add(file);
- IFile ignoreFile = testProject.getFile(".cvsignore");
- InputStream contents = new ByteArrayInputStream("ignored.txt".getBytes());
- if (ignoreFile.exists()) {
- ignoreFile.setContents(contents, false, false, null);
- } else {
- ignoreFile.create(contents, false, null);
- }
- return result;
- }
-
- private List getUnmanagedResources(IProject testProject) throws CoreException, TeamException {
- List result = new ArrayList();
- IFile file = testProject.getFile("unmanaged.txt");
- if (!file.exists()) {
- file.create(getRandomContents(), false, null);
- }
- result.add(file);
- return result;
- }
-
- /**
- * Method getResourceWithUnmanagedParent.
- * @param project
- * @return Collection
- */
- private List getResourceWithUnmanagedParent(IProject project) throws CoreException {
- List result = new ArrayList();
- IFolder folder = project.getFolder("newFolder");
- if(!folder.exists()) folder.create(false, true, null);
- IFile file = folder.getFile("unmanaged.txt");
- if (!file.exists()) {
- file.create(getRandomContents(), false, null);
- }
- result.add(file);
- return result;
- }
-
- private List getOverlappingResources(IProject testProject, boolean includeFiles) {
- List result = new ArrayList();
- result.add(testProject);
- result.add(testProject.getFolder("folder1"));
- if (includeFiles) {
- result.add(testProject.getFile("folder1/a.txt"));
- }
- return result;
- }
-
- private ISelection asSelection(List resources) {
- return new StructuredSelection(resources);
- }
-
- private String getName(IActionDelegate actionDelegate) {
- return actionDelegate.getClass().getName();
- }
-
- /**
- * Assert that the enablement for the given IActionDelegate and ISelection
- * match that provided as expectedEnablement.
- *
- * @param actionDelegate
- * @param selection
- * @param expectedEnablement
- */
- private void assertEnablement(IActionDelegate actionDelegate, ISelection selection, boolean expectedEnablement) {
- IAction action = new Action() {};
- actionDelegate.selectionChanged(action, selection);
- assertEquals(getName(actionDelegate) + " enablement wrong!", expectedEnablement, action.isEnabled());
- }
-
- /**
- * Method assertEnablement.
- * @param action
- * @param project
- * @param IGNORED
- * @param b
- */
- private void assertEnablement(IActionDelegate action, IProject project, int kind, boolean expectedEnablement) throws CoreException, TeamException {
- List resources = new ArrayList();
- boolean multiple = (kind & SINGLE_ONLY) == 0;
- boolean includeFolders = ((kind & FOLDERS) > 0) || ((kind & FILES) == 0);
- if ((kind & MANAGED) > 0) {
- resources.addAll(getManagedResources(project, includeFolders, multiple));
- }
- if ((kind & UNMANAGED) > 0) {
- resources.addAll(getUnmanagedResources(project));
- }
- if ((kind & IGNORED) > 0) {
- resources.addAll(getIgnoredResources(project));
- }
- if ((kind & ADDED) > 0) {
- resources.addAll(getAddedResources(project));
- }
- if ((kind & UNMANAGED_PARENT) > 0) {
- resources.addAll(getResourceWithUnmanagedParent(project));
- }
- ensureAllSyncInfoLoaded(project);
- assertEnablement(action, asSelection(resources), expectedEnablement);
- }
-
- /**
- * Method ensureAllSyncInfoLoaded.
- * @param project
- */
- private void ensureAllSyncInfoLoaded(IProject project) throws CVSException {
- EclipseSynchronizer.getInstance().ensureSyncInfoLoaded(new IResource[] {project}, IResource.DEPTH_INFINITE);
- }
-
- /**
- * Assert that the action is disabled for the reasons common to all menu
- * actions.
- *
- * @param action
- * @param project
- */
- public void assertDisabledForCommonReasons(IActionDelegate action, IProject project) throws CoreException {
- assertDisabledForNoSelection(action);
- assertDisabledForFolderFileOverlap(action, project);
- assertDisabledForClosedProject(action, project);
- assertDisabledForNonCVSProject(action);
- }
-
- private void assertDisabledForNoSelection(IActionDelegate actionDelegate) {
- assertEnablement(actionDelegate, StructuredSelection.EMPTY, false /* expected enablement */);
- }
-
- private void assertDisabledForFolderFileOverlap(IActionDelegate action, IProject project) {
- List resources = getOverlappingResources(project, true /* include files */);
- assertEnablement(action, asSelection(resources), false /* enabled */);
- }
-
- private void assertDisabledForClosedProject(IActionDelegate action, IProject project) throws CoreException {
- project.close(null);
- List resources = new ArrayList();
- resources.add(project);
- assertEnablement(action, asSelection(resources), false /* enabled */);
- project.open(null);
- }
-
- private void assertDisabledForNonCVSProject(IActionDelegate action) throws CoreException {
- IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject("Non-CVS");
- if (!project.exists())
- project.create(null);
- List resources = new ArrayList();
- resources.add(project);
- assertEnablement(action, asSelection(resources), false /* enabled */);
- }
-
- private void assertEnabledForFolderOnlyOverlap(IActionDelegate action, IProject project) {
- List resources = getOverlappingResources(project, false /* include files */);
- assertEnablement(action, asSelection(resources), true /* enabled */);
- }
-
- public void testAddAction() throws CoreException, TeamException {
- IActionDelegate action = new AddAction();
- IProject project = createTestProject(action);
- assertDisabledForCommonReasons(action, project);
- assertEnablement(action, project, MANAGED, false /* expected enablement */);
- assertEnablement(action, project, ADDED, false /* expected enablement */);
- assertEnablement(action, project, IGNORED, true /* expected enablement */);
- assertEnablement(action, project, UNMANAGED, true /* expected enablement */);
- assertEnablement(action, project, UNMANAGED | IGNORED, true /* expected enablement */);
- assertEnablement(action, project, UNMANAGED | SINGLE_ONLY, true /* expected enablement */);
- assertEnablement(action, project, UNMANAGED | MANAGED | IGNORED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED_PARENT, true /* expected enablement */);
- }
-
- public void testBranchAction() throws CoreException, TeamException {
- IActionDelegate action = new BranchAction();
- IProject project = createTestProject(action);
- assertDisabledForCommonReasons(action, project);
- assertEnabledForFolderOnlyOverlap(action, project);
- assertEnablement(action, project, MANAGED, true /* expected enablement */);
- assertEnablement(action, project, MANAGED | ADDED, true /* expected enablement */);
- assertEnablement(action, project, IGNORED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED | MANAGED | IGNORED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED_PARENT, false /* expected enablement */);
- }
-
- public void testCommitAction() throws CoreException, TeamException {
- IActionDelegate action = new CommitAction();
- IProject project = createTestProject(action);
- assertDisabledForCommonReasons(action, project);
- assertEnabledForFolderOnlyOverlap(action, project);
- assertEnablement(action, project, MANAGED, true /* expected enablement */);
- assertEnablement(action, project, MANAGED | ADDED, true /* expected enablement */);
- assertEnablement(action, project, MANAGED | ADDED | UNMANAGED, true /* expected enablement */);
- assertEnablement(action, project, IGNORED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED, true /* expected enablement */);
- assertEnablement(action, project, UNMANAGED | MANAGED | IGNORED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED_PARENT, true /* expected enablement */);
- }
-
- public void testCompareWithRemoteAction() throws CoreException, TeamException {
- IActionDelegate action = new CompareWithRemoteAction();
- IProject project = createTestProject(action);
- assertDisabledForCommonReasons(action, project);
- assertEnabledForFolderOnlyOverlap(action, project);
- assertEnablement(action, project, MANAGED, true /* expected enablement */);
- assertEnablement(action, project, MANAGED | ADDED, true /* expected enablement */);
- assertEnablement(action, project, MANAGED | ADDED | UNMANAGED, true /* expected enablement */);
- // true is expected for ignored resources whose parent is not ignored
- assertEnablement(action, project, IGNORED, true /* expected enablement */);
- assertEnablement(action, project, UNMANAGED, true /* expected enablement */);
- assertEnablement(action, project, UNMANAGED_PARENT, false /* expected enablement */);
- // true is expected for ignored resources whose parent is not ignored
- assertEnablement(action, project, UNMANAGED | MANAGED | IGNORED, true /* expected enablement */);
- }
-
- public void testCompareWithRevison() throws CoreException, TeamException {
- IActionDelegate action = new CompareWithRevisionAction();
- IProject project = createTestProject(action);
- assertDisabledForCommonReasons(action, project);
- assertEnablement(action, project, MANAGED | FILES | SINGLE_ONLY, true /* expected enablement */);
- assertEnablement(action, project, MANAGED | FOLDERS | FILES, false /* expected enablement */);
- assertEnablement(action, project, MANAGED | FOLDERS | SINGLE_ONLY, false /* expected enablement */);
- assertEnablement(action, project, MANAGED | FILES, false /* expected enablement */);
- assertEnablement(action, project, ADDED | SINGLE_ONLY, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED | SINGLE_ONLY, false /* expected enablement */);
- assertEnablement(action, project, IGNORED | SINGLE_ONLY, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED_PARENT, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED | MANAGED | IGNORED, false /* expected enablement */);
- }
-
- public void testCompareWithTagAction() throws CoreException, TeamException {
- IActionDelegate action = new CompareWithTagAction();
- IProject project = createTestProject(action);
- assertDisabledForCommonReasons(action, project);
- assertEnabledForFolderOnlyOverlap(action, project);
- assertEnablement(action, project, MANAGED, true /* expected enablement */);
- assertEnablement(action, project, MANAGED | ADDED, true /* expected enablement */);
- assertEnablement(action, project, MANAGED | ADDED | UNMANAGED, false /* expected enablement */);
- assertEnablement(action, project, IGNORED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED_PARENT, false /* expected enablement */);
- // true is expected for ignored resources whose parent is not ignored
- assertEnablement(action, project, UNMANAGED | MANAGED | IGNORED, false /* expected enablement */);
- }
-
- public void testGenerateDiffAction() throws CoreException, TeamException {
- IActionDelegate action = new GenerateDiffFileAction();
- IProject project = createTestProject(action);
- assertDisabledForCommonReasons(action, project);
- assertEnablement(action, project, MANAGED | FILES | SINGLE_ONLY, true /* expected enablement */);
- assertEnablement(action, project, MANAGED | FOLDERS | FILES, false /* expected enablement */);
- assertEnablement(action, project, MANAGED | FOLDERS | SINGLE_ONLY, true /* expected enablement */);
- assertEnablement(action, project, MANAGED | FILES, false /* expected enablement */);
- assertEnablement(action, project, ADDED | SINGLE_ONLY, true /* expected enablement */);
- assertEnablement(action, project, UNMANAGED | SINGLE_ONLY, true /* expected enablement */);
- assertEnablement(action, project, IGNORED | SINGLE_ONLY, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED_PARENT, true /* expected enablement */);
- assertEnablement(action, project, UNMANAGED | MANAGED | IGNORED, false /* expected enablement */);
- }
-
- /*
- * Should be the same as testAdd
- */
- public void testIgnoreAction() throws CoreException, TeamException {
- IActionDelegate action = new IgnoreAction();
- IProject project = createTestProject(action);
- assertDisabledForCommonReasons(action, project);
- assertEnablement(action, project, MANAGED, false /* expected enablement */);
- assertEnablement(action, project, ADDED, false /* expected enablement */);
- assertEnablement(action, project, IGNORED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED, true /* expected enablement */);
- assertEnablement(action, project, UNMANAGED | SINGLE_ONLY, true /* expected enablement */);
- assertEnablement(action, project, UNMANAGED | MANAGED | IGNORED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED_PARENT, true /* expected enablement */);
- }
-
- public void testMergeAction() throws CoreException, TeamException {
- IActionDelegate action = new MergeAction();
- IProject project = createTestProject(action);
- assertDisabledForCommonReasons(action, project);
- assertEnabledForFolderOnlyOverlap(action, project);
- assertEnablement(action, project, MANAGED, true /* expected enablement */);
- assertEnablement(action, project, MANAGED | ADDED, true /* expected enablement */);
- assertEnablement(action, project, MANAGED | ADDED | UNMANAGED, false /* expected enablement */);
- assertEnablement(action, project, IGNORED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED | MANAGED | IGNORED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED_PARENT, false /* expected enablement */);
- }
-
- public void testReplaceWithRemoteAction() throws CoreException, TeamException {
- IActionDelegate action = new ReplaceWithRemoteAction();
- IProject project = createTestProject(action);
- assertDisabledForCommonReasons(action, project);
- assertEnabledForFolderOnlyOverlap(action, project);
- assertEnablement(action, project, MANAGED, true /* expected enablement */);
- assertEnablement(action, project, MANAGED | ADDED, false /* expected enablement */);
- assertEnablement(action, project, MANAGED | ADDED | UNMANAGED, false /* expected enablement */);
- // true is expected for ignored resources whose parent is not ignored
- assertEnablement(action, project, IGNORED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED_PARENT, false /* expected enablement */);
- // true is expected for ignored resources whose parent is not ignored
- assertEnablement(action, project, UNMANAGED | MANAGED | IGNORED, false /* expected enablement */);
- }
-
- /*
- * Should be the same as testCompareWithTagAction
- */
- public void testReplaceWithTagAction() throws CoreException, TeamException {
- IActionDelegate action = new ReplaceWithTagAction();
- IProject project = createTestProject(action);
- assertDisabledForCommonReasons(action, project);
- assertEnabledForFolderOnlyOverlap(action, project);
- assertEnablement(action, project, MANAGED, true /* expected enablement */);
- assertEnablement(action, project, MANAGED | ADDED, true /* expected enablement */);
- assertEnablement(action, project, MANAGED | ADDED | UNMANAGED, false /* expected enablement */);
- assertEnablement(action, project, IGNORED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED_PARENT, false /* expected enablement */);
- // true is expected for ignored resources whose parent is not ignored
- assertEnablement(action, project, UNMANAGED | MANAGED | IGNORED, false /* expected enablement */);
- }
-
- public void testKeywordSubstitutionAction() throws CoreException, TeamException {
- IActionDelegate action = new SetKeywordSubstitutionAction();
- IProject project = createTestProject(action);
- assertDisabledForCommonReasons(action, project);
- assertEnabledForFolderOnlyOverlap(action, project);
- assertEnablement(action, project, MANAGED, true /* expected enablement */);
- assertEnablement(action, project, MANAGED | ADDED, true /* expected enablement */);
- assertEnablement(action, project, MANAGED | ADDED | UNMANAGED, false /* expected enablement */);
- assertEnablement(action, project, IGNORED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED | MANAGED | IGNORED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED_PARENT, false /* expected enablement */);
- }
-
- public void testShowInHistory() throws CoreException, TeamException {
- IActionDelegate action = new ShowResourceInHistoryAction();
- IProject project = createTestProject(action);
- assertDisabledForCommonReasons(action, project);
- assertEnablement(action, project, MANAGED | FILES | SINGLE_ONLY, true /* expected enablement */);
- assertEnablement(action, project, MANAGED | FOLDERS | FILES, false /* expected enablement */);
- assertEnablement(action, project, MANAGED | FOLDERS | SINGLE_ONLY, false /* expected enablement */);
- assertEnablement(action, project, MANAGED | FILES, false /* expected enablement */);
- assertEnablement(action, project, ADDED | SINGLE_ONLY, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED | SINGLE_ONLY, false /* expected enablement */);
- assertEnablement(action, project, IGNORED | SINGLE_ONLY, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED_PARENT, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED | MANAGED | IGNORED, false /* expected enablement */);
- }
-
- public void testSyncAction() throws CoreException, TeamException {
- IActionDelegate action = new SyncAction();
- IProject project = createTestProject(action);
- assertDisabledForCommonReasons(action, project);
- assertEnabledForFolderOnlyOverlap(action, project);
- assertEnablement(action, project, MANAGED, true /* expected enablement */);
- assertEnablement(action, project, MANAGED | ADDED, true /* expected enablement */);
- assertEnablement(action, project, MANAGED | ADDED | UNMANAGED, true /* expected enablement */);
- // true is expected for ignored resources whose parent is not ignored
- assertEnablement(action, project, IGNORED, true /* expected enablement */);
- assertEnablement(action, project, UNMANAGED, true /* expected enablement */);
- assertEnablement(action, project, UNMANAGED_PARENT, false /* expected enablement */);
- // true is expected for ignored resources whose parent is not ignored
- assertEnablement(action, project, UNMANAGED | MANAGED | IGNORED, true /* expected enablement */);
- }
-
- public void testTagAction() throws CoreException, TeamException {
- IActionDelegate action = new TagLocalAction();
- IProject project = createTestProject(action);
- assertDisabledForCommonReasons(action, project);
- assertEnabledForFolderOnlyOverlap(action, project);
- assertEnablement(action, project, MANAGED, true /* expected enablement */);
- assertEnablement(action, project, MANAGED | ADDED, false /* expected enablement */);
- assertEnablement(action, project, MANAGED | ADDED | UNMANAGED, false /* expected enablement */);
- assertEnablement(action, project, IGNORED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED | MANAGED | IGNORED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED_PARENT, false /* expected enablement */);
- }
-
- public void testUnmanageAction() throws CoreException, TeamException {
- IActionDelegate action = new UnmanageAction();
- IProject project = createTestProject(action);
- assertDisabledForCommonReasons(action, project);
- List resources = new ArrayList();
- resources.add(project);
- ensureAllSyncInfoLoaded(project);
- assertEnablement(action, asSelection(resources), true);
- }
-
- public void testUpdateAction() throws CoreException, TeamException {
- IActionDelegate action = new UpdateAction();
- IProject project = createTestProject(action);
- assertDisabledForCommonReasons(action, project);
- assertEnabledForFolderOnlyOverlap(action, project);
- assertEnablement(action, project, MANAGED, true /* expected enablement */);
- assertEnablement(action, project, MANAGED | ADDED, false /* expected enablement */);
- assertEnablement(action, project, MANAGED | ADDED | UNMANAGED, false /* expected enablement */);
- assertEnablement(action, project, IGNORED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED | MANAGED | IGNORED, false /* expected enablement */);
- assertEnablement(action, project, UNMANAGED_PARENT, false /* expected enablement */);
- }
-}

Back to the top