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