/*******************************************************************************
* Copyright (c) 2009, 2010 Andrew Gvozdev (Quoin Inc.) 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:
* Andrew Gvozdev (Quoin Inc.) - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.core.settings.model;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import junit.framework.TestSuite;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.settings.model.util.CDataUtil;
import org.eclipse.cdt.core.testplugin.ResourceHelper;
import org.eclipse.cdt.core.testplugin.util.BaseTestCase;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
public class CProjectDescriptionDeltaTests extends BaseTestCase{
private MockListener listener;
private class MockListener implements ICProjectDescriptionListener {
private boolean fIsNotified;
private String fProjName;
private ICDescriptionDelta fDelta;
public MockListener(String projName){
fProjName = projName;
fIsNotified = false;
fDelta = null;
}
public void handleEvent(CProjectDescriptionEvent event) {
if(!event.getProject().getName().equals(fProjName))
return;
fIsNotified = true;
fDelta = event.getProjectDelta();
}
boolean isNotified(){
return fIsNotified;
}
void clearNotified(){
fIsNotified = false;
fDelta = null;
}
public ICDescriptionDelta getDelta() {
return fDelta;
}
}
public static TestSuite suite() {
return suite(CProjectDescriptionDeltaTests.class, "_");
}
protected void setUp() throws Exception {
}
protected void tearDown() throws Exception {
ResourceHelper.cleanUp();
}
private void initListener(String projName){
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
if(listener != null)
mngr.removeCProjectDescriptionListener(listener);
listener = new MockListener(projName);
mngr.addCProjectDescriptionListener(listener, CProjectDescriptionEvent.APPLIED);
assertFalse(listener.isNotified());
}
private static List<ICDescriptionDelta> findDeltas(ICDescriptionDelta delta, int type) {
List<ICDescriptionDelta> list = new ArrayList<ICDescriptionDelta>();
if ((delta.getChangeFlags()&type)!=0) {
list.add(delta);
}
ICDescriptionDelta[] children = delta.getChildren();
for (ICDescriptionDelta d : children) {
list.addAll(findDeltas(d, type));
}
return list;
}
public void testDelta_ACTIVE_CFG() throws Exception {
String projName = getName();
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
initListener(projName);
IProject project = ResourceHelper.createCDTProject(projName, null,
new String[] {"test.configuration.1", "test.configuration.2"});
// Get writable project description and its configurations
ICProjectDescription prjDescription = mngr.getProjectDescription(project, true);
assertNotNull(prjDescription);
assertEquals(2, prjDescription.getConfigurations().length);
ICConfigurationDescription cfgDescription0 = prjDescription.getConfigurations()[0];
assertNotNull(cfgDescription0);
assertSame(cfgDescription0, prjDescription.getActiveConfiguration());
ICConfigurationDescription cfgDescription1 = prjDescription.getConfigurations()[1];
assertNotNull(cfgDescription1);
assertNotSame(cfgDescription1, prjDescription.getActiveConfiguration());
// ACTIVE_CFG: Change active configuration
prjDescription.setActiveConfiguration(cfgDescription1);
// Write project description
listener.clearNotified();
mngr.setProjectDescription(project, prjDescription);
assertEquals(true, listener.isNotified());
// Analyze delta
ICDescriptionDelta rootDelta = listener.getDelta();
assertNotNull(rootDelta);
List<ICDescriptionDelta> deltas = findDeltas(rootDelta, ICDescriptionDelta.ACTIVE_CFG);
assertEquals(1, deltas.size());
ICDescriptionDelta delta = deltas.get(0);
assertNotNull(delta);
// Check old setting
assertTrue(delta.getOldSetting() instanceof ICProjectDescription);
ICProjectDescription oldSetting = (ICProjectDescription)delta.getOldSetting();
assertEquals(cfgDescription0.getName(), oldSetting.getActiveConfiguration().getName());
// Check new setting
assertTrue(delta.getNewSetting() instanceof ICProjectDescription);
ICProjectDescription newSetting = (ICProjectDescription)delta.getNewSetting();
assertEquals(cfgDescription1.getName(), newSetting.getActiveConfiguration().getName());
}
public void testDelta_NAME() throws Exception {
String projName = getName();
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
initListener(projName);
IProject project = ResourceHelper.createCDTProjectWithConfig(projName);
// Get writable project description and its configuration
ICProjectDescription prjDescription = mngr.getProjectDescription(project, true);
assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getConfigurations()[0];
assertNotNull(cfgDescription);
String oldName = cfgDescription.getName();
// Modification ICDescriptionDelta.NAME
String newName = "New name";
cfgDescription.setName(newName);
// Write project description
listener.clearNotified();
mngr.setProjectDescription(project, prjDescription);
assertEquals(true, listener.isNotified());
// Analyze delta
ICDescriptionDelta rootDelta = listener.getDelta();
assertNotNull(rootDelta);
List<ICDescriptionDelta> deltas = findDeltas(rootDelta, ICDescriptionDelta.NAME);
assertEquals(1, deltas.size());
ICDescriptionDelta delta = deltas.get(0);
assertNotNull(delta);
assertEquals(ICDescriptionDelta.NAME, delta.getChangeFlags());
// Check old setting
assertTrue(delta.getOldSetting() instanceof ICConfigurationDescription);
ICConfigurationDescription oldSetting = (ICConfigurationDescription)delta.getOldSetting();
assertEquals(oldName, oldSetting.getName());
// Check new setting
assertTrue(delta.getNewSetting() instanceof ICConfigurationDescription);
ICConfigurationDescription newSetting = (ICConfigurationDescription)delta.getNewSetting();
assertEquals(newName, newSetting.getName());
}
public void testDelta_DESCRIPTION() throws Exception {
String projName = getName();
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
initListener(projName);
IProject project = ResourceHelper.createCDTProjectWithConfig(projName);
// Get writable project description and its configuration
ICProjectDescription prjDescription = mngr.getProjectDescription(project, true);
assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getConfigurations()[0];
assertNotNull(cfgDescription);
String oldDescription = cfgDescription.getDescription();
// Modification ICDescriptionDelta.DESCRIPTION
cfgDescription.setDescription("New description");
// Write project description
listener.clearNotified();
mngr.setProjectDescription(project, prjDescription);
assertEquals(true, listener.isNotified());
// Analyze delta
ICDescriptionDelta rootDelta = listener.getDelta();
assertNotNull(rootDelta);
List<ICDescriptionDelta> deltas = findDeltas(rootDelta, ICDescriptionDelta.DESCRIPTION);
assertEquals(1, deltas.size());
ICDescriptionDelta delta = deltas.get(0);
assertNotNull(delta);
assertEquals(ICDescriptionDelta.DESCRIPTION, delta.getChangeFlags());
// Check old setting
assertTrue(delta.getOldSetting() instanceof ICConfigurationDescription);
ICConfigurationDescription oldSetting = (ICConfigurationDescription)delta.getOldSetting();
assertEquals(oldDescription, oldSetting.getDescription());
// Check new setting
assertTrue(delta.getNewSetting() instanceof ICConfigurationDescription);
ICConfigurationDescription newSetting = (ICConfigurationDescription)delta.getNewSetting();
assertEquals(cfgDescription.getDescription(), newSetting.getDescription());
}
public void testDelta_LANGUAGE_ID() throws Exception {
String projName = getName();
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
initListener(projName);
IProject project = ResourceHelper.createCDTProjectWithConfig(projName);
IFile file = ResourceHelper.createFile(project, "test.cpp");
// Get writable project description and its configuration
ICProjectDescription prjDescription = mngr.getProjectDescription(project, true);
assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getConfigurations()[0];
assertNotNull(cfgDescription);
// Modification LANGUAGE_ID
ICLanguageSetting langSetting = cfgDescription.getLanguageSettingForFile(file.getProjectRelativePath(), false);
String oldLanguageId = langSetting.getLanguageId();
String newLanguageId = "test.language.id";
assertTrue(!newLanguageId.equals(oldLanguageId));
langSetting.setLanguageId(newLanguageId);
// Write project description
listener.clearNotified();
mngr.setProjectDescription(project, prjDescription);
assertEquals(true, listener.isNotified());
// Analyze delta
ICDescriptionDelta rootDelta = listener.getDelta();
assertNotNull(rootDelta);
List<ICDescriptionDelta> deltas = findDeltas(rootDelta, ICDescriptionDelta.LANGUAGE_ID);
assertEquals(1, deltas.size());
ICDescriptionDelta delta = deltas.get(0);
assertNotNull(delta);
assertEquals(ICDescriptionDelta.LANGUAGE_ID, delta.getChangeFlags());
// Check old setting
assertTrue(delta.getOldSetting() instanceof ICLanguageSetting);
ICLanguageSetting oldSetting = (ICLanguageSetting)delta.getOldSetting();
assertEquals(oldLanguageId, oldSetting.getLanguageId());
// Check new setting
assertTrue(delta.getNewSetting() instanceof ICLanguageSetting);
ICLanguageSetting newSetting = (ICLanguageSetting)delta.getNewSetting();
assertEquals(newLanguageId, newSetting.getLanguageId());
}
public void testDelta_SOURCE_CONTENT_TYPE() throws Exception {
String projName = getName();
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
initListener(projName);
IProject project = ResourceHelper.createCDTProjectWithConfig(projName);
IFile file = ResourceHelper.createFile(project, "test.cpp");
// Get writable project description and its configuration
ICProjectDescription prjDescription = mngr.getProjectDescription(project, true);
assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getConfigurations()[0];
assertNotNull(cfgDescription);
// Modification SOURCE_CONTENT_TYPE
final String testContentType = "test.content.type";
ICLanguageSetting langSetting = cfgDescription.getLanguageSettingForFile(file.getProjectRelativePath(), false);
langSetting.setSourceContentTypeIds(new String[] {testContentType});
// Write project description
listener.clearNotified();
mngr.setProjectDescription(project, prjDescription);
assertEquals(true, listener.isNotified());
// Analyze delta
ICDescriptionDelta rootDelta = listener.getDelta();
assertNotNull(rootDelta);
List<ICDescriptionDelta> deltas = findDeltas(rootDelta, ICDescriptionDelta.SOURCE_CONTENT_TYPE);
assertEquals(1, deltas.size());
ICDescriptionDelta delta = deltas.get(0);
assertNotNull(delta);
// Check old setting
assertTrue(delta.getOldSetting() instanceof ICLanguageSetting);
ICLanguageSetting oldSetting = (ICLanguageSetting)delta.getOldSetting();
List<String> oldContentTypes = Arrays.asList(oldSetting.getSourceContentTypeIds());
assertTrue(!oldContentTypes.contains(testContentType));
// Check new setting
assertTrue(delta.getNewSetting() instanceof ICLanguageSetting);
ICLanguageSetting newSetting = (ICLanguageSetting)delta.getNewSetting();
List<String> newContentTypes = Arrays.asList(newSetting.getSourceContentTypeIds());
assertTrue(newContentTypes.contains(testContentType));
}
public void testDelta_SOURCE_EXTENSIONS() throws Exception {
String projName = getName();
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
initListener(projName);
IProject project = ResourceHelper.createCDTProjectWithConfig(projName);
IFile file = ResourceHelper.createFile(project, "test.cpp");
// Get writable project description and its configuration
ICProjectDescription prjDescription = mngr.getProjectDescription(project, true);
assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getConfigurations()[0];
assertNotNull(cfgDescription);
// Modification SOURCE_ENTENSIONS
ICLanguageSetting langSetting = cfgDescription.getLanguageSettingForFile(file.getProjectRelativePath(), false);
final String testContentType = CCorePlugin.CONTENT_TYPE_ASMSOURCE;
langSetting.setSourceContentTypeIds(new String[] {testContentType});
String[] exts = CDataUtil.getExtensionsFromContentTypes(project, new String[] {testContentType});
assertTrue(exts.length>0);
final String testSourceExtension = exts[0];
// Write project description
listener.clearNotified();
mngr.setProjectDescription(project, prjDescription);
assertEquals(true, listener.isNotified());
// Analyze delta
ICDescriptionDelta rootDelta = listener.getDelta();
assertNotNull(rootDelta);
List<ICDescriptionDelta> deltas = findDeltas(rootDelta, ICDescriptionDelta.SOURCE_ENTENSIONS);
assertEquals(1, deltas.size());
ICDescriptionDelta delta = deltas.get(0);
assertNotNull(delta);
// assertEquals(ICDescriptionDelta.SOURCE_ENTENSIONS, delta.getChangeFlags());
// Check old setting
assertTrue(delta.getOldSetting() instanceof ICLanguageSetting);
ICLanguageSetting oldSetting = (ICLanguageSetting)delta.getOldSetting();
List<String> oldSourceExtensions = Arrays.asList(oldSetting.getSourceExtensions());
assertTrue(!oldSourceExtensions.contains(testSourceExtension));
// Check new setting
assertTrue(delta.getNewSetting() instanceof ICLanguageSetting);
ICLanguageSetting newSetting = (ICLanguageSetting)delta.getNewSetting();
List<String> newSourceExtensions = Arrays.asList(newSetting.getSourceExtensions());
assertTrue(newSourceExtensions.contains(testSourceExtension));
}
public void testDelta_SETTING_ENTRIES() throws Exception {
String projName = getName();
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
initListener(projName);
IProject project = ResourceHelper.createCDTProjectWithConfig(projName);
IFile file = ResourceHelper.createFile(project, "test.cpp");
// Get writable project description and its configuration
ICProjectDescription prjDescription = mngr.getProjectDescription(project, true);
assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getConfigurations()[0];
assertNotNull(cfgDescription);
// Modification SETTING_ENTRIES
ICLanguageSettingEntry testSettingEntry = new CIncludePathEntry("/path", 0);
ICLanguageSetting langSetting = cfgDescription.getLanguageSettingForFile(file.getProjectRelativePath(), false);
ICLanguageSettingEntry[] entries = new ICLanguageSettingEntry[] {testSettingEntry};
langSetting.setSettingEntries(ICSettingEntry.INCLUDE_PATH, entries);
// Write project description
listener.clearNotified();
mngr.setProjectDescription(project, prjDescription);
assertEquals(true, listener.isNotified());
// Analyze delta
ICDescriptionDelta rootDelta = listener.getDelta();
assertNotNull(rootDelta);
List<ICDescriptionDelta> deltas = findDeltas(rootDelta, ICDescriptionDelta.SETTING_ENTRIES);
assertEquals(1, deltas.size());
ICDescriptionDelta delta = deltas.get(0);
assertNotNull(delta);
assertEquals(ICDescriptionDelta.SETTING_ENTRIES, delta.getChangeFlags());
// Check old setting
assertTrue(delta.getOldSetting() instanceof ICLanguageSetting);
ICLanguageSetting oldSetting = (ICLanguageSetting)delta.getOldSetting();
List<ICLanguageSettingEntry> oldSettingEntries = oldSetting.getSettingEntriesList(ICSettingEntry.INCLUDE_PATH);
assertTrue(!oldSettingEntries.contains(testSettingEntry));
// Check new setting
assertTrue(delta.getNewSetting() instanceof ICLanguageSetting);
ICLanguageSetting newSetting = (ICLanguageSetting)delta.getNewSetting();
List<ICLanguageSettingEntry> newSettingEntries = newSetting.getSettingEntriesList(ICSettingEntry.INCLUDE_PATH);
assertTrue(newSettingEntries.contains(testSettingEntry));
}
public void testDelta_BINARY_PARSER_IDS() throws Exception {
String projName = getName();
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
initListener(projName);
IProject project = ResourceHelper.createCDTProjectWithConfig(projName);
// Get writable project description and its configuration
ICProjectDescription prjDescription = mngr.getProjectDescription(project, true);
assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getConfigurations()[0];
assertNotNull(cfgDescription);
// Modification BINARY_PARSER_IDS
final String testBinaryParserId = "test.binary.parser.id";
ICTargetPlatformSetting targetPlatformSetting = cfgDescription.getTargetPlatformSetting();
targetPlatformSetting.setBinaryParserIds(new String[] {testBinaryParserId});
// Write project description
listener.clearNotified();
mngr.setProjectDescription(project, prjDescription);
assertEquals(true, listener.isNotified());
// Analyze delta
ICDescriptionDelta rootDelta = listener.getDelta();
assertNotNull(rootDelta);
List<ICDescriptionDelta> deltas = findDeltas(rootDelta, ICDescriptionDelta.BINARY_PARSER_IDS);
assertEquals(1, deltas.size());
ICDescriptionDelta delta = deltas.get(0);
assertNotNull(delta);
assertEquals(ICDescriptionDelta.BINARY_PARSER_IDS, delta.getChangeFlags());
// Check old setting
assertTrue(delta.getOldSetting() instanceof ICTargetPlatformSetting);
ICTargetPlatformSetting oldSetting = (ICTargetPlatformSetting)delta.getOldSetting();
List<String> oldBinaryParserIds = Arrays.asList(oldSetting.getBinaryParserIds());
assertTrue(!oldBinaryParserIds.contains(testBinaryParserId));
// Check new setting
assertTrue(delta.getNewSetting() instanceof ICTargetPlatformSetting);
ICTargetPlatformSetting newSetting = (ICTargetPlatformSetting)delta.getNewSetting();
List<String> newBinaryParserIds = Arrays.asList(newSetting.getBinaryParserIds());
assertTrue(newBinaryParserIds.contains(testBinaryParserId));
}
public void testDelta_ERROR_PARSER_IDS() throws Exception {
String projName = getName();
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
initListener(projName);
IProject project = ResourceHelper.createCDTProjectWithConfig(projName);
// Get writable project description and its configuration
ICProjectDescription prjDescription = mngr.getProjectDescription(project, true);
assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getConfigurations()[0];
assertNotNull(cfgDescription);
// Modification ERROR_PARSER_IDS
String testErrorParserId = "test.error.parser.id";
cfgDescription.getBuildSetting().setErrorParserIDs(new String[] {testErrorParserId});
// Write project description
listener.clearNotified();
mngr.setProjectDescription(project, prjDescription);
assertEquals(true, listener.isNotified());
// Analyze delta
ICDescriptionDelta rootDelta = listener.getDelta();
assertNotNull(rootDelta);
List<ICDescriptionDelta> deltas = findDeltas(rootDelta, ICDescriptionDelta.ERROR_PARSER_IDS);
assertEquals(1, deltas.size());
ICDescriptionDelta delta = deltas.get(0);
assertNotNull(delta);
assertEquals(ICDescriptionDelta.ERROR_PARSER_IDS, delta.getChangeFlags());
// Check old setting
assertTrue(delta.getOldSetting() instanceof ICBuildSetting);
ICBuildSetting oldSetting = (ICBuildSetting)delta.getOldSetting();
List<String> oldErrorParserIds = Arrays.asList(oldSetting.getErrorParserIDs());
assertTrue(!oldErrorParserIds.contains(testErrorParserId));
// Check new setting
assertTrue(delta.getNewSetting() instanceof ICBuildSetting);
ICBuildSetting newSetting = (ICBuildSetting)delta.getNewSetting();
List<String> newErrorParserIds = Arrays.asList(newSetting.getErrorParserIDs());
assertTrue(newErrorParserIds.contains(testErrorParserId));
}
public void testDelta_EXCLUDE() throws Exception {
String projName = getName();
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
initListener(projName);
IProject project = ResourceHelper.createCDTProjectWithConfig(projName);
IFile file = ResourceHelper.createFile(project, "test.cpp");
{
// Prepare file descriptions
ICProjectDescription prjDescription = mngr.getProjectDescription(project, true);
assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getConfigurations()[0];
assertNotNull(cfgDescription);
cfgDescription.createFileDescription(file.getProjectRelativePath(),cfgDescription.getRootFolderDescription());
ICFileDescription[] fileDescriptions = cfgDescription.getFileDescriptions();
assertTrue(fileDescriptions.length>0);
mngr.setProjectDescription(project, prjDescription);
}
{
// Get writable project description and its configuration
ICProjectDescription prjDescription = mngr.getProjectDescription(project, true);
assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getConfigurations()[0];
assertNotNull(cfgDescription);
// Modification EXCLUDE
ICFileDescription[] fileDescriptions = cfgDescription.getFileDescriptions();
assertTrue(fileDescriptions.length>0);
ICFileDescription fileDescription = fileDescriptions[0];
fileDescription.setExcluded(true);
// Write project description
listener.clearNotified();
mngr.setProjectDescription(project, prjDescription);
assertEquals(true, listener.isNotified());
// Analyze delta
ICDescriptionDelta rootDelta = listener.getDelta();
assertNotNull(rootDelta);
List<ICDescriptionDelta> deltas = findDeltas(rootDelta, ICDescriptionDelta.EXCLUDE);
assertEquals(1, deltas.size());
ICDescriptionDelta delta = deltas.get(0);
assertNotNull(delta);
assertEquals(ICDescriptionDelta.EXCLUDE, delta.getChangeFlags());
// Check old setting
assertTrue(delta.getOldSetting() instanceof ICFileDescription);
ICFileDescription oldSetting = (ICFileDescription)delta.getOldSetting();
assertTrue(!oldSetting.isExcluded());
// Check new setting
assertTrue(delta.getNewSetting() instanceof ICFileDescription);
ICFileDescription newSetting = (ICFileDescription)delta.getNewSetting();
assertTrue(newSetting.isExcluded());
}
}
public void testDelta_SOURCE_ADDED() throws Exception {
String projName = getName();
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
initListener(projName);
IProject project = ResourceHelper.createCDTProjectWithConfig(projName);
// Get writable project description and its configuration
ICProjectDescription prjDescription = mngr.getProjectDescription(project, true);
assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getConfigurations()[0];
assertNotNull(cfgDescription);
// Modification SOURCE_ADDED
List<ICSourceEntry> sourceEntries = new ArrayList<ICSourceEntry>(Arrays.asList(cfgDescription.getSourceEntries()));
ICSourceEntry testSourceEntry = new CSourceEntry(project.getFullPath().append("test_src"), null, ICSettingEntry.RESOLVED);
sourceEntries.add(testSourceEntry);
cfgDescription.setSourceEntries(sourceEntries.toArray(new ICSourceEntry[0]));
// Write project description
listener.clearNotified();
mngr.setProjectDescription(project, prjDescription);
assertEquals(true, listener.isNotified());
// Analyze delta
ICDescriptionDelta rootDelta = listener.getDelta();
assertNotNull(rootDelta);
List<ICDescriptionDelta> deltas = findDeltas(rootDelta, ICDescriptionDelta.SOURCE_ADDED);
assertEquals(1, deltas.size());
ICDescriptionDelta delta = deltas.get(0);
assertNotNull(delta);
// assertEquals(ICDescriptionDelta.SOURCE_ADDED, delta.getChangeFlags());
// Check old setting
assertTrue(delta.getOldSetting() instanceof ICConfigurationDescription);
ICConfigurationDescription oldSetting = (ICConfigurationDescription)delta.getOldSetting();
List<ICSourceEntry> oldSourceEntries = Arrays.asList(oldSetting.getSourceEntries());
assertTrue(!oldSourceEntries.contains(testSourceEntry));
// Check new setting
assertTrue(delta.getNewSetting() instanceof ICConfigurationDescription);
ICConfigurationDescription newSetting = (ICConfigurationDescription)delta.getNewSetting();
List<ICSourceEntry> newSourceEntries = Arrays.asList(newSetting.getSourceEntries());
assertTrue(newSourceEntries.contains(testSourceEntry));
}
public void testDelta_SOURCE_REMOVED() throws Exception {
String projName = getName();
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
initListener(projName);
IProject project = ResourceHelper.createCDTProjectWithConfig(projName);
ICSourceEntry testSourceEntry = new CSourceEntry(project.getFullPath().append("test_src"), null, ICSettingEntry.RESOLVED);
{
// Add some source entry to remove it during the test
ICProjectDescription prjDescription = mngr.getProjectDescription(project, true);
assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getConfigurations()[0];
assertNotNull(cfgDescription);
List<ICSourceEntry> sourceEntries = new ArrayList<ICSourceEntry>(Arrays.asList(cfgDescription.getSourceEntries()));
sourceEntries.add(testSourceEntry);
cfgDescription.setSourceEntries(sourceEntries.toArray(new ICSourceEntry[0]));
mngr.setProjectDescription(project, prjDescription);
}
{
// Get writable project description and its configuration
ICProjectDescription prjDescription = mngr.getProjectDescription(project, true);
assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getConfigurations()[0];
assertNotNull(cfgDescription);
// Modification SOURCE_REMOVED
cfgDescription.setSourceEntries(new ICSourceEntry[0]);
// Write project description
listener.clearNotified();
mngr.setProjectDescription(project, prjDescription);
assertEquals(true, listener.isNotified());
// Analyze delta
ICDescriptionDelta rootDelta = listener.getDelta();
assertNotNull(rootDelta);
List<ICDescriptionDelta> deltas = findDeltas(rootDelta, ICDescriptionDelta.SOURCE_REMOVED);
assertEquals(1, deltas.size());
ICDescriptionDelta delta = deltas.get(0);
assertNotNull(delta);
// assertEquals(ICDescriptionDelta.SOURCE_REMOVED, delta.getChangeFlags());
// Check old setting
assertTrue(delta.getOldSetting() instanceof ICConfigurationDescription);
ICConfigurationDescription oldSetting = (ICConfigurationDescription)delta.getOldSetting();
List<ICSourceEntry> oldSourceEntries = Arrays.asList(oldSetting.getSourceEntries());
assertTrue(oldSourceEntries.contains(testSourceEntry));
// Check new setting
assertTrue(delta.getNewSetting() instanceof ICConfigurationDescription);
ICConfigurationDescription newSetting = (ICConfigurationDescription)delta.getNewSetting();
List<ICSourceEntry> newSourceEntries = Arrays.asList(newSetting.getSourceEntries());
assertTrue(!newSourceEntries.contains(testSourceEntry));
}
}
public void testDelta_EXTERNAL_SETTINGS_ADDED() throws Exception {
String projName = getName();
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
initListener(projName);
IProject project = ResourceHelper.createCDTProjectWithConfig(projName);
// Get writable project description and its configuration
ICProjectDescription prjDescription = mngr.getProjectDescription(project, true);
assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getConfigurations()[0];
assertNotNull(cfgDescription);
// Modification EXTERNAL_SETTINGS_ADDED
ICSettingEntry testSettingEntry = new CIncludePathEntry("/path", 0);
ICExternalSetting testExternalSetting = cfgDescription.createExternalSetting(null, null, null, new ICSettingEntry[] {testSettingEntry});
// Write project description
listener.clearNotified();
mngr.setProjectDescription(project, prjDescription);
assertEquals(true, listener.isNotified());
// Analyze delta
ICDescriptionDelta rootDelta = listener.getDelta();
assertNotNull(rootDelta);
List<ICDescriptionDelta> deltas = findDeltas(rootDelta, ICDescriptionDelta.EXTERNAL_SETTINGS_ADDED);
assertEquals(1, deltas.size());
ICDescriptionDelta delta = deltas.get(0);
assertNotNull(delta);
assertEquals(ICDescriptionDelta.EXTERNAL_SETTINGS_ADDED, delta.getChangeFlags());
// Check old setting
assertTrue(delta.getOldSetting() instanceof ICConfigurationDescription);
ICConfigurationDescription oldSetting = (ICConfigurationDescription)delta.getOldSetting();
List<ICExternalSetting> oldExternalSettings = Arrays.asList(oldSetting.getExternalSettings());
assertEquals(0, oldExternalSettings.size());
// Check new setting
assertTrue(delta.getNewSetting() instanceof ICConfigurationDescription);
ICConfigurationDescription newSetting = (ICConfigurationDescription)delta.getNewSetting();
List<ICExternalSetting> newExternalSettings = Arrays.asList(newSetting.getExternalSettings());
assertEquals(1, newExternalSettings.size());
List<ICSettingEntry> newSettingEntries = Arrays.asList(newExternalSettings.get(0).getEntries());
assertTrue(newSettingEntries.contains(testSettingEntry));
}
public void testDelta_EXTERNAL_SETTINGS_REMOVED() throws Exception {
String projName = getName();
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
initListener(projName);
IProject project = ResourceHelper.createCDTProjectWithConfig(projName);
ICSettingEntry testSettingEntry = new CIncludePathEntry("/path", 0);
{
// Add some external setting to remove it during the test
ICProjectDescription prjDescription = mngr.getProjectDescription(project, true);
assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getConfigurations()[0];
assertNotNull(cfgDescription);
ICExternalSetting testExternalSetting = cfgDescription.createExternalSetting(null, null, null, new ICSettingEntry[] {testSettingEntry});
mngr.setProjectDescription(project, prjDescription);
}
{
// Get writable project description and its configuration
ICProjectDescription prjDescription = mngr.getProjectDescription(project, true);
assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getConfigurations()[0];
assertNotNull(cfgDescription);
// Modification EXTERNAL_SETTINGS_REMOVED
cfgDescription.removeExternalSettings();
// Write project description
listener.clearNotified();
mngr.setProjectDescription(project, prjDescription);
assertEquals(true, listener.isNotified());
// Analyze delta
ICDescriptionDelta rootDelta = listener.getDelta();
assertNotNull(rootDelta);
List<ICDescriptionDelta> deltas = findDeltas(rootDelta, ICDescriptionDelta.EXTERNAL_SETTINGS_REMOVED);
assertEquals(1, deltas.size());
ICDescriptionDelta delta = deltas.get(0);
assertNotNull(delta);
assertEquals(ICDescriptionDelta.EXTERNAL_SETTINGS_REMOVED, delta.getChangeFlags());
// Check old setting
assertTrue(delta.getOldSetting() instanceof ICConfigurationDescription);
ICConfigurationDescription oldSetting = (ICConfigurationDescription)delta.getOldSetting();
List<ICExternalSetting> oldExternalSettings = Arrays.asList(oldSetting.getExternalSettings());
assertEquals(1, oldExternalSettings.size());
List<ICSettingEntry> oldSettingEntries = Arrays.asList(oldExternalSettings.get(0).getEntries());
assertTrue(oldSettingEntries.contains(testSettingEntry));
// Check new setting
assertTrue(delta.getNewSetting() instanceof ICConfigurationDescription);
ICConfigurationDescription newSetting = (ICConfigurationDescription)delta.getNewSetting();
List<ICExternalSetting> newExternalSettings = Arrays.asList(newSetting.getExternalSettings());
assertEquals(0, newExternalSettings.size());
}
}
public void testDelta_CFG_REF_ADDED() throws Exception {
String projName = getName();
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
initListener(projName);
IProject project = ResourceHelper.createCDTProjectWithConfig(projName);
// Get writable project description and its configuration
ICProjectDescription prjDescription = mngr.getProjectDescription(project, true);
assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getConfigurations()[0];
assertNotNull(cfgDescription);
// Modification CFG_REF_ADDED
String testKey = "key";
String testValue = "value";
Map<String, String> refs = new HashMap<String, String>();
refs.put(testKey, testValue);
cfgDescription.setReferenceInfo(refs);
// Write project description
listener.clearNotified();
mngr.setProjectDescription(project, prjDescription);
assertEquals(true, listener.isNotified());
// Analyze delta
ICDescriptionDelta rootDelta = listener.getDelta();
assertNotNull(rootDelta);
List<ICDescriptionDelta> deltas = findDeltas(rootDelta, ICDescriptionDelta.CFG_REF_ADDED);
assertEquals(1, deltas.size());
ICDescriptionDelta delta = deltas.get(0);
assertNotNull(delta);
assertEquals(ICDescriptionDelta.CFG_REF_ADDED, delta.getChangeFlags());
// Check old setting
assertTrue(delta.getOldSetting() instanceof ICConfigurationDescription);
ICConfigurationDescription oldSetting = (ICConfigurationDescription)delta.getOldSetting();
Map<String, String> oldReferenceInfo = oldSetting.getReferenceInfo();
assertEquals(0, oldReferenceInfo.size());
// Check new setting
assertTrue(delta.getNewSetting() instanceof ICConfigurationDescription);
ICConfigurationDescription newSetting = (ICConfigurationDescription)delta.getNewSetting();
Map<String, String> newReferenceInfo = newSetting.getReferenceInfo();
assertEquals(1, newReferenceInfo.size());
assertEquals(testValue, newReferenceInfo.get(testKey));
}
public void testDelta_CFG_REF_REMOVED() throws Exception {
String projName = getName();
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
initListener(projName);
IProject project = ResourceHelper.createCDTProjectWithConfig(projName);
String testKey = "key";
String testValue = "value";
{
// Add some reference info to remove it during the test
ICProjectDescription prjDescription = mngr.getProjectDescription(project, true);
assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getConfigurations()[0];
assertNotNull(cfgDescription);
Map<String, String> refs = new HashMap<String, String>();
refs.put(testKey, testValue);
cfgDescription.setReferenceInfo(refs);
mngr.setProjectDescription(project, prjDescription);
}
{
// Get writable project description and its configuration
ICProjectDescription prjDescription = mngr.getProjectDescription(project, true);
assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getConfigurations()[0];
assertNotNull(cfgDescription);
// Modification CFG_REF_REMOVED
cfgDescription.setReferenceInfo(new HashMap<String, String>());
// Write project description
listener.clearNotified();
mngr.setProjectDescription(project, prjDescription);
assertEquals(true, listener.isNotified());
// Analyze delta
ICDescriptionDelta rootDelta = listener.getDelta();
assertNotNull(rootDelta);
List<ICDescriptionDelta> deltas = findDeltas(rootDelta, ICDescriptionDelta.CFG_REF_REMOVED);
assertEquals(1, deltas.size());
ICDescriptionDelta delta = deltas.get(0);
assertNotNull(delta);
assertEquals(ICDescriptionDelta.CFG_REF_REMOVED, delta.getChangeFlags());
// Check old setting
assertTrue(delta.getOldSetting() instanceof ICConfigurationDescription);
ICConfigurationDescription oldSetting = (ICConfigurationDescription)delta.getOldSetting();
Map<String, String> oldReferenceInfo = oldSetting.getReferenceInfo();
assertEquals(1, oldReferenceInfo.size());
assertEquals(testValue, oldReferenceInfo.get(testKey));
// Check new setting
assertTrue(delta.getNewSetting() instanceof ICConfigurationDescription);
ICConfigurationDescription newSetting = (ICConfigurationDescription)delta.getNewSetting();
Map<String, String> newReferenceInfo = newSetting.getReferenceInfo();
assertEquals(0, newReferenceInfo.size());
}
}
public void testDelta_EXT_REF() throws Exception {
String projName = getName();
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
initListener(projName);
IProject project = ResourceHelper.createCDTProjectWithConfig(projName);
// Get writable project description and its configuration
ICProjectDescription prjDescription = mngr.getProjectDescription(project, true);
assertNotNull(prjDescription);
ICConfigurationDescription cfgDescription = prjDescription.getConfigurations()[0];
assertNotNull(cfgDescription);
// Modification EXT_REF, currently binary parsers are represented as CConfigExtensionReference
final String testBinaryParserId = "test.binary.parser.id";
ICTargetPlatformSetting targetPlatformSetting = cfgDescription.getTargetPlatformSetting();
targetPlatformSetting.setBinaryParserIds(new String[] {testBinaryParserId});
// Write project description
listener.clearNotified();
mngr.setProjectDescription(project, prjDescription);
assertEquals(true, listener.isNotified());
// Analyze delta
ICDescriptionDelta rootDelta = listener.getDelta();
assertNotNull(rootDelta);
List<ICDescriptionDelta> deltas = findDeltas(rootDelta, ICDescriptionDelta.EXT_REF);
assertEquals(1, deltas.size());
ICDescriptionDelta delta = deltas.get(0);
assertNotNull(delta);
assertEquals(ICDescriptionDelta.EXT_REF, delta.getChangeFlags());
// Check old setting
assertTrue(delta.getOldSetting() instanceof ICConfigurationDescription);
ICConfigurationDescription oldSetting = (ICConfigurationDescription)delta.getOldSetting();
ICTargetPlatformSetting oldTargetPlatformSetting = oldSetting.getTargetPlatformSetting();
List<String> oldBinaryParserIds = Arrays.asList(oldTargetPlatformSetting.getBinaryParserIds());
assertTrue(!oldBinaryParserIds.contains(testBinaryParserId));
// Check new setting
assertTrue(delta.getNewSetting() instanceof ICConfigurationDescription);
ICConfigurationDescription newSetting = (ICConfigurationDescription)delta.getNewSetting();
ICTargetPlatformSetting newTargetPlatformSetting = newSetting.getTargetPlatformSetting();
List<String> newBinaryParserIds = Arrays.asList(newTargetPlatformSetting.getBinaryParserIds());
assertTrue(newBinaryParserIds.contains(testBinaryParserId));
}
public void testDelta_INDEX_CFG() throws Exception {
String projName = getName();
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
initListener(projName);
IProject project = ResourceHelper.createCDTProject(projName, null,
new String[] {"test.configuration.1", "test.configuration.2"});
// Get writable project description and its configuration
ICProjectDescription prjDescription = mngr.getProjectDescription(project, true);
assertNotNull(prjDescription);
assertEquals(2, prjDescription.getConfigurations().length);
ICConfigurationDescription cfgDescription0 = prjDescription.getConfigurations()[0];
assertNotNull(cfgDescription0);
assertSame(cfgDescription0, prjDescription.getDefaultSettingConfiguration());
ICConfigurationDescription cfgDescription1 = prjDescription.getConfigurations()[1];
assertNotNull(cfgDescription1);
assertNotSame(cfgDescription1, prjDescription.getDefaultSettingConfiguration());
// Modification INDEX_CFG
prjDescription.setDefaultSettingConfiguration(cfgDescription1);
// Write project description
listener.clearNotified();
mngr.setProjectDescription(project, prjDescription);
assertEquals(true, listener.isNotified());
// Analyze delta
ICDescriptionDelta rootDelta = listener.getDelta();
assertNotNull(rootDelta);
List<ICDescriptionDelta> deltas = findDeltas(rootDelta, ICDescriptionDelta.INDEX_CFG);
assertEquals(1, deltas.size());
ICDescriptionDelta delta = deltas.get(0);
assertNotNull(delta);
assertEquals(ICDescriptionDelta.INDEX_CFG, delta.getChangeFlags());
// Check old setting
assertTrue(delta.getOldSetting() instanceof ICProjectDescription);
ICProjectDescription oldSetting = (ICProjectDescription)delta.getOldSetting();
assertEquals(cfgDescription0.getName(), oldSetting.getDefaultSettingConfiguration().getName());
// Check new setting
assertTrue(delta.getNewSetting() instanceof ICProjectDescription);
ICProjectDescription newSetting = (ICProjectDescription)delta.getNewSetting();
assertEquals(cfgDescription1.getName(), newSetting.getDefaultSettingConfiguration().getName());
}
}