blob: 1c767ad902152a17e40c89558fe57fd15737b684 [file] [log] [blame]
package org.eclipse.team.tests.ccvs.core.cvsresources;
/*
* (c) Copyright IBM Corp. 2000, 2002.
* All Rights Reserved.
*/
import java.io.File;
import java.io.IOException;
import junit.awtui.TestRunner;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.team.ccvs.core.*;
import org.eclipse.team.ccvs.core.CVSProviderPlugin;
import org.eclipse.team.ccvs.core.ICVSFolder;
import org.eclipse.team.ccvs.core.ICVSResource;
import org.eclipse.team.internal.ccvs.core.CVSException;
import org.eclipse.team.internal.ccvs.core.resources.ICVSFile;
import org.eclipse.team.internal.ccvs.core.resources.LocalResource;
import org.eclipse.team.internal.ccvs.core.syncinfo.FolderSyncInfo;
import org.eclipse.team.internal.ccvs.core.syncinfo.ResourceSyncInfo;
import org.eclipse.team.tests.ccvs.core.JUnitTestCase;
public class LocalFolderTest extends JUnitTestCase {
ICVSFile file1;
ICVSFile file1a;
ICVSFile file2;
ICVSFolder folder1;
ICVSFolder folder1a;
ICVSFolder folder2;
String entryLine1;
String entryLine2;
String entryLineExtra1;
String entryLineExtra2;
String entryLineExtra3;
String root;
String repo;
String root2;
String repo2;
ResourceSyncInfo fileInfo1;
FolderSyncInfo folderInfo1;
FolderSyncInfo folderInfo2;
File ioFile1;
public LocalFolderTest(String arg) {
super(arg);
}
public static void main(String[] args) {
TestRunner.run(LocalFolderTest.class);
}
/**
* Leaves this file-structure:
*
* test (folder1, folder1a)
* proj1 (folder2, ioFolder2) *** Does not exist ***
* file1.txt (file1, file1a)
* file2.txt (file2) *** Does not exist ***
*/
public void setUp() throws CVSException, IOException {
folder1 = getManagedFolder("test");
folder1a = getManagedFolder("test");
folder2 = folder1.getFolder("proj1");
folder1.mkdir();
assertTrue(folder1.exists());
file1 = folder1.getFile("file1.txt");
file1a = folder1.getFile("file1.txt");
file2 = folder1.getFile("file2.txt");
root = ":server:user:pwd@test:/home";
repo = "repository";
root2 = ":method:user:pwd@test2:/home/myFolder/repo";
repo2 = "proj1/subdir";
folderInfo1 = new FolderSyncInfo(repo,root,null,false);
folderInfo2 = new FolderSyncInfo(repo2,root2,null,true);
entryLine1 = "/.vcm_meta/1.1/27 Sep 2001 18:00:16/-kb/TmyTag";
entryLine2 = "/file3.txt/1.1/27 Sep 2001 18:00:16/-kb/TmyTag";
entryLineExtra1 = "/file1.txt/1.1/27 Sep 2001 18:00:16/-kb/TmyTag";
entryLineExtra2 = "/file1.txt/1.2/27 Sep 2001 18:00:16/-kb/TmyTag";
entryLineExtra3 = "/file2.txt/1.2/27 Sep 2001 18:00:16/-kb/TmyTag";
folder1.setFolderSyncInfo(folderInfo1);
fileInfo1 = new ResourceSyncInfo(entryLineExtra1,null,null);
file1.setSyncInfo(fileInfo1);
ioFile1 = getFile("test/file1.txt");
ioFile1.createNewFile();
}
public void tearDown() throws CVSException {
folder1.delete();
CVSProviderPlugin.getSynchronizer().reload(((LocalResource)folder1).getLocalFile(), new NullProgressMonitor());
assertSynchronizerEmpty();
assertTrue(!folder1.exists());
}
public static Test suite() {
TestSuite suite = new TestSuite(LocalFolderTest.class);
return suite;
}
public void testGetFolders() throws CVSException {
// tests setFolderSyncInfo and getFolderSyncInfo as well
boolean fail = false;
ICVSFolder folder3;
ICVSFolder tmpFolder;
ICVSFolder[] resultFolders;
folder3 = folder1.getFolder("folder3");
folder3.mkdir();
resultFolders = folder2.getFolders();
assertEquals(0, resultFolders.length);
// For the moment we assume, that seting a folderInfo
// does not create the folder automatically but you
// have to create it with mkdir.
try {
folder2.setFolderSyncInfo(folderInfo1);
fail();
} catch (Exception e) {
}
resultFolders = folder1.getFolders();
assertEquals(1, resultFolders.length);
folder2.mkdir();
resultFolders = folder1.getFolders();
assertEquals(2, resultFolders.length);
folder2.delete();
resultFolders = folder1.getFolders();
assertEquals(1, resultFolders.length);
folder2.mkdir();
folder2.setFolderSyncInfo(folderInfo1);
resultFolders = folder1.getFolders();
assertEquals(2, resultFolders.length);
folder2.delete();
resultFolders = folder1.getFolders();
assertEquals(2, resultFolders.length);
tmpFolder = folder1.getFolder("proj1");
assertEquals(false,tmpFolder.exists());
assertEquals(true,tmpFolder.isManaged());
}
public void testGetFiles() throws Exception {
// tests setFolderSyncInfo and getFolderSyncInfo as well
boolean fail = false;
ICVSFile[] resultFiles;
ICVSFile file3;
File ioFile3;
ResourceSyncInfo fileInfo2;
file3 = folder1.getFile("file3.txt");
ioFile3 = getFile("test/file3.txt");
// From here we check if the filelist does include files,
// that are added locally but not as entries (and exclude them
// again when we delete them)
resultFiles = folder1.getFiles();
assertEquals(1, resultFiles.length);
ioFile3.createNewFile();
resultFiles = folder1.getFiles();
assertEquals(2, resultFiles.length);
ioFile3.delete();
resultFiles = folder1.getFiles();
assertEquals(1, resultFiles.length);
// Here is tested if we get files that do not exist locally but
// in the entries
// first we try a fileinfo with the wrong name
try {
file3.setSyncInfo(fileInfo1);
} catch (Throwable e) {fail = true;}
assertTrue(fail);
fail = false;
fileInfo2 = new ResourceSyncInfo(entryLine2,null,null);
file3.setSyncInfo(fileInfo2);
resultFiles = folder1.getFiles();
assertEquals(2, resultFiles.length);
assertEquals(false,file3.exists());
assertEquals(true,file3.isManaged());
file3.unmanage();
resultFiles = folder1.getFiles();
assertEquals(1, resultFiles.length);
assertEquals(false,file3.exists());
assertEquals(false,file3.isManaged());
}
public void testGetChild() throws CVSException {
try {
folder1.getChild("proj1");
assertTrue(false);
} catch (CVSException e) {}
try {
folder1.getChild("file2.txt");
assertTrue(false);
} catch (CVSException e) {}
folder2.mkdir();
assertEquals(true, folder1.getChild("proj1").isFolder());
assertEquals("proj1", folder1.getChild("proj1").getName());
assertEquals(false, folder1.getChild("file1.txt").isFolder());
}
// ---------------- Here the resource-tests start ---------------
public void testExists() throws Exception {
assertEquals(false, folder2.exists());
folder2.mkdir();
assertEquals(true, folder2.exists());
folder2.delete();
assertEquals(false, folder2.exists());
}
public void testGetName() throws CVSException {
assertEquals("proj1", folder2.getName());
folder2.mkdir();
assertEquals("proj1", folder2.getName());
}
public void testGetParent() {
assertEquals(folder1,folder2.getParent());
}
public void testGetRelativePath() throws CVSException {
ICVSFolder subFolder1;
ICVSFolder subFolder2;
ICVSFolder subFolder3;
String sep = "/";
boolean fail = false;
subFolder1 = folder1.getFolder("proj1");
subFolder2 = subFolder1.getFolder("proj2");
subFolder3 = subFolder2.getFolder("proj3");
assertEquals("proj1", folder2.getRelativePath(folder1));
assertEquals("testGetRelativeLocation.1","proj1", subFolder1.getRelativePath(folder1));
assertEquals("testGetRelativeLocation.2","proj1" + sep + "proj2" + sep + "proj3", subFolder3.getRelativePath(folder1));
assertEquals("testGetRelativeLocation.3","proj2", subFolder2.getRelativePath(subFolder1));
assertEquals("testGetRelativeLocation.3a","", subFolder2.getRelativePath(subFolder2));
try {
subFolder1.getRelativePath(subFolder2);
} catch (CVSException e) {fail = true;}
assertTrue("testGetRelativeLocation.4",fail);
fail = false;
subFolder1.delete();
}
public void testIsFolder() {
assertEquals(true, folder2.isFolder());
}
public void testFolderIsManaged() throws CVSException {
ICVSFolder folder = getManagedFolder("testIsManaged");
folder.mkdir();
assertEquals(null, folder.getFolderSyncInfo());
FolderSyncInfo info = new FolderSyncInfo("module", ":pserver:user@host:/home", null, false);
folder.setFolderSyncInfo(info);
assertTrue(folder.isCVSFolder() && !folder.isManaged());
assertTrue(folder.getFolderSyncInfo().equals(info));
folder.delete();
reload(folder);
}
public void testFolderInfo() throws CVSException {
FolderSyncInfo folderInfo2;
FolderSyncInfo folderInfo3;
String repo;
String root;
repo = "proj1/folder1";
root = ":pserver:nkram:pwd@fiji:/home/nkrambro/repo";
assertEquals(null, folder2.getFolderSyncInfo());
assertEquals(false,folder2.isCVSFolder());
folder1.setFolderSyncInfo(folderInfo1);
folderInfo2 = folder1.getFolderSyncInfo();
assertEquals(true,folder1.isCVSFolder());
assertEquals(this.root,folderInfo2.getRoot());
assertEquals(this.repo,folderInfo2.getRepository());
folder1.unmanage();
assertEquals(false,folder1.isCVSFolder());
assertEquals(null,folder1.getFolderSyncInfo());
folderInfo3 = new FolderSyncInfo(repo,root,folderInfo2.getTag(),false);
folder1.setFolderSyncInfo(folderInfo3);
assertEquals(root,folder1.getFolderSyncInfo().getRoot());
assertEquals(repo,folder1.getFolderSyncInfo().getRepository());
assertEquals("/home/repository",folderInfo2.getRemoteLocation());
}
public void testsetSyncInfo() throws CVSException {
String entry1 = "/file1.txt/a/b/c/";
String entry2 = "/file1.txt/b/b/c/";
String entry3 = "/file2.txt/b/b/c/";
ResourceSyncInfo info1 = new ResourceSyncInfo(entry1,null,null);
ResourceSyncInfo info2 = new ResourceSyncInfo(entry2,null,null);
ResourceSyncInfo info3 = new ResourceSyncInfo(entry3,null,null);
ICVSFile file1 = this.file1;
ICVSFile file2 = folder1.getFile("file2.txt");
assertEquals(1,folder1.getFiles().length);
file1.setSyncInfo(info1);
assertEquals(1,folder1.getFiles().length);
file1.setSyncInfo(info2);
assertEquals(1,folder1.getFiles().length);
file2.setSyncInfo(info3);
assertEquals(2,folder1.getFiles().length);
assertEquals(entry2,file1.getSyncInfo().getEntryLine(true));
assertEquals(entry3,file2.getSyncInfo().getEntryLine(true));
// The two files in the getFiles are acctually the files
// we put in there
assertTrue( ( folder1.getFiles()[0].equals(file1) ||
folder1.getFiles()[0].equals(file2)) &&
( folder1.getFiles()[1].equals(file1) ||
folder1.getFiles()[1].equals(file2)));
}
public void testSimpleGetFiles() throws CVSException {
// When a file is added to the entries it should be in the list
// of files afterwards ... this should be one of the current problems
file2.setSyncInfo(new ResourceSyncInfo(entryLineExtra3,null,null));
assertEquals(2,folder1.getFiles().length);
file2.unmanage();
assertEquals(1,folder1.getFiles().length);
}
public void testSimpleResourceSyncInfo() throws Exception {
assertEquals(file1a.getSyncInfo(), fileInfo1);
file1a.setSyncInfo(new ResourceSyncInfo(entryLineExtra2,null,null));
assertEquals(file1.getSyncInfo().getEntryLine(true),entryLineExtra2);
file1a.setSyncInfo(new ResourceSyncInfo(entryLineExtra1,null,null));
assertEquals(file1.getSyncInfo().getEntryLine(true),entryLineExtra1);
file1a.setSyncInfo(new ResourceSyncInfo(entryLineExtra2,null,null));
assertEquals(file1.getSyncInfo().getEntryLine(true),entryLineExtra2);
}
public void testSimpleFolderSyncInfo() throws Exception {
folder1.setFolderSyncInfo(folderInfo2);
assertEquals(folder1.getFolderSyncInfo().getRepository(),repo2);
assertEquals(folder1.getFolderSyncInfo().getRoot(),root2);
assertEquals(folder1.getFolderSyncInfo().getIsStatic(),true);
reload(folder1);
assertEquals(folder1.getFolderSyncInfo().getRepository(),repo2);
assertEquals(folder1.getFolderSyncInfo().getRoot(),root2);
assertEquals(folder1.getFolderSyncInfo().getIsStatic(),true);
folder1.setFolderSyncInfo(folderInfo1);
assertEquals(folder1a.getFolderSyncInfo().getRepository(),repo);
assertEquals(folder1a.getFolderSyncInfo().getRoot(),root);
assertEquals(folder1a.getFolderSyncInfo().getIsStatic(),false);
}
public void testSyncIsCvsFolder() throws Exception {
folder1.delete();
reload(folder1);
assertEquals(false,folder1.isCVSFolder());
folder1.mkdir();
assertEquals(false,folder1.isCVSFolder());
folder1.setFolderSyncInfo(folderInfo1);
assertEquals(true,folder1.isCVSFolder());
assertEquals(false,folder1.isManaged());
assertEquals(false,folder2.isCVSFolder());
folder2.mkdir();
assertEquals(false,folder2.isCVSFolder());
assertEquals(false,folder2.isManaged());
folder2.setFolderSyncInfo(folderInfo2);
assertEquals(true,folder2.isCVSFolder());
assertEquals(true,folder2.isManaged());
}
protected void reload(ICVSResource resource) throws CVSException {
CVSProviderPlugin.getSynchronizer().reload(((LocalResource)resource).getLocalFile(), new NullProgressMonitor());
}
protected void save(ICVSResource resource) throws CVSException {
CVSProviderPlugin.getSynchronizer().save(((LocalResource)resource).getLocalFile(), new NullProgressMonitor());
}
}