/******************************************************************************* * Copyright (c) 2007, 2010 Intel 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: * Intel Corporation - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.settings.model; import junit.framework.TestSuite; import org.eclipse.cdt.core.CProjectNature; import org.eclipse.cdt.core.dom.IPDOMManager; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.settings.model.util.CDataUtil; import org.eclipse.cdt.core.testplugin.CProjectHelper; import org.eclipse.cdt.core.testplugin.CTestPlugin; import org.eclipse.cdt.core.testplugin.util.BaseTestCase; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceDescription; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.QualifiedName; import org.eclipse.core.runtime.jobs.IJobManager; import org.eclipse.core.runtime.jobs.Job; public class CProjectDescriptionBasicTests extends BaseTestCase{ private static final String PROJ_NAME_PREFIX = "CProjectDescriptionBasicTests_"; IProject p1, p2, p3, p4; public static TestSuite suite() { return suite(CProjectDescriptionBasicTests.class, "_"); } public void testSetInvalidDescription() throws Exception { IWorkspace wsp = ResourcesPlugin.getWorkspace(); IWorkspaceRoot root = wsp.getRoot(); p1 = root.getProject(PROJ_NAME_PREFIX + "1"); p1.create(null); p1.open(null); CProjectHelper.addNatureToProject(p1, CProjectNature.C_NATURE_ID, null); ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager(); ICProjectDescription des = mngr.createProjectDescription(p1, false); assertFalse(des.isValid()); boolean failed = false; try { mngr.setProjectDescription(p1, des); } catch (CoreException e){ failed = true; } assertTrue(failed); } public void testModulesCopiedOnCreateNewConfig() throws Exception { ICProject p = CProjectHelper.createNewStileCProject(PROJ_NAME_PREFIX + "c", IPDOMManager.ID_NO_INDEXER); p3 = p.getProject(); ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager(); ICProjectDescription des = mngr.getProjectDescription(p3); ICConfigurationDescription baseCfg = des.getConfigurations()[0]; final String baseCfgId = baseCfg.getId(); final String STORAGE_ID = "test.storage_id"; final String ATTR = "testAttr"; final String ATTR_VALUE = "testAttrValue"; final String EL_NAME = "testElName"; final String ATTR2 = "testAttr2"; final String ATTR2_VALUE = "testAttr2Value"; ICStorageElement el = baseCfg.getStorage(STORAGE_ID, false); assertNull(el); el = baseCfg.getStorage(STORAGE_ID, true); assertNotNull(el); assertNull(el.getAttribute(ATTR)); el.setAttribute(ATTR, ATTR_VALUE); assertEquals(0, el.getChildren().length); ICStorageElement child = el.createChild(EL_NAME); child.setAttribute(ATTR2, ATTR2_VALUE); final String newCfgId1 = "cfg1.id";//CDataUtil.genId(null); // final String newCfgId2 = CDataUtil.genId(null); ICConfigurationDescription cfg1 = des.createConfiguration(newCfgId1, newCfgId1 + ".name", baseCfg); assertEquals(newCfgId1, cfg1.getId()); el = cfg1.getStorage(STORAGE_ID, false); assertNotNull(el); assertEquals(ATTR_VALUE, el.getAttribute(ATTR)); assertEquals(1, el.getChildren().length); child = el.getChildren()[0]; assertEquals(EL_NAME, child.getName()); assertEquals(ATTR2_VALUE, child.getAttribute(ATTR2)); mngr.setProjectDescription(p3, des); des = mngr.getProjectDescription(p3, false); cfg1 = des.getConfigurationById(newCfgId1); el = cfg1.getStorage(STORAGE_ID, false); assertNotNull(el); assertEquals(ATTR_VALUE, el.getAttribute(ATTR)); assertEquals(1, el.getChildren().length); child = el.getChildren()[0]; assertEquals(EL_NAME, child.getName()); assertEquals(ATTR2_VALUE, child.getAttribute(ATTR2)); des = mngr.getProjectDescription(p3, true); cfg1 = des.getConfigurationById(newCfgId1); el = cfg1.getStorage(STORAGE_ID, false); assertNotNull(el); assertEquals(ATTR_VALUE, el.getAttribute(ATTR)); assertEquals(1, el.getChildren().length); child = el.getChildren()[0]; assertEquals(EL_NAME, child.getName()); assertEquals(ATTR2_VALUE, child.getAttribute(ATTR2)); } public void testCreateProjectDescriptionInvalidProject() throws Exception { IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject("someProject"); assertTrue(!project.isAccessible()); ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager(); boolean exception = false; try { mngr.createProjectDescription(null, false, true); } catch (CoreException e) { exception = true; } assertTrue(exception); exception = false; try { mngr.createProjectDescription(project, false, true); } catch (CoreException e) { exception = true; } assertTrue(exception); } public void testSetInvalidCreatingDescription() throws Exception { IWorkspace wsp = ResourcesPlugin.getWorkspace(); IWorkspaceRoot root = wsp.getRoot(); p2 = root.getProject(PROJ_NAME_PREFIX + "2"); p2.create(null); p2.open(null); CProjectHelper.addNatureToProject(p2, CProjectNature.C_NATURE_ID, null); ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager(); ICProjectDescription des = mngr.createProjectDescription(p2, false, true); des.setSessionProperty(new QualifiedName(CTestPlugin.PLUGIN_ID, "tmp"), "tmp"); assertFalse(des.isValid()); boolean failed = false; try { mngr.setProjectDescription(p2, des); } catch (CoreException e){ failed = true; } assertFalse(failed); assertNotNull(mngr.getProjectDescription(p2, false)); assertNotNull(mngr.getProjectDescription(p2, true)); des = mngr.getProjectDescription(p2, true); ICConfigurationDescription cfg = mngr.getPreferenceConfiguration(TestCfgDataProvider.PROVIDER_ID, true); cfg = des.createConfiguration(CDataUtil.genId(null), CDataUtil.genId(null), cfg); mngr.setProjectDescription(p2, des); } public void testSetDescriptionWithRootIncompatibleRuleAquired() throws Exception { ICProject p = CProjectHelper.createNewStileCProject(PROJ_NAME_PREFIX + "4", IPDOMManager.ID_NO_INDEXER); p4 = p.getProject(); ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager(); ICProjectDescription des = mngr.getProjectDescription(p4); ICConfigurationDescription baseCfg = des.getConfigurations()[0]; baseCfg.setName("qwertyuiop"); IJobManager jm = Job.getJobManager(); boolean failed = false; try { jm.beginRule(p4, null); mngr.setProjectDescription(p4, des); } catch (CoreException e) { failed = true; assertTrue(e.getStatus().getException() instanceof IllegalArgumentException); } finally { jm.endRule(p4); } assertTrue(failed); } public void testBug242955() throws Exception { CoreModel coreModel = CoreModel.getDefault(); ICProjectDescriptionManager mngr = coreModel.getProjectDescriptionManager(); String projectName = "testBug242955"; String defaultConfigurationName = "Default"; String newConfigurationName = "NEW-NAME"; // Emulate entering Eclipse first time { // Create model project and accompanied descriptions ICProject cproject = CProjectHelper.createNewStileCProject(projectName, IPDOMManager.ID_NO_INDEXER); IProject project = cproject.getProject(); // Initial project description after opening a project ICProjectDescription initialProjectDescription = mngr.getProjectDescription(project); assertNotNull("createDescription returned null!", initialProjectDescription); assertEquals(1, initialProjectDescription.getConfigurations().length); // Initial configuration description ICConfigurationDescription initialDefaultConfigurationDescription = initialProjectDescription.getConfigurations()[0]; initialDefaultConfigurationDescription.setName(defaultConfigurationName); assertEquals(defaultConfigurationName, initialDefaultConfigurationDescription.getName()); mngr.setProjectDescription(project, initialProjectDescription); // Properties window: get project description: prjd ICProjectDescription propertyProjectDescription = CoreModel.getDefault().getProjectDescription(project); // Dialog Manage-configurations-New-"NEW-NAME", from "Default" configuration final String newConfigurationId = newConfigurationName + ".id"; ICConfigurationDescription propertyDefaultConfigurationDescription = propertyProjectDescription.getConfigurations()[0]; // creating new configuration in "Property" project description ICConfigurationDescription propertyNewConfigurationDescription = propertyProjectDescription .createConfiguration(newConfigurationId, newConfigurationName, propertyDefaultConfigurationDescription); assertNotNull(propertyNewConfigurationDescription); assertEquals(2,propertyProjectDescription.getConfigurations().length); assertEquals(defaultConfigurationName,propertyProjectDescription.getConfigurations()[0].getName()); assertEquals(newConfigurationName,propertyProjectDescription.getConfigurations()[1].getName()); // Apply button, local_prjd: copy "Property" new configuration description to "Applied" project description ICProjectDescription applyButtonProjectDescription = coreModel.getProjectDescription(project); ICConfigurationDescription applyButtonNewConfigurationDescription = applyButtonProjectDescription .createConfiguration( propertyNewConfigurationDescription.getId(), propertyNewConfigurationDescription.getName(), propertyNewConfigurationDescription); // OK button, persist the property project description prjd. coreModel.setProjectDescription(project, propertyProjectDescription); assertEquals(2,propertyProjectDescription.getConfigurations().length); assertEquals(defaultConfigurationName,propertyProjectDescription.getConfigurations()[0].getName()); assertEquals(newConfigurationName,propertyProjectDescription.getConfigurations()[1].getName()); // Close project project.close(null); } // Emulate re-entering Eclipse { // Re-open project and re-load project description IWorkspace workspace = ResourcesPlugin.getWorkspace(); IWorkspaceRoot root = workspace.getRoot(); IWorkspaceDescription workspaceDesc = workspace.getDescription(); workspaceDesc.setAutoBuilding(false); workspace.setDescription(workspaceDesc); IProject project = root.getProject(projectName); project.open(null); assertEquals(true, project.isOpen()); // project description after reopening the project ICProjectDescription reopenedProjectDescription = coreModel.getProjectDescription(project, false); assertEquals(2,reopenedProjectDescription.getConfigurations().length); assertEquals(defaultConfigurationName,reopenedProjectDescription.getConfigurations()[0].getName()); assertEquals(newConfigurationName,reopenedProjectDescription.getConfigurations()[1].getName()); project.close(null); } } @Override protected void tearDown() throws Exception { try { if(p1 != null) p1.getProject().delete(true, null); } catch (CoreException e){ } try { if(p2 != null) p2.getProject().delete(true, null); } catch (CoreException e){ } try { if(p3 != null) p3.getProject().delete(true, null); } catch (CoreException e){ } try { if(p4 != null) p4.getProject().delete(true, null); } catch (CoreException e){ } super.tearDown(); } }