1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Test cases for resource scope for Build Output Parsers, fix for

persistence of workspace BOP provider
This commit is contained in:
Andrew Gvozdev 2012-04-12 01:07:55 -04:00
parent bb46f73b09
commit 7a3ea18317
2 changed files with 155 additions and 1 deletions

View file

@ -20,6 +20,7 @@ import java.util.Set;
import org.eclipse.cdt.core.ErrorParserManager; import org.eclipse.cdt.core.ErrorParserManager;
import org.eclipse.cdt.core.dom.ast.gnu.cpp.GPPLanguage; import org.eclipse.cdt.core.dom.ast.gnu.cpp.GPPLanguage;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager; import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager;
import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.settings.model.CIncludeFileEntry; import org.eclipse.cdt.core.settings.model.CIncludeFileEntry;
@ -77,6 +78,9 @@ public class GCCBuildCommandParserTest extends BaseTestCase {
* Mock build command parser. * Mock build command parser.
*/ */
private class MockBuildCommandParser extends AbstractBuildCommandParser implements Cloneable { private class MockBuildCommandParser extends AbstractBuildCommandParser implements Cloneable {
public MockBuildCommandParser() {
setId("GCCBuildCommandParserTest.MockBuildCommandParser");
}
@Override @Override
protected AbstractOptionParser[] getOptionParsers() { protected AbstractOptionParser[] getOptionParsers() {
return new AbstractOptionParser[] {}; return new AbstractOptionParser[] {};
@ -2063,4 +2067,142 @@ public class GCCBuildCommandParserTest extends BaseTestCase {
} }
} }
/**
* Test assigning entries on file level.
*/
public void testEntriesFileLevel() throws Exception {
// Create model project and accompanied descriptions
String projectName = getName();
IProject project = ResourceHelper.createCDTProjectWithConfig(projectName);
ICConfigurationDescription[] cfgDescriptions = getConfigurationDescriptions(project);
ICConfigurationDescription cfgDescription = cfgDescriptions[0];
IFolder folder=ResourceHelper.createFolder(project, "folder");
IFile file=ResourceHelper.createFile(project, "folder/file.cpp");
ICLanguageSetting ls = cfgDescription.getLanguageSettingForFile(file.getProjectRelativePath(), true);
String languageId = ls.getLanguageId();
// create GCCBuildCommandParser
GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true);
parser.setResourceScope(AbstractBuildCommandParser.ResourceScope.FILE);
// parse line
parser.startup(cfgDescription, null);
parser.processLine("gcc -I/path0 folder/file.cpp");
parser.shutdown();
// check populated entries
List<ICLanguageSettingEntry> expected = new ArrayList<ICLanguageSettingEntry>();
expected.add(new CIncludePathEntry(new Path("/path0").setDevice(project.getLocation().getDevice()), 0));
List<ICLanguageSettingEntry> entriesFile = parser.getSettingEntries(cfgDescription, file, languageId);
assertEquals(expected, entriesFile);
List<ICLanguageSettingEntry> entriesFolder = parser.getSettingEntries(cfgDescription, folder, languageId);
assertEquals(null, entriesFolder);
List<ICLanguageSettingEntry> entriesProject = parser.getSettingEntries(cfgDescription, project, languageId);
assertEquals(null, entriesProject);
}
/**
* Test assigning entries on folder level.
*/
public void testEntriesFolderLevel() throws Exception {
// Create model project and accompanied descriptions
String projectName = getName();
IProject project = ResourceHelper.createCDTProjectWithConfig(projectName);
ICConfigurationDescription[] cfgDescriptions = getConfigurationDescriptions(project);
ICConfigurationDescription cfgDescription = cfgDescriptions[0];
IFolder folder=ResourceHelper.createFolder(project, "folder");
IFile file=ResourceHelper.createFile(project, "folder/file.cpp");
ICLanguageSetting ls = cfgDescription.getLanguageSettingForFile(file.getProjectRelativePath(), true);
String languageId = ls.getLanguageId();
// create GCCBuildCommandParser
GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true);
parser.setResourceScope(AbstractBuildCommandParser.ResourceScope.FOLDER);
// parse line
parser.startup(cfgDescription, null);
parser.processLine("gcc -I/path0 folder/file.cpp");
parser.shutdown();
// check populated entries
List<ICLanguageSettingEntry> expected = new ArrayList<ICLanguageSettingEntry>();
expected.add(new CIncludePathEntry(new Path("/path0").setDevice(project.getLocation().getDevice()), 0));
List<ICLanguageSettingEntry> entriesFile = parser.getSettingEntries(cfgDescription, file, languageId);
assertEquals(null, entriesFile);
List<ICLanguageSettingEntry> entriesFolder = parser.getSettingEntries(cfgDescription, folder, languageId);
assertEquals(expected, entriesFolder);
List<ICLanguageSettingEntry> entriesProject = parser.getSettingEntries(cfgDescription, project, languageId);
assertEquals(null, entriesProject);
}
/**
* Test assigning entries on project level.
*/
public void testEntriesProjectLevel() throws Exception {
// Create model project and accompanied descriptions
String projectName = getName();
IProject project = ResourceHelper.createCDTProjectWithConfig(projectName);
ICConfigurationDescription[] cfgDescriptions = getConfigurationDescriptions(project);
ICConfigurationDescription cfgDescription = cfgDescriptions[0];
IFolder folder=ResourceHelper.createFolder(project, "folder");
IFile file=ResourceHelper.createFile(project, "folder/file.cpp");
ICLanguageSetting ls = cfgDescription.getLanguageSettingForFile(file.getProjectRelativePath(), true);
String languageId = ls.getLanguageId();
// create GCCBuildCommandParser
GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true);
parser.setResourceScope(AbstractBuildCommandParser.ResourceScope.PROJECT);
// parse line
parser.startup(cfgDescription, null);
parser.processLine("gcc -I/path0 folder/file.cpp");
parser.shutdown();
// check populated entries
List<ICLanguageSettingEntry> expected = new ArrayList<ICLanguageSettingEntry>();
expected.add(new CIncludePathEntry(new Path("/path0").setDevice(project.getLocation().getDevice()), 0));
List<ICLanguageSettingEntry> entriesFile = parser.getSettingEntries(cfgDescription, file, languageId);
assertEquals(null, entriesFile);
List<ICLanguageSettingEntry> entriesFolder = parser.getSettingEntries(cfgDescription, folder, languageId);
assertEquals(null, entriesFolder);
List<ICLanguageSettingEntry> entriesProject = parser.getSettingEntries(cfgDescription, project, languageId);
assertEquals(expected, entriesProject);
}
/**
* Test assigning entries for global provider.
*/
public void testEntriesProjectLevelGlobalProvider() throws Exception {
// Create model project and accompanied descriptions
String projectName = getName();
IProject project = ResourceHelper.createCDTProjectWithConfig(projectName);
ICConfigurationDescription[] cfgDescriptions = getConfigurationDescriptions(project);
ICConfigurationDescription cfgDescription = cfgDescriptions[0];
IFile file=ResourceHelper.createFile(project, "file.cpp");
ICLanguageSetting ls = cfgDescription.getLanguageSettingForFile(file.getProjectRelativePath(), true);
String languageId = ls.getLanguageId();
// create GCCBuildCommandParser
ILanguageSettingsProvider wspProvider = LanguageSettingsManager.getWorkspaceProvider(GCC_BUILD_COMMAND_PARSER_EXT);
GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getRawProvider(wspProvider);
parser.setResourceScope(AbstractBuildCommandParser.ResourceScope.PROJECT);
// parse line
parser.startup(cfgDescription, null);
parser.processLine("gcc -I/path0 file.cpp");
parser.shutdown();
// check populated entries
List<ICLanguageSettingEntry> expected = new ArrayList<ICLanguageSettingEntry>();
expected.add(new CIncludePathEntry(new Path("/path0").setDevice(project.getLocation().getDevice()), 0));
assertEquals(expected, parser.getSettingEntries(null, project, languageId));
}
} }

View file

@ -20,6 +20,7 @@ import org.eclipse.cdt.core.IErrorParser2;
import org.eclipse.cdt.core.IMarkerGenerator; import org.eclipse.cdt.core.IMarkerGenerator;
import org.eclipse.cdt.core.errorparsers.RegexErrorParser; import org.eclipse.cdt.core.errorparsers.RegexErrorParser;
import org.eclipse.cdt.core.errorparsers.RegexErrorPattern; import org.eclipse.cdt.core.errorparsers.RegexErrorPattern;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager; import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsLogger; import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsLogger;
@ -228,9 +229,20 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting
return options; return options;
} }
private void serializeLanguageSettingsInBackground() {
ILanguageSettingsProvider wspProvider = LanguageSettingsManager.getWorkspaceProvider(getId());
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(wspProvider);
if (rawProvider == this) {
// this is workspace provider
serializeLanguageSettingsInBackground(null);
} else {
serializeLanguageSettingsInBackground(currentCfgDescription);
}
}
@Override @Override
public void shutdown() { public void shutdown() {
serializeLanguageSettingsInBackground(currentCfgDescription); serializeLanguageSettingsInBackground();
super.shutdown(); super.shutdown();
} }