1 /******************************************************************************* 2 * Copyright (c) 2000, 2006 IBM Corporation and others. 3 * 4 * This program and the accompanying materials 5 * are made available under the terms of the Eclipse Public License 2.0 6 * which accompanies this distribution, and is available at 7 * https://www.eclipse.org/legal/epl-2.0/ 8 * 9 * SPDX-License-Identifier: EPL-2.0 10 * 11 * Contributors: 12 * IBM Corporation - initial API and implementation 13 *******************************************************************************/ 14 package org.eclipse.team.tests.ccvs.core.cvsresources; 15 16 import junit.framework.Test; 17 import junit.framework.TestSuite; 18 import org.eclipse.core.resources.IContainer; 19 import org.eclipse.core.resources.IProject; 20 import org.eclipse.core.resources.IResource; 21 import org.eclipse.core.resources.IResourceVisitor; 22 import org.eclipse.core.runtime.CoreException; 23 import org.eclipse.team.core.TeamException; 24 import org.eclipse.team.internal.ccvs.core.CVSException; 25 import org.eclipse.team.internal.ccvs.core.ICVSFolder; 26 import org.eclipse.team.internal.ccvs.core.ICVSResource; 27 import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot; 28 import org.eclipse.team.tests.ccvs.core.CVSTestSetup; 29 import org.eclipse.team.tests.ccvs.core.EclipseTest; 30 31 /** 32 * What does this class do? 33 */ 34 public class EclipseFolderTest extends EclipseTest { EclipseFolderTest()35 public EclipseFolderTest() { 36 super(); 37 } 38 EclipseFolderTest(String name)39 public EclipseFolderTest(String name) { 40 super(name); 41 } 42 suite()43 public static Test suite() { 44 TestSuite suite = new TestSuite(); 45 suite.addTestSuite(EclipseFolderTest.class); 46 return new CVSTestSetup(suite); 47 } 48 assertChildrenHaveSync(IContainer root, final boolean hasSync)49 protected void assertChildrenHaveSync(IContainer root, final boolean hasSync) throws CoreException, CVSException { 50 root.accept(new IResourceVisitor() { 51 @Override 52 public boolean visit(IResource resource) throws CoreException { 53 try { 54 ICVSResource cvsResource = CVSWorkspaceRoot.getCVSResourceFor(resource); 55 if(!cvsResource.isIgnored()) { 56 if(resource.getType()==IResource.FILE) { 57 assertTrue((cvsResource.getSyncInfo()!=null) == hasSync); 58 } else { 59 assertTrue((((ICVSFolder)cvsResource).getFolderSyncInfo()!=null) == hasSync); 60 } 61 } 62 } catch(CVSException e) { 63 throw new CoreException(e.getStatus()); 64 } 65 return true; 66 } 67 }); 68 } 69 testUnmanageFolder()70 public void testUnmanageFolder() throws CoreException, TeamException { 71 IProject project = createProject("testUnmanageFolder_A", new String[] {"a.txt", "folder1/", "folder1/b.txt", "folder1/folder2/", "folder1/folder2/c.txt"}); 72 ICVSFolder cvsProject = CVSWorkspaceRoot.getCVSFolderFor(project); 73 assertChildrenHaveSync(project, true); 74 75 // test that unmanaging the project flushes sync info 76 cvsProject.unmanage(null); 77 assertChildrenHaveSync(project, false); 78 79 final IProject projectB = createProject("testUnmanageFolder_B", new String[] {"a.txt", "folder1/", "folder1/b.txt", "folder1/folder2/", "folder1/folder2/c.txt"}); 80 final ICVSFolder cvsProjectB = CVSWorkspaceRoot.getCVSFolderFor(projectB); 81 assertChildrenHaveSync(projectB, true); 82 83 // test that unmanaging in a CVS runnable flushes too 84 cvsProjectB.run(monitor -> { 85 try { 86 assertChildrenHaveSync(projectB, true); 87 cvsProjectB.unmanage(null); 88 assertChildrenHaveSync(projectB, false); 89 } catch (CoreException e) { 90 throw CVSException.wrapException(e); 91 } 92 }, null); 93 assertChildrenHaveSync(projectB, false); 94 } 95 } 96