blob: bffea830e02c8328a2b3132b8aae3adadbb09146 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2015 Broadcom Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Broadcom Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.core.tests.internal.resources;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.internal.resources.BuildConfiguration;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.tests.resources.ResourceTest;
/**
* Tests configuration project build configuration on the project description
*/
public class ProjectBuildConfigsTest extends ResourceTest {
public static Test suite() {
return new TestSuite(ProjectBuildConfigsTest.class);
}
public ProjectBuildConfigsTest(String name) {
super(name);
}
private IProject project;
private String variantId0 = "Variant0";
private String variantId1 = "Variant1";
private String variantId2 = "Variant2";
private IBuildConfiguration variant0;
private IBuildConfiguration variant1;
private IBuildConfiguration variant2;
private IBuildConfiguration defaultVariant;
@Override
public void setUp() throws Exception {
project = getWorkspace().getRoot().getProject("ProjectBuildConfigsTest_Project");
ensureExistsInWorkspace(new IProject[] {project}, true);
variant0 = new BuildConfiguration(project, variantId0);
variant1 = new BuildConfiguration(project, variantId1);
variant2 = new BuildConfiguration(project, variantId2);
defaultVariant = new BuildConfiguration(project, IBuildConfiguration.DEFAULT_CONFIG_NAME);
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
project.delete(true, null);
}
public void testBasics() throws CoreException {
IProjectDescription desc = project.getDescription();
String[] configs = new String[] {variantId0, variantId1};
desc.setBuildConfigs(configs);
project.setDescription(desc, getMonitor());
assertEquals("1.0", new IBuildConfiguration[] {variant0, variant1}, project.getBuildConfigs());
assertEquals("1.1", variant0, project.getBuildConfig(variantId0));
assertEquals("1.2", variant1, project.getBuildConfig(variantId1));
// Build configuration names don't contribute to equality
assertTrue("2.0", project.hasBuildConfig(variant0.getName()));
assertTrue("2.1", project.hasBuildConfig(variant1.getName()));
assertFalse("2.2", project.hasBuildConfig(variant2.getName()));
assertEquals("3.0", variant0, project.getActiveBuildConfig());
desc = project.getDescription();
desc.setActiveBuildConfig(variantId1);
project.setDescription(desc, getMonitor());
assertEquals("3.1", variant1, project.getActiveBuildConfig());
// test that setting the variant to an invalid id has no effect
desc.setActiveBuildConfig(variantId2);
assertEquals("3.2", variant1, project.getActiveBuildConfig());
IBuildConfiguration variant = project.getBuildConfigs()[0];
assertEquals("4.0", project, variant.getProject());
assertEquals("4.1", variantId0, variant.getName());
}
public void testDuplicates() throws CoreException {
IProjectDescription desc = project.getDescription();
desc.setBuildConfigs(new String[] {variantId0, variantId1, variantId0});
project.setDescription(desc, getMonitor());
assertEquals("1.0", new IBuildConfiguration[] {variant0, variant1}, project.getBuildConfigs());
}
public void testDefaultVariant() throws CoreException {
IProjectDescription desc = project.getDescription();
desc.setBuildConfigs(new String[] {});
project.setDescription(desc, getMonitor());
assertEquals("1.0", new IBuildConfiguration[] {defaultVariant}, project.getBuildConfigs());
assertTrue("1.1", project.hasBuildConfig(defaultVariant.getName()));
assertEquals("2.0", defaultVariant, project.getActiveBuildConfig());
desc = project.getDescription();
desc.setActiveBuildConfig(IBuildConfiguration.DEFAULT_CONFIG_NAME);
project.setDescription(desc, getMonitor());
assertEquals("2.1", defaultVariant, project.getActiveBuildConfig());
}
public void testRemoveActiveVariant() throws CoreException {
IProjectDescription desc = project.getDescription();
desc.setBuildConfigs(new String[0]);
desc.setBuildConfigs(new String[] {variant0.getName(), variant1.getName()});
project.setDescription(desc, getMonitor());
assertEquals("1.0", variant0, project.getActiveBuildConfig());
desc.setBuildConfigs(new String[] {variant0.getName(), variant2.getName()});
project.setDescription(desc, getMonitor());
assertEquals("2.0", variant0, project.getActiveBuildConfig());
desc = project.getDescription();
desc.setActiveBuildConfig(variantId2);
project.setDescription(desc, getMonitor());
desc.setBuildConfigs(new String[] {variant0.getName(), variant1.getName()});
project.setDescription(desc, getMonitor());
assertEquals("3.0", variant0, project.getActiveBuildConfig());
}
/**
* Tests that build configuration references are correct after moving a project
* @throws CoreException
*/
public void testProjectMove() throws CoreException {
IProjectDescription desc = project.getDescription();
IBuildConfiguration[] configs = new IBuildConfiguration[] {variant0, variant1};
desc.setBuildConfigs(new String[] {configs[0].getName(), configs[1].getName()});
project.setDescription(desc, getMonitor());
// Move the project. The build configurations should point at the new project
String newProjectName = "projectMoved";
desc = project.getDescription();
desc.setName(newProjectName);
project.move(desc, false, getMonitor());
IProject newProject = getWorkspace().getRoot().getProject(newProjectName);
assertTrue("1.0", newProject.exists());
IBuildConfiguration[] newConfigs = newProject.getBuildConfigs();
for (int i = 0; i < configs.length; i++) {
assertEquals("2." + i * 3, newProject, newConfigs[i].getProject());
assertEquals("2." + i * 3 + 1, configs[i].getName(), newConfigs[i].getName());
}
}
}