/******************************************************************************* * Copyright (c) 2000, 2015 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.core.tests.resources; import junit.framework.Test; import junit.framework.TestSuite; import org.eclipse.core.resources.*; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; public class TeamPrivateMemberTest extends ResourceTest { public TeamPrivateMemberTest() { super(); } public TeamPrivateMemberTest(String name) { super(name); } public static Test suite() { return new TestSuite(TeamPrivateMemberTest.class); } public void testRefreshLocal() { IWorkspaceRoot root = getWorkspace().getRoot(); IProject project = root.getProject("MyProject"); IFolder folder = project.getFolder("folder"); IFile file = project.getFile("file.txt"); IFile subFile = folder.getFile("subfile.txt"); IResource[] resources = new IResource[] {project, folder, file, subFile}; ensureExistsInWorkspace(resources, true); ResourceDeltaVerifier listener = new ResourceDeltaVerifier(); listener.addExpectedChange(subFile, IResourceDelta.CHANGED, IResourceDelta.CONTENT); getWorkspace().addResourceChangeListener(listener); try { setTeamPrivateMember("3.0", folder, true, IResource.DEPTH_ZERO); ensureOutOfSync(subFile); try { project.refreshLocal(IResource.DEPTH_INFINITE, getMonitor()); assertTrue(listener.getMessage(), listener.isDeltaValid()); } catch (CoreException e) { fail("3.1", e); } } finally { getWorkspace().removeResourceChangeListener(listener); } } /** * Resources which are marked as team private members should always be found. */ public void testFindMember() { IWorkspaceRoot root = getWorkspace().getRoot(); IProject project = root.getProject("MyProject"); IFolder folder = project.getFolder("folder"); IFile file = project.getFile("file.txt"); IFile subFile = folder.getFile("subfile.txt"); IResource[] resources = new IResource[] {project, folder, file, subFile}; ensureExistsInWorkspace(resources, true); // no team private members assertEquals("1.0", project, root.findMember(project.getFullPath())); assertEquals("1.1", folder, root.findMember(folder.getFullPath())); assertEquals("1.2", file, root.findMember(file.getFullPath())); assertEquals("1.3", subFile, root.findMember(subFile.getFullPath())); // the folder is team private setTeamPrivateMember("2.0", folder, true, IResource.DEPTH_ZERO); assertEquals("2.1", project, root.findMember(project.getFullPath())); assertEquals("2.2", folder, root.findMember(folder.getFullPath())); assertEquals("2.3", file, root.findMember(file.getFullPath())); assertEquals("2.4", subFile, root.findMember(subFile.getFullPath())); // all are team private setTeamPrivateMember("3.0", project, true, IResource.DEPTH_INFINITE); assertEquals("3.1", project, root.findMember(project.getFullPath())); assertEquals("3.2", folder, root.findMember(folder.getFullPath())); assertEquals("3.3", file, root.findMember(file.getFullPath())); assertEquals("3.4", subFile, root.findMember(subFile.getFullPath())); } /** * Resources which are marked as team private members are not included in #members * calls unless specifically included by calling #members(IContainer.INCLUDE_TEAM_PRIVATE_MEMBERS) */ public void testMembers() { IProject project = getWorkspace().getRoot().getProject("MyProject"); IFolder folder = project.getFolder("folder"); IFile file = project.getFile("file.txt"); IFile subFile = folder.getFile("subfile.txt"); IResource[] resources = new IResource[] {project, folder, file, subFile}; IResource[] members = null; ensureExistsInWorkspace(resources, true); // Initial values should be false. assertTeamPrivateMember("1.0", project, false, IResource.DEPTH_INFINITE); // Check the calls to #members try { members = project.members(); } catch (CoreException e) { fail("2.0", e); } // +1 for the project description file assertEquals("2.1", 3, members.length); try { members = folder.members(); } catch (CoreException e) { fail("2.2", e); } assertEquals("2.3", 1, members.length); // Set the values. setTeamPrivateMember("3.0", project, true, IResource.DEPTH_INFINITE); assertTeamPrivateMember("3.1", project, true, IResource.DEPTH_INFINITE); // Check the values assertTeamPrivateMember("4.0", project, true, IResource.DEPTH_INFINITE); // Check the calls to #members try { members = project.members(); } catch (CoreException e) { fail("5.0", e); } assertEquals("5.1", 0, members.length); try { members = folder.members(); } catch (CoreException e) { fail("5.2", e); } assertEquals("5.3", 0, members.length); // FIXME: add the tests for #members(int) // reset to false setTeamPrivateMember("6.0", project, false, IResource.DEPTH_INFINITE); assertTeamPrivateMember("6.1", project, false, IResource.DEPTH_INFINITE); // Check the calls to members(IResource.NONE); try { members = project.members(IResource.NONE); } catch (CoreException e) { fail("7.0", e); } // +1 for the project description file assertEquals("7.1", 3, members.length); try { members = project.members(IContainer.INCLUDE_TEAM_PRIVATE_MEMBERS); } catch (CoreException e) { fail("7.2", e); } // +1 for the project description file assertEquals("7.3", 3, members.length); try { members = folder.members(); } catch (CoreException e) { fail("7.4", e); } assertEquals("7.5", 1, members.length); // Set one of the children to be TEAM_PRIVATE and try again setTeamPrivateMember("8.0", folder, true, IResource.DEPTH_ZERO); try { members = project.members(); } catch (CoreException e) { fail("8.1", e); } // +1 for project description, -1 for team private folder assertEquals("8.2", 2, members.length); try { members = folder.members(); } catch (CoreException e) { fail("8.3", e); } assertEquals("8.4", 1, members.length); try { members = project.members(IResource.NONE); } catch (CoreException e) { fail("8.5", e); } // +1 for project description, -1 for team private folder assertEquals("8.6", 2, members.length); try { members = folder.members(); } catch (CoreException e) { fail("8.7", e); } assertEquals("8.8", 1, members.length); try { members = project.members(IContainer.INCLUDE_TEAM_PRIVATE_MEMBERS); } catch (CoreException e) { fail("8.9", e); } // +1 for project description assertEquals("8.10", 3, members.length); try { members = folder.members(); } catch (CoreException e) { fail("8.11", e); } assertEquals("8.12", 1, members.length); // Set all the resources to be team private setTeamPrivateMember("9.0", project, true, IResource.DEPTH_INFINITE); assertTeamPrivateMember("9.1", project, true, IResource.DEPTH_INFINITE); try { members = project.members(IResource.NONE); } catch (CoreException e) { fail("9.2", e); } assertEquals("9.3", 0, members.length); try { members = folder.members(IResource.NONE); } catch (CoreException e) { fail("9.4", e); } assertEquals("9.5", 0, members.length); try { members = project.members(IContainer.INCLUDE_TEAM_PRIVATE_MEMBERS); } catch (CoreException e) { fail("9.6", e); } // +1 for project description assertEquals("9.7", 3, members.length); try { members = folder.members(IContainer.INCLUDE_TEAM_PRIVATE_MEMBERS); } catch (CoreException e) { fail("9.8", e); } assertEquals("9.9", 1, members.length); } /** * Test to ensure that team private values are persisted across project close/open. */ public void testProjectCloseOpen() { // FIXME: } /** * Resources which are marked as team private members should not be visited by * resource visitors. */ public void testAccept() { IProject project = getWorkspace().getRoot().getProject("MyProject"); IFolder folder = project.getFolder("folder"); IFile file = project.getFile("file.txt"); IFile subFile = folder.getFile("subfile.txt"); IResource[] resources = new IResource[] {project, folder, file, subFile}; ensureExistsInWorkspace(resources, true); IResource description = project.getFile(IProjectDescription.DESCRIPTION_FILE_NAME); // default case, no team private members ResourceVisitorVerifier visitor = new ResourceVisitorVerifier(); visitor.addExpected(resources); visitor.addExpected(description); try { project.accept(visitor); } catch (CoreException e) { fail("1.0", e); } assertTrue("1.1." + visitor.getMessage(), visitor.isValid()); visitor.reset(); visitor.addExpected(resources); visitor.addExpected(description); try { project.accept(visitor, IResource.DEPTH_INFINITE, IResource.NONE); } catch (CoreException e) { fail("1.2", e); } assertTrue("1.3." + visitor.getMessage(), visitor.isValid()); visitor.reset(); visitor.addExpected(resources); visitor.addExpected(description); try { project.accept(visitor, IResource.DEPTH_INFINITE, IContainer.INCLUDE_TEAM_PRIVATE_MEMBERS); } catch (CoreException e) { fail("1.4", e); } assertTrue("1.5." + visitor.getMessage(), visitor.isValid()); // set the folder to be team private. It and its children should // be ignored by the visitor setTeamPrivateMember("2.0", folder, true, IResource.DEPTH_ZERO); visitor.reset(); visitor.addExpected(project); visitor.addExpected(file); visitor.addExpected(description); try { project.accept(visitor); } catch (CoreException e) { fail("2.1", e); } assertTrue("2.2." + visitor.getMessage(), visitor.isValid()); visitor.reset(); visitor.addExpected(project); visitor.addExpected(file); visitor.addExpected(description); try { project.accept(visitor, IResource.DEPTH_INFINITE, IResource.NONE); } catch (CoreException e) { fail("2.3", e); } assertTrue("2.4." + visitor.getMessage(), visitor.isValid()); // should see all resources if we include the flag visitor.reset(); visitor.addExpected(resources); visitor.addExpected(description); try { project.accept(visitor, IResource.DEPTH_INFINITE, IContainer.INCLUDE_TEAM_PRIVATE_MEMBERS); } catch (CoreException e) { fail("2.5", e); } assertTrue("2.6." + visitor.getMessage(), visitor.isValid()); // should NOT visit the folder and its members if we call accept on it directly visitor.reset(); try { folder.accept(visitor); } catch (CoreException e) { fail("2.7", e); } assertTrue("2.8." + visitor.getMessage(), visitor.isValid()); visitor.reset(); try { folder.accept(visitor, IResource.DEPTH_INFINITE, IResource.NONE); } catch (CoreException e) { fail("2.9", e); } assertTrue("2.10." + visitor.getMessage(), visitor.isValid()); visitor.reset(); visitor.addExpected(folder); visitor.addExpected(subFile); try { folder.accept(visitor, IResource.DEPTH_INFINITE, IContainer.INCLUDE_TEAM_PRIVATE_MEMBERS); } catch (CoreException e) { fail("2.11", e); } assertTrue("2.11." + visitor.getMessage(), visitor.isValid()); // now set all file/folder resources to be team private. setTeamPrivateMember("3.0", project, true, IResource.DEPTH_INFINITE); assertTeamPrivateMember("3.1", project, true, IResource.DEPTH_INFINITE); visitor.reset(); // projects are never team private visitor.addExpected(project); try { project.accept(visitor); } catch (CoreException e) { fail("3.2", e); } assertTrue("3.3." + visitor.getMessage(), visitor.isValid()); visitor.reset(); visitor.addExpected(project); try { project.accept(visitor, IResource.DEPTH_INFINITE, IResource.NONE); } catch (CoreException e) { fail("3.4", e); } assertTrue("3.5." + visitor.getMessage(), visitor.isValid()); // should see all resources if we include the flag visitor.reset(); visitor.addExpected(resources); visitor.addExpected(description); try { project.accept(visitor, IResource.DEPTH_INFINITE, IContainer.INCLUDE_TEAM_PRIVATE_MEMBERS); } catch (CoreException e) { fail("3.6", e); } assertTrue("3.7." + visitor.getMessage(), visitor.isValid()); } public void testCopy() { IWorkspaceRoot root = getWorkspace().getRoot(); IProject project = root.getProject("MyProject"); IFolder folder = project.getFolder("folder"); IFile file = project.getFile("file.txt"); IFile subFile = folder.getFile("subfile.txt"); IResource[] resources = new IResource[] {project, folder, file, subFile}; ensureExistsInWorkspace(resources, true); // handles to the destination resources IProject destProject = root.getProject("MyOtherProject"); IFolder destFolder = destProject.getFolder(folder.getName()); IFile destFile = destProject.getFile(file.getName()); IFile destSubFile = destFolder.getFile(subFile.getName()); IResource[] destResources = new IResource[] {destProject, destFolder, destFile, destSubFile}; ensureDoesNotExistInWorkspace(destResources); // set a folder to be team private setTeamPrivateMember("1.0", folder, true, IResource.DEPTH_ZERO); // copy the project int flags = IResource.FORCE; try { project.copy(destProject.getFullPath(), flags, getMonitor()); } catch (CoreException e) { fail("1.1", e); } assertExistsInWorkspace("1.2", resources); assertExistsInWorkspace("1.3", destResources); // Do it again and but just copy the folder ensureDoesNotExistInWorkspace(destResources); ensureExistsInWorkspace(resources, true); ensureExistsInWorkspace(destProject, true); setTeamPrivateMember("2.0", folder, true, IResource.DEPTH_ZERO); try { folder.copy(destFolder.getFullPath(), flags, getMonitor()); } catch (CoreException e) { fail("2.1", e); } assertExistsInWorkspace("2.2", new IResource[] {folder, subFile}); assertExistsInWorkspace("2.3", new IResource[] {destFolder, destSubFile}); // set all the resources to be team private // copy the project ensureDoesNotExistInWorkspace(destResources); ensureExistsInWorkspace(resources, true); setTeamPrivateMember("3.0", project, true, IResource.DEPTH_INFINITE); try { project.copy(destProject.getFullPath(), flags, getMonitor()); } catch (CoreException e) { fail("3.1", e); } assertExistsInWorkspace("3.2", resources); assertExistsInWorkspace("3.3", destResources); // do it again but only copy the folder ensureDoesNotExistInWorkspace(destResources); ensureExistsInWorkspace(resources, true); ensureExistsInWorkspace(destProject, true); setTeamPrivateMember("4.0", project, true, IResource.DEPTH_INFINITE); try { folder.copy(destFolder.getFullPath(), flags, getMonitor()); } catch (CoreException e) { fail("4.1", e); } assertExistsInWorkspace("4.2", new IResource[] {folder, subFile}); assertExistsInWorkspace("4.3", new IResource[] {destFolder, destSubFile}); } public void testMove() { IWorkspaceRoot root = getWorkspace().getRoot(); IProject project = root.getProject("MyProject"); IFolder folder = project.getFolder("folder"); IFile file = project.getFile("file.txt"); IFile subFile = folder.getFile("subfile.txt"); IResource[] resources = new IResource[] {project, folder, file, subFile}; ensureExistsInWorkspace(resources, true); // handles to the destination resources IProject destProject = root.getProject("MyOtherProject"); IFolder destFolder = destProject.getFolder(folder.getName()); IFile destFile = destProject.getFile(file.getName()); IFile destSubFile = destFolder.getFile(subFile.getName()); IResource[] destResources = new IResource[] {destProject, destFolder, destFile, destSubFile}; ensureDoesNotExistInWorkspace(destResources); // set a folder to be team private setTeamPrivateMember("1.0", folder, true, IResource.DEPTH_ZERO); // move the project int flags = IResource.FORCE; try { project.move(destProject.getFullPath(), flags, getMonitor()); } catch (CoreException e) { fail("1.1", e); } assertDoesNotExistInWorkspace("1.2", resources); assertExistsInWorkspace("1.3", destResources); // Do it again and but just move the folder ensureDoesNotExistInWorkspace(destResources); ensureExistsInWorkspace(resources, true); ensureExistsInWorkspace(destProject, true); setTeamPrivateMember("2.0", folder, true, IResource.DEPTH_ZERO); try { folder.move(destFolder.getFullPath(), flags, getMonitor()); } catch (CoreException e) { fail("2.1", e); } assertDoesNotExistInWorkspace("2.2", new IResource[] {folder, subFile}); assertExistsInWorkspace("2.3", new IResource[] {destFolder, destSubFile}); // set all the resources to be team private // move the project ensureDoesNotExistInWorkspace(destResources); ensureExistsInWorkspace(resources, true); setTeamPrivateMember("3.0", project, true, IResource.DEPTH_INFINITE); try { project.move(destProject.getFullPath(), flags, getMonitor()); } catch (CoreException e) { fail("3.1", e); } assertDoesNotExistInWorkspace("3.2", resources); assertExistsInWorkspace("3.3", destResources); // do it again but only move the folder ensureDoesNotExistInWorkspace(destResources); ensureExistsInWorkspace(resources, true); ensureExistsInWorkspace(destProject, true); setTeamPrivateMember("4.0", project, true, IResource.DEPTH_INFINITE); try { folder.move(destFolder.getFullPath(), flags, getMonitor()); } catch (CoreException e) { fail("4.1", e); } assertDoesNotExistInWorkspace("4.2", new IResource[] {folder, subFile}); assertExistsInWorkspace("4.3", new IResource[] {destFolder, destSubFile}); } public void testDelete() { IWorkspaceRoot root = getWorkspace().getRoot(); IProject project = root.getProject("MyProject"); IFolder folder = project.getFolder("folder"); IFile file = project.getFile("file.txt"); IFile subFile = folder.getFile("subfile.txt"); IResource[] resources = new IResource[] {project, folder, file, subFile}; ensureExistsInWorkspace(resources, true); // default behaviour with no team private members int flags = IResource.ALWAYS_DELETE_PROJECT_CONTENT | IResource.FORCE; // delete the project try { project.delete(flags, getMonitor()); } catch (CoreException e) { fail("1.0", e); } assertDoesNotExistInWorkspace("1.1", resources); // delete a file ensureExistsInWorkspace(resources, true); try { file.delete(flags, getMonitor()); } catch (CoreException e) { fail("1.2", e); } assertDoesNotExistInWorkspace("1.3", file); assertExistsInWorkspace("1.4", new IResource[] {project, folder, subFile}); // delete a folder ensureExistsInWorkspace(resources, true); try { folder.delete(flags, getMonitor()); } catch (CoreException e) { fail("1.5", e); } assertDoesNotExistInWorkspace("1.6", new IResource[] {folder, subFile}); assertExistsInWorkspace("1.7", new IResource[] {project, file}); // set one child to be team private ensureExistsInWorkspace(resources, true); setTeamPrivateMember("2.0", folder, true, IResource.DEPTH_ZERO); // delete the project try { project.delete(flags, getMonitor()); } catch (CoreException e) { fail("2.1", e); } assertDoesNotExistInWorkspace("2.2", resources); // delete a folder ensureExistsInWorkspace(resources, true); setTeamPrivateMember("2.3", folder, true, IResource.DEPTH_ZERO); try { folder.delete(flags, getMonitor()); } catch (CoreException e) { fail("2.4", e); } assertDoesNotExistInWorkspace("2.5", new IResource[] {folder, subFile}); assertExistsInWorkspace("2.6", new IResource[] {project, file}); // set all resources to be team private ensureExistsInWorkspace(resources, true); setTeamPrivateMember("3.0", project, true, IResource.DEPTH_INFINITE); // delete the project try { project.delete(flags, getMonitor()); } catch (CoreException e) { fail("3.1", e); } assertDoesNotExistInWorkspace("3.2", resources); // delete a file ensureExistsInWorkspace(resources, true); setTeamPrivateMember("3.3", project, true, IResource.DEPTH_INFINITE); try { file.delete(flags, getMonitor()); } catch (CoreException e) { fail("3.4", e); } assertDoesNotExistInWorkspace("3.5", file); assertExistsInWorkspace("3.6", new IResource[] {project, folder, subFile}); // delete a folder ensureExistsInWorkspace(resources, true); setTeamPrivateMember("3.7", project, true, IResource.DEPTH_INFINITE); try { folder.delete(flags, getMonitor()); } catch (CoreException e) { fail("3.8", e); } assertDoesNotExistInWorkspace("3.9", new IResource[] {folder, subFile}); assertExistsInWorkspace("3.10", new IResource[] {project, file}); } public void testDeltas() { IWorkspaceRoot root = getWorkspace().getRoot(); final IProject project = root.getProject("MyProject"); final IFolder folder = project.getFolder("folder"); IFile file = project.getFile("file.txt"); IFile subFile = folder.getFile("subfile.txt"); IFile description = project.getFile(IProjectDescription.DESCRIPTION_FILE_NAME); final IResource[] resources = new IResource[] {project, folder, file, subFile}; final ResourceDeltaVerifier listener = new ResourceDeltaVerifier(); getWorkspace().addResourceChangeListener(listener); try { IWorkspaceRunnable body = new IWorkspaceRunnable() { @Override public void run(IProgressMonitor monitor) { ensureExistsInWorkspace(resources, true); } }; try { listener.addExpectedChange(resources, IResourceDelta.ADDED, IResource.NONE); listener.addExpectedChange(project, IResourceDelta.ADDED, IResourceDelta.OPEN); listener.addExpectedChange(description, IResourceDelta.ADDED, IResource.NONE); getWorkspace().run(body, getMonitor()); waitForBuild(); assertTrue("1.0." + listener.getMessage(), listener.isDeltaValid()); ensureDoesNotExistInWorkspace(resources); } catch (CoreException e) { fail("1.1", e); } } finally { getWorkspace().removeResourceChangeListener(listener); } // set the folder to be team private and do the same test getWorkspace().addResourceChangeListener(listener); try { IWorkspaceRunnable body = new IWorkspaceRunnable() { @Override public void run(IProgressMonitor monitor) { ensureExistsInWorkspace(resources, true); setTeamPrivateMember("2.0", folder, true, IResource.DEPTH_ZERO); } }; try { listener.reset(); listener.addExpectedChange(resources, IResourceDelta.ADDED, IResource.NONE); listener.addExpectedChange(project, IResourceDelta.ADDED, IResourceDelta.OPEN); listener.addExpectedChange(description, IResourceDelta.ADDED, IResource.NONE); getWorkspace().run(body, getMonitor()); assertTrue("2.1." + listener.getMessage(), listener.isDeltaValid()); ensureDoesNotExistInWorkspace(resources); } catch (CoreException e) { fail("2.2", e); } } finally { getWorkspace().removeResourceChangeListener(listener); } // set all resources to be team private and do the same test getWorkspace().addResourceChangeListener(listener); try { IWorkspaceRunnable body = new IWorkspaceRunnable() { @Override public void run(IProgressMonitor monitor) { ensureExistsInWorkspace(resources, true); setTeamPrivateMember("3.0", project, true, IResource.DEPTH_INFINITE); } }; try { listener.reset(); listener.addExpectedChange(resources, IResourceDelta.ADDED, IResource.NONE); listener.addExpectedChange(project, IResourceDelta.ADDED, IResourceDelta.OPEN); listener.addExpectedChange(description, IResourceDelta.ADDED, IResource.NONE); getWorkspace().run(body, getMonitor()); assertTrue("3.1." + listener.getMessage(), listener.isDeltaValid()); ensureDoesNotExistInWorkspace(resources); } catch (CoreException e) { fail("3.2", e); } } finally { getWorkspace().removeResourceChangeListener(listener); } } /** * Resources which are marked as team private members return TRUE * in all calls to #exists. */ public void testExists() { IProject project = getWorkspace().getRoot().getProject("MyProject"); IFolder folder = project.getFolder("folder"); IFile file = project.getFile("file.txt"); IFile subFile = folder.getFile("subfile.txt"); IResource[] resources = new IResource[] {project, folder, file, subFile}; ensureExistsInWorkspace(resources, true); // Check to see if all the resources exist in the workspace tree. assertExistsInWorkspace("1.0", resources); // set a folder to be a team private member setTeamPrivateMember("2.0", folder, true, IResource.DEPTH_ZERO); assertTeamPrivateMember("2.1", folder, true, IResource.DEPTH_ZERO); assertExistsInWorkspace("2.2", resources); // set all resources to be team private setTeamPrivateMember("3.0", project, true, IResource.DEPTH_INFINITE); assertTeamPrivateMember("3.1", project, true, IResource.DEPTH_INFINITE); assertExistsInWorkspace("3.2", resources); } /** * Test the set and get methods for team private members. */ public void testSetGet() { IProject project = getWorkspace().getRoot().getProject("MyProject"); IFolder folder = project.getFolder("folder"); IFile file = project.getFile("file.txt"); IFile subFile = folder.getFile("subfile.txt"); IResource[] resources = new IResource[] {project, folder, file, subFile}; // Trying to set the value on non-existing resources will fail for (IResource resource : resources) { try { resource.setTeamPrivateMember(true); fail("0.0." + resource.getFullPath()); } catch (CoreException e) { // expected } } // create the resources ensureExistsInWorkspace(resources, true); // Initial values should be false. for (IResource resource2 : resources) { IResource resource = resource2; assertTrue("1.0: " + resource.getFullPath(), !resource.isTeamPrivateMember()); } // Now set the values. for (IResource resource : resources) { try { resource.setTeamPrivateMember(true); } catch (CoreException e) { fail("2.0: " + resource.getFullPath(), e); } } // The values should be true for files and folders, false otherwise. for (IResource resource2 : resources) { IResource resource = resource2; switch (resource.getType()) { case IResource.FILE : case IResource.FOLDER : assertTrue("3.0: " + resource.getFullPath(), resource.isTeamPrivateMember()); break; case IResource.PROJECT : case IResource.ROOT : assertTrue("3.1: " + resource.getFullPath(), !resource.isTeamPrivateMember()); break; } } // Clear the values. for (IResource resource : resources) { try { resource.setTeamPrivateMember(false); } catch (CoreException e) { fail("4.0: " + resource.getFullPath(), e); } } // Values should be false again. for (IResource resource2 : resources) { IResource resource = resource2; assertTrue("5.0: " + resource.getFullPath(), !resource.isTeamPrivateMember()); } } protected void assertTeamPrivateMember(final String message, IResource root, final boolean value, int depth) { IResourceVisitor visitor = new IResourceVisitor() { @Override public boolean visit(IResource resource) { boolean expected = false; if (resource.getType() == IResource.FILE || resource.getType() == IResource.FOLDER) { expected = value; } assertEquals(message + resource.getFullPath(), expected, resource.isTeamPrivateMember()); return true; } }; try { root.accept(visitor, depth, IContainer.INCLUDE_TEAM_PRIVATE_MEMBERS); } catch (CoreException e) { fail(message + "resource.accept", e); } } protected void setTeamPrivateMember(final String message, IResource root, final boolean value, int depth) { IResourceVisitor visitor = new IResourceVisitor() { @Override public boolean visit(IResource resource) { try { resource.setTeamPrivateMember(value); } catch (CoreException e) { fail(message + resource.getFullPath(), e); } return true; } }; try { root.accept(visitor, depth, IContainer.INCLUDE_TEAM_PRIVATE_MEMBERS); } catch (CoreException e) { fail(message + "resource.accept", e); } } }