Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Gvozdev2012-02-03 20:46:11 +0000
committerAndrew Gvozdev2012-02-03 21:21:44 +0000
commit90d34eab05ab0810af7ceb36c8631e56d1fc6497 (patch)
tree68c1eee4992c84c43df7284c05e5ef0912d52f00 /core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core
parent86e15e9e9bf2146754b67c80033825336d9f3ea4 (diff)
downloadorg.eclipse.cdt-90d34eab05ab0810af7ceb36c8631e56d1fc6497.tar.gz
org.eclipse.cdt-90d34eab05ab0810af7ceb36c8631e56d1fc6497.tar.xz
org.eclipse.cdt-90d34eab05ab0810af7ceb36c8631e56d1fc6497.zip
bug 290631: Incorporate New Scanner Discovery from sd90 into the model
(in legacy mode)
Diffstat (limited to 'core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core')
-rw-r--r--core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsListenersTests.java569
-rw-r--r--core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManagerTests.java53
-rw-r--r--core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsPersistenceProjectTests.java309
3 files changed, 931 insertions, 0 deletions
diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsListenersTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsListenersTests.java
index 7f39b254a1c..8d13f5cb7e0 100644
--- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsListenersTests.java
+++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsListenersTests.java
@@ -115,6 +115,366 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
}
/**
+ * Test events triggered for non-shared configuration owned provider.
+ */
+ public void testListenerRegisterer_OneOwnedByCfg() throws Exception {
+ // create project
+ IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName());
+ ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true);
+
+ {
+ // get project descriptions
+ ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
+ assertNotNull(prjDescriptionWritable);
+ ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
+ assertEquals(1, cfgDescriptions.length);
+ ICConfigurationDescription cfgDescription = cfgDescriptions[0];
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+
+ // create a provider
+ ILanguageSettingsProvider mockProvider = new MockListenerRegisterer(PROVIDER_1, PROVIDER_NAME_1);
+ List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
+ providers.add(mockProvider);
+ ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers);
+ List<ILanguageSettingsProvider> storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(1, storedProviders.size());
+
+ // write to project description
+ CoreModel.getDefault().setProjectDescription(project, prjDescriptionWritable);
+ assertEquals(1, MockListenerRegisterer.getCount(PROVIDER_1));
+ }
+ {
+ // close the project
+ project.close(null);
+ assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_1));
+ }
+ {
+ // reopen the project
+ project.open(null);
+ // initialize project description
+ CProjectDescriptionManager.getInstance().getProjectDescription(project, false);
+ assertEquals(1, MockListenerRegisterer.getCount(PROVIDER_1));
+ // and delete
+ project.delete(true, null);
+ assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_1));
+ }
+
+ }
+
+ /**
+ * Test events triggered for non-shared configuration owned multiple providers.
+ */
+ public void testListenerRegisterer_TwoOwnedByCfgs() throws Exception {
+ // create project
+ IProject project = ResourceHelper.createCDTProject(this.getName(), null, new String[] {
+ "org.eclipse.cdt.core.tests.configuration.id.1",
+ "org.eclipse.cdt.core.tests.configuration.id.2",
+ });
+ ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true);
+
+ {
+ // get project descriptions
+ ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
+ assertNotNull(prjDescriptionWritable);
+ ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
+ assertEquals(2, cfgDescriptions.length);
+ ICConfigurationDescription cfgDescription1 = cfgDescriptions[0];
+ ICConfigurationDescription cfgDescription2 = cfgDescriptions[1];
+ assertTrue(cfgDescription1 instanceof ILanguageSettingsProvidersKeeper);
+ assertTrue(cfgDescription2 instanceof ILanguageSettingsProvidersKeeper);
+
+ {
+ // create a provider 1
+ ILanguageSettingsProvider mockProvider = new MockListenerRegisterer(PROVIDER_1, PROVIDER_NAME_1);
+ List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
+ providers.add(mockProvider);
+ ((ILanguageSettingsProvidersKeeper) cfgDescription1).setLanguageSettingProviders(providers);
+ List<ILanguageSettingsProvider> storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription1).getLanguageSettingProviders();
+ assertEquals(1, storedProviders.size());
+ }
+ {
+ // create a provider 2
+ ILanguageSettingsProvider mockProvider = new MockListenerRegisterer(PROVIDER_1, PROVIDER_NAME_1);
+ List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
+ providers.add(mockProvider);
+ ((ILanguageSettingsProvidersKeeper) cfgDescription2).setLanguageSettingProviders(providers);
+ List<ILanguageSettingsProvider> storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription2).getLanguageSettingProviders();
+ assertEquals(1, storedProviders.size());
+ }
+
+ // write to project description
+ CoreModel.getDefault().setProjectDescription(project, prjDescriptionWritable);
+ assertEquals(2, MockListenerRegisterer.getCount(PROVIDER_1));
+ }
+ {
+ // close the project
+ project.close(null);
+ assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_1));
+ }
+ {
+ // reopen the project
+ project.open(null);
+ // initialize project description
+ CProjectDescriptionManager.getInstance().getProjectDescription(project, false);
+ assertEquals(2, MockListenerRegisterer.getCount(PROVIDER_1));
+ // and delete
+ project.delete(true, null);
+ assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_1));
+ }
+
+ }
+
+ /**
+ * Test events triggered for shared provider.
+ */
+ public void testListenerRegisterer_OneGlobal() throws Exception {
+ // create project
+ IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName());
+ ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true);
+
+ {
+ // get project descriptions
+ ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
+ assertNotNull(prjDescriptionWritable);
+ ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
+ assertEquals(1, cfgDescriptions.length);
+ ICConfigurationDescription cfgDescription = cfgDescriptions[0];
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+
+ // add global provider
+ ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_REGISTERER_PROVIDER_ID);
+ List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
+ providers.add(workspaceProvider);
+ ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers);
+ List<ILanguageSettingsProvider> storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(1, storedProviders.size());
+
+ // write to project description
+ CoreModel.getDefault().setProjectDescription(project, prjDescriptionWritable);
+ assertEquals(1, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID));
+ }
+ {
+ // close the project
+ project.close(null);
+ assertEquals(0, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID));
+ }
+ {
+ // reopen the project
+ project.open(null);
+ // initialize project description
+ CProjectDescriptionManager.getInstance().getProjectDescription(project, false);
+ assertEquals(1, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID));
+ // and delete
+ project.delete(true, null);
+ assertEquals(0, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID));
+ }
+
+ }
+
+ /**
+ * Test events triggered for multiple shared providers.
+ */
+ public void testListenerRegisterer_TwoGlobal() throws Exception {
+ // create project
+ IProject project = ResourceHelper.createCDTProject(this.getName(), null, new String[] {
+ "org.eclipse.cdt.core.tests.configuration.id.1",
+ "org.eclipse.cdt.core.tests.configuration.id.2",
+ });
+ ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true);
+
+ {
+ // retrieve global provider
+ ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_REGISTERER_PROVIDER_ID);
+ // get project descriptions
+ ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
+ assertNotNull(prjDescriptionWritable);
+ ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
+ assertEquals(2, cfgDescriptions.length);
+ ICConfigurationDescription cfgDescription1 = cfgDescriptions[0];
+ ICConfigurationDescription cfgDescription2 = cfgDescriptions[1];
+ assertTrue(cfgDescription1 instanceof ILanguageSettingsProvidersKeeper);
+ assertTrue(cfgDescription2 instanceof ILanguageSettingsProvidersKeeper);
+
+ {
+ // add global provider to configuration 1
+ List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
+ providers.add(workspaceProvider);
+ ((ILanguageSettingsProvidersKeeper) cfgDescription1).setLanguageSettingProviders(providers);
+ List<ILanguageSettingsProvider> storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription1).getLanguageSettingProviders();
+ assertEquals(1, storedProviders.size());
+ }
+ {
+ // add global provider to configuration 2
+ List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
+ providers.add(workspaceProvider);
+ ((ILanguageSettingsProvidersKeeper) cfgDescription2).setLanguageSettingProviders(providers);
+ List<ILanguageSettingsProvider> storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription2).getLanguageSettingProviders();
+ assertEquals(1, storedProviders.size());
+ }
+ // write to project description
+ CoreModel.getDefault().setProjectDescription(project, prjDescriptionWritable);
+ assertEquals(1, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID));
+ }
+ {
+ // close the project
+ project.close(null);
+ assertEquals(0, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID));
+ }
+ {
+ // reopen the project
+ project.open(null);
+ // initialize project description
+ CProjectDescriptionManager.getInstance().getProjectDescription(project, false);
+ assertEquals(1, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID));
+ // and delete
+ project.delete(true, null);
+ assertEquals(0, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID));
+ }
+ }
+
+ /**
+ * Test events triggered for shared provider when the provider removed from the list.
+ */
+ public void testListenerRegisterer_TwoGlobalMinusOne() throws Exception {
+ // create project
+ IProject project = ResourceHelper.createCDTProject(this.getName(), null, new String[] {
+ "org.eclipse.cdt.core.tests.configuration.id.1",
+ "org.eclipse.cdt.core.tests.configuration.id.2",
+ });
+ ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true);
+
+ {
+ // retrieve workspace provider
+ ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_REGISTERER_PROVIDER_ID);
+ // get project descriptions
+ ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
+ assertNotNull(prjDescriptionWritable);
+ ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
+ assertEquals(2, cfgDescriptions.length);
+ ICConfigurationDescription cfgDescription1 = cfgDescriptions[0];
+ ICConfigurationDescription cfgDescription2 = cfgDescriptions[1];
+ assertTrue(cfgDescription1 instanceof ILanguageSettingsProvidersKeeper);
+ assertTrue(cfgDescription2 instanceof ILanguageSettingsProvidersKeeper);
+
+ {
+ // add global provider to configuration 1
+ List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
+ providers.add(workspaceProvider);
+ ((ILanguageSettingsProvidersKeeper) cfgDescription1).setLanguageSettingProviders(providers);
+ List<ILanguageSettingsProvider> storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription1).getLanguageSettingProviders();
+ assertEquals(1, storedProviders.size());
+ }
+ {
+ // add global provider to configuration 2
+ List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
+ providers.add(workspaceProvider);
+ ((ILanguageSettingsProvidersKeeper) cfgDescription2).setLanguageSettingProviders(providers);
+ List<ILanguageSettingsProvider> storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription2).getLanguageSettingProviders();
+ assertEquals(1, storedProviders.size());
+ }
+ // write to project description
+ CoreModel.getDefault().setProjectDescription(project, prjDescriptionWritable);
+ assertEquals(1, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID));
+ }
+ {
+ // retrieve workspace provider
+ ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_REGISTERER_PROVIDER_ID);
+ // get project descriptions
+ ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
+ assertNotNull(prjDescriptionWritable);
+ ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
+ assertEquals(2, cfgDescriptions.length);
+ ICConfigurationDescription cfgDescription1 = cfgDescriptions[0];
+ ICConfigurationDescription cfgDescription2 = cfgDescriptions[1];
+ assertTrue(cfgDescription1 instanceof ILanguageSettingsProvidersKeeper);
+ assertTrue(cfgDescription2 instanceof ILanguageSettingsProvidersKeeper);
+
+ {
+ // remove global provider from configuration 1
+ List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
+ ((ILanguageSettingsProvidersKeeper) cfgDescription1).setLanguageSettingProviders(providers);
+ List<ILanguageSettingsProvider> storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription1).getLanguageSettingProviders();
+ assertEquals(0, storedProviders.size());
+ }
+ // write to project description
+ CoreModel.getDefault().setProjectDescription(project, prjDescriptionWritable);
+ assertEquals(1, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID));
+ }
+ {
+ // close the project
+ project.close(null);
+ assertEquals(0, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID));
+ }
+ }
+
+ /**
+ * Test events triggered for shared provider define in multiple projects.
+ */
+ public void testListenerRegisterer_GlobalProviderTwoProjects() throws Exception {
+ // create project 1
+ IProject project_1 = ResourceHelper.createCDTProjectWithConfig(this.getName() + ".1");
+ ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project_1, true);
+ {
+ // get project descriptions
+ ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project_1, true);
+ assertNotNull(prjDescriptionWritable);
+ ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
+ assertEquals(1, cfgDescriptions.length);
+ ICConfigurationDescription cfgDescription = cfgDescriptions[0];
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+
+ // add global provider
+ ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_REGISTERER_PROVIDER_ID);
+ List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
+ providers.add(workspaceProvider);
+ ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers);
+ List<ILanguageSettingsProvider> storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(1, storedProviders.size());
+
+ // write to project description
+ CoreModel.getDefault().setProjectDescription(project_1, prjDescriptionWritable);
+ assertEquals(1, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID));
+ }
+
+ // create project 2
+ IProject project_2 = ResourceHelper.createCDTProjectWithConfig(this.getName() + ".2");
+ ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project_2, true);
+ {
+ // get project descriptions
+ ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project_2, true);
+ assertNotNull(prjDescriptionWritable);
+ ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
+ assertEquals(1, cfgDescriptions.length);
+ ICConfigurationDescription cfgDescription = cfgDescriptions[0];
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+
+ // add global provider
+ ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_REGISTERER_PROVIDER_ID);
+ List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
+ providers.add(workspaceProvider);
+ ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers);
+ List<ILanguageSettingsProvider> storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(1, storedProviders.size());
+
+ // write to project description
+ CoreModel.getDefault().setProjectDescription(project_2, prjDescriptionWritable);
+ assertEquals(1, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID));
+ }
+
+ {
+ // close project 1
+ project_1.close(null);
+ assertEquals(1, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID));
+ }
+ {
+ // close project 2
+ project_2.close(null);
+ assertEquals(0, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID));
+ }
+
+ }
+
+ /**
* Test events triggered for shared global providers not included in any configuration.
*/
public void testListenerRegisterer_GlobalProviderNotInUse() throws Exception {
@@ -144,11 +504,72 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
}
/**
+ * Test events triggered for shared global provider replacing another one in global list.
+ */
+ public void testListenerRegisterer_GlobalProviderAddRemoveOutsideTheProject() throws Exception {
+ // create project
+ ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(PROVIDER_CUSTOM_GLOBAL);
+
+ // the global custom provider has not been added yet
+ ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(workspaceProvider);
+ assertNull(rawProvider);
+ assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_CUSTOM_GLOBAL));
+
+ // prepare project
+ List<ILanguageSettingsProvider> workspaceProvidersOriginal = LanguageSettingsManager.getWorkspaceProviders();
+ IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName());
+ ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true);
+ {
+ // get project descriptions
+ ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
+ assertNotNull(prjDescriptionWritable);
+ ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
+ assertEquals(1, cfgDescriptions.length);
+ ICConfigurationDescription cfgDescription = cfgDescriptions[0];
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+
+ // add global provider
+ List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
+ providers.add(workspaceProvider);
+ ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers);
+ List<ILanguageSettingsProvider> storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(1, storedProviders.size());
+
+ // write to project description
+ CoreModel.getDefault().setProjectDescription(project, prjDescriptionWritable);
+ // the global custom provider has not been added yet
+ assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_CUSTOM_GLOBAL));
+ }
+
+ {
+ // add global provider
+ ILanguageSettingsProvider provider = new MockListenerRegisterer(PROVIDER_CUSTOM_GLOBAL, PROVIDER_CUSTOM_GLOBAL_NAME);
+ List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
+ providers.add(provider);
+ LanguageSettingsManager.setWorkspaceProviders(providers);
+ assertEquals(1, MockListenerRegisterer.getCount(PROVIDER_CUSTOM_GLOBAL));
+ }
+ {
+ // remove global provider
+ List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(workspaceProvidersOriginal);
+ LanguageSettingsManager.setWorkspaceProviders(providers);
+ assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_CUSTOM_GLOBAL));
+ }
+
+ {
+ // close project
+ project.close(null);
+ assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_CUSTOM_GLOBAL));
+ }
+ }
+
+ /**
* Test events triggered when empty provider added and the resulting list of entries does not change.
*/
public void testNotification_cfgProvider_AddEmptyProvider() throws Exception {
// create project
IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName());
+ ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true);
// First clear default providers
{
// get project descriptions
@@ -202,11 +623,80 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
}
/**
+ * Test events triggered where non-empty provider added.
+ */
+ public void testNotification_cfgProvider_AddNonEmptyProvider() throws Exception {
+ // create project
+ IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName());
+ ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true);
+ // First clear default providers
+ {
+ // get project descriptions
+ ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
+ assertNotNull(prjDescriptionWritable);
+ ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
+ assertEquals(1, cfgDescriptions.length);
+ ICConfigurationDescription cfgDescription = cfgDescriptions[0];
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+
+ // clear providers
+ List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
+ ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers);
+ List<ILanguageSettingsProvider> storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(0, storedProviders.size());
+
+ // write to project description
+ CoreModel.getDefault().setProjectDescription(project, prjDescriptionWritable);
+ }
+
+ // register mock listener to inspect the notifications
+ LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener);
+ assertEquals(0, mockLseListener.getCount());
+ assertEquals(null, mockLseListener.getLastEvent());
+
+ // Add non-empty provider
+ {
+ // get project descriptions
+ ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
+ assertNotNull(prjDescriptionWritable);
+ ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
+ assertEquals(1, cfgDescriptions.length);
+ ICConfigurationDescription cfgDescription = cfgDescriptions[0];
+ String cfgDescriptionId = cfgDescription.getId();
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+
+ // create a provider and add entries
+ MockLanguageSettingsEditableProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_1, PROVIDER_NAME_1);
+ List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
+ entries.add(SAMPLE_LSE);
+ mockProvider.setSettingEntries(cfgDescription, project, null, entries);
+ List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
+ providers.add(mockProvider);
+ ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers);
+ List<ILanguageSettingsProvider> storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(1, storedProviders.size());
+
+ // write to project description
+ CoreModel.getDefault().setProjectDescription(project, prjDescriptionWritable);
+
+ // inspect notifications
+ assertEquals(1, mockLseListener.getCount());
+ ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent();
+ assertNotNull(event);
+
+ assertEquals(project.getName(), event.getProjectName());
+ assertEquals(1, event.getConfigurationDescriptionIds().length);
+ assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]);
+ }
+ }
+
+ /**
* Test events triggered during serialization.
*/
public void testNotification_cfgProvider_SerializeEntries() throws Exception {
// create project
IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName());
+ ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true);
// add the mock provider
{
@@ -276,6 +766,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
public void testNotification_cfgProvider_SerializeEntriesConcurrent() throws Exception {
// create project
IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName());
+ ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true);
// add the mock provider
{
@@ -379,6 +870,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
public void testNotification_globalProvider_AddEmptyProvider() throws Exception {
// create project
IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName());
+ ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true);
// First clear default providers
{
// get project descriptions
@@ -439,11 +931,88 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
}
/**
+ * Test events triggered during adding global non-empty provider.
+ */
+ public void testNotification_globalProvider_AddNonEmptyProvider() throws Exception {
+ // create project
+ IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName());
+ ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true);
+ // First clear default providers
+ {
+ // get project descriptions
+ ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
+ assertNotNull(prjDescriptionWritable);
+ ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
+ assertEquals(1, cfgDescriptions.length);
+ ICConfigurationDescription cfgDescription = cfgDescriptions[0];
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+
+ // clear providers
+ List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
+ ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers);
+ List<ILanguageSettingsProvider> storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(0, storedProviders.size());
+
+ // write to project description
+ CoreModel.getDefault().setProjectDescription(project, prjDescriptionWritable);
+ }
+
+ // register mock listener to inspect the notifications
+ LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener);
+ assertEquals(0, mockLseListener.getCount());
+ assertEquals(null, mockLseListener.getLastEvent());
+
+ // Add non-empty provider
+ {
+ // get project descriptions
+ ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
+ assertNotNull(prjDescriptionWritable);
+ ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
+ assertEquals(1, cfgDescriptions.length);
+ ICConfigurationDescription cfgDescription = cfgDescriptions[0];
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+
+ String cfgDescriptionId = cfgDescription.getId();
+
+ // retrieve a global provider
+ ILanguageSettingsProvider wspProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID);
+ assertNotNull(wspProvider);
+ ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(wspProvider);
+ assertTrue(rawProvider instanceof MockLanguageSettingsEditableProvider);
+ ((MockLanguageSettingsEditableProvider) rawProvider).clear();
+ // add entries
+ List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
+ entries.add(SAMPLE_LSE);
+ ((MockLanguageSettingsEditableProvider) rawProvider).setSettingEntries(cfgDescription, project, null, entries);
+ assertEquals(SAMPLE_LSE, wspProvider.getSettingEntries(cfgDescription, project, null).get(0));
+ // add the provider to cfgDescription
+ List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
+ providers.add(wspProvider);
+ ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers);
+ List<ILanguageSettingsProvider> storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(1, storedProviders.size());
+
+ // write to project description
+ CoreModel.getDefault().setProjectDescription(project, prjDescriptionWritable);
+
+ // inspect notifications
+ assertEquals(1, mockLseListener.getCount());
+ ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent();
+ assertNotNull(event);
+
+ assertEquals(project.getName(), event.getProjectName());
+ assertEquals(1, event.getConfigurationDescriptionIds().length);
+ assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]);
+ }
+ }
+
+ /**
* Test events triggered during serialization of global shared providers.
*/
public void testNotification_globalProvider_SerializeEntries() throws Exception {
// create project
IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName());
+ ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true);
// register mock listener to inspect the notifications
LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener);
diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManagerTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManagerTests.java
index 9015db91e7e..66ab7ac5fe4 100644
--- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManagerTests.java
+++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManagerTests.java
@@ -650,6 +650,59 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
}
/**
+ * Test ability to serialize providers for a configuration.
+ */
+ public void testConfigurationDescription_SerializeProviders() throws Exception {
+ // Create model project and accompanied descriptions
+ String projectName = getName();
+ IProject project = ResourceHelper.createCDTProjectWithConfig(projectName);
+ ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
+
+ ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
+ ICConfigurationDescription cfgDescription = cfgDescriptions[0];
+ assertTrue(cfgDescription instanceof CConfigurationDescription);
+
+ ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_BASE_PROVIDER_ID);
+ assertNotNull(workspaceProvider);
+ {
+ // ensure no test provider is set yet
+ List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(0, providers.size());
+ }
+ {
+ // set test provider
+ List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
+ providers.add(workspaceProvider);
+ ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers);
+ }
+ {
+ // check that test provider got there
+ List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(workspaceProvider, providers.get(0));
+ }
+
+ {
+ // serialize
+ CProjectDescriptionManager.getInstance().setProjectDescription(project, prjDescriptionWritable);
+ // close and reopen the project
+ project.close(null);
+ project.open(null);
+ }
+
+ {
+ // check that test provider got loaded
+ ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false);
+ ICConfigurationDescription[] loadedCfgDescriptions = prjDescription.getConfigurations();
+ ICConfigurationDescription loadedCfgDescription = loadedCfgDescriptions[0];
+ assertTrue(cfgDescription instanceof CConfigurationDescription);
+
+ List<ILanguageSettingsProvider> loadedProviders = ((ILanguageSettingsProvidersKeeper) loadedCfgDescription).getLanguageSettingProviders();
+ assertTrue(LanguageSettingsManager.isWorkspaceProvider(loadedProviders.get(0)));
+ }
+
+ }
+
+ /**
* Test a workspace provider basics.
*/
public void testWorkspaceProvider_Basic() throws Exception {
diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsPersistenceProjectTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsPersistenceProjectTests.java
index 5a7b0820715..96846c77a5c 100644
--- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsPersistenceProjectTests.java
+++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsPersistenceProjectTests.java
@@ -1027,6 +1027,148 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
}
/**
+ * Test serialization of real project.
+ */
+ public void testProjectPersistence_RealProject() throws Exception {
+ IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName());
+ String xmlStorageFileLocation;
+ String xmlOutOfTheWay;
+
+ List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
+ entries.add(new CIncludePathEntry("path0", 0));
+
+ {
+ // get project descriptions
+ ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
+ assertNotNull(prjDescriptionWritable);
+ ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
+ assertEquals(1, cfgDescriptions.length);
+ ICConfigurationDescription cfgDescriptionWritable = cfgDescriptions[0];
+ assertNotNull(cfgDescriptionWritable);
+ assertTrue(cfgDescriptionWritable instanceof ILanguageSettingsProvidersKeeper);
+
+ // create a provider
+ LanguageSettingsSerializableProvider mockProvider = new LanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0);
+ LanguageSettingsManager.setStoringEntriesInProjectArea(mockProvider, true);
+ mockProvider.setSettingEntries(cfgDescriptionWritable, null, null, entries);
+ List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
+ providers.add(mockProvider);
+ ((ILanguageSettingsProvidersKeeper) cfgDescriptionWritable).setLanguageSettingProviders(providers);
+ List<ILanguageSettingsProvider> storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescriptionWritable).getLanguageSettingProviders();
+ assertEquals(1, storedProviders.size());
+
+ // write to project description
+ CProjectDescriptionManager.getInstance().setProjectDescription(project, prjDescriptionWritable);
+ IFile xmlStorageFile = project.getFile(LANGUAGE_SETTINGS_PROJECT_XML);
+ assertTrue(xmlStorageFile.exists());
+ xmlStorageFileLocation = xmlStorageFile.getLocation().toOSString();
+ }
+ {
+ ICConfigurationDescription cfgDescription = getFirstConfigurationDescription(project);
+ assertNotNull(cfgDescription);
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+
+ List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(1, providers.size());
+ ILanguageSettingsProvider provider = providers.get(0);
+ assertTrue(provider instanceof LanguageSettingsSerializableProvider);
+ assertEquals(PROVIDER_0, provider.getId());
+ assertEquals(PROVIDER_NAME_0, provider.getName());
+
+ List<ICLanguageSettingEntry> actual = provider.getSettingEntries(cfgDescription, null, null);
+ assertEquals(entries.get(0), actual.get(0));
+ assertEquals(entries.size(), actual.size());
+ }
+ {
+ // Move storage out of the way
+ java.io.File xmlFile = new java.io.File(xmlStorageFileLocation);
+ xmlOutOfTheWay = xmlStorageFileLocation+".out-of-the-way";
+ java.io.File xmlFileOut = new java.io.File(xmlOutOfTheWay);
+ xmlFile.renameTo(xmlFileOut);
+ assertFalse(xmlFile.exists());
+ assertTrue(xmlFileOut.exists());
+ }
+ {
+ // Should not pollute workspace area with file with no meaningful data
+ String xmlWspStorageFileLocation = getStoreLocationInWorkspaceArea(project.getName()+'.'+LANGUAGE_SETTINGS_WORKSPACE_XML);
+ java.io.File xmlStorageFileWsp = new java.io.File(xmlWspStorageFileLocation);
+ assertFalse(xmlStorageFileWsp.exists());
+ }
+
+ {
+ // clear configuration
+ ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
+ ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
+ assertEquals(1, cfgDescriptions.length);
+ ICConfigurationDescription cfgDescriptionWritable = cfgDescriptions[0];
+ assertNotNull(cfgDescriptionWritable);
+ assertTrue(cfgDescriptionWritable instanceof ILanguageSettingsProvidersKeeper);
+
+ ((ILanguageSettingsProvidersKeeper) cfgDescriptionWritable).setLanguageSettingProviders(new ArrayList<ILanguageSettingsProvider>());
+ CProjectDescriptionManager.getInstance().setProjectDescription(project, prjDescriptionWritable);
+ List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescriptionWritable).getLanguageSettingProviders();
+ assertEquals(0, providers.size());
+ }
+ {
+ // re-check if it really took it
+ ICConfigurationDescription cfgDescription = getFirstConfigurationDescription(project);
+ assertNotNull(cfgDescription);
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+
+ List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(0, providers.size());
+ }
+ {
+ // close the project
+ project.close(null);
+ }
+ {
+ // open to double-check the data is not kept in some other kind of cache
+ project.open(null);
+ ICConfigurationDescription cfgDescription = getFirstConfigurationDescription(project);
+ assertNotNull(cfgDescription);
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+
+ List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(0, providers.size());
+ // and close
+ project.close(null);
+ }
+
+ {
+ // Move storage back
+ java.io.File xmlFile = new java.io.File(xmlStorageFileLocation);
+ xmlFile.delete();
+ assertFalse("File "+xmlFile+ " still exist", xmlFile.exists());
+ java.io.File xmlFileOut = new java.io.File(xmlOutOfTheWay);
+ xmlFileOut.renameTo(xmlFile);
+ assertTrue("File "+xmlFile+ " does not exist", xmlFile.exists());
+ assertFalse("File "+xmlFileOut+ " still exist", xmlFileOut.exists());
+ }
+
+ {
+ // Remove project from internal cache
+ CProjectDescriptionManager.getInstance().projectClosedRemove(project);
+ // open project and check if providers are loaded
+ project.open(null);
+ ICConfigurationDescription cfgDescription = getFirstConfigurationDescription(project);
+ assertNotNull(cfgDescription);
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+
+ List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(1, providers.size());
+ ILanguageSettingsProvider loadedProvider = providers.get(0);
+ assertTrue(loadedProvider instanceof LanguageSettingsSerializableProvider);
+ assertEquals(PROVIDER_0, loadedProvider.getId());
+ assertEquals(PROVIDER_NAME_0, loadedProvider.getName());
+
+ List<ICLanguageSettingEntry> actual = loadedProvider.getSettingEntries(cfgDescription, null, null);
+ assertEquals(entries.get(0), actual.get(0));
+ assertEquals(entries.size(), actual.size());
+ }
+ }
+
+ /**
* Test case when the storage is split between project and workspace area.
*/
public void testProjectPersistence_SplitStorageDOM() throws Exception {
@@ -1087,6 +1229,8 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
}
/**
+ * TODO: refactor with ErrorParserManager
+ *
* @param store - name of the store
* @return location of the store in the plug-in state area
*/
@@ -1096,6 +1240,171 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
}
/**
+ * Test split storage in a real project.
+ */
+ public void testProjectPersistence_RealProjectSplitStorage() throws Exception {
+ IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName());
+ String xmlStorageFileLocation;
+ String xmlOutOfTheWay;
+ String xmlWspStorageFileLocation;
+ String xmlWspOutOfTheWay;
+
+ List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
+ entries.add(new CIncludePathEntry("path0", 0));
+
+ {
+ // get project descriptions
+ ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
+ assertNotNull(prjDescriptionWritable);
+ ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
+ assertEquals(1, cfgDescriptions.length);
+ ICConfigurationDescription cfgDescriptionWritable = cfgDescriptions[0];
+ assertNotNull(cfgDescriptionWritable);
+ assertTrue(cfgDescriptionWritable instanceof ILanguageSettingsProvidersKeeper);
+
+ // create a provider
+ LanguageSettingsSerializableProvider mockProvider = new LanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0);
+ LanguageSettingsManager.setStoringEntriesInProjectArea(mockProvider, false);
+ mockProvider.setSettingEntries(cfgDescriptionWritable, null, null, entries);
+ List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
+ providers.add(mockProvider);
+ ((ILanguageSettingsProvidersKeeper) cfgDescriptionWritable).setLanguageSettingProviders(providers);
+ List<ILanguageSettingsProvider> storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescriptionWritable).getLanguageSettingProviders();
+ assertEquals(1, storedProviders.size());
+
+ // write to project description
+ CProjectDescriptionManager.getInstance().setProjectDescription(project, prjDescriptionWritable);
+ IFile xmlStorageFile = project.getFile(LANGUAGE_SETTINGS_PROJECT_XML);
+ assertTrue(xmlStorageFile.exists());
+ xmlStorageFileLocation = xmlStorageFile.getLocation().toOSString();
+ // TODO - cleanup names
+ xmlWspStorageFileLocation = getStoreLocationInWorkspaceArea(project.getName()+'.'+LANGUAGE_SETTINGS_WORKSPACE_XML);
+ java.io.File xmlStorageFileWsp = new java.io.File(xmlWspStorageFileLocation);
+ assertTrue(xmlStorageFileWsp.exists());
+ }
+ {
+ ICConfigurationDescription cfgDescription = getFirstConfigurationDescription(project);
+ assertNotNull(cfgDescription);
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+
+ List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(1, providers.size());
+ ILanguageSettingsProvider provider = providers.get(0);
+ assertTrue(provider instanceof LanguageSettingsSerializableProvider);
+ assertEquals(PROVIDER_0, provider.getId());
+ assertEquals(PROVIDER_NAME_0, provider.getName());
+
+ List<ICLanguageSettingEntry> actual = provider.getSettingEntries(cfgDescription, null, null);
+ assertEquals(entries.get(0), actual.get(0));
+ assertEquals(entries.size(), actual.size());
+ }
+ // Move storages out of the way
+ {
+ java.io.File xmlFile = new java.io.File(xmlStorageFileLocation);
+ xmlOutOfTheWay = xmlStorageFileLocation+".out-of-the-way";
+ java.io.File xmlFileOut = new java.io.File(xmlOutOfTheWay);
+ xmlFile.renameTo(xmlFileOut);
+ assertFalse(xmlFile.exists());
+ assertTrue(xmlFileOut.exists());
+ }
+ {
+ // TODO - workspace file
+ java.io.File xmlStorageFileWsp = new java.io.File(xmlWspStorageFileLocation);
+ assertTrue(xmlStorageFileWsp.exists());
+ xmlWspOutOfTheWay = xmlWspStorageFileLocation+".out-of-the-way";
+ java.io.File xmlWspFileOut = new java.io.File(xmlWspOutOfTheWay);
+ boolean result = xmlStorageFileWsp.renameTo(xmlWspFileOut);
+ assertTrue(result);
+ assertFalse(xmlStorageFileWsp.exists());
+ assertTrue(xmlWspFileOut.exists());
+ }
+
+ {
+ // clear configuration
+ ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
+ ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
+ assertEquals(1, cfgDescriptions.length);
+ ICConfigurationDescription cfgDescriptionWritable = cfgDescriptions[0];
+ assertNotNull(cfgDescriptionWritable);
+ assertTrue(cfgDescriptionWritable instanceof ILanguageSettingsProvidersKeeper);
+
+ ((ILanguageSettingsProvidersKeeper) cfgDescriptionWritable).setLanguageSettingProviders(new ArrayList<ILanguageSettingsProvider>());
+ CProjectDescriptionManager.getInstance().setProjectDescription(project, prjDescriptionWritable);
+ List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescriptionWritable).getLanguageSettingProviders();
+ assertEquals(0, providers.size());
+ }
+ {
+ // re-check if it really took it
+ ICConfigurationDescription cfgDescription = getFirstConfigurationDescription(project);
+ assertNotNull(cfgDescription);
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+
+ List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(0, providers.size());
+ }
+ {
+ // close the project
+ project.close(null);
+ }
+ {
+ // open to double-check the data is not kept in some other kind of cache
+ project.open(null);
+ ICConfigurationDescription cfgDescription = getFirstConfigurationDescription(project);
+ assertNotNull(cfgDescription);
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+
+ List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(0, providers.size());
+ // and close
+ project.close(null);
+ }
+
+ {
+ // Move storage back
+ java.io.File xmlFile = new java.io.File(xmlStorageFileLocation);
+ xmlFile.delete();
+ assertFalse("File "+xmlFile+ " still exist", xmlFile.exists());
+ java.io.File xmlFileOut = new java.io.File(xmlOutOfTheWay);
+ xmlFileOut.renameTo(xmlFile);
+ assertTrue("File "+xmlFile+ " does not exist", xmlFile.exists());
+ assertFalse("File "+xmlFileOut+ " still exist", xmlFileOut.exists());
+ }
+
+ {
+ // TODO
+ // Move storage back
+ java.io.File xmlWspFile = new java.io.File(xmlWspStorageFileLocation);
+ xmlWspFile.delete();
+ assertFalse("File "+xmlWspFile+ " still exist", xmlWspFile.exists());
+ java.io.File xmlWspFileOut = new java.io.File(xmlWspOutOfTheWay);
+ xmlWspFileOut.renameTo(xmlWspFile);
+ assertTrue("File "+xmlWspFile+ " does not exist", xmlWspFile.exists());
+ assertFalse("File "+xmlWspFileOut+ " still exist", xmlWspFileOut.exists());
+ }
+
+ {
+ // Remove project from internal cache
+ CProjectDescriptionManager.getInstance().projectClosedRemove(project);
+ // open project and check if providers are loaded
+ project.open(null);
+ ICConfigurationDescription cfgDescription = getFirstConfigurationDescription(project);
+ assertNotNull(cfgDescription);
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+
+ List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(1, providers.size());
+ ILanguageSettingsProvider loadedProvider = providers.get(0);
+ assertTrue(loadedProvider instanceof LanguageSettingsSerializableProvider);
+ assertEquals(PROVIDER_0, loadedProvider.getId());
+ assertEquals(PROVIDER_NAME_0, loadedProvider.getName());
+
+ List<ICLanguageSettingEntry> actual = loadedProvider.getSettingEntries(cfgDescription, null, null);
+ assertEquals(entries.get(0), actual.get(0));
+ assertEquals(entries.size(), actual.size());
+ }
+ }
+
+ /**
* Test serialization of providers referring to global shared instance.
*/
public void testProjectPersistence_ProviderExtensionReferenceDOM() throws Exception {

Back to the top