| /******************************************************************************* |
| * 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()); |
| |
| } |
| |
| } |