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:
parent
bb46f73b09
commit
7a3ea18317
2 changed files with 155 additions and 1 deletions
|
@ -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));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue