diff --git a/extensions/vscode-api-tests/src/workspace.test.ts b/extensions/vscode-api-tests/src/workspace.test.ts index 91bfa9cf195..f5ef7c24c5e 100644 --- a/extensions/vscode-api-tests/src/workspace.test.ts +++ b/extensions/vscode-api-tests/src/workspace.test.ts @@ -15,7 +15,7 @@ suite('workspace-namespace', () => { teardown(cleanUp); - test('default configuration', () => { + test('configuration, defaults', () => { const config = workspace.getConfiguration('farboo'); assert.ok(config.has('config0')); @@ -26,6 +26,11 @@ suite('workspace-namespace', () => { assert.equal(config.get('nested.config2'), 'Das Pferd frisst kein Reis.'); }); + test('configuration, getConfig/value', () => { + const value = workspace.getConfiguration('farboo.config0'); + assert.equal(Object.keys(value).length, 2); + }); + test('textDocuments', () => { assert.ok(Array.isArray(workspace.textDocuments)); assert.throws(() => workspace.textDocuments = null); diff --git a/src/vs/workbench/api/node/extHostConfiguration.ts b/src/vs/workbench/api/node/extHostConfiguration.ts index 3249043416f..429746272f7 100644 --- a/src/vs/workbench/api/node/extHostConfiguration.ts +++ b/src/vs/workbench/api/node/extHostConfiguration.ts @@ -41,9 +41,14 @@ export class ExtHostConfiguration { ? ExtHostConfiguration._lookUp(section, this._config) : this._config; + let result: any; + if (typeof config !== 'object') { + // this catches missing config and accessing values + result = {}; + } else { + result = clone(config); + } - let result = config ? clone(config) : {}; - // result = Object.freeze(result); result.has = function(key: string): boolean { return typeof ExtHostConfiguration._lookUp(key, config) !== 'undefined'; };