/******************************************************************************* * Copyright (c) 2010, 2015 Broadcom 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: * Broadcom Corporation - initial API and implementation ******************************************************************************/ package org.eclipse.core.tests.resources.session; import junit.framework.Test; import org.eclipse.core.resources.*; import org.eclipse.core.tests.resources.AutomatedTests; import org.eclipse.core.tests.resources.WorkspaceSessionTest; import org.eclipse.core.tests.session.WorkspaceSessionTestSuite; /** * This class tests persistence of project description build configurations * and project description dynamic state across workbench sessions. */ public class ProjectDescriptionDynamicTest extends WorkspaceSessionTest { IProject proj; String[] configNames; IBuildConfiguration[] configs; IProject[] dynRefs; IBuildConfiguration[] configRefs; IProject[] configRefsProjects; public ProjectDescriptionDynamicTest() { super(); } /** * return reference to the active configuration in the project */ public IBuildConfiguration getRef(IProject project) { return getWorkspace().newBuildConfig(project.getName(), null); } /** * return reference to the active configuration in the project */ public IBuildConfiguration getConfig(IProject project, String id) { return getWorkspace().newBuildConfig(project.getName(), id); } @Override protected void setUp() throws Exception { IWorkspaceRoot wr = getWorkspace().getRoot(); // The project we're setting metadata on proj = wr.getProject("referencing"); configNames = new String[] {"someConfiguration", "someConfiguration2"}; configs = new IBuildConfiguration[] {getConfig(proj, "someConfiguration"), getConfig(proj, "someConfiguration2")}; // The references: // Dynamic Project level dynRefs = new IProject[] {wr.getProject("ref1"), wr.getProject("ref2")}; // Dynamic Build Configuration level -- reverse order configRefs = new IBuildConfiguration[] {getWorkspace().newBuildConfig("ref3", "ref3config1"), getWorkspace().newBuildConfig("ref2", "ref2config1"), getWorkspace().newBuildConfig("ref1", "ref1config1")}; configRefsProjects = new IProject[] {wr.getProject("ref3"), wr.getProject("ref2"), wr.getProject("ref1")}; super.setUp(); } public ProjectDescriptionDynamicTest(String name) { super(name); } /** * Create some dynamic project level references */ public void test1() throws Exception { // Projects to references -- needn't exist proj.create(getMonitor()); proj.open(getMonitor()); IProjectDescription desc = proj.getDescription(); desc.setBuildConfigs(configNames); desc.setDynamicReferences(dynRefs); proj.setDescription(desc, getMonitor()); ResourcesPlugin.getWorkspace().save(true, getMonitor()); } /** * Check that the following still exist: * - project build configurations * - project level references still exist */ public void test2() throws Exception { assertTrue("1.0", proj.isAccessible()); assertEquals("1.1", dynRefs, proj.getDescription().getDynamicReferences()); assertEquals("1.2", configs, proj.getBuildConfigs()); assertEquals("1.3", configs[0], proj.getActiveBuildConfig()); // set build configuration level dynamic references on the project IProjectDescription desc = proj.getDescription(); desc.setBuildConfigReferences(configs[1].getName(), configRefs); // Change the active configuration desc.setActiveBuildConfig(configs[1].getName()); proj.setDescription(desc, getMonitor()); ResourcesPlugin.getWorkspace().save(true, getMonitor()); } /** * Check that the following still exist: * - Active configuration has changed * - Dynamic project references are correct * - Build config references are correct */ public void test3() throws Exception { assertTrue("2.0", proj.isAccessible()); assertEquals("2.1", configs[1], proj.getActiveBuildConfig()); // At description dynamic refs are what was set assertEquals("2.2", dynRefs, proj.getDescription().getDynamicReferences()); // At project all references are union of build configuration and project references assertEquals("2.4", configRefsProjects, proj.getReferencedProjects()); // At the description level, dynamic config references match what was set. assertEquals("2.5", configRefs, proj.getDescription().getBuildConfigReferences(configs[1].getName())); // At the project level, references are the union of project and build configuration level references IBuildConfiguration[] refs = new IBuildConfiguration[] {configRefs[0], configRefs[1], configRefs[2], getRef(dynRefs[0]), getRef(dynRefs[1])}; assertEquals("2.6", refs, proj.getReferencedBuildConfigs(configs[1].getName(), true)); // No other projects exist, so check references are empty if we want to filter empty projects assertEquals("2.7", new IBuildConfiguration[0], proj.getReferencedBuildConfigs(configs[1].getName(), false)); } public static Test suite() { return new WorkspaceSessionTestSuite(AutomatedTests.PI_RESOURCES_TESTS, ProjectDescriptionDynamicTest.class); } }