/******************************************************************************* * Copyright (c) 2016 Red Hat Inc. * 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: * - Mickael Istria (Red Hat Inc.) ******************************************************************************/ package org.eclipse.ui.tests.navigator.resources; import java.util.HashSet; import java.util.Set; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.ui.internal.navigator.resources.nested.NestedProjectManager; import org.junit.After; import org.junit.Assert; import org.junit.Test; /** * @since 3.5 * */ public class NestedResourcesTests { private Set<IProject> testProjects = new HashSet<>(); @Test public void testProjectHierarchy() throws Exception { IProgressMonitor monitor = new NullProgressMonitor(); IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); IProject projectA = root.getProject("a"); projectA.create(monitor); projectA.open(monitor); IFolder folderAA = projectA.getFolder("aa"); folderAA.create(true, true, monitor); IProjectDescription projectAAADesc = root.getWorkspace().newProjectDescription("aaa"); projectAAADesc.setLocation(folderAA.getLocation().append(projectAAADesc.getName())); IProject projectAAA = root.getProject(projectAAADesc.getName()); projectAAA.create(projectAAADesc, monitor); projectAAA.open(monitor); IProjectDescription projectABDesc = projectA.getWorkspace().newProjectDescription("ab"); projectABDesc.setLocation(projectA.getLocation().append(projectABDesc.getName())); IProject projectAB = projectA.getWorkspace().getRoot().getProject(projectABDesc.getName()); projectAB.create(projectABDesc, monitor); projectAB.open(monitor); IProjectDescription projectABADesc = projectAB.getWorkspace().newProjectDescription("aba"); projectABADesc.setLocation(projectAB.getLocation().append(projectABADesc.getName())); IProject projectABA = root.getProject(projectABADesc.getName()); projectABA.create(projectABADesc, monitor); projectABA.open(monitor); IProjectDescription projectABBDesc = projectAB.getWorkspace().newProjectDescription("abb"); projectABBDesc.setLocation(projectAB.getLocation().append(projectABBDesc.getName())); IProject projectABB = root.getProject(projectABBDesc.getName()); projectABB.create(projectABBDesc, monitor); projectABB.open(monitor); projectAB.getFolder("abc").create(true, true, monitor); testProjects.add(projectA); testProjects.add(projectAAA); testProjects.add(projectAB); testProjects.add(projectABA); testProjects.add(projectABB); IProject[] childrenOfProjectA = NestedProjectManager.getInstance().getDirectChildrenProjects(projectA); Assert.assertEquals(1, childrenOfProjectA.length); Assert.assertEquals(projectAB, childrenOfProjectA[0]); Assert.assertNull(NestedProjectManager.getInstance().getMostDirectOpenContainer(projectA)); IProject[] childrenOfFolderAA = NestedProjectManager.getInstance().getDirectChildrenProjects(folderAA); Assert.assertEquals(1, childrenOfFolderAA.length); Assert.assertEquals("aaa", childrenOfFolderAA[0].getName()); Assert.assertEquals(folderAA, NestedProjectManager.getInstance().getMostDirectOpenContainer(childrenOfFolderAA[0])); IProject[] childrenOfProjectAB = NestedProjectManager.getInstance().getDirectChildrenProjects(projectAB); Assert.assertEquals(2, childrenOfProjectAB.length); } @Test public void testDashInProject() throws Exception { IProgressMonitor monitor = new NullProgressMonitor(); IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); // IProject projectA = root.getProject("a"); projectA.create(monitor); projectA.open(monitor); // IProjectDescription projectAChildDesc = root.getWorkspace().newProjectDescription("child"); projectAChildDesc.setLocation(projectA.getLocation().append(projectAChildDesc.getName())); IProject projectAChild = root.getProject(projectAChildDesc.getName()); projectAChild.create(projectAChildDesc, monitor); projectAChild.open(monitor); // IProject projectA_A = root.getProject("a-a"); projectA_A.create(monitor); projectA_A.open(monitor); // Built projects in a/, a/child/ and a-a/ testProjects.add(projectA); testProjects.add(projectAChild); testProjects.add(projectA_A); Assert.assertTrue(NestedProjectManager.getInstance().hasDirectChildrenProjects(projectA)); Assert.assertEquals(projectAChild, NestedProjectManager.getInstance().getDirectChildrenProjects(projectA)[0]); } @After public void deleteProjects() throws Exception { IProgressMonitor monitor = new NullProgressMonitor(); for (IProject testProject : testProjects) { testProject.delete(true, true, monitor); } testProjects.clear(); } }