| /******************************************************************************* |
| * Copyright (c) 2011, 2013 Andrew Gvozdev and others. |
| * |
| * This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Andrew Gvozdev - Initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.cdt.core.language.settings.providers; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.Set; |
| |
| import org.eclipse.cdt.core.model.CoreModel; |
| import org.eclipse.cdt.core.settings.model.CMacroEntry; |
| import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; |
| import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; |
| import org.eclipse.cdt.core.settings.model.ICProjectDescription; |
| import org.eclipse.cdt.core.testplugin.ResourceHelper; |
| import org.eclipse.cdt.core.testplugin.util.BaseTestCase; |
| import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsProvidersSerializer; |
| import org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager; |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IFolder; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.runtime.jobs.Job; |
| |
| import junit.framework.TestSuite; |
| |
| /** |
| * Test cases to cover {@link ILanguageSettingsChangeListener} capabilities. |
| */ |
| public class LanguageSettingsListenersTests extends BaseTestCase { |
| // These should match corresponding entries defined in plugin.xml |
| private static final String EXTENSION_REGISTERER_PROVIDER_ID = LanguageSettingsExtensionsTests.EXTENSION_REGISTERER_PROVIDER_ID; |
| private static final String EXTENSION_EDITABLE_PROVIDER_ID = LanguageSettingsExtensionsTests.EXTENSION_EDITABLE_PROVIDER_ID; |
| |
| private static final String PROVIDER_1 = "test.provider.1.id"; |
| private static final String PROVIDER_NAME_1 = "test.provider.1.name"; |
| private static final String PROVIDER_CUSTOM_GLOBAL = "test.provider.custom.global.id"; |
| private static final String PROVIDER_CUSTOM_GLOBAL_NAME = "test.provider.custom.global.name"; |
| |
| private static final CMacroEntry SAMPLE_LSE = new CMacroEntry("MACRO", "value", 0); |
| |
| /** |
| * Mock {@link ILanguageSettingsChangeListener}. |
| */ |
| private class MockLanguageSettingsChangeListener implements ILanguageSettingsChangeListener { |
| private int count = 0; |
| private ILanguageSettingsChangeEvent lastEvent = null; |
| |
| @Override |
| public void handleEvent(ILanguageSettingsChangeEvent event) { |
| count++; |
| lastEvent = event; |
| } |
| |
| public int getCount() { |
| return count; |
| } |
| |
| public void resetCount() { |
| count = 0; |
| lastEvent = null; |
| } |
| |
| public ILanguageSettingsChangeEvent getLastEvent() { |
| return lastEvent; |
| } |
| } |
| |
| private MockLanguageSettingsChangeListener mockLseListener = new MockLanguageSettingsChangeListener(); |
| |
| /** |
| * Constructor. |
| * @param name - name of the test. |
| */ |
| public LanguageSettingsListenersTests(String name) { |
| super(name); |
| |
| } |
| |
| @Override |
| protected void setUp() throws Exception { |
| super.setUp(); |
| } |
| |
| @Override |
| protected void tearDown() throws Exception { |
| LanguageSettingsManager.unregisterLanguageSettingsChangeListener(mockLseListener); |
| LanguageSettingsManager.setWorkspaceProviders(null); |
| try { |
| Job.getJobManager().join(LanguageSettingsProvidersSerializer.JOB_FAMILY_SERIALIZE_LANGUAGE_SETTINGS_PROJECT, |
| null); |
| Job.getJobManager() |
| .join(LanguageSettingsProvidersSerializer.JOB_FAMILY_SERIALIZE_LANGUAGE_SETTINGS_WORKSPACE, null); |
| } catch (Exception e) { |
| // ignore |
| } |
| super.tearDown(); // includes ResourceHelper cleanup |
| } |
| |
| /** |
| * @return - new TestSuite. |
| */ |
| public static TestSuite suite() { |
| return new TestSuite(LanguageSettingsListenersTests.class); |
| } |
| |
| /** |
| * main function of the class. |
| * |
| * @param args - arguments |
| */ |
| public static void main(String[] args) { |
| junit.textui.TestRunner.run(suite()); |
| } |
| |
| /** |
| * Check that global provider does not get unnecessarily registered on start. |
| */ |
| public void testListenerRegisterer_CheckExtensionProvider() throws Exception { |
| // check if extension provider exists |
| ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager |
| .getWorkspaceProvider(EXTENSION_REGISTERER_PROVIDER_ID); |
| ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(workspaceProvider); |
| assertNotNull(rawProvider); |
| // global listeners providers get registered only lazily |
| assertEquals(0, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID)); |
| } |
| |
| /** |
| * 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<>(); |
| 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<>(); |
| 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<>(); |
| 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<>(); |
| 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<>(); |
| 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<>(); |
| 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<>(); |
| 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<>(); |
| 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<>(); |
| ((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<>(); |
| 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<>(); |
| 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 { |
| // 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)); |
| |
| List<ILanguageSettingsProvider> workspaceProvidersOriginal = LanguageSettingsManager.getWorkspaceProviders(); |
| { |
| // add global provider which is not engaged |
| ILanguageSettingsProvider provider = new MockListenerRegisterer(PROVIDER_CUSTOM_GLOBAL, |
| PROVIDER_CUSTOM_GLOBAL_NAME); |
| List<ILanguageSettingsProvider> providers = new ArrayList<>(workspaceProvidersOriginal); |
| providers.add(provider); |
| LanguageSettingsManager.setWorkspaceProviders(providers); |
| assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_CUSTOM_GLOBAL)); |
| } |
| { |
| // remove global provider and restore original list |
| List<ILanguageSettingsProvider> providers = new ArrayList<>(workspaceProvidersOriginal); |
| LanguageSettingsManager.setWorkspaceProviders(providers); |
| assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_CUSTOM_GLOBAL)); |
| } |
| } |
| |
| /** |
| * 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<>(); |
| 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<>(); |
| providers.add(provider); |
| LanguageSettingsManager.setWorkspaceProviders(providers); |
| assertEquals(1, MockListenerRegisterer.getCount(PROVIDER_CUSTOM_GLOBAL)); |
| } |
| { |
| // remove global provider |
| List<ILanguageSettingsProvider> providers = new ArrayList<>(workspaceProvidersOriginal); |
| LanguageSettingsManager.setWorkspaceProviders(providers); |
| assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_CUSTOM_GLOBAL)); |
| } |
| |
| { |
| // wait until serializing has finished |
| Job.getJobManager() |
| .join(LanguageSettingsProvidersSerializer.JOB_FAMILY_SERIALIZE_LANGUAGE_SETTINGS_WORKSPACE, null); |
| // 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 |
| 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<>(); |
| ((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 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); |
| |
| // create a provider and add to cfgDescription |
| ILanguageSettingsProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_1, |
| PROVIDER_NAME_1); |
| List<ILanguageSettingsProvider> providers = new ArrayList<>(); |
| 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); |
| } |
| |
| // No notifications expected |
| assertEquals(0, mockLseListener.getCount()); |
| assertEquals(null, mockLseListener.getLastEvent()); |
| } |
| |
| /** |
| * 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<>(); |
| ((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<>(); |
| entries.add(SAMPLE_LSE); |
| mockProvider.setSettingEntries(cfgDescription, project, null, entries); |
| List<ILanguageSettingsProvider> providers = new ArrayList<>(); |
| 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 |
| { |
| // 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 and add to cfgDescription |
| List<ILanguageSettingsProvider> providers = new ArrayList<>(); |
| providers.add(new MockLanguageSettingsEditableProvider(PROVIDER_1, PROVIDER_NAME_1)); |
| ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers); |
| List<ILanguageSettingsProvider> storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription) |
| .getLanguageSettingProviders(); |
| assertEquals(1, 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()); |
| |
| // Change the provider's entries |
| { |
| // get project descriptions |
| ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance() |
| .getProjectDescription(project, false); |
| assertNotNull(prjDescription); |
| ICConfigurationDescription[] cfgDescriptions = prjDescription.getConfigurations(); |
| assertEquals(1, cfgDescriptions.length); |
| ICConfigurationDescription cfgDescription = cfgDescriptions[0]; |
| assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper); |
| |
| String cfgDescriptionId = cfgDescription.getId(); |
| |
| // Add entries |
| List<ICLanguageSettingEntry> entries = new ArrayList<>(); |
| entries.add(SAMPLE_LSE); |
| List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription) |
| .getLanguageSettingProviders(); |
| assertEquals(1, providers.size()); |
| assertTrue(providers.get(0) instanceof MockLanguageSettingsEditableProvider); |
| MockLanguageSettingsEditableProvider mockProvider = (MockLanguageSettingsEditableProvider) providers.get(0); |
| mockProvider.setSettingEntries(cfgDescription, project, null, entries); |
| assertEquals(0, mockLseListener.getCount()); |
| assertEquals(null, mockLseListener.getLastEvent()); |
| |
| // Serialize settings |
| LanguageSettingsManager.serializeLanguageSettings(prjDescription); |
| // inspect event |
| 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 when providers are being added by 2 independent parties in parallel. |
| */ |
| public void testNotification_cfgProvider_SerializeEntriesConcurrent() throws Exception { |
| // create project |
| IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName()); |
| ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true); |
| |
| // add the mock 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); |
| |
| // create a provider and add to cfgDescription |
| List<ILanguageSettingsProvider> providers = new ArrayList<>(); |
| providers.add(new MockLanguageSettingsEditableProvider(PROVIDER_1, PROVIDER_NAME_1)); |
| ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers); |
| List<ILanguageSettingsProvider> storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription) |
| .getLanguageSettingProviders(); |
| assertEquals(1, 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()); |
| |
| // Change the provider's entries concurrently |
| |
| // get project descriptions |
| ICProjectDescription prjDescription_1 = CProjectDescriptionManager.getInstance().getProjectDescription(project, |
| false); |
| assertNotNull(prjDescription_1); |
| ICProjectDescription prjDescription_2 = CProjectDescriptionManager.getInstance().getProjectDescription(project, |
| false); |
| assertNotNull(prjDescription_2); |
| { |
| ICConfigurationDescription[] cfgDescriptions = prjDescription_1.getConfigurations(); |
| assertEquals(1, cfgDescriptions.length); |
| ICConfigurationDescription cfgDescription = cfgDescriptions[0]; |
| assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper); |
| |
| String cfgDescriptionId = cfgDescription.getId(); |
| |
| // Add entries |
| List<ICLanguageSettingEntry> entries = new ArrayList<>(); |
| entries.add(SAMPLE_LSE); |
| List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription) |
| .getLanguageSettingProviders(); |
| assertEquals(1, providers.size()); |
| assertTrue(providers.get(0) instanceof MockLanguageSettingsEditableProvider); |
| MockLanguageSettingsEditableProvider mockProvider = (MockLanguageSettingsEditableProvider) providers.get(0); |
| mockProvider.setSettingEntries(cfgDescription, project, null, entries); |
| |
| // reset count |
| mockLseListener.resetCount(); |
| assertEquals(0, mockLseListener.getCount()); |
| assertNull(mockLseListener.getLastEvent()); |
| |
| // Serialize settings |
| LanguageSettingsManager.serializeLanguageSettings(prjDescription_1); |
| // inspect event |
| 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]); |
| } |
| { |
| ICConfigurationDescription[] cfgDescriptions = prjDescription_2.getConfigurations(); |
| assertEquals(1, cfgDescriptions.length); |
| ICConfigurationDescription cfgDescription = cfgDescriptions[0]; |
| assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper); |
| String cfgDescriptionId = cfgDescription.getId(); |
| |
| // Add same entries |
| List<ICLanguageSettingEntry> entries = new ArrayList<>(); |
| entries.add(SAMPLE_LSE); |
| List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription) |
| .getLanguageSettingProviders(); |
| assertEquals(1, providers.size()); |
| assertTrue(providers.get(0) instanceof MockLanguageSettingsEditableProvider); |
| MockLanguageSettingsEditableProvider mockProvider = (MockLanguageSettingsEditableProvider) providers.get(0); |
| mockProvider.setSettingEntries(cfgDescription, project, null, entries); |
| |
| // reset count |
| mockLseListener.resetCount(); |
| assertEquals(0, mockLseListener.getCount()); |
| assertNull(mockLseListener.getLastEvent()); |
| |
| // Serialize settings |
| LanguageSettingsManager.serializeLanguageSettings(prjDescription_2); |
| // inspect event |
| assertEquals(0, mockLseListener.getCount()); |
| ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); |
| assertNull(event); |
| } |
| } |
| |
| /** |
| * Test events triggered during adding global empty provider. |
| */ |
| 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 |
| 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<>(); |
| ((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 empty global 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); |
| |
| // retrieve a global provider |
| ILanguageSettingsProvider wspProvider = LanguageSettingsManager |
| .getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID); |
| assertNotNull(wspProvider); |
| ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(wspProvider); |
| assertTrue(rawProvider instanceof MockLanguageSettingsEditableProvider); |
| // clear it |
| ((MockLanguageSettingsEditableProvider) rawProvider).clear(); |
| assertEquals(null, wspProvider.getSettingEntries(cfgDescription, project, null)); |
| // add the provider to cfgDescription |
| List<ILanguageSettingsProvider> providers = new ArrayList<>(); |
| 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); |
| } |
| |
| // No notifications expected |
| assertEquals(0, mockLseListener.getCount()); |
| assertEquals(null, mockLseListener.getLastEvent()); |
| } |
| |
| /** |
| * 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<>(); |
| ((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<>(); |
| 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<>(); |
| 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); |
| |
| // Add empty global 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); |
| |
| // retrieve a global provider |
| ILanguageSettingsProvider wspProvider = LanguageSettingsManager |
| .getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID); |
| assertNotNull(wspProvider); |
| ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(wspProvider); |
| assertTrue(rawProvider instanceof MockLanguageSettingsEditableProvider); |
| // clear it |
| ((MockLanguageSettingsEditableProvider) rawProvider).clear(); |
| assertEquals(null, wspProvider.getSettingEntries(cfgDescription, project, null)); |
| // add the provider to cfgDescription |
| List<ILanguageSettingsProvider> providers = new ArrayList<>(); |
| 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); |
| } |
| |
| // Change the provider's entries |
| { |
| // 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<>(); |
| entries.add(SAMPLE_LSE); |
| ((MockLanguageSettingsEditableProvider) rawProvider).setSettingEntries(null, project, null, entries); |
| assertEquals(SAMPLE_LSE, wspProvider.getSettingEntries(null, project, null).get(0)); |
| |
| // reset count |
| mockLseListener.resetCount(); |
| assertEquals(0, mockLseListener.getCount()); |
| assertEquals(null, mockLseListener.getLastEvent()); |
| |
| // Serialize settings |
| LanguageSettingsManager.serializeLanguageSettingsWorkspace(); |
| |
| // get cfgDescriptionId |
| ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance() |
| .getProjectDescription(project, false); |
| assertNotNull(prjDescription); |
| ICConfigurationDescription[] cfgDescriptions = prjDescription.getConfigurations(); |
| assertEquals(1, cfgDescriptions.length); |
| ICConfigurationDescription cfgDescription = cfgDescriptions[0]; |
| String cfgDescriptionId = cfgDescription.getId(); |
| |
| // inspect event |
| 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]); |
| } |
| |
| // Clear the provider's entries |
| { |
| // retrieve a global provider |
| ILanguageSettingsProvider wspProvider = LanguageSettingsManager |
| .getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID); |
| assertNotNull(wspProvider); |
| ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(wspProvider); |
| assertTrue(rawProvider instanceof MockLanguageSettingsEditableProvider); |
| // clear the provider again |
| ((MockLanguageSettingsEditableProvider) rawProvider).clear(); |
| |
| // reset count |
| mockLseListener.resetCount(); |
| assertEquals(0, mockLseListener.getCount()); |
| assertEquals(null, mockLseListener.getLastEvent()); |
| |
| // Serialize settings |
| LanguageSettingsManager.serializeLanguageSettingsWorkspace(); |
| |
| // get cfgDescriptionId |
| ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance() |
| .getProjectDescription(project, false); |
| assertNotNull(prjDescription); |
| ICConfigurationDescription[] cfgDescriptions = prjDescription.getConfigurations(); |
| assertEquals(1, cfgDescriptions.length); |
| ICConfigurationDescription cfgDescription = cfgDescriptions[0]; |
| String cfgDescriptionId = cfgDescription.getId(); |
| |
| // inspect event |
| 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]); |
| } |
| |
| // Change the provider's entries back to original state from extension point |
| { |
| |
| ILanguageSettingsProvider extensionProviderCopy = LanguageSettingsManager |
| .getExtensionProviderCopy(EXTENSION_EDITABLE_PROVIDER_ID, true); |
| List<ICLanguageSettingEntry> extEntries = extensionProviderCopy.getSettingEntries(null, null, null); |
| |
| // retrieve a global provider |
| ILanguageSettingsProvider wspProvider = LanguageSettingsManager |
| .getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID); |
| assertNotNull(wspProvider); |
| ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(wspProvider); |
| assertTrue(rawProvider instanceof MockLanguageSettingsEditableProvider); |
| // reset the provider to match extension |
| ((MockLanguageSettingsEditableProvider) rawProvider).setSettingEntries(null, null, null, extEntries); |
| assertTrue(LanguageSettingsManager.isEqualExtensionProvider(rawProvider, true)); |
| |
| // reset count |
| mockLseListener.resetCount(); |
| assertEquals(0, mockLseListener.getCount()); |
| assertEquals(null, mockLseListener.getLastEvent()); |
| |
| // Serialize settings |
| LanguageSettingsManager.serializeLanguageSettingsWorkspace(); |
| |
| // get cfgDescriptionId |
| ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance() |
| .getProjectDescription(project, false); |
| assertNotNull(prjDescription); |
| ICConfigurationDescription[] cfgDescriptions = prjDescription.getConfigurations(); |
| assertEquals(1, cfgDescriptions.length); |
| ICConfigurationDescription cfgDescription = cfgDescriptions[0]; |
| String cfgDescriptionId = cfgDescription.getId(); |
| |
| // inspect event |
| 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 case when a project is present in the list of resources in delta. |
| */ |
| public void testDelta_AffectedResources_Project() throws Exception { |
| // create project |
| IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName()); |
| ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true); |
| |
| // create a mock provider and add to cfgDescription |
| { |
| // 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 mock provider to cfgDescription |
| List<ILanguageSettingsProvider> providers = new ArrayList<>(); |
| MockLanguageSettingsEditableProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_1, |
| PROVIDER_NAME_1); |
| 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); |
| } |
| |
| // register mock listener to inspect the notifications |
| { |
| LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener); |
| assertEquals(0, mockLseListener.getCount()); |
| assertEquals(null, mockLseListener.getLastEvent()); |
| } |
| |
| // trigger an event on the project |
| ICConfigurationDescription cfgDescription; |
| { |
| // get project descriptions |
| ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance() |
| .getProjectDescription(project, false); |
| assertNotNull(prjDescription); |
| ICConfigurationDescription[] cfgDescriptions = prjDescription.getConfigurations(); |
| assertEquals(1, cfgDescriptions.length); |
| cfgDescription = cfgDescriptions[0]; |
| assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper); |
| List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription) |
| .getLanguageSettingProviders(); |
| assertEquals(1, providers.size()); |
| MockLanguageSettingsEditableProvider mockProvider = (MockLanguageSettingsEditableProvider) providers.get(0); |
| |
| List<ICLanguageSettingEntry> entries = new ArrayList<>(); |
| entries.add(SAMPLE_LSE); |
| mockProvider.setSettingEntries(cfgDescription, project, null, entries); |
| mockProvider.serializeLanguageSettings(cfgDescription); |
| } |
| |
| // inspect event |
| { |
| assertEquals(1, mockLseListener.getCount()); |
| ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); |
| assertNotNull(event); |
| assertEquals(event.getProjectName(), project.getName()); |
| |
| Set<IResource> resources = event.getAffectedResources(cfgDescription.getId()); |
| assertNotNull(resources); |
| assertEquals(project, resources.toArray()[0]); |
| assertEquals(1, resources.size()); |
| } |
| } |
| |
| /** |
| * Test case when a default resource (null) is represented in the list of resources in delta. |
| */ |
| public void testDelta_AffectedResources_DefaultResource() throws Exception { |
| // create project |
| IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName()); |
| ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true); |
| |
| // create a mock provider and add to cfgDescription |
| { |
| // 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 mock provider to cfgDescription |
| List<ILanguageSettingsProvider> providers = new ArrayList<>(); |
| MockLanguageSettingsEditableProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_1, |
| PROVIDER_NAME_1); |
| 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); |
| } |
| |
| // register mock listener to inspect the notifications |
| { |
| LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener); |
| assertEquals(0, mockLseListener.getCount()); |
| assertEquals(null, mockLseListener.getLastEvent()); |
| } |
| |
| // trigger an event on the project |
| ICConfigurationDescription cfgDescription; |
| { |
| // get project descriptions |
| ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance() |
| .getProjectDescription(project, false); |
| assertNotNull(prjDescription); |
| ICConfigurationDescription[] cfgDescriptions = prjDescription.getConfigurations(); |
| assertEquals(1, cfgDescriptions.length); |
| cfgDescription = cfgDescriptions[0]; |
| assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper); |
| List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription) |
| .getLanguageSettingProviders(); |
| assertEquals(1, providers.size()); |
| MockLanguageSettingsEditableProvider mockProvider = (MockLanguageSettingsEditableProvider) providers.get(0); |
| |
| List<ICLanguageSettingEntry> entries = new ArrayList<>(); |
| entries.add(SAMPLE_LSE); |
| mockProvider.setSettingEntries(cfgDescription, null, null, entries); |
| mockProvider.serializeLanguageSettings(cfgDescription); |
| } |
| |
| // inspect event |
| { |
| assertEquals(1, mockLseListener.getCount()); |
| ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); |
| assertNotNull(event); |
| assertEquals(event.getProjectName(), project.getName()); |
| |
| Set<IResource> resources = event.getAffectedResources(cfgDescription.getId()); |
| assertNotNull(resources); |
| assertEquals(project, resources.toArray()[0]); |
| assertEquals(1, resources.size()); |
| } |
| } |
| |
| /** |
| * Test case when a folder is present in the list of resources in delta. |
| */ |
| public void testDelta_AffectedResources_Folder() throws Exception { |
| // create project |
| IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName()); |
| IFolder folder = ResourceHelper.createFolder(project, "Folder"); |
| ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true); |
| |
| // create a mock provider and add to cfgDescription |
| { |
| // 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 mock provider to cfgDescription |
| List<ILanguageSettingsProvider> providers = new ArrayList<>(); |
| MockLanguageSettingsEditableProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_1, |
| PROVIDER_NAME_1); |
| 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); |
| } |
| |
| // register mock listener to inspect the notifications |
| { |
| LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener); |
| assertEquals(0, mockLseListener.getCount()); |
| assertEquals(null, mockLseListener.getLastEvent()); |
| } |
| |
| // trigger an event on the project |
| ICConfigurationDescription cfgDescription; |
| { |
| // get project descriptions |
| ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance() |
| .getProjectDescription(project, false); |
| assertNotNull(prjDescription); |
| ICConfigurationDescription[] cfgDescriptions = prjDescription.getConfigurations(); |
| assertEquals(1, cfgDescriptions.length); |
| cfgDescription = cfgDescriptions[0]; |
| assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper); |
| List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription) |
| .getLanguageSettingProviders(); |
| assertEquals(1, providers.size()); |
| MockLanguageSettingsEditableProvider mockProvider = (MockLanguageSettingsEditableProvider) providers.get(0); |
| |
| List<ICLanguageSettingEntry> entries = new ArrayList<>(); |
| entries.add(SAMPLE_LSE); |
| mockProvider.setSettingEntries(cfgDescription, folder, null, entries); |
| mockProvider.serializeLanguageSettings(cfgDescription); |
| } |
| |
| // inspect event |
| { |
| assertEquals(1, mockLseListener.getCount()); |
| ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); |
| assertNotNull(event); |
| assertEquals(event.getProjectName(), project.getName()); |
| |
| Set<IResource> resources = event.getAffectedResources(cfgDescription.getId()); |
| assertNotNull(resources); |
| assertEquals(folder, resources.toArray()[0]); |
| assertEquals(1, resources.size()); |
| } |
| } |
| |
| /** |
| * Test case when a file is present in the list of resources in delta. |
| */ |
| public void testDelta_AffectedResources_File() throws Exception { |
| // create project |
| IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName()); |
| IFile file = ResourceHelper.createFile(project, "file.cpp"); |
| ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true); |
| |
| // create a mock provider and add to cfgDescription |
| { |
| // 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 mock provider to cfgDescription |
| List<ILanguageSettingsProvider> providers = new ArrayList<>(); |
| MockLanguageSettingsEditableProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_1, |
| PROVIDER_NAME_1); |
| 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); |
| } |
| |
| // register mock listener to inspect the notifications |
| { |
| LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener); |
| assertEquals(0, mockLseListener.getCount()); |
| assertEquals(null, mockLseListener.getLastEvent()); |
| } |
| |
| // trigger an event on the project |
| ICConfigurationDescription cfgDescription; |
| { |
| // get project descriptions |
| ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance() |
| .getProjectDescription(project, false); |
| assertNotNull(prjDescription); |
| ICConfigurationDescription[] cfgDescriptions = prjDescription.getConfigurations(); |
| assertEquals(1, cfgDescriptions.length); |
| cfgDescription = cfgDescriptions[0]; |
| assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper); |
| List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription) |
| .getLanguageSettingProviders(); |
| assertEquals(1, providers.size()); |
| MockLanguageSettingsEditableProvider mockProvider = (MockLanguageSettingsEditableProvider) providers.get(0); |
| |
| List<ICLanguageSettingEntry> entries = new ArrayList<>(); |
| entries.add(SAMPLE_LSE); |
| mockProvider.setSettingEntries(cfgDescription, file, null, entries); |
| mockProvider.serializeLanguageSettings(cfgDescription); |
| } |
| |
| // inspect event |
| { |
| assertEquals(1, mockLseListener.getCount()); |
| ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); |
| assertNotNull(event); |
| assertEquals(event.getProjectName(), project.getName()); |
| |
| Set<IResource> resources = event.getAffectedResources(cfgDescription.getId()); |
| assertNotNull(resources); |
| assertEquals(file, resources.toArray()[0]); |
| assertEquals(1, resources.size()); |
| } |
| } |
| |
| /** |
| * Test case when a mix of files and folders is present in the list of resources in delta. |
| */ |
| public void testDelta_AffectedResources_Mix() throws Exception { |
| // create project |
| IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName()); |
| IFolder folder = ResourceHelper.createFolder(project, "Folder"); |
| IFile file1 = ResourceHelper.createFile(project, "file1.cpp"); |
| IFile file2 = ResourceHelper.createFile(project, "file2.cpp"); |
| IFile file3 = ResourceHelper.createFile(project, "file3.cpp"); |
| ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true); |
| |
| // create a mock provider and add to cfgDescription |
| { |
| // 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 mock provider to cfgDescription |
| List<ILanguageSettingsProvider> providers = new ArrayList<>(); |
| MockLanguageSettingsEditableProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_1, |
| PROVIDER_NAME_1); |
| 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); |
| } |
| |
| // register mock listener to inspect the notifications |
| { |
| LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener); |
| assertEquals(0, mockLseListener.getCount()); |
| assertEquals(null, mockLseListener.getLastEvent()); |
| } |
| |
| // trigger an event on the project |
| ICConfigurationDescription cfgDescription; |
| { |
| // get project descriptions |
| ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance() |
| .getProjectDescription(project, false); |
| assertNotNull(prjDescription); |
| ICConfigurationDescription[] cfgDescriptions = prjDescription.getConfigurations(); |
| assertEquals(1, cfgDescriptions.length); |
| cfgDescription = cfgDescriptions[0]; |
| assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper); |
| List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription) |
| .getLanguageSettingProviders(); |
| assertEquals(1, providers.size()); |
| MockLanguageSettingsEditableProvider mockProvider = (MockLanguageSettingsEditableProvider) providers.get(0); |
| |
| List<ICLanguageSettingEntry> entries = new ArrayList<>(); |
| entries.add(SAMPLE_LSE); |
| mockProvider.setSettingEntries(cfgDescription, folder, null, entries); |
| mockProvider.setSettingEntries(cfgDescription, file1, null, entries); |
| mockProvider.setSettingEntries(cfgDescription, file2, null, entries); |
| mockProvider.serializeLanguageSettings(cfgDescription); |
| } |
| |
| // inspect event |
| { |
| assertEquals(1, mockLseListener.getCount()); |
| ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); |
| assertNotNull(event); |
| assertEquals(event.getProjectName(), project.getName()); |
| |
| Set<IResource> resources = event.getAffectedResources(cfgDescription.getId()); |
| assertNotNull(resources); |
| assertTrue(resources.contains(folder)); |
| assertTrue(resources.contains(file1)); |
| assertTrue(resources.contains(file2)); |
| assertFalse(resources.contains(file3)); |
| assertEquals(3, resources.size()); |
| } |
| } |
| } |