blob: 774e69fe913985ddb7ce7e5df403418631d4dd3e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2011 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.projectmodel.tests;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.settings.model.CIncludePathEntry;
import org.eclipse.cdt.core.settings.model.CLibraryFileEntry;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICFolderDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSetting;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.core.settings.model.ICLibraryFileEntry;
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.core.settings.model.ICProjectDescriptionManager;
import org.eclipse.cdt.core.settings.model.ICSettingEntry;
import org.eclipse.cdt.core.testplugin.ResourceHelper;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.IFolderInfo;
import org.eclipse.cdt.managedbuilder.core.IOption;
import org.eclipse.cdt.managedbuilder.core.ITool;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
import org.eclipse.cdt.managedbuilder.core.OptionStringValue;
import org.eclipse.cdt.managedbuilder.testplugin.BuildSystemTestHelper;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
public class OptionStringListValueTests extends TestCase {
private static final String PROJ_NAME_PREFIX = "OptionStringListValueTests_";
public static Test suite() {
return new TestSuite(OptionStringListValueTests.class);
}
@Override
protected void setUp() throws Exception {
}
@Override
protected void tearDown() throws Exception {
ResourceHelper.cleanUp(getName());
}
public void testCfgDesEntries() throws Exception {
String projName = PROJ_NAME_PREFIX + "1";
IProject project = BuildSystemTestHelper.createProject(projName, null, "cdt.managedbuild.target.gnu30.exe");
ResourceHelper.addResourceCreated(project);
CoreModel model = CoreModel.getDefault();
ICProjectDescriptionManager mngr = model.getProjectDescriptionManager();
ICProjectDescription des = mngr.getProjectDescription(project);
ICConfigurationDescription cfgDes = des.getConfigurations()[0];
IConfiguration cfg = ManagedBuildManager.getConfigurationForDescription(cfgDes);
ICFolderDescription fDes = cfgDes.getRootFolderDescription();
IFolderInfo fInfo = cfg.getRootFolderInfo();
ICLanguageSetting ls = fDes.getLanguageSettingForFile("a.c");
List<ICLanguageSettingEntry> list = new ArrayList<ICLanguageSettingEntry>();
list.add(new CIncludePathEntry("a", 0));
list.add(new CIncludePathEntry("b", 0));
list.addAll(ls.getSettingEntriesList(ICSettingEntry.INCLUDE_PATH));
ls.setSettingEntries(ICSettingEntry.INCLUDE_PATH, list);
List<ICLanguageSettingEntry> returned = ls.getSettingEntriesList(ICSettingEntry.INCLUDE_PATH);
assertEquals(list.size(), returned.size());
assertTrue(Arrays.equals(list.toArray(), returned.toArray()));
mngr.setProjectDescription(project, des);
IWorkspace wsp = ResourcesPlugin.getWorkspace();
IWorkspaceRoot root = wsp.getRoot();
project.delete(false, true, new NullProgressMonitor());
project = root.getProject(projName);
des = mngr.getProjectDescription(project);
assertNull("project description is not null for removed project", des);
project = BuildSystemTestHelper.createProject(projName);
des = mngr.getProjectDescription(project);
assertNotNull("project description is null for re-created project", des);
assertTrue("des should be valid for re-created project", des.isValid());
cfgDes = des.getConfigurations()[0];
fDes = cfgDes.getRootFolderDescription();
ls = fDes.getLanguageSettingForFile("a.c");
returned = ls.getSettingEntriesList(ICSettingEntry.INCLUDE_PATH);
assertEquals(list.size(), returned.size());
assertTrue(Arrays.equals(list.toArray(), returned.toArray()));
}
public void testLibFiles() throws Exception {
String projName = PROJ_NAME_PREFIX + "2";
IProject project = BuildSystemTestHelper.createProject(projName, null, "lv.tests.ptype");
ResourceHelper.addResourceCreated(project);
CoreModel model = CoreModel.getDefault();
ICProjectDescriptionManager mngr = model.getProjectDescriptionManager();
ICProjectDescription des = mngr.getProjectDescription(project);
ICConfigurationDescription cfgDes = des.getConfigurations()[0];
IConfiguration cfg = ManagedBuildManager.getConfigurationForDescription(cfgDes);
ICFolderDescription fDes = cfgDes.getRootFolderDescription();
ICLanguageSetting ls = fDes.getLanguageSettingForFile("a.c");
List<ICLanguageSettingEntry> list = new ArrayList<ICLanguageSettingEntry>();
list.add(new CLibraryFileEntry("usr_a", 0, new Path("ap"), new Path("arp"), new Path("apx")));
list.add(new CLibraryFileEntry("usr_b", 0, new Path("bp"), null, null));
list.add(new CLibraryFileEntry("usr_c", 0, new Path("cp"), new Path("crp"), null));
list.add(new CLibraryFileEntry("usr_d", 0, new Path("dp"), null, new Path("dpx")));
list.addAll(ls.getSettingEntriesList(ICSettingEntry.LIBRARY_FILE));
ls.setSettingEntries(ICSettingEntry.LIBRARY_FILE, list);
ICLanguageSettingEntry[] resolved = ls.getResolvedSettingEntries(ICSettingEntry.LIBRARY_FILE);
assertEquals(list.size(), resolved.length);
for(int i = 0; i < resolved.length; i++){
ICLibraryFileEntry other = (ICLibraryFileEntry)list.get(i);
ICLibraryFileEntry r = (ICLibraryFileEntry)resolved[i];
assertEquals(other.getName(), r.getName());
assertEquals(other.getSourceAttachmentPath(), r.getSourceAttachmentPath());
assertEquals(other.getSourceAttachmentRootPath(), r.getSourceAttachmentRootPath());
assertEquals(other.getSourceAttachmentPrefixMapping(), r.getSourceAttachmentPrefixMapping());
}
List<ICLanguageSettingEntry> returned = ls.getSettingEntriesList(ICSettingEntry.LIBRARY_FILE);
assertEquals(list.size(), returned.size());
assertTrue(Arrays.equals(list.toArray(), returned.toArray()));
mngr.setProjectDescription(project, des);
IWorkspace wsp = ResourcesPlugin.getWorkspace();
IWorkspaceRoot root = wsp.getRoot();
project.delete(false, true, new NullProgressMonitor());
project = root.getProject(projName);
des = mngr.getProjectDescription(project);
assertNull("project description is not null for removed project", des);
project = BuildSystemTestHelper.createProject(projName);
des = mngr.getProjectDescription(project);
assertNotNull("project description is null for re-created project", des);
assertTrue("des should be valid for re-created project", des.isValid());
cfgDes = des.getConfigurations()[0];
fDes = cfgDes.getRootFolderDescription();
ls = fDes.getLanguageSettingForFile("a.c");
returned = ls.getSettingEntriesList(ICSettingEntry.LIBRARY_FILE);
checkEntriesMatch(list, returned);
assertEquals(list.size(), returned.size());
assertTrue(Arrays.equals(list.toArray(), returned.toArray()));
}
private void checkEntriesMatch(List<ICLanguageSettingEntry> list1, List<ICLanguageSettingEntry> list2){
Set<ICLanguageSettingEntry> set1 = new LinkedHashSet<ICLanguageSettingEntry>(list1);
set1.removeAll(list2);
Set<ICLanguageSettingEntry> set2 = new LinkedHashSet<ICLanguageSettingEntry>(list2);
set2.removeAll(list1);
if(set1.size() != 0 || set2.size() != 0) {
fail("entries diff");
}
}
private static String[] toValues(OptionStringValue[] ves){
String[] values = new String[ves.length];
for(int i = 0; i < ves.length; i++){
values[i] = ves[i].getValue();
}
return values;
}
private static void checkOptionValues(IOption option) throws Exception {
@SuppressWarnings("unchecked")
List<String> list = (List<String>)option.getValue();
String values[] = list.toArray(new String[list.size()]);
String[] values2 = option.getBasicStringListValue();
OptionStringValue[] values3 = option.getBasicStringListValueElements();
assertTrue(Arrays.equals(values, values2));
assertTrue(Arrays.equals(values, toValues(values3)));
}
public void testOptions() throws Exception {
String projName = PROJ_NAME_PREFIX + "3";
IProject project = BuildSystemTestHelper.createProject(projName, null, "lv.tests.ptype");
ResourceHelper.addResourceCreated(project);
CoreModel model = CoreModel.getDefault();
ICProjectDescriptionManager mngr = model.getProjectDescriptionManager();
ICProjectDescription des = mngr.getProjectDescription(project);
ICConfigurationDescription cfgDes = des.getConfigurations()[0];
IConfiguration cfg = ManagedBuildManager.getConfigurationForDescription(cfgDes);
ICFolderDescription fDes = cfgDes.getRootFolderDescription();
IFolderInfo fInfo = cfg.getRootFolderInfo();
ITool tool = fInfo.getToolsBySuperClassId("lv.tests.tool")[0];
IOption option = tool.getOptionBySuperClassId("lv.tests.libFiles.option");
String[] builtins = option.getBuiltIns();
assertEquals(1, builtins.length);
String expectedBIs[] = new String[]{"lf_c"};
assertTrue(Arrays.equals(expectedBIs, builtins));
checkOptionValues(option);
List<Object> list = new ArrayList<Object>();
list.add("usr_1");
list.add("usr_2");
list.addAll(Arrays.asList(option.getBasicStringListValue()));
String[] updated = list.toArray(new String[0]);
option = ManagedBuildManager.setOption(fInfo, tool, option, updated);
assertTrue(Arrays.equals(updated, option.getBasicStringListValue()));
checkOptionValues(option);
list = new ArrayList<Object>();
list.add(new OptionStringValue("usr_3", false, "ap", "arp", "apx"));
list.add(new OptionStringValue("usr_4", false, null, null, null));
list.add(new OptionStringValue("usr_5", false, "cp", null, null));
list.add(new OptionStringValue("usr_6", false, "dp", null, "dpx"));
list.add(new OptionStringValue("usr_6", false, null, null, "epx"));
list.addAll(Arrays.asList(option.getBasicStringListValueElements()));
OptionStringValue updatedves[] = list.toArray(new OptionStringValue[0]);
IOption updatedOption = ManagedBuildManager.setOption(fInfo, tool, option, updatedves);
assertTrue(option == updatedOption);
OptionStringValue[] ves = option.getBasicStringListValueElements();
assertEquals(updatedves.length, ves.length);
assertTrue(Arrays.equals(updatedves, ves));
checkOptionValues(option);
mngr.setProjectDescription(project, des);
IWorkspace wsp = ResourcesPlugin.getWorkspace();
IWorkspaceRoot root = wsp.getRoot();
project.delete(false, true, new NullProgressMonitor());
project = root.getProject(projName);
des = mngr.getProjectDescription(project);
assertNull("project description is not null for removed project", des);
project = BuildSystemTestHelper.createProject(projName);
des = mngr.getProjectDescription(project);
assertNotNull("project description is null for re-created project", des);
assertTrue("des should be valid for re-created project", des.isValid());
cfgDes = des.getConfigurations()[0];
fDes = cfgDes.getRootFolderDescription();
cfg = ManagedBuildManager.getConfigurationForDescription(cfgDes);
fInfo = cfg.getRootFolderInfo();
tool = fInfo.getToolsBySuperClassId("lv.tests.tool")[0];
option = tool.getOptionBySuperClassId("lv.tests.libFiles.option");
ves = option.getBasicStringListValueElements();
assertTrue(Arrays.equals(updatedves, ves));
checkOptionValues(option);
}
}