diff options
author | Michael Valenta | 2002-05-15 21:31:25 +0000 |
---|---|---|
committer | Michael Valenta | 2002-05-15 21:31:25 +0000 |
commit | ad7b094e181cfb593c53084802700d7702b7f09d (patch) | |
tree | a233313480fa151d0f731f4b82d95614ad5eff8a | |
parent | 7f036f87efd92979679797069dfea83a6995d004 (diff) | |
download | eclipse.platform.team-ad7b094e181cfb593c53084802700d7702b7f09d.tar.gz eclipse.platform.team-ad7b094e181cfb593c53084802700d7702b7f09d.tar.xz eclipse.platform.team-ad7b094e181cfb593c53084802700d7702b7f09d.zip |
*** empty log message ***
8 files changed, 334 insertions, 11 deletions
diff --git a/tests/org.eclipse.team.tests.core/.classpath b/tests/org.eclipse.team.tests.core/.classpath index 1cdf36089..60fd55a00 100644 --- a/tests/org.eclipse.team.tests.core/.classpath +++ b/tests/org.eclipse.team.tests.core/.classpath @@ -14,5 +14,6 @@ <classpathentry kind="var" path="JRE_LIB" rootpath="JRE_SRCROOT" sourcepath="JRE_SRC"/> <classpathentry kind="src" path="/org.eclipse.core.runtime"/> <classpathentry kind="src" path="/org.eclipse.team.ftp"/> + <classpathentry kind="src" path="/org.eclipse.core.boot"/> <classpathentry kind="output" path="bin"/> </classpath> diff --git a/tests/org.eclipse.team.tests.core/.project b/tests/org.eclipse.team.tests.core/.project index 228a6b1a8..984829fd3 100644 --- a/tests/org.eclipse.team.tests.core/.project +++ b/tests/org.eclipse.team.tests.core/.project @@ -5,6 +5,7 @@ <projects>
<project>org.apache.xerces</project>
<project>org.eclipse.compare</project>
+ <project>org.eclipse.core.boot</project>
<project>org.eclipse.core.resources</project>
<project>org.eclipse.core.runtime</project>
<project>org.eclipse.core.tests.harness</project>
diff --git a/tests/org.eclipse.team.tests.core/plugin.xml b/tests/org.eclipse.team.tests.core/plugin.xml index a404ca9da..b3c274ca5 100644 --- a/tests/org.eclipse.team.tests.core/plugin.xml +++ b/tests/org.eclipse.team.tests.core/plugin.xml @@ -15,10 +15,12 @@ <import plugin="org.apache.xerces"/> <import plugin="org.eclipse.core.tests.harness"/> <import plugin="org.eclipse.core.resources"/> + <import plugin="org.eclipse.core.boot"/> <import plugin="org.eclipse.team.core"/> <import plugin="org.eclipse.team.cvs.core"/> <import plugin="org.eclipse.team.ui"/> <import plugin="org.eclipse.team.cvs.ui"/> + <import plugin="org.eclipse.team.ftp"/> <import plugin="org.eclipse.compare"/> <import plugin="org.eclipse.ui"/> <import plugin="org.junit"/> @@ -43,6 +45,15 @@ </run> </test> </extension> + <extension + point="org.eclipse.core.tests.harness.tests"> + <test + id="team.ftp"> + <run + class="org.eclipse.team.tests.ftp.ClientTest"> + </run> + </test> + </extension> <extension @@ -85,4 +96,14 @@ </one-of-nature> </extension> + <extension + id="testapplication" + point="org.eclipse.core.runtime.applications"> + <application> + <run + class="org.eclipse.team.tests.ftp.TestApplication"> + </run> + </application> + </extension> + </plugin> diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/AllTeamTests.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/AllTeamTests.java index deabf4dd6..6b3edb2fc 100644 --- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/AllTeamTests.java +++ b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/AllTeamTests.java @@ -30,6 +30,7 @@ public class AllTeamTests extends EclipseWorkspaceTest { public static Test suite() { TestSuite suite = new TestSuite(); suite.addTest(RepositoryProviderTests.suite()); + suite.addTest(StreamTests.suite()); return suite; } } diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/StreamTests.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/StreamTests.java new file mode 100644 index 000000000..b423aebe3 --- /dev/null +++ b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/StreamTests.java @@ -0,0 +1,87 @@ +/******************************************************************************* + * Copyright (c) 2002 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v0.5 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v05.html + * + * Contributors: + * IBM - Initial implementation + ******************************************************************************/ +package org.eclipse.team.tests.core; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; +import org.eclipse.team.internal.core.streams.CRLFtoLFInputStream; +import org.eclipse.team.internal.core.streams.LFtoCRLFInputStream; + +public class StreamTests extends TestCase { + private static final byte[] EMPTY_SEQ = new byte[] { }; + private static final byte[] LF_SEQ = new byte[] { '\n' }; + private static final byte[] CRLF_SEQ = new byte[] { '\r', '\n' }; + + public StreamTests(String name) { + super(name); + } + + public static Test suite() { + return new TestSuite(StreamTests.class); + } + + public void testCRLFtoLFInputStream() throws IOException { + testCRLFtoLFTranslation("", ""); + testCRLFtoLFTranslation("a", "a"); + testCRLFtoLFTranslation("abc", "abc"); + testCRLFtoLFTranslation("\n", "\n"); + testCRLFtoLFTranslation("\r", "\r"); + testCRLFtoLFTranslation("\r\n", "\n"); + testCRLFtoLFTranslation("x\r\r\n\rx", "x\r\n\rx"); + testCRLFtoLFTranslation("The \r\n quick brown \n fox \r\n\n\r\r\n jumped \n\n over \r\n the \n lazy dog.\r\n", + "The \n quick brown \n fox \n\n\r\n jumped \n\n over \n the \n lazy dog.\n"); + } + + private void testCRLFtoLFTranslation(String pre, String post) throws IOException { + ByteArrayInputStream bin = new ByteArrayInputStream(pre.getBytes()); + InputStream in = new CRLFtoLFInputStream(bin); + InputStream inExpected = new ByteArrayInputStream(post.getBytes()); + assertStreamEquals(inExpected, in); + } + + public void testLFtoCRLFInputStream() throws IOException { + testLFtoCRLFTranslation("", ""); + testLFtoCRLFTranslation("a", "a"); + testLFtoCRLFTranslation("abc", "abc"); + testLFtoCRLFTranslation("\n", "\r\n"); + testLFtoCRLFTranslation("\r", "\r"); + testLFtoCRLFTranslation("\r\n", "\r\r\n"); + testLFtoCRLFTranslation("x\r\r\n\rx", "x\r\r\r\n\rx"); + testLFtoCRLFTranslation("The \r\n quick brown \n fox \r\n\n\r\r\n jumped \n\n over \r\n the \n lazy dog.\r\n", + "The \r\r\n quick brown \r\n fox \r\r\n\r\n\r\r\r\n jumped \r\n\r\n over \r\r\n the \r\n lazy dog.\r\r\n"); + } + + private void testLFtoCRLFTranslation(String pre, String post) throws IOException { + ByteArrayInputStream bin = new ByteArrayInputStream(pre.getBytes()); + InputStream in = new LFtoCRLFInputStream(bin); + InputStream inExpected = new ByteArrayInputStream(post.getBytes()); + assertStreamEquals(inExpected, in); + } + + private void assertStreamEquals(InputStream in1, InputStream in2) throws IOException { + try { + for (;;) { + int byte1 = in1.read(); + int byte2 = in2.read(); + assertEquals("Streams not equal", byte1, byte2); + if (byte1 == -1) break; + } + } finally { + in1.close(); + in2.close(); + } + } +} diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/ftp/ClientTest.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/ftp/ClientTest.java index ecfa571ef..7dc9f2908 100644 --- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/ftp/ClientTest.java +++ b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/ftp/ClientTest.java @@ -17,7 +17,6 @@ import junit.framework.TestSuite; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.team.internal.ftp.FTPException; -import org.eclipse.team.internal.ftp.FTPServerLocation; import org.eclipse.team.internal.ftp.client.FTPClient; import org.eclipse.team.tests.core.TeamTest; @@ -46,12 +45,11 @@ public class ClientTest extends TeamTest { } public FTPClient openFTPConnection() throws FTPException { - FTPServerLocation location = FTPServerLocation.fromURL(getURL(), false); - FTPClient client = new FTPClient(location, null, null); - client.open(DEFAULT_PROGRESS_MONITOR); - return client; + return FTPTestSetup.openFTPConnection(getURL()); } + + public void testCreateDirectory() throws FTPException { FTPClient client = openFTPConnection(); try { diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/ftp/FTPTestSetup.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/ftp/FTPTestSetup.java index 0c2c7ab68..c61853945 100644 --- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/ftp/FTPTestSetup.java +++ b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/ftp/FTPTestSetup.java @@ -18,9 +18,12 @@ import java.io.FileReader; import junit.extensions.TestSetup; import junit.framework.Test; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.team.internal.ftp.FTPException; import org.eclipse.team.internal.ftp.FTPServerLocation; import org.eclipse.team.internal.ftp.client.FTPClient; +import org.eclipse.team.internal.ftp.client.IFTPClientListener; /** * Provides the FTP tests with a host to ftp to. @@ -30,6 +33,8 @@ public class FTPTestSetup extends TestSetup { public static final String FTP_URL; public static final boolean SCRUB_URL; + private static final IProgressMonitor DEFAULT_PROGRESS_MONITOR = new NullProgressMonitor(); + public static URL ftpURL; // Static initializer for constants @@ -86,12 +91,8 @@ public class FTPTestSetup extends TestSetup { // is important for the UI tests. URL url = new URL(urlString); FTPServerLocation location = FTPServerLocation.fromURL(url, false); - FTPClient client = new FTPClient(location, null, null); - try { - client.open(null); - } finally { - client.close(null); - } + FTPClient client = openFTPConnection(url); + client.close(DEFAULT_PROGRESS_MONITOR); // Initialize the repo if requested (requires rsh access) if( SCRUB_URL ) { @@ -104,4 +105,27 @@ public class FTPTestSetup extends TestSetup { public void tearDown() { // Nothing to do here } + + public static FTPClient openFTPConnection(URL url) throws FTPException { + FTPServerLocation location = FTPServerLocation.fromURL(url, false); + FTPClient client = new FTPClient(location, null, getListener()); + client.open(DEFAULT_PROGRESS_MONITOR); + return client; + } + + public static IFTPClientListener getListener() { + return new IFTPClientListener() { + public void responseReceived(int responseCode, String responseText) { + System.out.println(responseText); + } + public void requestSent(String command, String argument) { + if (argument != null) { + System.out.println(command + " " + argument); + } else { + System.out.println(command); + } + } + }; + } + } diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/ftp/TestApplication.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/ftp/TestApplication.java new file mode 100644 index 000000000..e65f1ff67 --- /dev/null +++ b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/ftp/TestApplication.java @@ -0,0 +1,190 @@ +/******************************************************************************* + * Copyright (c) 2002 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v0.5 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v05.html + * + * Contributors: + * IBM - Initial API and implementation + ******************************************************************************/ +package org.eclipse.team.tests.ftp; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.util.StringTokenizer; + +import org.eclipse.core.boot.IPlatformRunnable; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.Path; +import org.eclipse.team.internal.ftp.*; +import org.eclipse.team.internal.ftp.FTPException; +import org.eclipse.team.internal.ftp.FTPProxyLocation; +import org.eclipse.team.internal.ftp.FTPServerLocation; +import org.eclipse.team.internal.ftp.client.*; +import org.eclipse.team.internal.ftp.client.FTPClient; +import org.eclipse.team.internal.ftp.client.FTPCommunicationException; +import org.eclipse.team.internal.ftp.client.FTPDirectoryEntry; +import org.eclipse.team.internal.ftp.client.IFTPClientListener; + +public class TestApplication implements IPlatformRunnable { + protected PrintWriter out; + protected BufferedReader in; + protected FTPServerLocation location; + protected FTPProxyLocation proxy; + protected FTPClient client; + protected IFTPClientListener listener; + protected IProject project; + + public Object run(Object args) { + /*** initialize ***/ + out = new PrintWriter(new OutputStreamWriter(System.out), true); + in = new BufferedReader(new InputStreamReader(System.in)); + listener = new IFTPClientListener() { + public void responseReceived(int responseCode, String responseText) { + out.println(responseText); + } + public void requestSent(String command, String argument) { + if (argument != null) { + out.println(command + " " + argument); + } else { + out.println(command); + } + } + }; + + // we'll dump downloaded files into + project = ResourcesPlugin.getWorkspace().getRoot().getProject("FTP-test"); + try { + if (! project.exists()) { + project.create(null); + } + if (! project.isOpen()) { + project.open(null); + } + } catch (CoreException e) { + e.printStackTrace(); + } + + /*** run ***/ + printHelp(); + for (;;) { + String line; + try { + line = in.readLine(); + } catch (IOException e) { + break; + } + StringTokenizer tok = new StringTokenizer(line); + if (! tok.hasMoreTokens()) continue; + String command = tok.nextToken().toLowerCase(); + try { + if (command.equals("proxy") && tok.countTokens() >= 2 && tok.countTokens() <= 4) { + proxy = new FTPProxyLocation( + tok.nextToken(), + Integer.parseInt(tok.nextToken(), 10), + tok.hasMoreTokens() ? tok.nextToken() : null, + tok.hasMoreTokens() ? tok.nextToken() : null); + } else if (command.equals("open") && tok.countTokens() == 5) { + location = new FTPServerLocation( + tok.nextToken(), + Integer.parseInt(tok.nextToken(), 10), + tok.nextToken(), + tok.nextToken(), + tok.nextToken().equals("true")); + client = new FTPClient(location, proxy, listener); + client.open(getProgressMonitor()); + } else if (command.equals("close")) { + client.close(getProgressMonitor()); + } else if (command.equals("quit")) { + break; + } else if (command.equals("cd") && tok.countTokens() == 1) { + client.changeDirectory(tok.nextToken(), getProgressMonitor()); + } else if (command.equals("ls") && tok.countTokens() == 0) { + FTPDirectoryEntry[] infos = client.listFiles(null, getProgressMonitor()); + printFileList(infos); + } else if (command.equals("ls") && tok.countTokens() == 1) { + FTPDirectoryEntry[] infos = client.listFiles(tok.nextToken(), getProgressMonitor()); + printFileList(infos); + } else if (command.equals("mkdir") && tok.countTokens() == 1) { + client.createDirectory(tok.nextToken(), getProgressMonitor()); + } else if (command.equals("rmdir") && tok.countTokens() == 1) { + client.deleteDirectory(tok.nextToken(), getProgressMonitor()); + } else if (command.equals("get") && tok.countTokens() == 3) { + String remoteFilePath = tok.nextToken(); + boolean binary = tok.nextToken().equals("true"); + boolean resume = tok.nextToken().equals("true"); + IFile file = project.getFile(new Path(remoteFilePath).lastSegment()); + client.getFile(remoteFilePath, file, binary, resume, getProgressMonitor()); + } else if (command.equals("put") && tok.countTokens() == 2) { + String remoteFilePath = tok.nextToken(); + boolean binary = tok.nextToken().equals("true"); + IFile file = project.getFile(new Path(remoteFilePath).lastSegment()); + client.putFile(remoteFilePath, file, binary, getProgressMonitor()); + } else if (command.equals("rm") && tok.countTokens() == 1) { + client.deleteFile(tok.nextToken(), getProgressMonitor()); + } else { + printHelp(); + } + } catch (FTPException e) { + out.println("error: " + e.toString()); + } + } + out.println("Terminated."); + return null; + } + + private IProgressMonitor getProgressMonitor() { + return new NullProgressMonitor(); + } + + private void printHelp() { + out.println("--- Interactive Test FTP Client ---"); + out.println("Commands:"); + out.println(" proxy <hostname> <port> <username> <password>"); + out.println(" open <hostname> <port> <username> <password> <passive true/false>"); + out.println(" close"); + out.println(" help"); + out.println(" quit"); + out.println(" cd <dir>"); + out.println(" ls <dir>"); + out.println(" mkdir <dir>"); + out.println(" rmdir <dir>"); + out.println(" get <file> <binary true/false> <resume true/false>"); + out.println(" put <file> <binary true/false>"); + out.println(" rm <file>"); + out.println(); + } + + private void printFileList(FTPDirectoryEntry[] infos) { + for (int i = 0; i < infos.length; i++) { + FTPDirectoryEntry info = infos[i]; + out.print(info.hasDirectorySemantics() ? "d" : "-"); + out.print(info.hasFileSemantics() ? "f" : "-"); + out.print(' '); + out.print(pad("\"" + info.getName() + "\"", 40)); + out.print(' '); + out.print(pad(info.getSize() != info.UNKNOWN_SIZE ? Long.toString(info.getSize()) : "?", 12)); + out.print(' '); + if (info.getModTime() != null) out.print(info.getModTime().toGMTString()); + else out.println("?"); + out.println(); + } + } + + private String pad(String string, int len) { + int count = len - string.length(); + if (count <= 0) return string; + StringBuffer buf = new StringBuffer(string); + while (count-- > 0) buf.append(' '); + return buf.toString(); + } +} |