diff options
author | Andrew Gvozdev | 2012-02-03 20:46:11 +0000 |
---|---|---|
committer | Andrew Gvozdev | 2012-02-03 21:21:44 +0000 |
commit | 90d34eab05ab0810af7ceb36c8631e56d1fc6497 (patch) | |
tree | 68c1eee4992c84c43df7284c05e5ef0912d52f00 /core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core | |
parent | 86e15e9e9bf2146754b67c80033825336d9f3ea4 (diff) | |
download | org.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')
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 { |