| package org.eclipse.team.tests.ccvs.core.cvsresources; |
| /* |
| * (c) Copyright IBM Corp. 2000, 2002. |
| * All Rights Reserved. |
| */ |
| import java.io.BufferedReader; |
| import java.io.BufferedWriter; |
| import java.io.File; |
| import java.io.FileReader; |
| import java.io.FileWriter; |
| import java.io.IOException; |
| 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.runtime.CoreException; |
| import org.eclipse.core.runtime.NullProgressMonitor; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.team.ccvs.core.*; |
| import org.eclipse.team.ccvs.core.CVSProviderPlugin; |
| import org.eclipse.team.ccvs.core.CVSTag; |
| import org.eclipse.team.ccvs.core.ICVSFolder; |
| import org.eclipse.team.ccvs.core.ICVSResource; |
| import org.eclipse.team.core.TeamException; |
| 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.LocalFile; |
| import org.eclipse.team.internal.ccvs.core.resources.LocalFolder; |
| 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.internal.ccvs.core.util.SyncFileUtil; |
| import org.eclipse.team.tests.ccvs.core.CVSTestSetup; |
| import org.eclipse.team.tests.ccvs.core.EclipseTest; |
| |
| public class SynchronizerTest extends EclipseTest { |
| |
| public SynchronizerTest() { |
| super(); |
| } |
| |
| public SynchronizerTest(String name) { |
| super(name); |
| } |
| |
| public static Test suite() { |
| TestSuite suite = new TestSuite(SynchronizerTest.class); |
| return new CVSTestSetup(suite); |
| } |
| |
| protected File getSyncFile(File parent, String syncFileName) { |
| return new File(SyncFileUtil.getCVSSubdirectory(parent), syncFileName); |
| } |
| |
| protected void appendLineToFile(File file, String line) throws IOException { |
| |
| BufferedReader fileReader; |
| List fileContentStore = new ArrayList(); |
| |
| if (!file.exists()) { |
| return; |
| } |
| |
| String l; |
| fileReader = new BufferedReader(new FileReader(file)); |
| while ((l = fileReader.readLine()) != null) { |
| fileContentStore.add(l); |
| } |
| fileReader.close(); |
| |
| String[] content = (String[]) fileContentStore.toArray(new String[fileContentStore.size()]); |
| String[] newContent; |
| |
| newContent = new String[content.length + 1]; |
| System.arraycopy(content,0,newContent,0,content.length); |
| newContent[content.length] = line; |
| |
| file.delete(); |
| |
| BufferedWriter fileWriter; |
| |
| fileWriter = new BufferedWriter(new FileWriter(file)); |
| for (int i = 0; i<newContent.length; i++) { |
| fileWriter.write(newContent[i]); |
| fileWriter.newLine(); |
| } |
| fileWriter.close(); |
| } |
| |
| public void testFolderSync() throws CoreException, CVSException { |
| IProject project = getUniqueTestProject("testFolderSync"); |
| IResource[] resources = buildResources(project, new String[] {"a.txt", "folder1/", "folder1/b.txt", "folder2/", "folder2/c.txt"}, true); |
| ensureExistsInFileSystem(resources); |
| IFolder folder1 = project.getFolder("folder1"); |
| IFolder folder2 = project.getFolder("folder2"); |
| File folder1File = folder1.getLocation().toFile(); |
| File folder2File = folder2.getLocation().toFile(); |
| File projectFile = project.getLocation().toFile(); |
| ICVSResource cvsProject = new LocalFolder(projectFile); |
| |
| // 1. |
| |
| try { |
| CVSProviderPlugin.getSynchronizer().setFolderSync(new File("dummy"), new FolderSyncInfo("repo", "root", null, false)); |
| fail(); |
| } catch(Exception e) { |
| } |
| |
| // 2. |
| |
| FolderSyncInfo info = new FolderSyncInfo("repo", "root", null, false); |
| CVSProviderPlugin.getSynchronizer().setFolderSync(projectFile, info); |
| assertTrue(CVSProviderPlugin.getSynchronizer().getFolderSync(projectFile).equals(info)); |
| assertTrue(CVSProviderPlugin.getSynchronizer().members(projectFile).length == 0); |
| |
| // 3. |
| |
| info = new FolderSyncInfo("repo", "root", new CVSTag("v1", CVSTag.BRANCH), true); |
| CVSProviderPlugin.getSynchronizer().setFolderSync(folder1File, info); |
| assertTrue(CVSProviderPlugin.getSynchronizer().getFolderSync(folder1File).equals(info)); |
| assertTrue(CVSProviderPlugin.getSynchronizer().members(projectFile).length == 1); |
| |
| // 4. |
| |
| CVSProviderPlugin.getSynchronizer().setFolderSync(folder2File, info); |
| assertTrue(CVSProviderPlugin.getSynchronizer().getFolderSync(folder2File).equals(info)); |
| assertTrue(CVSProviderPlugin.getSynchronizer().members(projectFile).length == 2); |
| } |
| |
| public void testDeleteListener() throws CoreException, CVSException, TeamException { |
| IProject project = createProject("testDeleteListener", new String[] {"a.txt", "folder1/", "folder1/b.txt"}); |
| IFolder folder1 = project.getFolder("folder1"); |
| IFile file1 = folder1.getFile("b.txt"); |
| ICVSFolder cvsFolder = new LocalFolder(folder1.getLocation().toFile()); |
| ICVSFolder cvsProject = new LocalFolder(project.getLocation().toFile()); |
| ICVSFile cvsfile = new LocalFile(file1.getLocation().toFile()); |
| |
| // 1. delete of a folder deletes sync info deep |
| |
| FolderSyncInfo info = cvsFolder.getFolderSyncInfo(); |
| assertTrue(info!=null); |
| |
| folder1.delete(true, new NullProgressMonitor()); |
| |
| assertTrue(cvsFolder.getFolderSyncInfo()==null); |
| assertTrue(cvsfile.getSyncInfo()==null); |
| |
| // 2. rename of a project deletes cached sync info of source project |
| |
| project.move(new Path("movedProject"), true, new NullProgressMonitor()); |
| |
| assertTrue(cvsProject.getFolderSyncInfo()==null); |
| } |
| |
| public void testResourceSync() throws CVSException, CoreException, TeamException { |
| IProject project = createProject("testResourceSync", new String[] {"a.txt", "folder1/", "folder1/b.txt"}); |
| IFolder folder1 = project.getFolder("folder1"); |
| IFile file1 = project.getFile("a.txt"); |
| IFile newFile = folder1.getFile("c.txt"); |
| IFolder newFolder = project.getFolder("folder2"); |
| ICVSFolder cvsFolder = new LocalFolder(folder1.getLocation().toFile()); |
| ICVSFolder cvsNewFolder = new LocalFolder(newFolder.getLocation().toFile()); |
| ICVSFile cvsFile = new LocalFile(file1.getLocation().toFile()); |
| ICVSFile cvsNewFile = new LocalFile(newFile.getLocation().toFile()); |
| ICVSFolder cvsProject = new LocalFolder(project.getLocation().toFile()); |
| |
| // 1. |
| |
| assertTrue(!cvsProject.isManaged()); |
| assertTrue(cvsProject.isCVSFolder()); |
| assertTrue(cvsFile.getSyncInfo()!=null); |
| assertTrue(cvsFolder.getSyncInfo()!=null); |
| |
| assertTrue(cvsNewFile.getSyncInfo()==null); |
| assertTrue(cvsNewFolder.getSyncInfo()==null); |
| |
| // 2. |
| |
| ResourceSyncInfo folderInfo = new ResourceSyncInfo(cvsNewFolder.getName()); |
| ResourceSyncInfo fileInfo = new ResourceSyncInfo(cvsNewFile.getName(), "1.1", "timestamp", "-kb", null, null); |
| |
| cvsNewFile.setSyncInfo(fileInfo); |
| cvsNewFolder.setSyncInfo(folderInfo); |
| |
| assertTrue(cvsNewFile.getSyncInfo().equals(fileInfo)); |
| assertTrue(cvsNewFolder.getSyncInfo().equals(folderInfo)); |
| |
| save(cvsProject); |
| |
| assertTrue(cvsNewFile.getSyncInfo().equals(fileInfo)); |
| assertTrue(cvsNewFolder.getSyncInfo().equals(folderInfo)); |
| } |
| |
| public void testReload() throws CVSException, CoreException, TeamException, IOException { |
| IProject project = createProject("testReload", new String[] {"a.txt", "folder1/", "folder1/b.txt", "folder2/", "folder2/folder2a/", "folder2/folder2a/b.txt", "folder3/b.txt"}); |
| |
| File projectFile = project.getLocation().toFile(); |
| IFile newFile = project.getFile("b.txt"); |
| newFile.create(getRandomContents(), true, null); |
| IFolder folder1 = project.getFolder("folder1"); |
| IFolder newFolder = project.getFolder("newFolder"); |
| newFolder.create(true, true, null); |
| ICVSFolder cvsProject = new LocalFolder(project.getLocation().toFile()); |
| ICVSFile cvsNewFile = new LocalFile(newFile.getLocation().toFile()); |
| ICVSFolder cvsNewFolder = new LocalFolder(newFolder.getLocation().toFile()); |
| ICVSFolder cvsFolder = new LocalFolder(folder1.getLocation().toFile()); |
| |
| // 1. update entry from outside of synchronizer then reload |
| assertTrue(cvsNewFile.getSyncInfo()==null); |
| assertTrue(cvsNewFolder.getSyncInfo()==null); |
| assertTrue(cvsFolder.getFolderSyncInfo()!=null); |
| |
| ResourceSyncInfo fileInfo = new ResourceSyncInfo("/b.txt/1.1/Thu Aug 30 15:31:40 2001/-kb/", null, null); |
| ResourceSyncInfo folderInfo = new ResourceSyncInfo("newFolder"); |
| |
| folder1.delete(true, true, null); |
| |
| appendLineToFile(getSyncFile(project.getLocation().toFile(), SyncFileUtil.ENTRIES), fileInfo.getEntryLine(true)); |
| appendLineToFile(getSyncFile(project.getLocation().toFile(), SyncFileUtil.ENTRIES), folderInfo.getEntryLine(true)); |
| |
| reload(cvsProject); |
| |
| assertTrue(cvsNewFile.getSyncInfo().equals(fileInfo)); |
| assertTrue(cvsNewFolder.getSyncInfo().equals(folderInfo)); |
| assertTrue(cvsFolder.getFolderSyncInfo()==null); |
| assertTrue(new LocalFile(new File(folder1.getLocation().toFile(), "b.txt")).getSyncInfo()==null); |
| |
| // 2. delete multiple directory hierarchy and reload should delete everything from cache |
| IFolder folder2 = project.getFolder("folder2"); |
| IFolder folder2a = folder2.getFolder("folder2a"); |
| ICVSFolder folder2aFile = new LocalFolder(folder2a.getLocation().toFile()); |
| ICVSFolder folder2File = new LocalFolder(folder2.getLocation().toFile()); |
| |
| folder2File.unmanage(); |
| assertTrue(folder2File.exists()); |
| assertTrue(folder2File.getSyncInfo()==null); |
| assertTrue(folder2aFile.getSyncInfo()==null); |
| assertTrue(folder2File.getFolderSyncInfo()==null); |
| assertTrue(folder2File.getFolderSyncInfo()==null); |
| } |
| |
| 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()); |
| } |
| } |