Path: blob/main/src/vs/workbench/api/test/browser/mainThreadConfiguration.test.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import assert from 'assert';6import * as sinon from 'sinon';7import { URI } from '../../../../base/common/uri.js';8import { Registry } from '../../../../platform/registry/common/platform.js';9import { Extensions, IConfigurationRegistry, ConfigurationScope } from '../../../../platform/configuration/common/configurationRegistry.js';10import { IWorkspaceContextService, WorkbenchState } from '../../../../platform/workspace/common/workspace.js';11import { TestInstantiationService } from '../../../../platform/instantiation/test/common/instantiationServiceMock.js';12import { MainThreadConfiguration } from '../../browser/mainThreadConfiguration.js';13import { SingleProxyRPCProtocol } from '../common/testRPCProtocol.js';14import { IConfigurationService, ConfigurationTarget } from '../../../../platform/configuration/common/configuration.js';15import { WorkspaceService } from '../../../services/configuration/browser/configurationService.js';16import { IEnvironmentService } from '../../../../platform/environment/common/environment.js';17import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';1819suite('MainThreadConfiguration', function () {2021ensureNoDisposablesAreLeakedInTestSuite();2223const proxy = {24$initializeConfiguration: () => { }25};26let instantiationService: TestInstantiationService;27let target: sinon.SinonSpy;2829suiteSetup(() => {30Registry.as<IConfigurationRegistry>(Extensions.Configuration).registerConfiguration({31'id': 'extHostConfiguration',32'title': 'a',33'type': 'object',34'properties': {35'extHostConfiguration.resource': {36'description': 'extHostConfiguration.resource',37'type': 'boolean',38'default': true,39'scope': ConfigurationScope.RESOURCE40},41'extHostConfiguration.window': {42'description': 'extHostConfiguration.resource',43'type': 'boolean',44'default': true,45'scope': ConfigurationScope.WINDOW46}47}48});49});5051setup(() => {52target = sinon.spy();5354instantiationService = new TestInstantiationService();55instantiationService.stub(IConfigurationService, WorkspaceService);56instantiationService.stub(IConfigurationService, 'onDidUpdateConfiguration', sinon.mock());57instantiationService.stub(IConfigurationService, 'onDidChangeConfiguration', sinon.mock());58instantiationService.stub(IConfigurationService, 'updateValue', target);59instantiationService.stub(IEnvironmentService, {60isBuilt: false61});62});6364teardown(() => {65instantiationService.dispose();66});6768test('update resource configuration without configuration target defaults to workspace in multi root workspace when no resource is provided', function () {69instantiationService.stub(IWorkspaceContextService, <IWorkspaceContextService>{ getWorkbenchState: () => WorkbenchState.WORKSPACE });70const testObject: MainThreadConfiguration = instantiationService.createInstance(MainThreadConfiguration, SingleProxyRPCProtocol(proxy));7172testObject.$updateConfigurationOption(null, 'extHostConfiguration.resource', 'value', undefined, undefined);7374assert.strictEqual(ConfigurationTarget.WORKSPACE, target.args[0][3]);75});7677test('update resource configuration without configuration target defaults to workspace in folder workspace when resource is provider', function () {78instantiationService.stub(IWorkspaceContextService, <IWorkspaceContextService>{ getWorkbenchState: () => WorkbenchState.FOLDER });79const testObject: MainThreadConfiguration = instantiationService.createInstance(MainThreadConfiguration, SingleProxyRPCProtocol(proxy));8081testObject.$updateConfigurationOption(null, 'extHostConfiguration.resource', 'value', { resource: URI.file('abc') }, undefined);8283assert.strictEqual(ConfigurationTarget.WORKSPACE, target.args[0][3]);84});8586test('update resource configuration without configuration target defaults to workspace in folder workspace when no resource is provider', function () {87instantiationService.stub(IWorkspaceContextService, <IWorkspaceContextService>{ getWorkbenchState: () => WorkbenchState.FOLDER });88const testObject: MainThreadConfiguration = instantiationService.createInstance(MainThreadConfiguration, SingleProxyRPCProtocol(proxy));8990testObject.$updateConfigurationOption(null, 'extHostConfiguration.resource', 'value', undefined, undefined);9192assert.strictEqual(ConfigurationTarget.WORKSPACE, target.args[0][3]);93});9495test('update window configuration without configuration target defaults to workspace in multi root workspace when no resource is provided', function () {96instantiationService.stub(IWorkspaceContextService, <IWorkspaceContextService>{ getWorkbenchState: () => WorkbenchState.WORKSPACE });97const testObject: MainThreadConfiguration = instantiationService.createInstance(MainThreadConfiguration, SingleProxyRPCProtocol(proxy));9899testObject.$updateConfigurationOption(null, 'extHostConfiguration.window', 'value', undefined, undefined);100101assert.strictEqual(ConfigurationTarget.WORKSPACE, target.args[0][3]);102});103104test('update window configuration without configuration target defaults to workspace in multi root workspace when resource is provided', function () {105instantiationService.stub(IWorkspaceContextService, <IWorkspaceContextService>{ getWorkbenchState: () => WorkbenchState.WORKSPACE });106const testObject: MainThreadConfiguration = instantiationService.createInstance(MainThreadConfiguration, SingleProxyRPCProtocol(proxy));107108testObject.$updateConfigurationOption(null, 'extHostConfiguration.window', 'value', { resource: URI.file('abc') }, undefined);109110assert.strictEqual(ConfigurationTarget.WORKSPACE, target.args[0][3]);111});112113test('update window configuration without configuration target defaults to workspace in folder workspace when resource is provider', function () {114instantiationService.stub(IWorkspaceContextService, <IWorkspaceContextService>{ getWorkbenchState: () => WorkbenchState.FOLDER });115const testObject: MainThreadConfiguration = instantiationService.createInstance(MainThreadConfiguration, SingleProxyRPCProtocol(proxy));116117testObject.$updateConfigurationOption(null, 'extHostConfiguration.window', 'value', { resource: URI.file('abc') }, undefined);118119assert.strictEqual(ConfigurationTarget.WORKSPACE, target.args[0][3]);120});121122test('update window configuration without configuration target defaults to workspace in folder workspace when no resource is provider', function () {123instantiationService.stub(IWorkspaceContextService, <IWorkspaceContextService>{ getWorkbenchState: () => WorkbenchState.FOLDER });124const testObject: MainThreadConfiguration = instantiationService.createInstance(MainThreadConfiguration, SingleProxyRPCProtocol(proxy));125126testObject.$updateConfigurationOption(null, 'extHostConfiguration.window', 'value', undefined, undefined);127128assert.strictEqual(ConfigurationTarget.WORKSPACE, target.args[0][3]);129});130131test('update resource configuration without configuration target defaults to folder', function () {132instantiationService.stub(IWorkspaceContextService, <IWorkspaceContextService>{ getWorkbenchState: () => WorkbenchState.WORKSPACE });133const testObject: MainThreadConfiguration = instantiationService.createInstance(MainThreadConfiguration, SingleProxyRPCProtocol(proxy));134135testObject.$updateConfigurationOption(null, 'extHostConfiguration.resource', 'value', { resource: URI.file('abc') }, undefined);136137assert.strictEqual(ConfigurationTarget.WORKSPACE_FOLDER, target.args[0][3]);138});139140test('update configuration with user configuration target', function () {141instantiationService.stub(IWorkspaceContextService, <IWorkspaceContextService>{ getWorkbenchState: () => WorkbenchState.FOLDER });142const testObject: MainThreadConfiguration = instantiationService.createInstance(MainThreadConfiguration, SingleProxyRPCProtocol(proxy));143144testObject.$updateConfigurationOption(ConfigurationTarget.USER, 'extHostConfiguration.window', 'value', { resource: URI.file('abc') }, undefined);145146assert.strictEqual(ConfigurationTarget.USER, target.args[0][3]);147});148149test('update configuration with workspace configuration target', function () {150instantiationService.stub(IWorkspaceContextService, <IWorkspaceContextService>{ getWorkbenchState: () => WorkbenchState.FOLDER });151const testObject: MainThreadConfiguration = instantiationService.createInstance(MainThreadConfiguration, SingleProxyRPCProtocol(proxy));152153testObject.$updateConfigurationOption(ConfigurationTarget.WORKSPACE, 'extHostConfiguration.window', 'value', { resource: URI.file('abc') }, undefined);154155assert.strictEqual(ConfigurationTarget.WORKSPACE, target.args[0][3]);156});157158test('update configuration with folder configuration target', function () {159instantiationService.stub(IWorkspaceContextService, <IWorkspaceContextService>{ getWorkbenchState: () => WorkbenchState.FOLDER });160const testObject: MainThreadConfiguration = instantiationService.createInstance(MainThreadConfiguration, SingleProxyRPCProtocol(proxy));161162testObject.$updateConfigurationOption(ConfigurationTarget.WORKSPACE_FOLDER, 'extHostConfiguration.window', 'value', { resource: URI.file('abc') }, undefined);163164assert.strictEqual(ConfigurationTarget.WORKSPACE_FOLDER, target.args[0][3]);165});166167test('remove resource configuration without configuration target defaults to workspace in multi root workspace when no resource is provided', function () {168instantiationService.stub(IWorkspaceContextService, <IWorkspaceContextService>{ getWorkbenchState: () => WorkbenchState.WORKSPACE });169const testObject: MainThreadConfiguration = instantiationService.createInstance(MainThreadConfiguration, SingleProxyRPCProtocol(proxy));170171testObject.$removeConfigurationOption(null, 'extHostConfiguration.resource', undefined, undefined);172173assert.strictEqual(ConfigurationTarget.WORKSPACE, target.args[0][3]);174});175176test('remove resource configuration without configuration target defaults to workspace in folder workspace when resource is provider', function () {177instantiationService.stub(IWorkspaceContextService, <IWorkspaceContextService>{ getWorkbenchState: () => WorkbenchState.FOLDER });178const testObject: MainThreadConfiguration = instantiationService.createInstance(MainThreadConfiguration, SingleProxyRPCProtocol(proxy));179180testObject.$removeConfigurationOption(null, 'extHostConfiguration.resource', { resource: URI.file('abc') }, undefined);181182assert.strictEqual(ConfigurationTarget.WORKSPACE, target.args[0][3]);183});184185test('remove resource configuration without configuration target defaults to workspace in folder workspace when no resource is provider', function () {186instantiationService.stub(IWorkspaceContextService, <IWorkspaceContextService>{ getWorkbenchState: () => WorkbenchState.FOLDER });187const testObject: MainThreadConfiguration = instantiationService.createInstance(MainThreadConfiguration, SingleProxyRPCProtocol(proxy));188189testObject.$removeConfigurationOption(null, 'extHostConfiguration.resource', undefined, undefined);190191assert.strictEqual(ConfigurationTarget.WORKSPACE, target.args[0][3]);192});193194test('remove window configuration without configuration target defaults to workspace in multi root workspace when no resource is provided', function () {195instantiationService.stub(IWorkspaceContextService, <IWorkspaceContextService>{ getWorkbenchState: () => WorkbenchState.WORKSPACE });196const testObject: MainThreadConfiguration = instantiationService.createInstance(MainThreadConfiguration, SingleProxyRPCProtocol(proxy));197198testObject.$removeConfigurationOption(null, 'extHostConfiguration.window', undefined, undefined);199200assert.strictEqual(ConfigurationTarget.WORKSPACE, target.args[0][3]);201});202203test('remove window configuration without configuration target defaults to workspace in multi root workspace when resource is provided', function () {204instantiationService.stub(IWorkspaceContextService, <IWorkspaceContextService>{ getWorkbenchState: () => WorkbenchState.WORKSPACE });205const testObject: MainThreadConfiguration = instantiationService.createInstance(MainThreadConfiguration, SingleProxyRPCProtocol(proxy));206207testObject.$removeConfigurationOption(null, 'extHostConfiguration.window', { resource: URI.file('abc') }, undefined);208209assert.strictEqual(ConfigurationTarget.WORKSPACE, target.args[0][3]);210});211212test('remove window configuration without configuration target defaults to workspace in folder workspace when resource is provider', function () {213instantiationService.stub(IWorkspaceContextService, <IWorkspaceContextService>{ getWorkbenchState: () => WorkbenchState.FOLDER });214const testObject: MainThreadConfiguration = instantiationService.createInstance(MainThreadConfiguration, SingleProxyRPCProtocol(proxy));215216testObject.$removeConfigurationOption(null, 'extHostConfiguration.window', { resource: URI.file('abc') }, undefined);217218assert.strictEqual(ConfigurationTarget.WORKSPACE, target.args[0][3]);219});220221test('remove window configuration without configuration target defaults to workspace in folder workspace when no resource is provider', function () {222instantiationService.stub(IWorkspaceContextService, <IWorkspaceContextService>{ getWorkbenchState: () => WorkbenchState.FOLDER });223const testObject: MainThreadConfiguration = instantiationService.createInstance(MainThreadConfiguration, SingleProxyRPCProtocol(proxy));224225testObject.$removeConfigurationOption(null, 'extHostConfiguration.window', undefined, undefined);226227assert.strictEqual(ConfigurationTarget.WORKSPACE, target.args[0][3]);228});229230test('remove configuration without configuration target defaults to folder', function () {231instantiationService.stub(IWorkspaceContextService, <IWorkspaceContextService>{ getWorkbenchState: () => WorkbenchState.WORKSPACE });232const testObject: MainThreadConfiguration = instantiationService.createInstance(MainThreadConfiguration, SingleProxyRPCProtocol(proxy));233234testObject.$removeConfigurationOption(null, 'extHostConfiguration.resource', { resource: URI.file('abc') }, undefined);235236assert.strictEqual(ConfigurationTarget.WORKSPACE_FOLDER, target.args[0][3]);237});238});239240241