mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Refresh master with initial release/0.24 snapshot (#332)
* Initial port of release/0.24 source code * Fix additional headers * Fix a typo in launch.json
This commit is contained in:
@@ -5,8 +5,13 @@
|
||||
'use strict';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { FolderConfigurationModel, ScopedConfigurationModel, FolderSettingsModel } from 'vs/workbench/services/configuration/common/configurationModels';
|
||||
import { join } from 'vs/base/common/paths';
|
||||
import { FolderConfigurationModel, ScopedConfigurationModel, FolderSettingsModel, WorkspaceConfigurationChangeEvent } from 'vs/workbench/services/configuration/common/configurationModels';
|
||||
import { ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry';
|
||||
import { Workspace, WorkspaceFolder } from 'vs/platform/workspace/common/workspace';
|
||||
import URI from 'vs/base/common/uri';
|
||||
import { ConfigurationChangeEvent } from 'vs/platform/configuration/common/configurationModels';
|
||||
import { ConfigurationTarget } from 'vs/platform/configuration/common/configuration';
|
||||
|
||||
suite('ConfigurationService - Model', () => {
|
||||
|
||||
@@ -17,7 +22,7 @@ suite('ConfigurationService - Model', () => {
|
||||
|
||||
const testObject = new FolderConfigurationModel(settingsConfig, [], ConfigurationScope.WINDOW);
|
||||
|
||||
assert.equal(testObject.getContentsFor('task'), undefined);
|
||||
assert.equal(testObject.getSectionContents('task'), undefined);
|
||||
});
|
||||
|
||||
test('Test consolidate (settings and tasks)', () => {
|
||||
@@ -94,4 +99,99 @@ suite('ConfigurationService - Model', () => {
|
||||
assert.deepEqual(new FolderConfigurationModel(settingsConfig, [launchConfig, tasksConfig], ConfigurationScope.WINDOW).contents, expected);
|
||||
assert.deepEqual(new FolderConfigurationModel(settingsConfig, [tasksConfig, launchConfig], ConfigurationScope.WINDOW).contents, expected);
|
||||
});
|
||||
});
|
||||
|
||||
suite('WorkspaceConfigurationChangeEvent', () => {
|
||||
|
||||
test('changeEvent affecting workspace folders', () => {
|
||||
let configurationChangeEvent = new ConfigurationChangeEvent();
|
||||
configurationChangeEvent.change(['window.title']);
|
||||
configurationChangeEvent.change(['window.zoomLevel'], URI.file('folder1'));
|
||||
configurationChangeEvent.change(['workbench.editor.enablePreview'], URI.file('folder2'));
|
||||
configurationChangeEvent.change(['window.restoreFullscreen'], URI.file('folder1'));
|
||||
configurationChangeEvent.change(['window.restoreWindows'], URI.file('folder2'));
|
||||
configurationChangeEvent.telemetryData(ConfigurationTarget.WORKSPACE, {});
|
||||
|
||||
let testObject = new WorkspaceConfigurationChangeEvent(configurationChangeEvent, new Workspace('id', 'name',
|
||||
[new WorkspaceFolder({ index: 0, name: '1', uri: URI.file('folder1') }),
|
||||
new WorkspaceFolder({ index: 1, name: '2', uri: URI.file('folder2') }),
|
||||
new WorkspaceFolder({ index: 2, name: '3', uri: URI.file('folder3') })]));
|
||||
|
||||
assert.deepEqual(testObject.affectedKeys, ['window.title', 'window.zoomLevel', 'window.restoreFullscreen', 'workbench.editor.enablePreview', 'window.restoreWindows']);
|
||||
assert.equal(testObject.source, ConfigurationTarget.WORKSPACE);
|
||||
|
||||
assert.ok(testObject.affectsConfiguration('window.zoomLevel'));
|
||||
assert.ok(testObject.affectsConfiguration('window.zoomLevel', URI.file('folder1')));
|
||||
assert.ok(testObject.affectsConfiguration('window.zoomLevel', URI.file(join('folder1', 'file1'))));
|
||||
assert.ok(!testObject.affectsConfiguration('window.zoomLevel', URI.file('file1')));
|
||||
assert.ok(!testObject.affectsConfiguration('window.zoomLevel', URI.file('file2')));
|
||||
assert.ok(!testObject.affectsConfiguration('window.zoomLevel', URI.file(join('folder2', 'file2'))));
|
||||
assert.ok(!testObject.affectsConfiguration('window.zoomLevel', URI.file(join('folder3', 'file3'))));
|
||||
|
||||
assert.ok(testObject.affectsConfiguration('window.restoreFullscreen'));
|
||||
assert.ok(testObject.affectsConfiguration('window.restoreFullscreen', URI.file(join('folder1', 'file1'))));
|
||||
assert.ok(testObject.affectsConfiguration('window.restoreFullscreen', URI.file('folder1')));
|
||||
assert.ok(!testObject.affectsConfiguration('window.restoreFullscreen', URI.file('file1')));
|
||||
assert.ok(!testObject.affectsConfiguration('window.restoreFullscreen', URI.file('file2')));
|
||||
assert.ok(!testObject.affectsConfiguration('window.restoreFullscreen', URI.file(join('folder2', 'file2'))));
|
||||
assert.ok(!testObject.affectsConfiguration('window.restoreFullscreen', URI.file(join('folder3', 'file3'))));
|
||||
|
||||
assert.ok(testObject.affectsConfiguration('window.restoreWindows'));
|
||||
assert.ok(testObject.affectsConfiguration('window.restoreWindows', URI.file('folder2')));
|
||||
assert.ok(testObject.affectsConfiguration('window.restoreWindows', URI.file(join('folder2', 'file2'))));
|
||||
assert.ok(!testObject.affectsConfiguration('window.restoreWindows', URI.file('file2')));
|
||||
assert.ok(!testObject.affectsConfiguration('window.restoreWindows', URI.file(join('folder1', 'file1'))));
|
||||
assert.ok(!testObject.affectsConfiguration('window.restoreWindows', URI.file(join('folder3', 'file3'))));
|
||||
|
||||
assert.ok(testObject.affectsConfiguration('window.title'));
|
||||
assert.ok(testObject.affectsConfiguration('window.title', URI.file('folder1')));
|
||||
assert.ok(testObject.affectsConfiguration('window.title', URI.file(join('folder1', 'file1'))));
|
||||
assert.ok(testObject.affectsConfiguration('window.title', URI.file('folder2')));
|
||||
assert.ok(testObject.affectsConfiguration('window.title', URI.file(join('folder2', 'file2'))));
|
||||
assert.ok(testObject.affectsConfiguration('window.title', URI.file('folder3')));
|
||||
assert.ok(testObject.affectsConfiguration('window.title', URI.file(join('folder3', 'file3'))));
|
||||
assert.ok(testObject.affectsConfiguration('window.title', URI.file('file1')));
|
||||
assert.ok(testObject.affectsConfiguration('window.title', URI.file('file2')));
|
||||
assert.ok(testObject.affectsConfiguration('window.title', URI.file('file3')));
|
||||
|
||||
assert.ok(testObject.affectsConfiguration('window'));
|
||||
assert.ok(testObject.affectsConfiguration('window', URI.file('folder1')));
|
||||
assert.ok(testObject.affectsConfiguration('window', URI.file(join('folder1', 'file1'))));
|
||||
assert.ok(testObject.affectsConfiguration('window', URI.file('folder2')));
|
||||
assert.ok(testObject.affectsConfiguration('window', URI.file(join('folder2', 'file2'))));
|
||||
assert.ok(testObject.affectsConfiguration('window', URI.file('folder3')));
|
||||
assert.ok(testObject.affectsConfiguration('window', URI.file(join('folder3', 'file3'))));
|
||||
assert.ok(testObject.affectsConfiguration('window', URI.file('file1')));
|
||||
assert.ok(testObject.affectsConfiguration('window', URI.file('file2')));
|
||||
assert.ok(testObject.affectsConfiguration('window', URI.file('file3')));
|
||||
|
||||
assert.ok(testObject.affectsConfiguration('workbench.editor.enablePreview'));
|
||||
assert.ok(testObject.affectsConfiguration('workbench.editor.enablePreview', URI.file('folder2')));
|
||||
assert.ok(testObject.affectsConfiguration('workbench.editor.enablePreview', URI.file(join('folder2', 'file2'))));
|
||||
assert.ok(!testObject.affectsConfiguration('workbench.editor.enablePreview', URI.file('folder1')));
|
||||
assert.ok(!testObject.affectsConfiguration('workbench.editor.enablePreview', URI.file(join('folder1', 'file1'))));
|
||||
assert.ok(!testObject.affectsConfiguration('workbench.editor.enablePreview', URI.file('folder3')));
|
||||
|
||||
assert.ok(testObject.affectsConfiguration('workbench.editor'));
|
||||
assert.ok(testObject.affectsConfiguration('workbench.editor', URI.file('folder2')));
|
||||
assert.ok(testObject.affectsConfiguration('workbench.editor', URI.file(join('folder2', 'file2'))));
|
||||
assert.ok(!testObject.affectsConfiguration('workbench.editor', URI.file('folder1')));
|
||||
assert.ok(!testObject.affectsConfiguration('workbench.editor', URI.file(join('folder1', 'file1'))));
|
||||
assert.ok(!testObject.affectsConfiguration('workbench.editor', URI.file('folder3')));
|
||||
|
||||
assert.ok(testObject.affectsConfiguration('workbench'));
|
||||
assert.ok(testObject.affectsConfiguration('workbench', URI.file('folder2')));
|
||||
assert.ok(testObject.affectsConfiguration('workbench', URI.file(join('folder2', 'file2'))));
|
||||
assert.ok(!testObject.affectsConfiguration('workbench', URI.file('folder1')));
|
||||
assert.ok(!testObject.affectsConfiguration('workbench', URI.file('folder3')));
|
||||
|
||||
assert.ok(!testObject.affectsConfiguration('files'));
|
||||
assert.ok(!testObject.affectsConfiguration('files', URI.file('folder1')));
|
||||
assert.ok(!testObject.affectsConfiguration('files', URI.file(join('folder1', 'file1'))));
|
||||
assert.ok(!testObject.affectsConfiguration('files', URI.file('folder2')));
|
||||
assert.ok(!testObject.affectsConfiguration('files', URI.file(join('folder2', 'file2'))));
|
||||
assert.ok(!testObject.affectsConfiguration('files', URI.file('folder3')));
|
||||
assert.ok(!testObject.affectsConfiguration('files', URI.file(join('folder3', 'file3'))));
|
||||
});
|
||||
|
||||
});
|
||||
@@ -1,464 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import assert = require('assert');
|
||||
import os = require('os');
|
||||
import path = require('path');
|
||||
import fs = require('fs');
|
||||
import * as sinon from 'sinon';
|
||||
import URI from 'vs/base/common/uri';
|
||||
import { TPromise } from 'vs/base/common/winjs.base';
|
||||
import { Registry } from 'vs/platform/registry/common/platform';
|
||||
import { ParsedArgs } from 'vs/platform/environment/common/environment';
|
||||
import { EnvironmentService } from 'vs/platform/environment/node/environmentService';
|
||||
import { parseArgs } from 'vs/platform/environment/node/argv';
|
||||
import extfs = require('vs/base/node/extfs');
|
||||
import uuid = require('vs/base/common/uuid');
|
||||
import { IConfigurationRegistry, Extensions as ConfigurationExtensions } from 'vs/platform/configuration/common/configurationRegistry';
|
||||
import { WorkspaceServiceImpl, WorkspaceService } from 'vs/workbench/services/configuration/node/configuration';
|
||||
import { FileChangeType, FileChangesEvent } from 'vs/platform/files/common/files';
|
||||
|
||||
class SettingsTestEnvironmentService extends EnvironmentService {
|
||||
|
||||
constructor(args: ParsedArgs, _execPath: string, private customAppSettingsHome) {
|
||||
super(args, _execPath);
|
||||
}
|
||||
|
||||
get appSettingsPath(): string { return this.customAppSettingsHome; }
|
||||
}
|
||||
|
||||
suite('WorkspaceConfigurationService - Node', () => {
|
||||
|
||||
function createWorkspace(callback: (workspaceDir: string, globalSettingsFile: string, cleanUp: (callback: () => void) => void) => void): void {
|
||||
const id = uuid.generateUuid();
|
||||
const parentDir = path.join(os.tmpdir(), 'vsctests', id);
|
||||
const workspaceDir = path.join(parentDir, 'workspaceconfig', id);
|
||||
// {{SQL CARBON EDIT}}
|
||||
const workspaceSettingsDir = path.join(workspaceDir, '.sqlops');
|
||||
const globalSettingsFile = path.join(workspaceDir, 'config.json');
|
||||
|
||||
extfs.mkdirp(workspaceSettingsDir, 493, (error) => {
|
||||
callback(workspaceDir, globalSettingsFile, (callback) => extfs.del(parentDir, os.tmpdir(), () => { }, callback));
|
||||
});
|
||||
}
|
||||
|
||||
function createService(workspaceDir: string, globalSettingsFile: string): TPromise<WorkspaceService> {
|
||||
const environmentService = new SettingsTestEnvironmentService(parseArgs(process.argv), process.execPath, globalSettingsFile);
|
||||
const service = new WorkspaceServiceImpl(workspaceDir, environmentService, null);
|
||||
|
||||
return service.initialize().then(() => service);
|
||||
}
|
||||
|
||||
test('defaults', (done: () => void) => {
|
||||
interface ITestSetting {
|
||||
workspace: {
|
||||
service: {
|
||||
testSetting: string;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
const configurationRegistry = <IConfigurationRegistry>Registry.as(ConfigurationExtensions.Configuration);
|
||||
configurationRegistry.registerConfiguration({
|
||||
'id': '_test_workspace',
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'workspace.service.testSetting': {
|
||||
'type': 'string',
|
||||
'default': 'isSet'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
createWorkspace((workspaceDir, globalSettingsFile, cleanUp) => {
|
||||
return createService(workspaceDir, globalSettingsFile).then(service => {
|
||||
const config = service.getConfiguration<ITestSetting>();
|
||||
assert.equal(config.workspace.service.testSetting, 'isSet');
|
||||
|
||||
service.dispose();
|
||||
|
||||
cleanUp(done);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('globals', (done: () => void) => {
|
||||
createWorkspace((workspaceDir, globalSettingsFile, cleanUp) => {
|
||||
return createService(workspaceDir, globalSettingsFile).then(service => {
|
||||
fs.writeFileSync(globalSettingsFile, '{ "testworkbench.editor.tabs": true }');
|
||||
|
||||
service.reloadConfiguration().then(() => {
|
||||
const config = service.getConfiguration<{ testworkbench: { editor: { tabs: boolean } } }>();
|
||||
assert.equal(config.testworkbench.editor.tabs, true);
|
||||
|
||||
service.dispose();
|
||||
|
||||
cleanUp(done);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('reload configuration emits events', (done: () => void) => {
|
||||
createWorkspace((workspaceDir, globalSettingsFile, cleanUp) => {
|
||||
return createService(workspaceDir, globalSettingsFile).then(service => {
|
||||
fs.writeFileSync(globalSettingsFile, '{ "testworkbench.editor.tabs": true }');
|
||||
|
||||
return service.initialize().then(() => {
|
||||
service.onDidUpdateConfiguration(event => {
|
||||
const config = service.getConfiguration<{ testworkbench: { editor: { tabs: boolean } } }>();
|
||||
assert.equal(config.testworkbench.editor.tabs, false);
|
||||
|
||||
service.dispose();
|
||||
|
||||
cleanUp(done);
|
||||
});
|
||||
|
||||
fs.writeFileSync(globalSettingsFile, '{ "testworkbench.editor.tabs": false }');
|
||||
|
||||
// this has to trigger the event since the config changes
|
||||
service.reloadConfiguration().done();
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('globals override defaults', (done: () => void) => {
|
||||
interface ITestSetting {
|
||||
workspace: {
|
||||
service: {
|
||||
testSetting: string;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
const configurationRegistry = <IConfigurationRegistry>Registry.as(ConfigurationExtensions.Configuration);
|
||||
configurationRegistry.registerConfiguration({
|
||||
'id': '_test_workspace',
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'workspace.service.testSetting': {
|
||||
'type': 'string',
|
||||
'default': 'isSet'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
createWorkspace((workspaceDir, globalSettingsFile, cleanUp) => {
|
||||
return createService(workspaceDir, globalSettingsFile).then(service => {
|
||||
fs.writeFileSync(globalSettingsFile, '{ "workspace.service.testSetting": "isChanged" }');
|
||||
|
||||
service.reloadConfiguration().then(() => {
|
||||
const config = service.getConfiguration<ITestSetting>();
|
||||
assert.equal(config.workspace.service.testSetting, 'isChanged');
|
||||
|
||||
service.dispose();
|
||||
|
||||
cleanUp(done);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('workspace settings', (done: () => void) => {
|
||||
createWorkspace((workspaceDir, globalSettingsFile, cleanUp) => {
|
||||
return createService(workspaceDir, globalSettingsFile).then(service => {
|
||||
// {{SQL CARBON EDIT}}
|
||||
fs.writeFileSync(path.join(workspaceDir, '.sqlops', 'settings.json'), '{ "testworkbench.editor.icons": true }');
|
||||
|
||||
service.reloadConfiguration().then(() => {
|
||||
const config = service.getConfiguration<{ testworkbench: { editor: { icons: boolean } } }>();
|
||||
assert.equal(config.testworkbench.editor.icons, true);
|
||||
|
||||
service.dispose();
|
||||
|
||||
cleanUp(done);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('workspace settings override user settings', (done: () => void) => {
|
||||
createWorkspace((workspaceDir, globalSettingsFile, cleanUp) => {
|
||||
return createService(workspaceDir, globalSettingsFile).then(service => {
|
||||
fs.writeFileSync(globalSettingsFile, '{ "testworkbench.editor.icons": false, "testworkbench.other.setting": true }');
|
||||
// {{SQL CARBON EDIT}}
|
||||
fs.writeFileSync(path.join(workspaceDir, '.sqlops', 'settings.json'), '{ "testworkbench.editor.icons": true }');
|
||||
|
||||
service.reloadConfiguration().then(() => {
|
||||
const config = service.getConfiguration<{ testworkbench: { editor: { icons: boolean }, other: { setting: string } } }>();
|
||||
assert.equal(config.testworkbench.editor.icons, true);
|
||||
assert.equal(config.testworkbench.other.setting, true);
|
||||
|
||||
service.dispose();
|
||||
|
||||
cleanUp(done);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('workspace change triggers event', (done: () => void) => {
|
||||
createWorkspace((workspaceDir, globalSettingsFile, cleanUp) => {
|
||||
return createService(workspaceDir, globalSettingsFile).then(service => {
|
||||
service.onDidUpdateConfiguration(event => {
|
||||
const config = service.getConfiguration<{ testworkbench: { editor: { icons: boolean } } }>();
|
||||
assert.equal(config.testworkbench.editor.icons, true);
|
||||
assert.equal(service.getConfiguration<any>().testworkbench.editor.icons, true);
|
||||
|
||||
service.dispose();
|
||||
|
||||
cleanUp(done);
|
||||
});
|
||||
|
||||
// {{SQL CARBON EDIT}}
|
||||
const settingsFile = path.join(workspaceDir, '.sqlops', 'settings.json');
|
||||
fs.writeFileSync(settingsFile, '{ "testworkbench.editor.icons": true }');
|
||||
|
||||
const event = new FileChangesEvent([{ resource: URI.file(settingsFile), type: FileChangeType.ADDED }]);
|
||||
service.handleWorkspaceFileEvents(event);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('workspace reload should triggers event if content changed', (done: () => void) => {
|
||||
createWorkspace((workspaceDir, globalSettingsFile, cleanUp) => {
|
||||
return createService(workspaceDir, globalSettingsFile).then(service => {
|
||||
// {{SQL CARBON EDIT}}
|
||||
const settingsFile = path.join(workspaceDir, '.sqlops', 'settings.json');
|
||||
fs.writeFileSync(settingsFile, '{ "testworkbench.editor.icons": true }');
|
||||
|
||||
const target = sinon.stub();
|
||||
service.onDidUpdateConfiguration(event => target());
|
||||
|
||||
fs.writeFileSync(settingsFile, '{ "testworkbench.editor.icons": false }');
|
||||
|
||||
service.reloadConfiguration().done(() => {
|
||||
assert.ok(target.calledOnce);
|
||||
service.dispose();
|
||||
|
||||
cleanUp(done);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('workspace reload should not trigger event if nothing changed', (done: () => void) => {
|
||||
createWorkspace((workspaceDir, globalSettingsFile, cleanUp) => {
|
||||
return createService(workspaceDir, globalSettingsFile).then(service => {
|
||||
// {{SQL CARBON EDIT}}
|
||||
const settingsFile = path.join(workspaceDir, '.sqlops', 'settings.json');
|
||||
fs.writeFileSync(settingsFile, '{ "testworkbench.editor.icons": true }');
|
||||
|
||||
service.reloadConfiguration().done(() => {
|
||||
const target = sinon.stub();
|
||||
service.onDidUpdateConfiguration(event => target());
|
||||
|
||||
service.reloadConfiguration().done(() => {
|
||||
assert.ok(!target.called);
|
||||
service.dispose();
|
||||
|
||||
cleanUp(done);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('workspace reload should not trigger event if there is no model', (done: () => void) => {
|
||||
createWorkspace((workspaceDir, globalSettingsFile, cleanUp) => {
|
||||
return createService(workspaceDir, globalSettingsFile).then(service => {
|
||||
const target = sinon.stub();
|
||||
service.onDidUpdateConfiguration(event => target());
|
||||
service.reloadConfiguration().done(() => {
|
||||
assert.ok(!target.called);
|
||||
service.dispose();
|
||||
cleanUp(done);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
test('lookup', (done: () => void) => {
|
||||
const configurationRegistry = <IConfigurationRegistry>Registry.as(ConfigurationExtensions.Configuration);
|
||||
configurationRegistry.registerConfiguration({
|
||||
'id': '_test',
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'workspaceLookup.service.testSetting': {
|
||||
'type': 'string',
|
||||
'default': 'isSet'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
createWorkspace((workspaceDir, globalSettingsFile, cleanUp) => {
|
||||
return createService(workspaceDir, globalSettingsFile).then(service => {
|
||||
let res = service.lookup('something.missing');
|
||||
assert.ok(!res.default);
|
||||
assert.ok(!res.user);
|
||||
assert.ok(!res.workspace);
|
||||
assert.ok(!res.value);
|
||||
|
||||
res = service.lookup('workspaceLookup.service.testSetting');
|
||||
assert.equal(res.default, 'isSet');
|
||||
assert.equal(res.value, 'isSet');
|
||||
assert.ok(!res.user);
|
||||
assert.ok(!res.workspace);
|
||||
|
||||
fs.writeFileSync(globalSettingsFile, '{ "workspaceLookup.service.testSetting": true }');
|
||||
|
||||
return service.reloadConfiguration().then(() => {
|
||||
res = service.lookup('workspaceLookup.service.testSetting');
|
||||
assert.equal(res.default, 'isSet');
|
||||
assert.equal(res.user, true);
|
||||
assert.equal(res.value, true);
|
||||
assert.ok(!res.workspace);
|
||||
|
||||
// {{SQL CARBON EDIT}}
|
||||
const settingsFile = path.join(workspaceDir, '.sqlops', 'settings.json');
|
||||
fs.writeFileSync(settingsFile, '{ "workspaceLookup.service.testSetting": 55 }');
|
||||
|
||||
return service.reloadConfiguration().then(() => {
|
||||
res = service.lookup('workspaceLookup.service.testSetting');
|
||||
assert.equal(res.default, 'isSet');
|
||||
assert.equal(res.user, true);
|
||||
assert.equal(res.workspace, 55);
|
||||
assert.equal(res.value, 55);
|
||||
|
||||
service.dispose();
|
||||
|
||||
cleanUp(done);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('keys', (done: () => void) => {
|
||||
const configurationRegistry = <IConfigurationRegistry>Registry.as(ConfigurationExtensions.Configuration);
|
||||
configurationRegistry.registerConfiguration({
|
||||
'id': '_test',
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'workspaceLookup.service.testSetting': {
|
||||
'type': 'string',
|
||||
'default': 'isSet'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
function contains(array: string[], key: string): boolean {
|
||||
return array.indexOf(key) >= 0;
|
||||
}
|
||||
|
||||
createWorkspace((workspaceDir, globalSettingsFile, cleanUp) => {
|
||||
return createService(workspaceDir, globalSettingsFile).then(service => {
|
||||
let keys = service.keys();
|
||||
|
||||
assert.ok(!contains(keys.default, 'something.missing'));
|
||||
assert.ok(!contains(keys.user, 'something.missing'));
|
||||
assert.ok(!contains(keys.workspace, 'something.missing'));
|
||||
|
||||
assert.ok(contains(keys.default, 'workspaceLookup.service.testSetting'));
|
||||
assert.ok(!contains(keys.user, 'workspaceLookup.service.testSetting'));
|
||||
assert.ok(!contains(keys.workspace, 'workspaceLookup.service.testSetting'));
|
||||
|
||||
fs.writeFileSync(globalSettingsFile, '{ "workspaceLookup.service.testSetting": true }');
|
||||
|
||||
return service.reloadConfiguration().then(() => {
|
||||
keys = service.keys();
|
||||
|
||||
assert.ok(contains(keys.default, 'workspaceLookup.service.testSetting'));
|
||||
assert.ok(contains(keys.user, 'workspaceLookup.service.testSetting'));
|
||||
assert.ok(!contains(keys.workspace, 'workspaceLookup.service.testSetting'));
|
||||
|
||||
// {{SQL CARBON EDIT}}
|
||||
const settingsFile = path.join(workspaceDir, '.sqlops', 'settings.json');
|
||||
fs.writeFileSync(settingsFile, '{ "workspaceLookup.service.testSetting": 55 }');
|
||||
|
||||
return service.reloadConfiguration().then(() => {
|
||||
keys = service.keys();
|
||||
|
||||
assert.ok(contains(keys.default, 'workspaceLookup.service.testSetting'));
|
||||
assert.ok(contains(keys.user, 'workspaceLookup.service.testSetting'));
|
||||
assert.ok(contains(keys.workspace, 'workspaceLookup.service.testSetting'));
|
||||
|
||||
// {{SQL CARBON EDIT}}
|
||||
const settingsFile = path.join(workspaceDir, '.sqlops', 'tasks.json');
|
||||
fs.writeFileSync(settingsFile, '{ "workspaceLookup.service.taskTestSetting": 55 }');
|
||||
|
||||
return service.reloadConfiguration().then(() => {
|
||||
keys = service.keys();
|
||||
|
||||
assert.ok(!contains(keys.default, 'tasks.workspaceLookup.service.taskTestSetting'));
|
||||
assert.ok(!contains(keys.user, 'tasks.workspaceLookup.service.taskTestSetting'));
|
||||
assert.ok(contains(keys.workspace, 'tasks.workspaceLookup.service.taskTestSetting'));
|
||||
|
||||
service.dispose();
|
||||
|
||||
cleanUp(done);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('values', (done: () => void) => {
|
||||
const configurationRegistry = <IConfigurationRegistry>Registry.as(ConfigurationExtensions.Configuration);
|
||||
configurationRegistry.registerConfiguration({
|
||||
'id': '_test',
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'workspaceLookup.service.testSetting': {
|
||||
'type': 'string',
|
||||
'default': 'isSet'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
createWorkspace((workspaceDir, globalSettingsFile, cleanUp) => {
|
||||
return createService(workspaceDir, globalSettingsFile).then(service => {
|
||||
let values = service.values();
|
||||
let value = values['workspaceLookup.service.testSetting'];
|
||||
|
||||
assert.ok(value);
|
||||
assert.equal(value.default, 'isSet');
|
||||
|
||||
fs.writeFileSync(globalSettingsFile, '{ "workspaceLookup.service.testSetting": true }');
|
||||
|
||||
return service.reloadConfiguration().then(() => {
|
||||
values = service.values();
|
||||
value = values['workspaceLookup.service.testSetting'];
|
||||
|
||||
assert.ok(value);
|
||||
assert.equal(value.user, true);
|
||||
|
||||
// {{SQL CARBON EDIT}}
|
||||
const settingsFile = path.join(workspaceDir, '.sqlops', 'settings.json');
|
||||
fs.writeFileSync(settingsFile, '{ "workspaceLookup.service.testSetting": 55 }');
|
||||
|
||||
return service.reloadConfiguration().then(() => {
|
||||
values = service.values();
|
||||
value = values['workspaceLookup.service.testSetting'];
|
||||
|
||||
assert.ok(value);
|
||||
assert.equal(value.user, true);
|
||||
assert.equal(value.workspace, 55);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -18,33 +18,23 @@ import { parseArgs } from 'vs/platform/environment/node/argv';
|
||||
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
|
||||
import { EnvironmentService } from 'vs/platform/environment/node/environmentService';
|
||||
import extfs = require('vs/base/node/extfs');
|
||||
import { TestTextFileService, TestEditorGroupService, TestLifecycleService, TestBackupFileService } from 'vs/workbench/test/workbenchTestServices';
|
||||
import { TestTextFileService, TestTextResourceConfigurationService, workbenchInstantiationService } from 'vs/workbench/test/workbenchTestServices';
|
||||
import uuid = require('vs/base/common/uuid');
|
||||
import { IConfigurationRegistry, Extensions as ConfigurationExtensions } from 'vs/platform/configuration/common/configurationRegistry';
|
||||
import { WorkspaceService, EmptyWorkspaceServiceImpl, WorkspaceServiceImpl } from 'vs/workbench/services/configuration/node/configuration';
|
||||
import { WorkspaceService } from 'vs/workbench/services/configuration/node/configurationService';
|
||||
import { FileService } from 'vs/workbench/services/files/node/fileService';
|
||||
import { ConfigurationEditingService } from 'vs/workbench/services/configuration/node/configurationEditingService';
|
||||
import { ConfigurationTarget, ConfigurationEditingError, ConfigurationEditingErrorCode } from 'vs/workbench/services/configuration/common/configurationEditing';
|
||||
import { ConfigurationEditingService, ConfigurationEditingError, ConfigurationEditingErrorCode } from 'vs/workbench/services/configuration/node/configurationEditingService';
|
||||
import { IFileService } from 'vs/platform/files/common/files';
|
||||
import { WORKSPACE_STANDALONE_CONFIGURATIONS } from 'vs/workbench/services/configuration/common/configuration';
|
||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { IUntitledEditorService, UntitledEditorService } from 'vs/workbench/services/untitled/common/untitledEditorService';
|
||||
import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle';
|
||||
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||
import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils';
|
||||
import { IBackupFileService } from 'vs/workbench/services/backup/common/backup';
|
||||
import { IEditorGroupService } from 'vs/workbench/services/group/common/groupService';
|
||||
import { IConfigurationService, ConfigurationTarget } from 'vs/platform/configuration/common/configuration';
|
||||
import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock';
|
||||
import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles';
|
||||
import { ITextModelService } from 'vs/editor/common/services/resolverService';
|
||||
import { TextModelResolverService } from 'vs/workbench/services/textmodelResolver/common/textModelResolverService';
|
||||
import { IModeService } from 'vs/editor/common/services/modeService';
|
||||
import { ModeServiceImpl } from 'vs/editor/common/services/modeServiceImpl';
|
||||
import { IModelService } from 'vs/editor/common/services/modelService';
|
||||
import { ModelServiceImpl } from 'vs/editor/common/services/modelServiceImpl';
|
||||
import { IChoiceService, IMessageService } from 'vs/platform/message/common/message';
|
||||
import { IChoiceService } from 'vs/platform/message/common/message';
|
||||
import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService';
|
||||
import { IWorkspacesService } from 'vs/platform/workspaces/common/workspaces';
|
||||
import { IWindowConfiguration } from 'vs/platform/windows/common/windows';
|
||||
|
||||
class SettingsTestEnvironmentService extends EnvironmentService {
|
||||
|
||||
@@ -63,7 +53,6 @@ suite('ConfigurationEditingService', () => {
|
||||
let workspaceDir;
|
||||
let globalSettingsFile;
|
||||
let workspaceSettingsDir;
|
||||
let choiceService;
|
||||
|
||||
suiteSetup(() => {
|
||||
const configurationRegistry = <IConfigurationRegistry>Registry.as(ConfigurationExtensions.Configuration);
|
||||
@@ -114,34 +103,19 @@ suite('ConfigurationEditingService', () => {
|
||||
// Clear services if they are already created
|
||||
clearServices();
|
||||
|
||||
instantiationService = new TestInstantiationService();
|
||||
instantiationService = <TestInstantiationService>workbenchInstantiationService();
|
||||
const environmentService = new SettingsTestEnvironmentService(parseArgs(process.argv), process.execPath, globalSettingsFile);
|
||||
instantiationService.stub(IEnvironmentService, environmentService);
|
||||
const workspacesService = instantiationService.stub(IWorkspacesService, {});
|
||||
const workspaceService = noWorkspace ? new EmptyWorkspaceServiceImpl(environmentService) : new WorkspaceServiceImpl(workspaceDir, environmentService, workspacesService);
|
||||
const workspaceService = new WorkspaceService(environmentService, workspacesService);
|
||||
instantiationService.stub(IWorkspaceContextService, workspaceService);
|
||||
instantiationService.stub(IConfigurationService, workspaceService);
|
||||
instantiationService.stub(ILifecycleService, new TestLifecycleService());
|
||||
instantiationService.stub(IEditorGroupService, new TestEditorGroupService());
|
||||
instantiationService.stub(ITelemetryService, NullTelemetryService);
|
||||
instantiationService.stub(IModeService, ModeServiceImpl);
|
||||
instantiationService.stub(IModelService, instantiationService.createInstance(ModelServiceImpl));
|
||||
instantiationService.stub(IFileService, new FileService(workspaceService, new TestConfigurationService(), { disableWatcher: true }));
|
||||
instantiationService.stub(IUntitledEditorService, instantiationService.createInstance(UntitledEditorService));
|
||||
instantiationService.stub(ITextFileService, instantiationService.createInstance(TestTextFileService));
|
||||
instantiationService.stub(ITextModelService, <ITextModelService>instantiationService.createInstance(TextModelResolverService));
|
||||
instantiationService.stub(IBackupFileService, new TestBackupFileService());
|
||||
choiceService = instantiationService.stub(IChoiceService, {
|
||||
choose: (severity, message, options, cancelId): TPromise<number> => {
|
||||
return TPromise.as(cancelId);
|
||||
}
|
||||
return workspaceService.initialize(noWorkspace ? <IWindowConfiguration>{} : workspaceDir).then(() => {
|
||||
instantiationService.stub(IConfigurationService, workspaceService);
|
||||
instantiationService.stub(IFileService, new FileService(workspaceService, new TestTextResourceConfigurationService(), new TestConfigurationService(), { disableWatcher: true }));
|
||||
instantiationService.stub(ITextFileService, instantiationService.createInstance(TestTextFileService));
|
||||
instantiationService.stub(ITextModelService, <ITextModelService>instantiationService.createInstance(TextModelResolverService));
|
||||
testObject = instantiationService.createInstance(ConfigurationEditingService);
|
||||
});
|
||||
instantiationService.stub(IMessageService, {
|
||||
show: (severity, message, options, cancelId): void => { }
|
||||
});
|
||||
|
||||
testObject = instantiationService.createInstance(ConfigurationEditingService);
|
||||
return workspaceService.initialize();
|
||||
}
|
||||
|
||||
teardown(() => {
|
||||
@@ -226,7 +200,6 @@ suite('ConfigurationEditingService', () => {
|
||||
const contents = fs.readFileSync(globalSettingsFile).toString('utf8');
|
||||
const parsed = json.parse(contents);
|
||||
assert.equal(parsed['configurationEditing.service.testSetting'], 'value');
|
||||
assert.equal(instantiationService.get(IConfigurationService).lookup('configurationEditing.service.testSetting').value, 'value');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -238,10 +211,6 @@ suite('ConfigurationEditingService', () => {
|
||||
const parsed = json.parse(contents);
|
||||
assert.equal(parsed['configurationEditing.service.testSetting'], 'value');
|
||||
assert.equal(parsed['my.super.setting'], 'my.super.value');
|
||||
|
||||
const configurationService = instantiationService.get(IConfigurationService);
|
||||
assert.equal(configurationService.lookup('configurationEditing.service.testSetting').value, 'value');
|
||||
assert.equal(configurationService.lookup('my.super.setting').value, 'my.super.value');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -252,8 +221,6 @@ suite('ConfigurationEditingService', () => {
|
||||
const contents = fs.readFileSync(target).toString('utf8');
|
||||
const parsed = json.parse(contents);
|
||||
assert.equal(parsed['service.testSetting'], 'value');
|
||||
const configurationService = instantiationService.get(IConfigurationService);
|
||||
assert.equal(configurationService.lookup('tasks.service.testSetting').value, 'value');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -266,10 +233,6 @@ suite('ConfigurationEditingService', () => {
|
||||
const parsed = json.parse(contents);
|
||||
assert.equal(parsed['service.testSetting'], 'value');
|
||||
assert.equal(parsed['my.super.setting'], 'my.super.value');
|
||||
|
||||
const configurationService = instantiationService.get(IConfigurationService);
|
||||
assert.equal(configurationService.lookup('launch.service.testSetting').value, 'value');
|
||||
assert.equal(configurationService.lookup('launch.my.super.setting').value, 'my.super.value');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -0,0 +1,696 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import * as sinon from 'sinon';
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
import * as os from 'os';
|
||||
import URI from 'vs/base/common/uri';
|
||||
import { TPromise } from 'vs/base/common/winjs.base';
|
||||
import { Registry } from 'vs/platform/registry/common/platform';
|
||||
import { ParsedArgs, IEnvironmentService } from 'vs/platform/environment/common/environment';
|
||||
import { EnvironmentService } from 'vs/platform/environment/node/environmentService';
|
||||
import { parseArgs } from 'vs/platform/environment/node/argv';
|
||||
import extfs = require('vs/base/node/extfs');
|
||||
import uuid = require('vs/base/common/uuid');
|
||||
import { IConfigurationRegistry, Extensions as ConfigurationExtensions, ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry';
|
||||
import { WorkspaceService } from 'vs/workbench/services/configuration/node/configurationService';
|
||||
import { ConfigurationEditingErrorCode } from 'vs/workbench/services/configuration/node/configurationEditingService';
|
||||
import { FileChangeType, FileChangesEvent, IFileService } from 'vs/platform/files/common/files';
|
||||
import { IWorkspaceContextService, WorkbenchState, IWorkspaceFoldersChangeEvent } from 'vs/platform/workspace/common/workspace';
|
||||
import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { workbenchInstantiationService, TestTextResourceConfigurationService, TestTextFileService } from 'vs/workbench/test/workbenchTestServices';
|
||||
import { FileService } from 'vs/workbench/services/files/node/fileService';
|
||||
import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock';
|
||||
import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles';
|
||||
import { ITextModelService } from 'vs/editor/common/services/resolverService';
|
||||
import { TextModelResolverService } from 'vs/workbench/services/textmodelResolver/common/textModelResolverService';
|
||||
import { IJSONEditingService } from 'vs/workbench/services/configuration/common/jsonEditing';
|
||||
import { JSONEditingService } from 'vs/workbench/services/configuration/node/jsonEditingService';
|
||||
|
||||
class SettingsTestEnvironmentService extends EnvironmentService {
|
||||
|
||||
constructor(args: ParsedArgs, _execPath: string, private customAppSettingsHome) {
|
||||
super(args, _execPath);
|
||||
}
|
||||
|
||||
get appSettingsPath(): string { return this.customAppSettingsHome; }
|
||||
}
|
||||
|
||||
function setUpFolderWorkspace(folderName: string): TPromise<{ parentDir: string, folderDir: string }> {
|
||||
const id = uuid.generateUuid();
|
||||
const parentDir = path.join(os.tmpdir(), 'vsctests', id);
|
||||
return setUpFolder(folderName, parentDir).then(folderDir => ({ parentDir, folderDir }));
|
||||
}
|
||||
|
||||
function setUpFolder(folderName: string, parentDir: string): TPromise<string> {
|
||||
const folderDir = path.join(parentDir, folderName);
|
||||
// {{SQL CARBON EDIT}}
|
||||
const workspaceSettingsDir = path.join(folderDir, '.sqlops');
|
||||
return new TPromise((c, e) => {
|
||||
extfs.mkdirp(workspaceSettingsDir, 493, (error) => {
|
||||
if (error) {
|
||||
e(error);
|
||||
return null;
|
||||
}
|
||||
c(folderDir);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function setUpWorkspace(folders: string[]): TPromise<{ parentDir: string, configPath: string }> {
|
||||
|
||||
const id = uuid.generateUuid();
|
||||
const parentDir = path.join(os.tmpdir(), 'vsctests', id);
|
||||
|
||||
return createDir(parentDir)
|
||||
.then(() => {
|
||||
const configPath = path.join(parentDir, 'vsctests.code-workspace');
|
||||
const workspace = { folders: folders.map(path => ({ path })) };
|
||||
fs.writeFileSync(configPath, JSON.stringify(workspace, null, '\t'));
|
||||
|
||||
return TPromise.join(folders.map(folder => setUpFolder(folder, parentDir)))
|
||||
.then(() => ({ parentDir, configPath }));
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function createDir(dir: string): TPromise<void> {
|
||||
return new TPromise((c, e) => {
|
||||
extfs.mkdirp(dir, 493, (error) => {
|
||||
if (error) {
|
||||
e(error);
|
||||
return null;
|
||||
}
|
||||
c(null);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
suite('WorkspaceContextService - Folder', () => {
|
||||
|
||||
let workspaceName = `testWorkspace${uuid.generateUuid()}`, parentResource: string, workspaceResource: string, workspaceContextService: IWorkspaceContextService;
|
||||
|
||||
setup(() => {
|
||||
return setUpFolderWorkspace(workspaceName)
|
||||
.then(({ parentDir, folderDir }) => {
|
||||
parentResource = parentDir;
|
||||
workspaceResource = folderDir;
|
||||
const globalSettingsFile = path.join(parentDir, 'settings.json');
|
||||
const environmentService = new SettingsTestEnvironmentService(parseArgs(process.argv), process.execPath, globalSettingsFile);
|
||||
workspaceContextService = new WorkspaceService(environmentService, null);
|
||||
return (<WorkspaceService>workspaceContextService).initialize(folderDir);
|
||||
});
|
||||
});
|
||||
|
||||
teardown(done => {
|
||||
if (workspaceContextService) {
|
||||
(<WorkspaceService>workspaceContextService).dispose();
|
||||
}
|
||||
if (parentResource) {
|
||||
extfs.del(parentResource, os.tmpdir(), () => { }, done);
|
||||
}
|
||||
});
|
||||
|
||||
test('getWorkspace()', () => {
|
||||
const actual = workspaceContextService.getWorkspace();
|
||||
|
||||
assert.equal(actual.folders.length, 1);
|
||||
assert.equal(actual.folders[0].uri.fsPath, URI.file(workspaceResource).fsPath);
|
||||
assert.equal(actual.folders[0].name, workspaceName);
|
||||
assert.equal(actual.folders[0].index, 0);
|
||||
assert.ok(!actual.configuration);
|
||||
});
|
||||
|
||||
test('getWorkbenchState()', () => {
|
||||
const actual = workspaceContextService.getWorkbenchState();
|
||||
|
||||
assert.equal(actual, WorkbenchState.FOLDER);
|
||||
});
|
||||
|
||||
test('getWorkspaceFolder()', () => {
|
||||
const actual = workspaceContextService.getWorkspaceFolder(URI.file(path.join(workspaceResource, 'a')));
|
||||
|
||||
assert.equal(actual, workspaceContextService.getWorkspace().folders[0]);
|
||||
});
|
||||
|
||||
test('isCurrentWorkspace() => true', () => {
|
||||
assert.ok(workspaceContextService.isCurrentWorkspace(workspaceResource));
|
||||
});
|
||||
|
||||
test('isCurrentWorkspace() => false', () => {
|
||||
assert.ok(!workspaceContextService.isCurrentWorkspace(workspaceResource + 'abc'));
|
||||
});
|
||||
});
|
||||
|
||||
suite('WorkspaceContextService - Workspace', () => {
|
||||
|
||||
let parentResource: string, testObject: WorkspaceService;
|
||||
|
||||
setup(() => {
|
||||
return setUpWorkspace(['a', 'b'])
|
||||
.then(({ parentDir, configPath }) => {
|
||||
|
||||
parentResource = parentDir;
|
||||
|
||||
const environmentService = new SettingsTestEnvironmentService(parseArgs(process.argv), process.execPath, path.join(parentDir, 'settings.json'));
|
||||
const workspaceService = new WorkspaceService(environmentService, null);
|
||||
|
||||
const instantiationService = <TestInstantiationService>workbenchInstantiationService();
|
||||
instantiationService.stub(IWorkspaceContextService, workspaceService);
|
||||
instantiationService.stub(IConfigurationService, workspaceService);
|
||||
instantiationService.stub(IEnvironmentService, environmentService);
|
||||
|
||||
return workspaceService.initialize({ id: configPath, configPath }).then(() => {
|
||||
|
||||
instantiationService.stub(IFileService, new FileService(<IWorkspaceContextService>workspaceService, new TestTextResourceConfigurationService(), workspaceService, { disableWatcher: true }));
|
||||
instantiationService.stub(ITextFileService, instantiationService.createInstance(TestTextFileService));
|
||||
instantiationService.stub(ITextModelService, <ITextModelService>instantiationService.createInstance(TextModelResolverService));
|
||||
workspaceService.setInstantiationService(instantiationService);
|
||||
|
||||
testObject = workspaceService;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
teardown(done => {
|
||||
if (testObject) {
|
||||
(<WorkspaceService>testObject).dispose();
|
||||
}
|
||||
if (parentResource) {
|
||||
extfs.del(parentResource, os.tmpdir(), () => { }, done);
|
||||
}
|
||||
});
|
||||
|
||||
test('workspace folders', () => {
|
||||
const actual = testObject.getWorkspace().folders;
|
||||
|
||||
assert.equal(actual.length, 2);
|
||||
assert.equal(path.basename(actual[0].uri.fsPath), 'a');
|
||||
assert.equal(path.basename(actual[1].uri.fsPath), 'b');
|
||||
});
|
||||
|
||||
test('add folders', () => {
|
||||
const workspaceDir = path.dirname(testObject.getWorkspace().folders[0].uri.fsPath);
|
||||
return testObject.addFolders([{ uri: URI.file(path.join(workspaceDir, 'd')) }, { uri: URI.file(path.join(workspaceDir, 'c')) }])
|
||||
.then(() => {
|
||||
const actual = testObject.getWorkspace().folders;
|
||||
|
||||
assert.equal(actual.length, 4);
|
||||
assert.equal(path.basename(actual[0].uri.fsPath), 'a');
|
||||
assert.equal(path.basename(actual[1].uri.fsPath), 'b');
|
||||
assert.equal(path.basename(actual[2].uri.fsPath), 'd');
|
||||
assert.equal(path.basename(actual[3].uri.fsPath), 'c');
|
||||
});
|
||||
});
|
||||
|
||||
test('add folders (with name)', () => {
|
||||
const workspaceDir = path.dirname(testObject.getWorkspace().folders[0].uri.fsPath);
|
||||
return testObject.addFolders([{ uri: URI.file(path.join(workspaceDir, 'd')), name: 'DDD' }, { uri: URI.file(path.join(workspaceDir, 'c')), name: 'CCC' }])
|
||||
.then(() => {
|
||||
const actual = testObject.getWorkspace().folders;
|
||||
|
||||
assert.equal(actual.length, 4);
|
||||
assert.equal(path.basename(actual[0].uri.fsPath), 'a');
|
||||
assert.equal(path.basename(actual[1].uri.fsPath), 'b');
|
||||
assert.equal(path.basename(actual[2].uri.fsPath), 'd');
|
||||
assert.equal(path.basename(actual[3].uri.fsPath), 'c');
|
||||
assert.equal(actual[2].name, 'DDD');
|
||||
assert.equal(actual[3].name, 'CCC');
|
||||
});
|
||||
});
|
||||
|
||||
test('add folders triggers change event', () => {
|
||||
const target = sinon.spy();
|
||||
testObject.onDidChangeWorkspaceFolders(target);
|
||||
const workspaceDir = path.dirname(testObject.getWorkspace().folders[0].uri.fsPath);
|
||||
const addedFolders = [{ uri: URI.file(path.join(workspaceDir, 'd')) }, { uri: URI.file(path.join(workspaceDir, 'c')) }];
|
||||
return testObject.addFolders(addedFolders)
|
||||
.then(() => {
|
||||
assert.ok(target.calledOnce);
|
||||
const actual = <IWorkspaceFoldersChangeEvent>target.args[0][0];
|
||||
assert.deepEqual(actual.added.map(r => r.uri.toString()), addedFolders.map(a => a.uri.toString()));
|
||||
assert.deepEqual(actual.removed, []);
|
||||
assert.deepEqual(actual.changed, []);
|
||||
});
|
||||
});
|
||||
|
||||
test('remove folders', () => {
|
||||
return testObject.removeFolders([testObject.getWorkspace().folders[0].uri])
|
||||
.then(() => {
|
||||
const actual = testObject.getWorkspace().folders;
|
||||
assert.equal(actual.length, 1);
|
||||
assert.equal(path.basename(actual[0].uri.fsPath), 'b');
|
||||
});
|
||||
});
|
||||
|
||||
test('remove folders triggers change event', () => {
|
||||
const target = sinon.spy();
|
||||
testObject.onDidChangeWorkspaceFolders(target);
|
||||
const removedFolder = testObject.getWorkspace().folders[0];
|
||||
return testObject.removeFolders([removedFolder.uri])
|
||||
.then(() => {
|
||||
assert.ok(target.calledOnce);
|
||||
const actual = <IWorkspaceFoldersChangeEvent>target.args[0][0];
|
||||
assert.deepEqual(actual.added, []);
|
||||
assert.deepEqual(actual.removed.map(r => r.uri.toString()), [removedFolder.uri.toString()]);
|
||||
assert.deepEqual(actual.changed.map(c => c.uri.toString()), [testObject.getWorkspace().folders[0].uri.toString()]);
|
||||
});
|
||||
});
|
||||
|
||||
test('reorder folders trigger change event', () => {
|
||||
const target = sinon.spy();
|
||||
testObject.onDidChangeWorkspaceFolders(target);
|
||||
const workspace = { folders: [{ path: testObject.getWorkspace().folders[1].uri.fsPath }, { path: testObject.getWorkspace().folders[0].uri.fsPath }] };
|
||||
fs.writeFileSync(testObject.getWorkspace().configuration.fsPath, JSON.stringify(workspace, null, '\t'));
|
||||
return testObject.reloadConfiguration()
|
||||
.then(() => {
|
||||
assert.ok(target.calledOnce);
|
||||
const actual = <IWorkspaceFoldersChangeEvent>target.args[0][0];
|
||||
assert.deepEqual(actual.added, []);
|
||||
assert.deepEqual(actual.removed, []);
|
||||
assert.deepEqual(actual.changed.map(c => c.uri.toString()), testObject.getWorkspace().folders.map(f => f.uri.toString()).reverse());
|
||||
});
|
||||
});
|
||||
|
||||
test('rename folders trigger change event', () => {
|
||||
const target = sinon.spy();
|
||||
testObject.onDidChangeWorkspaceFolders(target);
|
||||
const workspace = { folders: [{ path: testObject.getWorkspace().folders[0].uri.fsPath, name: '1' }, { path: testObject.getWorkspace().folders[1].uri.fsPath }] };
|
||||
fs.writeFileSync(testObject.getWorkspace().configuration.fsPath, JSON.stringify(workspace, null, '\t'));
|
||||
return testObject.reloadConfiguration()
|
||||
.then(() => {
|
||||
assert.ok(target.calledOnce);
|
||||
const actual = <IWorkspaceFoldersChangeEvent>target.args[0][0];
|
||||
assert.deepEqual(actual.added, []);
|
||||
assert.deepEqual(actual.removed, []);
|
||||
assert.deepEqual(actual.changed.map(c => c.uri.toString()), [testObject.getWorkspace().folders[0].uri.toString()]);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
suite('WorkspaceConfigurationService - Folder', () => {
|
||||
|
||||
let workspaceName = `testWorkspace${uuid.generateUuid()}`, parentResource: string, workspaceDir: string, testObject: IConfigurationService, globalSettingsFile: string;
|
||||
|
||||
suiteSetup(() => {
|
||||
const configurationRegistry = <IConfigurationRegistry>Registry.as(ConfigurationExtensions.Configuration);
|
||||
configurationRegistry.registerConfiguration({
|
||||
'id': '_test',
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'configurationService.folder.testSetting': {
|
||||
'type': 'string',
|
||||
'default': 'isSet'
|
||||
},
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
setup(() => {
|
||||
return setUpFolderWorkspace(workspaceName)
|
||||
.then(({ parentDir, folderDir }) => {
|
||||
|
||||
parentResource = parentDir;
|
||||
workspaceDir = folderDir;
|
||||
globalSettingsFile = path.join(parentDir, 'settings.json');
|
||||
|
||||
const instantiationService = <TestInstantiationService>workbenchInstantiationService();
|
||||
const environmentService = new SettingsTestEnvironmentService(parseArgs(process.argv), process.execPath, globalSettingsFile);
|
||||
const workspaceService = new WorkspaceService(environmentService, null);
|
||||
instantiationService.stub(IWorkspaceContextService, workspaceService);
|
||||
instantiationService.stub(IConfigurationService, workspaceService);
|
||||
instantiationService.stub(IEnvironmentService, environmentService);
|
||||
|
||||
return workspaceService.initialize(folderDir).then(() => {
|
||||
instantiationService.stub(IFileService, new FileService(<IWorkspaceContextService>workspaceService, new TestTextResourceConfigurationService(), workspaceService, { disableWatcher: true }));
|
||||
instantiationService.stub(ITextFileService, instantiationService.createInstance(TestTextFileService));
|
||||
instantiationService.stub(ITextModelService, <ITextModelService>instantiationService.createInstance(TextModelResolverService));
|
||||
workspaceService.setInstantiationService(instantiationService);
|
||||
testObject = workspaceService;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
teardown(done => {
|
||||
if (testObject) {
|
||||
(<WorkspaceService>testObject).dispose();
|
||||
}
|
||||
if (parentResource) {
|
||||
extfs.del(parentResource, os.tmpdir(), () => { }, done);
|
||||
}
|
||||
});
|
||||
|
||||
test('defaults', () => {
|
||||
assert.deepEqual(testObject.getValue('configurationService'), { 'folder': { 'testSetting': 'isSet' } });
|
||||
});
|
||||
|
||||
test('globals override defaults', () => {
|
||||
fs.writeFileSync(globalSettingsFile, '{ "configurationService.folder.testSetting": "userValue" }');
|
||||
return testObject.reloadConfiguration()
|
||||
.then(() => assert.equal(testObject.getValue('configurationService.folder.testSetting'), 'userValue'));
|
||||
});
|
||||
|
||||
test('globals', () => {
|
||||
fs.writeFileSync(globalSettingsFile, '{ "testworkbench.editor.tabs": true }');
|
||||
return testObject.reloadConfiguration()
|
||||
.then(() => assert.equal(testObject.getValue('testworkbench.editor.tabs'), true));
|
||||
});
|
||||
|
||||
test('workspace settings', () => {
|
||||
// {{SQL CARBON EDIT}}
|
||||
fs.writeFileSync(path.join(workspaceDir, '.sqlops', 'settings.json'), '{ "testworkbench.editor.icons": true }');
|
||||
return testObject.reloadConfiguration()
|
||||
.then(() => assert.equal(testObject.getValue('testworkbench.editor.icons'), true));
|
||||
});
|
||||
|
||||
test('workspace settings override user settings', () => {
|
||||
fs.writeFileSync(globalSettingsFile, '{ "configurationService.folder.testSetting": "userValue" }');
|
||||
// {{SQL CARBON EDIT}}
|
||||
fs.writeFileSync(path.join(workspaceDir, '.sqlops', 'settings.json'), '{ "configurationService.folder.testSetting": "workspaceValue" }');
|
||||
return testObject.reloadConfiguration()
|
||||
.then(() => assert.equal(testObject.getValue('configurationService.folder.testSetting'), 'workspaceValue'));
|
||||
});
|
||||
|
||||
test('workspace change triggers event', () => {
|
||||
// {{SQL CARBON EDIT}}
|
||||
const settingsFile = path.join(workspaceDir, '.sqlops', 'settings.json');
|
||||
fs.writeFileSync(settingsFile, '{ "configurationService.folder.testSetting": "workspaceValue" }');
|
||||
const event = new FileChangesEvent([{ resource: URI.file(settingsFile), type: FileChangeType.ADDED }]);
|
||||
const target = sinon.spy();
|
||||
testObject.onDidChangeConfiguration(target);
|
||||
return (<WorkspaceService>testObject).handleWorkspaceFileEvents(event)
|
||||
.then(() => {
|
||||
assert.equal(testObject.getValue('configurationService.folder.testSetting'), 'workspaceValue');
|
||||
assert.ok(target.called);
|
||||
});
|
||||
});
|
||||
|
||||
test('reload configuration emits events after global configuraiton changes', () => {
|
||||
fs.writeFileSync(globalSettingsFile, '{ "testworkbench.editor.tabs": true }');
|
||||
const target = sinon.spy();
|
||||
testObject.onDidChangeConfiguration(target);
|
||||
return testObject.reloadConfiguration().then(() => assert.ok(target.called));
|
||||
});
|
||||
|
||||
test('reload configuration emits events after workspace configuraiton changes', () => {
|
||||
// {{SQL CARBON EDIT}}
|
||||
fs.writeFileSync(path.join(workspaceDir, '.sqlops', 'settings.json'), '{ "configurationService.folder.testSetting": "workspaceValue" }');
|
||||
const target = sinon.spy();
|
||||
testObject.onDidChangeConfiguration(target);
|
||||
return testObject.reloadConfiguration().then(() => assert.ok(target.called));
|
||||
});
|
||||
|
||||
test('reload configuration should not emit event if no changes', () => {
|
||||
fs.writeFileSync(globalSettingsFile, '{ "testworkbench.editor.tabs": true }');
|
||||
// {{SQL CARBON EDIT}}
|
||||
fs.writeFileSync(path.join(workspaceDir, '.sqlops', 'settings.json'), '{ "configurationService.folder.testSetting": "workspaceValue" }');
|
||||
return testObject.reloadConfiguration()
|
||||
.then(() => {
|
||||
const target = sinon.spy();
|
||||
testObject.onDidChangeConfiguration(() => { target(); });
|
||||
return testObject.reloadConfiguration()
|
||||
.then(() => assert.ok(!target.called));
|
||||
});
|
||||
});
|
||||
|
||||
test('inspect', () => {
|
||||
let actual = testObject.inspect('something.missing');
|
||||
assert.equal(actual.default, void 0);
|
||||
assert.equal(actual.user, void 0);
|
||||
assert.equal(actual.workspace, void 0);
|
||||
assert.equal(actual.workspaceFolder, void 0);
|
||||
assert.equal(actual.value, void 0);
|
||||
|
||||
actual = testObject.inspect('configurationService.folder.testSetting');
|
||||
assert.equal(actual.default, 'isSet');
|
||||
assert.equal(actual.user, void 0);
|
||||
assert.equal(actual.workspace, void 0);
|
||||
assert.equal(actual.workspaceFolder, void 0);
|
||||
assert.equal(actual.value, 'isSet');
|
||||
|
||||
fs.writeFileSync(globalSettingsFile, '{ "configurationService.folder.testSetting": "userValue" }');
|
||||
return testObject.reloadConfiguration()
|
||||
.then(() => {
|
||||
actual = testObject.inspect('configurationService.folder.testSetting');
|
||||
assert.equal(actual.default, 'isSet');
|
||||
assert.equal(actual.user, 'userValue');
|
||||
assert.equal(actual.workspace, void 0);
|
||||
assert.equal(actual.workspaceFolder, void 0);
|
||||
assert.equal(actual.value, 'userValue');
|
||||
|
||||
// {{SQL CARBON EDIT}}
|
||||
fs.writeFileSync(path.join(workspaceDir, '.sqlops', 'settings.json'), '{ "configurationService.folder.testSetting": "workspaceValue" }');
|
||||
|
||||
return testObject.reloadConfiguration()
|
||||
.then(() => {
|
||||
actual = testObject.inspect('configurationService.folder.testSetting');
|
||||
assert.equal(actual.default, 'isSet');
|
||||
assert.equal(actual.user, 'userValue');
|
||||
assert.equal(actual.workspace, 'workspaceValue');
|
||||
assert.equal(actual.workspaceFolder, void 0);
|
||||
assert.equal(actual.value, 'workspaceValue');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('keys', () => {
|
||||
let actual = testObject.keys();
|
||||
assert.ok(actual.default.indexOf('configurationService.folder.testSetting') !== -1);
|
||||
assert.deepEqual(actual.user, []);
|
||||
assert.deepEqual(actual.workspace, []);
|
||||
assert.deepEqual(actual.workspaceFolder, []);
|
||||
|
||||
fs.writeFileSync(globalSettingsFile, '{ "configurationService.folder.testSetting": "userValue" }');
|
||||
return testObject.reloadConfiguration()
|
||||
.then(() => {
|
||||
actual = testObject.keys();
|
||||
assert.ok(actual.default.indexOf('configurationService.folder.testSetting') !== -1);
|
||||
assert.deepEqual(actual.user, ['configurationService.folder.testSetting']);
|
||||
assert.deepEqual(actual.workspace, []);
|
||||
assert.deepEqual(actual.workspaceFolder, []);
|
||||
|
||||
// {{SQL CARBON EDIT}}
|
||||
fs.writeFileSync(path.join(workspaceDir, '.sqlops', 'settings.json'), '{ "configurationService.folder.testSetting": "workspaceValue" }');
|
||||
|
||||
return testObject.reloadConfiguration()
|
||||
.then(() => {
|
||||
actual = testObject.keys();
|
||||
assert.ok(actual.default.indexOf('configurationService.folder.testSetting') !== -1);
|
||||
assert.deepEqual(actual.user, ['configurationService.folder.testSetting']);
|
||||
assert.deepEqual(actual.workspace, ['configurationService.folder.testSetting']);
|
||||
assert.deepEqual(actual.workspaceFolder, []);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('update user configuration', () => {
|
||||
return testObject.updateValue('configurationService.folder.testSetting', 'value', ConfigurationTarget.USER)
|
||||
.then(() => assert.equal(testObject.getValue('configurationService.folder.testSetting'), 'value'));
|
||||
});
|
||||
|
||||
test('update workspace configuration', () => {
|
||||
return testObject.updateValue('tasks.service.testSetting', 'value', ConfigurationTarget.WORKSPACE)
|
||||
.then(() => assert.equal(testObject.getValue('tasks.service.testSetting'), 'value'));
|
||||
});
|
||||
|
||||
test('update tasks configuration', () => {
|
||||
return testObject.updateValue('tasks', { 'version': '1.0.0', tasks: [{ 'taskName': 'myTask' }] }, ConfigurationTarget.WORKSPACE)
|
||||
.then(() => assert.deepEqual(testObject.getValue('tasks'), { 'version': '1.0.0', tasks: [{ 'taskName': 'myTask' }] }));
|
||||
});
|
||||
|
||||
test('update user configuration should trigger change event before promise is resolve', () => {
|
||||
const target = sinon.spy();
|
||||
testObject.onDidChangeConfiguration(target);
|
||||
return testObject.updateValue('configurationService.folder.testSetting', 'value', ConfigurationTarget.USER)
|
||||
.then(() => assert.ok(target.called));
|
||||
});
|
||||
|
||||
test('update workspace configuration should trigger change event before promise is resolve', () => {
|
||||
const target = sinon.spy();
|
||||
testObject.onDidChangeConfiguration(target);
|
||||
return testObject.updateValue('configurationService.folder.testSetting', 'value', ConfigurationTarget.WORKSPACE)
|
||||
.then(() => assert.ok(target.called));
|
||||
});
|
||||
|
||||
test('update task configuration should trigger change event before promise is resolve', () => {
|
||||
const target = sinon.spy();
|
||||
testObject.onDidChangeConfiguration(target);
|
||||
return testObject.updateValue('tasks', { 'version': '1.0.0', tasks: [{ 'taskName': 'myTask' }] }, ConfigurationTarget.WORKSPACE)
|
||||
.then(() => assert.ok(target.called));
|
||||
});
|
||||
|
||||
test('initialize with different folder triggers configuration event if there are changes', () => {
|
||||
return setUpFolderWorkspace(`testWorkspace${uuid.generateUuid()}`)
|
||||
.then(({ folderDir }) => {
|
||||
const target = sinon.spy();
|
||||
testObject.onDidChangeConfiguration(target);
|
||||
|
||||
// {{SQL CARBON EDIT}}
|
||||
fs.writeFileSync(path.join(folderDir, '.sqlops', 'settings.json'), '{ "configurationService.folder.testSetting": "workspaceValue2" }');
|
||||
return (<WorkspaceService>testObject).initialize(folderDir)
|
||||
.then(() => {
|
||||
assert.equal(testObject.getValue('configurationService.folder.testSetting'), 'workspaceValue2');
|
||||
assert.ok(target.called);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('initialize with different folder triggers configuration event if there are no changes', () => {
|
||||
fs.writeFileSync(globalSettingsFile, '{ "configurationService.folder.testSetting": "workspaceValue2" }');
|
||||
return testObject.reloadConfiguration()
|
||||
.then(() => setUpFolderWorkspace(`testWorkspace${uuid.generateUuid()}`))
|
||||
.then(({ folderDir }) => {
|
||||
const target = sinon.spy();
|
||||
testObject.onDidChangeConfiguration(() => target());
|
||||
// {{SQL CARBON EDIT}}
|
||||
fs.writeFileSync(path.join(folderDir, '.sqlops', 'settings.json'), '{ "configurationService.folder.testSetting": "workspaceValue2" }');
|
||||
return (<WorkspaceService>testObject).initialize(folderDir)
|
||||
.then(() => {
|
||||
assert.equal(testObject.getValue('configurationService.folder.testSetting'), 'workspaceValue2');
|
||||
assert.ok(!target.called);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
suite('WorkspaceConfigurationService - Update (Multiroot)', () => {
|
||||
|
||||
let parentResource: string, workspaceContextService: IWorkspaceContextService, jsonEditingServce: IJSONEditingService, testObject: IConfigurationService;
|
||||
|
||||
suiteSetup(() => {
|
||||
const configurationRegistry = <IConfigurationRegistry>Registry.as(ConfigurationExtensions.Configuration);
|
||||
configurationRegistry.registerConfiguration({
|
||||
'id': '_test',
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'configurationService.workspace.testSetting': {
|
||||
'type': 'string',
|
||||
'default': 'isSet'
|
||||
},
|
||||
'configurationService.workspace.testResourceSetting': {
|
||||
'type': 'string',
|
||||
'default': 'isSet',
|
||||
scope: ConfigurationScope.RESOURCE
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
setup(() => {
|
||||
return setUpWorkspace(['1', '2'])
|
||||
.then(({ parentDir, configPath }) => {
|
||||
|
||||
parentResource = parentDir;
|
||||
|
||||
const environmentService = new SettingsTestEnvironmentService(parseArgs(process.argv), process.execPath, path.join(parentDir, 'settings.json'));
|
||||
const workspaceService = new WorkspaceService(environmentService, null);
|
||||
|
||||
const instantiationService = <TestInstantiationService>workbenchInstantiationService();
|
||||
instantiationService.stub(IWorkspaceContextService, workspaceService);
|
||||
instantiationService.stub(IConfigurationService, workspaceService);
|
||||
instantiationService.stub(IEnvironmentService, environmentService);
|
||||
|
||||
return workspaceService.initialize({ id: configPath, configPath }).then(() => {
|
||||
|
||||
instantiationService.stub(IFileService, new FileService(<IWorkspaceContextService>workspaceService, new TestTextResourceConfigurationService(), workspaceService, { disableWatcher: true }));
|
||||
instantiationService.stub(ITextFileService, instantiationService.createInstance(TestTextFileService));
|
||||
instantiationService.stub(ITextModelService, <ITextModelService>instantiationService.createInstance(TextModelResolverService));
|
||||
workspaceService.setInstantiationService(instantiationService);
|
||||
|
||||
workspaceContextService = workspaceService;
|
||||
jsonEditingServce = instantiationService.createInstance(JSONEditingService);
|
||||
testObject = workspaceService;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
teardown(done => {
|
||||
if (testObject) {
|
||||
(<WorkspaceService>testObject).dispose();
|
||||
}
|
||||
if (parentResource) {
|
||||
extfs.del(parentResource, os.tmpdir(), () => { }, done);
|
||||
}
|
||||
});
|
||||
|
||||
test('update user configuration', () => {
|
||||
return testObject.updateValue('configurationService.workspace.testSetting', 'userValue', ConfigurationTarget.USER)
|
||||
.then(() => assert.equal(testObject.getValue('configurationService.workspace.testSetting'), 'userValue'));
|
||||
});
|
||||
|
||||
test('update user configuration should trigger change event before promise is resolve', () => {
|
||||
const target = sinon.spy();
|
||||
testObject.onDidChangeConfiguration(target);
|
||||
return testObject.updateValue('configurationService.workspace.testSetting', 'userValue', ConfigurationTarget.USER)
|
||||
.then(() => assert.ok(target.called));
|
||||
});
|
||||
|
||||
test('update workspace configuration', () => {
|
||||
return testObject.updateValue('configurationService.workspace.testSetting', 'workspaceValue', ConfigurationTarget.WORKSPACE)
|
||||
.then(() => assert.equal(testObject.getValue('configurationService.workspace.testSetting'), 'workspaceValue'));
|
||||
});
|
||||
|
||||
test('update workspace configuration should trigger change event before promise is resolve', () => {
|
||||
const target = sinon.spy();
|
||||
testObject.onDidChangeConfiguration(target);
|
||||
return testObject.updateValue('configurationService.workspace.testSetting', 'workspaceValue', ConfigurationTarget.WORKSPACE)
|
||||
.then(() => assert.ok(target.called));
|
||||
});
|
||||
|
||||
test('update workspace folder configuration', () => {
|
||||
const workspace = workspaceContextService.getWorkspace();
|
||||
return testObject.updateValue('configurationService.workspace.testResourceSetting', 'workspaceFolderValue', { resource: workspace.folders[0].uri }, ConfigurationTarget.WORKSPACE_FOLDER)
|
||||
.then(() => assert.equal(testObject.getValue('configurationService.workspace.testResourceSetting', { resource: workspace.folders[0].uri }), 'workspaceFolderValue'));
|
||||
});
|
||||
|
||||
test('update workspace folder configuration should trigger change event before promise is resolve', () => {
|
||||
const workspace = workspaceContextService.getWorkspace();
|
||||
const target = sinon.spy();
|
||||
testObject.onDidChangeConfiguration(target);
|
||||
return testObject.updateValue('configurationService.workspace.testResourceSetting', 'workspaceFolderValue', { resource: workspace.folders[0].uri }, ConfigurationTarget.WORKSPACE_FOLDER)
|
||||
.then(() => assert.ok(target.called));
|
||||
});
|
||||
|
||||
test('update tasks configuration in a folder', () => {
|
||||
const workspace = workspaceContextService.getWorkspace();
|
||||
return testObject.updateValue('tasks', { 'version': '1.0.0', tasks: [{ 'taskName': 'myTask' }] }, { resource: workspace.folders[0].uri }, ConfigurationTarget.WORKSPACE_FOLDER)
|
||||
.then(() => assert.deepEqual(testObject.getValue('tasks', { resource: workspace.folders[0].uri }), { 'version': '1.0.0', tasks: [{ 'taskName': 'myTask' }] }));
|
||||
});
|
||||
|
||||
test('update tasks configuration in a workspace is not supported', () => {
|
||||
const workspace = workspaceContextService.getWorkspace();
|
||||
return testObject.updateValue('tasks', { 'version': '1.0.0', tasks: [{ 'taskName': 'myTask' }] }, { resource: workspace.folders[0].uri }, ConfigurationTarget.WORKSPACE, true)
|
||||
.then(() => assert.fail('Should not be supported'), (e) => assert.equal(e.code, ConfigurationEditingErrorCode.ERROR_INVALID_WORKSPACE_TARGET));
|
||||
});
|
||||
|
||||
test('update launch configuration in a workspace is not supported', () => {
|
||||
const workspace = workspaceContextService.getWorkspace();
|
||||
return testObject.updateValue('launch', { 'version': '1.0.0', configurations: [{ 'name': 'myLaunch' }] }, { resource: workspace.folders[0].uri }, ConfigurationTarget.WORKSPACE, true)
|
||||
.then(() => assert.fail('Should not be supported'), (e) => assert.equal(e.code, ConfigurationEditingErrorCode.ERROR_INVALID_WORKSPACE_TARGET));
|
||||
});
|
||||
|
||||
test('task configurations are not read from workspace', () => {
|
||||
return jsonEditingServce.write(workspaceContextService.getWorkspace().configuration, { key: 'tasks', value: { 'version': '1.0' } }, true)
|
||||
.then(() => testObject.reloadConfiguration())
|
||||
.then(() => {
|
||||
const actual = testObject.inspect('tasks.version');
|
||||
assert.equal(actual.workspace, void 0);
|
||||
});
|
||||
});
|
||||
|
||||
test('launch configurations are not read from workspace', () => {
|
||||
return jsonEditingServce.write(workspaceContextService.getWorkspace().configuration, { key: 'launch', value: { 'version': '1.0' } }, true)
|
||||
.then(() => testObject.reloadConfiguration())
|
||||
.then(() => {
|
||||
const actual = testObject.inspect('launch.version');
|
||||
assert.equal(actual.workspace, void 0);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user