diff --git a/src/vs/platform/configuration/test/common/configurationService.test.ts b/src/vs/platform/configuration/test/common/configurationService.test.ts index 451a52e491732..0cb77b1693f16 100644 --- a/src/vs/platform/configuration/test/common/configurationService.test.ts +++ b/src/vs/platform/configuration/test/common/configurationService.test.ts @@ -9,6 +9,7 @@ import { Event } from 'vs/base/common/event'; import { DisposableStore } from 'vs/base/common/lifecycle'; import { Schemas } from 'vs/base/common/network'; import { URI } from 'vs/base/common/uri'; +import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; import { ConfigurationTarget } from 'vs/platform/configuration/common/configuration'; import { Extensions as ConfigurationExtensions, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; import { ConfigurationService } from 'vs/platform/configuration/common/configurationService'; @@ -34,7 +35,7 @@ suite('ConfigurationService', () => { teardown(() => disposables.clear()); - test('simple', async () => { + test('simple', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(settingsResource, VSBuffer.fromString('{ "foo": "bar" }')); const testObject = disposables.add(new ConfigurationService(settingsResource, fileService, new NullPolicyService(), new NullLogService())); await testObject.initialize(); @@ -44,9 +45,9 @@ suite('ConfigurationService', () => { assert.ok(config); assert.strictEqual(config.foo, 'bar'); - }); + })); - test('config gets flattened', async () => { + test('config gets flattened', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(settingsResource, VSBuffer.fromString('{ "testworkbench.editor.tabs": true }')); const testObject = disposables.add(new ConfigurationService(settingsResource, fileService, new NullPolicyService(), new NullLogService())); @@ -63,9 +64,9 @@ suite('ConfigurationService', () => { assert.ok(config.testworkbench); assert.ok(config.testworkbench.editor); assert.strictEqual(config.testworkbench.editor.tabs, true); - }); + })); - test('error case does not explode', async () => { + test('error case does not explode', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(settingsResource, VSBuffer.fromString(',,,,')); const testObject = disposables.add(new ConfigurationService(settingsResource, fileService, new NullPolicyService(), new NullLogService())); @@ -75,18 +76,18 @@ suite('ConfigurationService', () => { }>(); assert.ok(config); - }); + })); - test('missing file does not explode', async () => { + test('missing file does not explode', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject = disposables.add(new ConfigurationService(URI.file('__testFile'), fileService, new NullPolicyService(), new NullLogService())); await testObject.initialize(); const config = testObject.getValue<{ foo: string }>(); assert.ok(config); - }); + })); - test('trigger configuration change event when file does not exist', async () => { + test('trigger configuration change event when file does not exist', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject = disposables.add(new ConfigurationService(settingsResource, fileService, new NullPolicyService(), new NullLogService())); await testObject.initialize(); return new Promise((c, e) => { @@ -97,9 +98,9 @@ suite('ConfigurationService', () => { fileService.writeFile(settingsResource, VSBuffer.fromString('{ "foo": "bar" }')).catch(e); }); - }); + })); - test('trigger configuration change event when file exists', async () => { + test('trigger configuration change event when file exists', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject = disposables.add(new ConfigurationService(settingsResource, fileService, new NullPolicyService(), new NullLogService())); await fileService.writeFile(settingsResource, VSBuffer.fromString('{ "foo": "bar" }')); await testObject.initialize(); @@ -111,9 +112,9 @@ suite('ConfigurationService', () => { })); fileService.writeFile(settingsResource, VSBuffer.fromString('{ "foo": "barz" }')); }); - }); + })); - test('reloadConfiguration', async () => { + test('reloadConfiguration', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(settingsResource, VSBuffer.fromString('{ "foo": "bar" }')); const testObject = disposables.add(new ConfigurationService(settingsResource, fileService, new NullPolicyService(), new NullLogService())); @@ -132,9 +133,9 @@ suite('ConfigurationService', () => { }>(); assert.ok(config); assert.strictEqual(config.foo, 'changed'); - }); + })); - test('model defaults', async () => { + test('model defaults', () => runWithFakedTimers({ useFakeTimers: true }, async () => { interface ITestSetting { configuration: { service: { @@ -176,9 +177,9 @@ suite('ConfigurationService', () => { setting = testObject.getValue(); assert.ok(setting); assert.strictEqual(setting.configuration.service.testSetting, 'isChanged'); - }); + })); - test('lookup', async () => { + test('lookup', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const configurationRegistry = Registry.as(ConfigurationExtensions.Configuration); configurationRegistry.registerConfiguration({ 'id': '_test', @@ -212,9 +213,9 @@ suite('ConfigurationService', () => { assert.strictEqual(res.userValue, 'bar'); assert.strictEqual(res.value, 'bar'); - }); + })); - test('lookup with null', async () => { + test('lookup with null', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const configurationRegistry = Registry.as(ConfigurationExtensions.Configuration); configurationRegistry.registerConfiguration({ 'id': '_testNull', @@ -242,5 +243,5 @@ suite('ConfigurationService', () => { assert.strictEqual(res.defaultValue, null); assert.strictEqual(res.value, null); assert.strictEqual(res.userValue, null); - }); + })); }); diff --git a/src/vs/platform/userDataSync/test/common/globalStateSync.test.ts b/src/vs/platform/userDataSync/test/common/globalStateSync.test.ts index 20138fb54d74d..110991b2d8633 100644 --- a/src/vs/platform/userDataSync/test/common/globalStateSync.test.ts +++ b/src/vs/platform/userDataSync/test/common/globalStateSync.test.ts @@ -6,6 +6,7 @@ import * as assert from 'assert'; import { VSBuffer } from 'vs/base/common/buffer'; import { DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; +import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; import { IEnvironmentService } from 'vs/platform/environment/common/environment'; import { IFileService } from 'vs/platform/files/common/files'; import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; @@ -37,7 +38,7 @@ suite('GlobalStateSync', () => { teardown(() => disposableStore.clear()); - test('when global state does not exist', async () => { + test('when global state does not exist', () => runWithFakedTimers({ useFakeTimers: true }, async () => { assert.deepStrictEqual(await testObject.getLastSyncUserData(), null); let manifest = await testClient.getResourceManifest(); server.reset(); @@ -62,9 +63,9 @@ suite('GlobalStateSync', () => { server.reset(); await testObject.sync(manifest); assert.deepStrictEqual(server.requests, []); - }); + })); - test('when global state is created after first sync', async () => { + test('when global state is created after first sync', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await testObject.sync(await testClient.getResourceManifest()); updateUserStorage('a', 'value1', testClient); @@ -82,9 +83,9 @@ suite('GlobalStateSync', () => { assert.deepStrictEqual(lastSyncUserData!.ref, remoteUserData.ref); assert.deepStrictEqual(lastSyncUserData!.syncData, remoteUserData.syncData); assert.deepStrictEqual(JSON.parse(lastSyncUserData!.syncData!.content).storage, { 'a': { version: 1, value: 'value1' } }); - }); + })); - test('first time sync - outgoing to server (no state)', async () => { + test('first time sync - outgoing to server (no state)', () => runWithFakedTimers({ useFakeTimers: true }, async () => { updateUserStorage('a', 'value1', testClient); updateMachineStorage('b', 'value1', testClient); await updateLocale(testClient); @@ -97,9 +98,9 @@ suite('GlobalStateSync', () => { assert.ok(content !== null); const actual = parseGlobalState(content!); assert.deepStrictEqual(actual.storage, { 'globalState.argv.locale': { version: 1, value: 'en' }, 'a': { version: 1, value: 'value1' } }); - }); + })); - test('first time sync - incoming from server (no state)', async () => { + test('first time sync - incoming from server (no state)', () => runWithFakedTimers({ useFakeTimers: true }, async () => { updateUserStorage('a', 'value1', client2); await updateLocale(client2); await client2.sync(); @@ -110,9 +111,9 @@ suite('GlobalStateSync', () => { assert.strictEqual(readStorage('a', testClient), 'value1'); assert.strictEqual(await readLocale(testClient), 'en'); - }); + })); - test('first time sync when storage exists', async () => { + test('first time sync when storage exists', () => runWithFakedTimers({ useFakeTimers: true }, async () => { updateUserStorage('a', 'value1', client2); await client2.sync(); @@ -128,9 +129,9 @@ suite('GlobalStateSync', () => { assert.ok(content !== null); const actual = parseGlobalState(content!); assert.deepStrictEqual(actual.storage, { 'a': { version: 1, value: 'value1' }, 'b': { version: 1, value: 'value2' } }); - }); + })); - test('first time sync when storage exists - has conflicts', async () => { + test('first time sync when storage exists - has conflicts', () => runWithFakedTimers({ useFakeTimers: true }, async () => { updateUserStorage('a', 'value1', client2); await client2.sync(); @@ -146,9 +147,9 @@ suite('GlobalStateSync', () => { assert.ok(content !== null); const actual = parseGlobalState(content!); assert.deepStrictEqual(actual.storage, { 'a': { version: 1, value: 'value1' } }); - }); + })); - test('sync adding a storage value', async () => { + test('sync adding a storage value', () => runWithFakedTimers({ useFakeTimers: true }, async () => { updateUserStorage('a', 'value1', testClient); await testObject.sync(await testClient.getResourceManifest()); @@ -164,9 +165,9 @@ suite('GlobalStateSync', () => { assert.ok(content !== null); const actual = parseGlobalState(content!); assert.deepStrictEqual(actual.storage, { 'a': { version: 1, value: 'value1' }, 'b': { version: 1, value: 'value2' } }); - }); + })); - test('sync updating a storage value', async () => { + test('sync updating a storage value', () => runWithFakedTimers({ useFakeTimers: true }, async () => { updateUserStorage('a', 'value1', testClient); await testObject.sync(await testClient.getResourceManifest()); @@ -181,9 +182,9 @@ suite('GlobalStateSync', () => { assert.ok(content !== null); const actual = parseGlobalState(content!); assert.deepStrictEqual(actual.storage, { 'a': { version: 1, value: 'value2' } }); - }); + })); - test('sync removing a storage value', async () => { + test('sync removing a storage value', () => runWithFakedTimers({ useFakeTimers: true }, async () => { updateUserStorage('a', 'value1', testClient); updateUserStorage('b', 'value2', testClient); await testObject.sync(await testClient.getResourceManifest()); @@ -200,9 +201,9 @@ suite('GlobalStateSync', () => { assert.ok(content !== null); const actual = parseGlobalState(content!); assert.deepStrictEqual(actual.storage, { 'a': { version: 1, value: 'value1' } }); - }); + })); - test('sync profile state', async () => { + test('sync profile state', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const client2 = disposableStore.add(new UserDataSyncClient(server)); await client2.setUp(true); const profile = await client2.instantiationService.get(IUserDataProfilesService).createNamedProfile('profile1'); @@ -221,7 +222,7 @@ suite('GlobalStateSync', () => { assert.ok(content !== null); const actual = parseGlobalState(content!); assert.deepStrictEqual(actual.storage, { 'a': { version: 1, value: 'value1' } }); - }); + })); function parseGlobalState(content: string): IGlobalState { const syncData: ISyncData = JSON.parse(content); diff --git a/src/vs/platform/userDataSync/test/common/settingsSync.test.ts b/src/vs/platform/userDataSync/test/common/settingsSync.test.ts index 892014f043cad..8c13c2cd43fe1 100644 --- a/src/vs/platform/userDataSync/test/common/settingsSync.test.ts +++ b/src/vs/platform/userDataSync/test/common/settingsSync.test.ts @@ -7,6 +7,7 @@ import * as assert from 'assert'; import { VSBuffer } from 'vs/base/common/buffer'; import { Event } from 'vs/base/common/event'; import { DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; +import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { ConfigurationScope, Extensions, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; import { IFileService } from 'vs/platform/files/common/files'; @@ -47,7 +48,7 @@ suite('SettingsSync - Auto', () => { teardown(() => disposableStore.clear()); - test('when settings file does not exist', async () => { + test('when settings file does not exist', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const fileService = client.instantiationService.get(IFileService); const settingResource = client.instantiationService.get(IUserDataProfilesService).defaultProfile.settingsResource; @@ -76,9 +77,9 @@ suite('SettingsSync - Auto', () => { server.reset(); await testObject.sync(manifest); assert.deepStrictEqual(server.requests, []); - }); + })); - test('when settings file is empty and remote has no changes', async () => { + test('when settings file is empty and remote has no changes', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const fileService = client.instantiationService.get(IFileService); const settingsResource = client.instantiationService.get(IUserDataProfilesService).defaultProfile.settingsResource; await fileService.writeFile(settingsResource, VSBuffer.fromString('')); @@ -90,9 +91,9 @@ suite('SettingsSync - Auto', () => { assert.strictEqual(parseSettingsSyncContent(lastSyncUserData!.syncData!.content!)?.settings, '{}'); assert.strictEqual(parseSettingsSyncContent(remoteUserData!.syncData!.content!)?.settings, '{}'); assert.strictEqual((await fileService.readFile(settingsResource)).value.toString(), ''); - }); + })); - test('when settings file is empty and remote has changes', async () => { + test('when settings file is empty and remote has changes', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const client2 = disposableStore.add(new UserDataSyncClient(server)); await client2.setUp(true); const content = @@ -131,9 +132,9 @@ suite('SettingsSync - Auto', () => { assert.strictEqual(parseSettingsSyncContent(lastSyncUserData!.syncData!.content!)?.settings, content); assert.strictEqual(parseSettingsSyncContent(remoteUserData!.syncData!.content!)?.settings, content); assert.strictEqual((await fileService.readFile(settingsResource)).value.toString(), content); - }); + })); - test('when settings file is created after first sync', async () => { + test('when settings file is created after first sync', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const fileService = client.instantiationService.get(IFileService); const settingsResource = client.instantiationService.get(IUserDataProfilesService).defaultProfile.settingsResource; @@ -154,9 +155,9 @@ suite('SettingsSync - Auto', () => { assert.deepStrictEqual(lastSyncUserData!.ref, remoteUserData.ref); assert.deepStrictEqual(lastSyncUserData!.syncData, remoteUserData.syncData); assert.strictEqual(parseSettingsSyncContent(lastSyncUserData!.syncData!.content!)?.settings, '{}'); - }); + })); - test('sync for first time to the server', async () => { + test('sync for first time to the server', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const expected = `{ // Always @@ -187,9 +188,9 @@ suite('SettingsSync - Auto', () => { assert.ok(content !== null); const actual = parseSettings(content!); assert.deepStrictEqual(actual, expected); - }); + })); - test('do not sync machine settings', async () => { + test('do not sync machine settings', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const settingsContent = `{ // Always @@ -218,9 +219,9 @@ suite('SettingsSync - Auto', () => { // Workbench "workbench.colorTheme": "GitHub Sharp" }`); - }); + })); - test('do not sync machine settings when spread across file', async () => { + test('do not sync machine settings when spread across file', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const settingsContent = `{ // Always @@ -249,9 +250,9 @@ suite('SettingsSync - Auto', () => { // Workbench "workbench.colorTheme": "GitHub Sharp" }`); - }); + })); - test('do not sync machine settings when spread across file - 2', async () => { + test('do not sync machine settings when spread across file - 2', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const settingsContent = `{ // Always @@ -280,9 +281,9 @@ suite('SettingsSync - Auto', () => { "workbench.colorTheme": "GitHub Sharp", "files.simpleDialog.enable": true, }`); - }); + })); - test('sync when all settings are machine settings', async () => { + test('sync when all settings are machine settings', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const settingsContent = `{ // Machine @@ -298,9 +299,9 @@ suite('SettingsSync - Auto', () => { const actual = parseSettings(content!); assert.deepStrictEqual(actual, `{ }`); - }); + })); - test('sync when all settings are machine settings with trailing comma', async () => { + test('sync when all settings are machine settings with trailing comma', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const settingsContent = `{ // Machine @@ -317,9 +318,9 @@ suite('SettingsSync - Auto', () => { assert.deepStrictEqual(actual, `{ , }`); - }); + })); - test('local change event is triggered when settings are changed', async () => { + test('local change event is triggered when settings are changed', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const content = `{ "files.autoSave": "afterDelay", @@ -335,9 +336,9 @@ suite('SettingsSync - Auto', () => { "files.simpleDialog.enable": true, }`, client); await promise; - }); + })); - test('do not sync ignored settings', async () => { + test('do not sync ignored settings', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const settingsContent = `{ // Always @@ -380,9 +381,9 @@ suite('SettingsSync - Auto', () => { "terminal.integrated.shell.osx" ] }`); - }); + })); - test('do not sync ignored and machine settings', async () => { + test('do not sync ignored and machine settings', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const settingsContent = `{ // Always @@ -428,9 +429,9 @@ suite('SettingsSync - Auto', () => { "terminal.integrated.shell.osx" ], }`); - }); + })); - test('sync throws invalid content error', async () => { + test('sync throws invalid content error', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const expected = `{ // Always @@ -463,9 +464,9 @@ suite('SettingsSync - Auto', () => { assert.ok(e instanceof UserDataSyncError); assert.deepStrictEqual((e).code, UserDataSyncErrorCode.LocalInvalidContent); } - }); + })); - test('sync throws invalid content error - content is an array', async () => { + test('sync throws invalid content error - content is an array', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await updateSettings('[]', client); try { await testObject.sync(await client.getResourceManifest()); @@ -474,9 +475,9 @@ suite('SettingsSync - Auto', () => { assert.ok(e instanceof UserDataSyncError); assert.deepStrictEqual((e).code, UserDataSyncErrorCode.LocalInvalidContent); } - }); + })); - test('sync when there are conflicts', async () => { + test('sync when there are conflicts', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const client2 = disposableStore.add(new UserDataSyncClient(server)); await client2.setUp(true); await updateSettings(JSON.stringify({ @@ -499,9 +500,9 @@ suite('SettingsSync - Auto', () => { const fileService = client.instantiationService.get(IFileService); const mergeContent = (await fileService.readFile(testObject.conflicts.conflicts[0].previewResource)).value.toString(); assert.strictEqual(mergeContent, ''); - }); + })); - test('sync profile settings', async () => { + test('sync profile settings', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const client2 = disposableStore.add(new UserDataSyncClient(server)); await client2.setUp(true); const profile = await client2.instantiationService.get(IUserDataProfilesService).createNamedProfile('profile1'); @@ -521,7 +522,7 @@ suite('SettingsSync - Auto', () => { 'a': 1, 'b': 2, }); - }); + })); }); @@ -541,7 +542,7 @@ suite('SettingsSync - Manual', () => { teardown(() => disposableStore.clear()); - test('do not sync ignored settings', async () => { + test('do not sync ignored settings', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const settingsContent = `{ // Always @@ -587,7 +588,7 @@ suite('SettingsSync - Manual', () => { "terminal.integrated.shell.osx" ] }`); - }); + })); }); diff --git a/src/vs/platform/userDataSync/test/common/synchronizer.test.ts b/src/vs/platform/userDataSync/test/common/synchronizer.test.ts index 495551412eeee..a034c18411591 100644 --- a/src/vs/platform/userDataSync/test/common/synchronizer.test.ts +++ b/src/vs/platform/userDataSync/test/common/synchronizer.test.ts @@ -11,6 +11,7 @@ import { Emitter, Event } from 'vs/base/common/event'; import { DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; import { isEqual, joinPath } from 'vs/base/common/resources'; import { URI } from 'vs/base/common/uri'; +import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; import { IFileService } from 'vs/platform/files/common/files'; import { InMemoryFileSystemProvider } from 'vs/platform/files/common/inMemoryFilesystemProvider'; import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; @@ -188,7 +189,7 @@ suite('TestSynchronizer - Auto Sync', () => { teardown(() => disposableStore.clear()); - test('status is syncing', async () => { + test('status is syncing', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); const actual: SyncStatus[] = []; @@ -203,9 +204,9 @@ suite('TestSynchronizer - Auto Sync', () => { assert.deepStrictEqual(testObject.status, SyncStatus.Syncing); testObject.stop(); - }); + })); - test('status is set correctly when sync is finished', async () => { + test('status is set correctly when sync is finished', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncBarrier.open(); @@ -215,9 +216,9 @@ suite('TestSynchronizer - Auto Sync', () => { assert.deepStrictEqual(actual, [SyncStatus.Syncing, SyncStatus.Idle]); assert.deepStrictEqual(testObject.status, SyncStatus.Idle); - }); + })); - test('status is set correctly when sync has errors', async () => { + test('status is set correctly when sync has errors', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasError: true, hasConflicts: false }; testObject.syncBarrier.open(); @@ -232,9 +233,9 @@ suite('TestSynchronizer - Auto Sync', () => { assert.deepStrictEqual(actual, [SyncStatus.Syncing, SyncStatus.Idle]); assert.deepStrictEqual(testObject.status, SyncStatus.Idle); } - }); + })); - test('status is set to hasConflicts when asked to sync if there are conflicts', async () => { + test('status is set to hasConflicts when asked to sync if there are conflicts', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: true, hasError: false }; testObject.syncBarrier.open(); @@ -243,9 +244,9 @@ suite('TestSynchronizer - Auto Sync', () => { assert.deepStrictEqual(testObject.status, SyncStatus.HasConflicts); assertConflicts(testObject.conflicts.conflicts, [testObject.localResource]); - }); + })); - test('sync should not run if syncing already', async () => { + test('sync should not run if syncing already', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); const promise = Event.toPromise(testObject.onDoSyncCall.event); @@ -260,9 +261,9 @@ suite('TestSynchronizer - Auto Sync', () => { assert.deepStrictEqual(testObject.status, SyncStatus.Syncing); await testObject.stop(); - }); + })); - test('sync should not run if there are conflicts', async () => { + test('sync should not run if there are conflicts', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: true, hasError: false }; testObject.syncBarrier.open(); @@ -274,9 +275,9 @@ suite('TestSynchronizer - Auto Sync', () => { assert.deepStrictEqual(actual, []); assert.deepStrictEqual(testObject.status, SyncStatus.HasConflicts); - }); + })); - test('accept preview during conflicts', async () => { + test('accept preview during conflicts', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: true, hasError: false }; testObject.syncBarrier.open(); @@ -292,9 +293,9 @@ suite('TestSynchronizer - Auto Sync', () => { assert.deepStrictEqual(testObject.status, SyncStatus.Idle); const fileService = client.instantiationService.get(IFileService); assert.strictEqual((await testObject.getRemoteUserData(null)).syncData?.content, (await fileService.readFile(testObject.localResource)).value.toString()); - }); + })); - test('accept remote during conflicts', async () => { + test('accept remote during conflicts', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncBarrier.open(); await testObject.sync(await client.getResourceManifest()); @@ -315,9 +316,9 @@ suite('TestSynchronizer - Auto Sync', () => { assert.deepStrictEqual(testObject.status, SyncStatus.Idle); assert.strictEqual((await testObject.getRemoteUserData(null)).syncData?.content, currentRemoteContent); assert.strictEqual((await fileService.readFile(testObject.localResource)).value.toString(), currentRemoteContent); - }); + })); - test('accept local during conflicts', async () => { + test('accept local during conflicts', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncBarrier.open(); await testObject.sync(await client.getResourceManifest()); @@ -337,9 +338,9 @@ suite('TestSynchronizer - Auto Sync', () => { assert.deepStrictEqual(testObject.status, SyncStatus.Idle); assert.strictEqual((await testObject.getRemoteUserData(null)).syncData?.content, newLocalContent); assert.strictEqual((await fileService.readFile(testObject.localResource)).value.toString(), newLocalContent); - }); + })); - test('accept new content during conflicts', async () => { + test('accept new content during conflicts', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncBarrier.open(); await testObject.sync(await client.getResourceManifest()); @@ -360,9 +361,9 @@ suite('TestSynchronizer - Auto Sync', () => { assert.deepStrictEqual(testObject.status, SyncStatus.Idle); assert.strictEqual((await testObject.getRemoteUserData(null)).syncData?.content, mergeContent); assert.strictEqual((await fileService.readFile(testObject.localResource)).value.toString(), mergeContent); - }); + })); - test('accept delete during conflicts', async () => { + test('accept delete during conflicts', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncBarrier.open(); await testObject.sync(await client.getResourceManifest()); @@ -382,9 +383,9 @@ suite('TestSynchronizer - Auto Sync', () => { assert.deepStrictEqual(testObject.status, SyncStatus.Idle); assert.strictEqual((await testObject.getRemoteUserData(null)).syncData?.content, ''); assert.ok(!(await fileService.exists(testObject.localResource))); - }); + })); - test('accept deleted local during conflicts', async () => { + test('accept deleted local during conflicts', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncBarrier.open(); await testObject.sync(await client.getResourceManifest()); @@ -403,9 +404,9 @@ suite('TestSynchronizer - Auto Sync', () => { assert.deepStrictEqual(testObject.status, SyncStatus.Idle); assert.strictEqual((await testObject.getRemoteUserData(null)).syncData?.content, ''); assert.ok(!(await fileService.exists(testObject.localResource))); - }); + })); - test('accept deleted remote during conflicts', async () => { + test('accept deleted remote during conflicts', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncBarrier.open(); const fileService = client.instantiationService.get(IFileService); @@ -423,9 +424,9 @@ suite('TestSynchronizer - Auto Sync', () => { assert.deepStrictEqual(testObject.status, SyncStatus.Idle); assert.strictEqual((await testObject.getRemoteUserData(null)).syncData, null); assert.ok(!(await fileService.exists(testObject.localResource))); - }); + })); - test('request latest data on precondition failure', async () => { + test('request latest data on precondition failure', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); // Sync once testObject.syncBarrier.open(); @@ -450,9 +451,9 @@ suite('TestSynchronizer - Auto Sync', () => { { type: 'GET', url: `${server.url}/v1/resource/${testObject.resource}/latest`, headers: {} }, { type: 'POST', url: `${server.url}/v1/resource/${testObject.resource}`, headers: { 'If-Match': `${parseInt(ref) + 1}` } }, ]); - }); + })); - test('no requests are made to server when local change is triggered', async () => { + test('no requests are made to server when local change is triggered', () => runWithFakedTimers({ useFakeTimers: true }, () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncBarrier.open(); await testObject.sync(await client.getResourceManifest()); @@ -463,9 +464,9 @@ suite('TestSynchronizer - Auto Sync', () => { await promise; assert.deepStrictEqual(server.requests, []); - }); + }))); - test('status is reset when getting latest remote data fails', async () => { + test('status is reset when getting latest remote data fails', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.failWhenGettingLatestRemoteUserData = true; @@ -476,7 +477,7 @@ suite('TestSynchronizer - Auto Sync', () => { } assert.strictEqual(testObject.status, SyncStatus.Idle); - }); + })); }); suite('TestSynchronizer - Manual Sync', () => { @@ -496,7 +497,7 @@ suite('TestSynchronizer - Manual Sync', () => { teardown(() => disposableStore.clear()); - test('preview', async () => { + test('preview', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: false, hasError: false }; testObject.syncBarrier.open(); @@ -506,9 +507,9 @@ suite('TestSynchronizer - Manual Sync', () => { assert.deepStrictEqual(testObject.status, SyncStatus.Syncing); assertPreviews(preview!.resourcePreviews, [testObject.localResource]); assertConflicts(testObject.conflicts.conflicts, []); - }); + })); - test('preview -> merge', async () => { + test('preview -> merge', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: false, hasError: false }; testObject.syncBarrier.open(); @@ -520,9 +521,9 @@ suite('TestSynchronizer - Manual Sync', () => { assertPreviews(preview!.resourcePreviews, [testObject.localResource]); assert.strictEqual(preview!.resourcePreviews[0].mergeState, MergeState.Accepted); assertConflicts(testObject.conflicts.conflicts, []); - }); + })); - test('preview -> accept', async () => { + test('preview -> accept', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: false, hasError: false }; testObject.syncBarrier.open(); @@ -534,9 +535,9 @@ suite('TestSynchronizer - Manual Sync', () => { assertPreviews(preview!.resourcePreviews, [testObject.localResource]); assert.strictEqual(preview!.resourcePreviews[0].mergeState, MergeState.Accepted); assertConflicts(testObject.conflicts.conflicts, []); - }); + })); - test('preview -> merge -> accept', async () => { + test('preview -> merge -> accept', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: false, hasError: false }; testObject.syncBarrier.open(); @@ -549,9 +550,9 @@ suite('TestSynchronizer - Manual Sync', () => { assertPreviews(preview!.resourcePreviews, [testObject.localResource]); assert.strictEqual(preview!.resourcePreviews[0].mergeState, MergeState.Accepted); assertConflicts(testObject.conflicts.conflicts, []); - }); + })); - test('preview -> merge -> apply', async () => { + test('preview -> merge -> apply', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: false, hasError: false }; testObject.syncBarrier.open(); @@ -569,9 +570,9 @@ suite('TestSynchronizer - Manual Sync', () => { const expectedContent = manifest![testObject.resource]; assert.strictEqual((await testObject.getRemoteUserData(null)).syncData?.content, expectedContent); assert.strictEqual((await client.instantiationService.get(IFileService).readFile(testObject.localResource)).value.toString(), expectedContent); - }); + })); - test('preview -> accept -> apply', async () => { + test('preview -> accept -> apply', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: false, hasError: false }; testObject.syncBarrier.open(); @@ -589,9 +590,9 @@ suite('TestSynchronizer - Manual Sync', () => { assert.strictEqual((await testObject.getRemoteUserData(null)).syncData?.content, expectedContent); assert.strictEqual((await client.instantiationService.get(IFileService).readFile(testObject.localResource)).value.toString(), expectedContent); - }); + })); - test('preview -> merge -> accept -> apply', async () => { + test('preview -> merge -> accept -> apply', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: false, hasError: false }; testObject.syncBarrier.open(); @@ -609,9 +610,9 @@ suite('TestSynchronizer - Manual Sync', () => { assert.strictEqual((await testObject.getRemoteUserData(null)).syncData?.content, expectedContent); assert.strictEqual((await client.instantiationService.get(IFileService).readFile(testObject.localResource)).value.toString(), expectedContent); - }); + })); - test('preview -> accept', async () => { + test('preview -> accept', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: false, hasError: false }; testObject.syncBarrier.open(); @@ -622,9 +623,9 @@ suite('TestSynchronizer - Manual Sync', () => { assert.deepStrictEqual(testObject.status, SyncStatus.Syncing); assertPreviews(preview!.resourcePreviews, [testObject.localResource]); assertConflicts(testObject.conflicts.conflicts, []); - }); + })); - test('preview -> accept -> apply', async () => { + test('preview -> accept -> apply', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: false, hasError: false }; testObject.syncBarrier.open(); @@ -642,9 +643,9 @@ suite('TestSynchronizer - Manual Sync', () => { assert.strictEqual((await testObject.getRemoteUserData(null)).syncData?.content, expectedContent); assert.strictEqual((await client.instantiationService.get(IFileService).readFile(testObject.localResource)).value.toString(), expectedContent); - }); + })); - test('preivew -> merge -> discard', async () => { + test('preivew -> merge -> discard', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: false, hasError: false }; testObject.syncBarrier.open(); @@ -657,9 +658,9 @@ suite('TestSynchronizer - Manual Sync', () => { assertPreviews(preview!.resourcePreviews, [testObject.localResource]); assert.strictEqual(preview!.resourcePreviews[0].mergeState, MergeState.Preview); assertConflicts(testObject.conflicts.conflicts, []); - }); + })); - test('preivew -> merge -> discard -> accept', async () => { + test('preivew -> merge -> discard -> accept', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: false, hasError: false }; testObject.syncBarrier.open(); @@ -673,9 +674,9 @@ suite('TestSynchronizer - Manual Sync', () => { assertPreviews(preview!.resourcePreviews, [testObject.localResource]); assert.strictEqual(preview!.resourcePreviews[0].mergeState, MergeState.Accepted); assertConflicts(testObject.conflicts.conflicts, []); - }); + })); - test('preivew -> accept -> discard', async () => { + test('preivew -> accept -> discard', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: false, hasError: false }; testObject.syncBarrier.open(); @@ -688,9 +689,9 @@ suite('TestSynchronizer - Manual Sync', () => { assertPreviews(preview!.resourcePreviews, [testObject.localResource]); assert.strictEqual(preview!.resourcePreviews[0].mergeState, MergeState.Preview); assertConflicts(testObject.conflicts.conflicts, []); - }); + })); - test('preivew -> accept -> discard -> accept', async () => { + test('preivew -> accept -> discard -> accept', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: false, hasError: false }; testObject.syncBarrier.open(); @@ -704,9 +705,9 @@ suite('TestSynchronizer - Manual Sync', () => { assertPreviews(preview!.resourcePreviews, [testObject.localResource]); assert.strictEqual(preview!.resourcePreviews[0].mergeState, MergeState.Accepted); assertConflicts(testObject.conflicts.conflicts, []); - }); + })); - test('preivew -> accept -> discard -> merge', async () => { + test('preivew -> accept -> discard -> merge', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: false, hasError: false }; testObject.syncBarrier.open(); @@ -720,9 +721,9 @@ suite('TestSynchronizer - Manual Sync', () => { assertPreviews(preview!.resourcePreviews, [testObject.localResource]); assert.strictEqual(preview!.resourcePreviews[0].mergeState, MergeState.Accepted); assertConflicts(testObject.conflicts.conflicts, []); - }); + })); - test('preivew -> merge -> accept -> discard', async () => { + test('preivew -> merge -> accept -> discard', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: false, hasError: false }; testObject.syncBarrier.open(); @@ -736,9 +737,9 @@ suite('TestSynchronizer - Manual Sync', () => { assertPreviews(preview!.resourcePreviews, [testObject.localResource]); assert.strictEqual(preview!.resourcePreviews[0].mergeState, MergeState.Preview); assertConflicts(testObject.conflicts.conflicts, []); - }); + })); - test('preivew -> merge -> discard -> accept -> apply', async () => { + test('preivew -> merge -> discard -> accept -> apply', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: false, hasError: false }; testObject.syncBarrier.open(); @@ -756,9 +757,9 @@ suite('TestSynchronizer - Manual Sync', () => { assertConflicts(testObject.conflicts.conflicts, []); assert.strictEqual((await testObject.getRemoteUserData(null)).syncData?.content, expectedContent); assert.strictEqual((await client.instantiationService.get(IFileService).readFile(testObject.localResource)).value.toString(), expectedContent); - }); + })); - test('preivew -> accept -> discard -> accept -> apply', async () => { + test('preivew -> accept -> discard -> accept -> apply', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: false, hasError: false }; testObject.syncBarrier.open(); @@ -777,9 +778,9 @@ suite('TestSynchronizer - Manual Sync', () => { assertConflicts(testObject.conflicts.conflicts, []); assert.strictEqual((await testObject.getRemoteUserData(null)).syncData?.content, expectedContent); assert.strictEqual((await client.instantiationService.get(IFileService).readFile(testObject.localResource)).value.toString(), expectedContent); - }); + })); - test('preivew -> accept -> discard -> merge -> apply', async () => { + test('preivew -> accept -> discard -> merge -> apply', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: false, hasError: false }; testObject.syncBarrier.open(); @@ -800,9 +801,9 @@ suite('TestSynchronizer - Manual Sync', () => { assert.strictEqual((await testObject.getRemoteUserData(null)).syncData?.content, expectedContent); assert.strictEqual((await client.instantiationService.get(IFileService).readFile(testObject.localResource)).value.toString(), expectedContent); - }); + })); - test('conflicts: preview', async () => { + test('conflicts: preview', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: true, hasError: false }; testObject.syncBarrier.open(); @@ -812,9 +813,9 @@ suite('TestSynchronizer - Manual Sync', () => { assert.deepStrictEqual(testObject.status, SyncStatus.Syncing); assertPreviews(preview!.resourcePreviews, [testObject.localResource]); assertConflicts(testObject.conflicts.conflicts, []); - }); + })); - test('conflicts: preview -> merge', async () => { + test('conflicts: preview -> merge', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: true, hasError: false }; testObject.syncBarrier.open(); @@ -826,9 +827,9 @@ suite('TestSynchronizer - Manual Sync', () => { assertPreviews(preview!.resourcePreviews, [testObject.localResource]); assert.strictEqual(preview!.resourcePreviews[0].mergeState, MergeState.Conflict); assertConflicts(testObject.conflicts.conflicts, [preview!.resourcePreviews[0].localResource]); - }); + })); - test('conflicts: preview -> merge -> discard', async () => { + test('conflicts: preview -> merge -> discard', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: true, hasError: false }; testObject.syncBarrier.open(); @@ -841,9 +842,9 @@ suite('TestSynchronizer - Manual Sync', () => { assertPreviews(preview!.resourcePreviews, [testObject.localResource]); assert.strictEqual(preview!.resourcePreviews[0].mergeState, MergeState.Preview); assertConflicts(testObject.conflicts.conflicts, []); - }); + })); - test('conflicts: preview -> accept', async () => { + test('conflicts: preview -> accept', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: true, hasError: false }; testObject.syncBarrier.open(); @@ -856,9 +857,9 @@ suite('TestSynchronizer - Manual Sync', () => { assert.deepStrictEqual(testObject.status, SyncStatus.Syncing); assertPreviews(preview!.resourcePreviews, [testObject.localResource]); assert.deepStrictEqual(testObject.conflicts.conflicts, []); - }); + })); - test('conflicts: preview -> merge -> accept -> apply', async () => { + test('conflicts: preview -> merge -> accept -> apply', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: false, hasError: false }; testObject.syncBarrier.open(); @@ -879,9 +880,9 @@ suite('TestSynchronizer - Manual Sync', () => { assert.strictEqual((await testObject.getRemoteUserData(null)).syncData?.content, expectedContent); assert.strictEqual((await client.instantiationService.get(IFileService).readFile(testObject.localResource)).value.toString(), expectedContent); - }); + })); - test('conflicts: preview -> accept', async () => { + test('conflicts: preview -> accept', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: true, hasError: false }; testObject.syncBarrier.open(); @@ -893,9 +894,9 @@ suite('TestSynchronizer - Manual Sync', () => { assert.deepStrictEqual(testObject.status, SyncStatus.Syncing); assertPreviews(preview!.resourcePreviews, [testObject.localResource]); assertConflicts(testObject.conflicts.conflicts, []); - }); + })); - test('conflicts: preview -> accept -> apply', async () => { + test('conflicts: preview -> accept -> apply', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: false, hasError: false }; testObject.syncBarrier.open(); @@ -915,9 +916,9 @@ suite('TestSynchronizer - Manual Sync', () => { assert.strictEqual((await testObject.getRemoteUserData(null)).syncData?.content, expectedContent); assert.strictEqual((await client.instantiationService.get(IFileService).readFile(testObject.localResource)).value.toString(), expectedContent); - }); + })); - test('conflicts: preivew -> merge -> discard', async () => { + test('conflicts: preivew -> merge -> discard', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: true, hasError: false }; testObject.syncBarrier.open(); @@ -930,9 +931,9 @@ suite('TestSynchronizer - Manual Sync', () => { assertPreviews(preview!.resourcePreviews, [testObject.localResource]); assert.strictEqual(preview!.resourcePreviews[0].mergeState, MergeState.Preview); assertConflicts(testObject.conflicts.conflicts, []); - }); + })); - test('conflicts: preivew -> merge -> discard -> accept', async () => { + test('conflicts: preivew -> merge -> discard -> accept', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: true, hasError: false }; testObject.syncBarrier.open(); @@ -946,9 +947,9 @@ suite('TestSynchronizer - Manual Sync', () => { assertPreviews(preview!.resourcePreviews, [testObject.localResource]); assert.strictEqual(preview!.resourcePreviews[0].mergeState, MergeState.Accepted); assertConflicts(testObject.conflicts.conflicts, []); - }); + })); - test('conflicts: preivew -> accept -> discard', async () => { + test('conflicts: preivew -> accept -> discard', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: true, hasError: false }; testObject.syncBarrier.open(); @@ -961,9 +962,9 @@ suite('TestSynchronizer - Manual Sync', () => { assertPreviews(preview!.resourcePreviews, [testObject.localResource]); assert.strictEqual(preview!.resourcePreviews[0].mergeState, MergeState.Preview); assertConflicts(testObject.conflicts.conflicts, []); - }); + })); - test('conflicts: preivew -> accept -> discard -> accept', async () => { + test('conflicts: preivew -> accept -> discard -> accept', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: true, hasError: false }; testObject.syncBarrier.open(); @@ -977,9 +978,9 @@ suite('TestSynchronizer - Manual Sync', () => { assertPreviews(preview!.resourcePreviews, [testObject.localResource]); assert.strictEqual(preview!.resourcePreviews[0].mergeState, MergeState.Accepted); assertConflicts(testObject.conflicts.conflicts, []); - }); + })); - test('conflicts: preivew -> accept -> discard -> merge', async () => { + test('conflicts: preivew -> accept -> discard -> merge', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: true, hasError: false }; testObject.syncBarrier.open(); @@ -993,9 +994,9 @@ suite('TestSynchronizer - Manual Sync', () => { assertPreviews(preview!.resourcePreviews, [testObject.localResource]); assert.strictEqual(preview!.resourcePreviews[0].mergeState, MergeState.Conflict); assertConflicts(testObject.conflicts.conflicts, [preview!.resourcePreviews[0].localResource]); - }); + })); - test('conflicts: preivew -> merge -> discard -> merge', async () => { + test('conflicts: preivew -> merge -> discard -> merge', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: true, hasError: false }; testObject.syncBarrier.open(); @@ -1009,9 +1010,9 @@ suite('TestSynchronizer - Manual Sync', () => { assertPreviews(preview!.resourcePreviews, [testObject.localResource]); assert.strictEqual(preview!.resourcePreviews[0].mergeState, MergeState.Conflict); assertConflicts(testObject.conflicts.conflicts, [preview!.resourcePreviews[0].localResource]); - }); + })); - test('conflicts: preivew -> merge -> accept -> discard', async () => { + test('conflicts: preivew -> merge -> accept -> discard', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: false, hasError: false }; testObject.syncBarrier.open(); @@ -1025,9 +1026,9 @@ suite('TestSynchronizer - Manual Sync', () => { assertPreviews(preview!.resourcePreviews, [testObject.localResource]); assert.strictEqual(preview!.resourcePreviews[0].mergeState, MergeState.Preview); assertConflicts(testObject.conflicts.conflicts, []); - }); + })); - test('conflicts: preivew -> merge -> discard -> accept -> apply', async () => { + test('conflicts: preivew -> merge -> discard -> accept -> apply', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: false, hasError: false }; testObject.syncBarrier.open(); @@ -1045,9 +1046,9 @@ suite('TestSynchronizer - Manual Sync', () => { assertConflicts(testObject.conflicts.conflicts, []); assert.strictEqual((await testObject.getRemoteUserData(null)).syncData?.content, expectedContent); assert.strictEqual((await client.instantiationService.get(IFileService).readFile(testObject.localResource)).value.toString(), expectedContent); - }); + })); - test('conflicts: preivew -> accept -> discard -> accept -> apply', async () => { + test('conflicts: preivew -> accept -> discard -> accept -> apply', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const testObject: TestSynchroniser = disposableStore.add(client.instantiationService.createInstance(TestSynchroniser, { syncResource: SyncResource.Settings, profile: client.instantiationService.get(IUserDataProfilesService).defaultProfile }, undefined)); testObject.syncResult = { hasConflicts: false, hasError: false }; testObject.syncBarrier.open(); @@ -1066,7 +1067,7 @@ suite('TestSynchronizer - Manual Sync', () => { assertConflicts(testObject.conflicts.conflicts, []); assert.strictEqual((await testObject.getRemoteUserData(null)).syncData?.content, expectedContent); assert.strictEqual((await client.instantiationService.get(IFileService).readFile(testObject.localResource)).value.toString(), expectedContent); - }); + })); }); diff --git a/src/vs/platform/userDataSync/test/common/userDataSyncProfilesStorageService.test.ts b/src/vs/platform/userDataSync/test/common/userDataSyncProfilesStorageService.test.ts index 66af196c3562c..a282d1e2d842a 100644 --- a/src/vs/platform/userDataSync/test/common/userDataSyncProfilesStorageService.test.ts +++ b/src/vs/platform/userDataSync/test/common/userDataSyncProfilesStorageService.test.ts @@ -11,6 +11,7 @@ import { InMemoryStorageDatabase, IStorageItemsChangeEvent, IUpdateRequest, Stor import { AbstractUserDataSyncProfilesStorageService, IUserDataSyncProfilesStorageService } from 'vs/platform/userDataSync/common/userDataSyncProfilesStorageService'; import { InMemoryStorageService, loadKeyTargets, StorageTarget, TARGET_KEY } from 'vs/platform/storage/common/storage'; import { IUserDataProfile, toUserDataProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; +import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; class TestStorageDatabase extends InMemoryStorageDatabase { @@ -56,13 +57,13 @@ suite('ProfileStorageService', () => { teardown(() => disposables.clear()); - test('read empty storage', async () => { + test('read empty storage', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const actual = await testObject.readStorageData(profile); assert.strictEqual(actual.size, 0); - }); + })); - test('read storage with data', async () => { + test('read storage with data', () => runWithFakedTimers({ useFakeTimers: true }, async () => { storage.set('foo', 'bar'); storage.set(TARGET_KEY, JSON.stringify({ foo: StorageTarget.USER })); await storage.flush(); @@ -71,9 +72,9 @@ suite('ProfileStorageService', () => { assert.strictEqual(actual.size, 1); assert.deepStrictEqual(actual.get('foo'), { 'value': 'bar', 'target': StorageTarget.USER }); - }); + })); - test('write in empty storage', async () => { + test('write in empty storage', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const data = new Map(); data.set('foo', 'bar'); await testObject.updateStorageData(profile, data, StorageTarget.USER); @@ -81,9 +82,9 @@ suite('ProfileStorageService', () => { assert.strictEqual(storage.items.size, 2); assert.deepStrictEqual(loadKeyTargets(storage), { foo: StorageTarget.USER }); assert.strictEqual(storage.get('foo'), 'bar'); - }); + })); - test('write in storage with data', async () => { + test('write in storage with data', () => runWithFakedTimers({ useFakeTimers: true }, async () => { storage.set('foo', 'bar'); storage.set(TARGET_KEY, JSON.stringify({ foo: StorageTarget.USER })); await storage.flush(); @@ -96,9 +97,9 @@ suite('ProfileStorageService', () => { assert.deepStrictEqual(loadKeyTargets(storage), { foo: StorageTarget.USER, abc: StorageTarget.MACHINE }); assert.strictEqual(storage.get('foo'), 'bar'); assert.strictEqual(storage.get('abc'), 'xyz'); - }); + })); - test('write in storage with data (insert, update, remove)', async () => { + test('write in storage with data (insert, update, remove)', () => runWithFakedTimers({ useFakeTimers: true }, async () => { storage.set('foo', 'bar'); storage.set('abc', 'xyz'); storage.set(TARGET_KEY, JSON.stringify({ foo: StorageTarget.USER, abc: StorageTarget.MACHINE })); @@ -114,6 +115,6 @@ suite('ProfileStorageService', () => { assert.deepStrictEqual(loadKeyTargets(storage), { abc: StorageTarget.USER, var: StorageTarget.USER }); assert.strictEqual(storage.get('abc'), 'def'); assert.strictEqual(storage.get('var'), 'const'); - }); + })); }); diff --git a/src/vs/workbench/services/configuration/test/browser/configurationService.test.ts b/src/vs/workbench/services/configuration/test/browser/configurationService.test.ts index b09c88322f5f3..6fbc0225b97e4 100644 --- a/src/vs/workbench/services/configuration/test/browser/configurationService.test.ts +++ b/src/vs/workbench/services/configuration/test/browser/configurationService.test.ts @@ -116,7 +116,7 @@ suite('WorkspaceContextService - Folder', () => { assert.strictEqual(actual, testObject.getWorkspace().folders[0]); }); - test('getWorkspaceFolder() - queries in workspace folder', async () => { + test('getWorkspaceFolder() - queries in workspace folder', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const logService = new NullLogService(); const fileService = disposables.add(new FileService(logService)); @@ -136,9 +136,9 @@ suite('WorkspaceContextService - Folder', () => { const actual = testObject.getWorkspaceFolder(joinPath(folder, 'a')); assert.strictEqual(actual, testObject.getWorkspace().folders[0]); - }); + })); - test('getWorkspaceFolder() - queries in resource', async () => { + test('getWorkspaceFolder() - queries in resource', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const logService = new NullLogService(); const fileService = disposables.add(new FileService(logService)); @@ -159,7 +159,7 @@ suite('WorkspaceContextService - Folder', () => { const actual = testObject.getWorkspaceFolder(joinPath(folder, 'a').with({ query: 'myquery=1' })); assert.strictEqual(actual, testObject.getWorkspace().folders[0]); - }); + })); test('isCurrentWorkspace() => true', () => { assert.ok(testObject.isCurrentWorkspace(folder)); @@ -277,7 +277,7 @@ suite('WorkspaceContextService - Workspace Editing', () => { teardown(() => disposables.clear()); - test('add folders', async () => { + test('add folders', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await testObject.addFolders([{ uri: joinPath(ROOT, 'd') }, { uri: joinPath(ROOT, 'c') }]); const actual = testObject.getWorkspace().folders; @@ -286,9 +286,9 @@ suite('WorkspaceContextService - Workspace Editing', () => { assert.strictEqual(basename(actual[1].uri), 'b'); assert.strictEqual(basename(actual[2].uri), 'd'); assert.strictEqual(basename(actual[3].uri), 'c'); - }); + })); - test('add folders (at specific index)', async () => { + test('add folders (at specific index)', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await testObject.addFolders([{ uri: joinPath(ROOT, 'd') }, { uri: joinPath(ROOT, 'c') }], 0); const actual = testObject.getWorkspace().folders; @@ -297,9 +297,9 @@ suite('WorkspaceContextService - Workspace Editing', () => { assert.strictEqual(basename(actual[1].uri), 'c'); assert.strictEqual(basename(actual[2].uri), 'a'); assert.strictEqual(basename(actual[3].uri), 'b'); - }); + })); - test('add folders (at specific wrong index)', async () => { + test('add folders (at specific wrong index)', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await testObject.addFolders([{ uri: joinPath(ROOT, 'd') }, { uri: joinPath(ROOT, 'c') }], 10); const actual = testObject.getWorkspace().folders; @@ -308,9 +308,9 @@ suite('WorkspaceContextService - Workspace Editing', () => { assert.strictEqual(basename(actual[1].uri), 'b'); assert.strictEqual(basename(actual[2].uri), 'd'); assert.strictEqual(basename(actual[3].uri), 'c'); - }); + })); - test('add folders (with name)', async () => { + test('add folders (with name)', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await testObject.addFolders([{ uri: joinPath(ROOT, 'd'), name: 'DDD' }, { uri: joinPath(ROOT, 'c'), name: 'CCC' }]); const actual = testObject.getWorkspace().folders; @@ -321,9 +321,9 @@ suite('WorkspaceContextService - Workspace Editing', () => { assert.strictEqual(basename(actual[3].uri), 'c'); assert.strictEqual(actual[2].name, 'DDD'); assert.strictEqual(actual[3].name, 'CCC'); - }); + })); - test('add folders triggers change event', async () => { + test('add folders triggers change event', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const target = sinon.spy(); testObject.onWillChangeWorkspaceFolders(target); testObject.onDidChangeWorkspaceFolders(target); @@ -336,17 +336,17 @@ suite('WorkspaceContextService - Workspace Editing', () => { assert.deepStrictEqual(actual_1.added.map(r => r.uri.toString()), addedFolders.map(a => a.uri.toString())); assert.deepStrictEqual(actual_1.removed, []); assert.deepStrictEqual(actual_1.changed, []); - }); + })); - test('remove folders', async () => { + test('remove folders', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await testObject.removeFolders([testObject.getWorkspace().folders[0].uri]); const actual = testObject.getWorkspace().folders; assert.strictEqual(actual.length, 1); assert.strictEqual(basename(actual[0].uri), 'b'); - }); + })); - test('remove folders triggers change event', async () => { + test('remove folders triggers change event', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const target = sinon.spy(); testObject.onWillChangeWorkspaceFolders(target); testObject.onDidChangeWorkspaceFolders(target); @@ -358,9 +358,9 @@ suite('WorkspaceContextService - Workspace Editing', () => { assert.deepStrictEqual(actual_1.added, []); assert.deepStrictEqual(actual_1.removed.map(r => r.uri.toString()), [removedFolder.uri.toString()]); assert.deepStrictEqual(actual_1.changed.map(c => c.uri.toString()), [testObject.getWorkspace().folders[0].uri.toString()]); - }); + })); - test('remove folders and add them back by writing into the file', async () => { + test('remove folders and add them back by writing into the file', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const folders = testObject.getWorkspace().folders; await testObject.removeFolders([folders[0].uri]); @@ -378,9 +378,9 @@ suite('WorkspaceContextService - Workspace Editing', () => { const workspace = { folders: [{ path: folders[0].uri.path }, { path: folders[1].uri.path }] }; await fileService.writeFile(testObject.getWorkspace().configuration!, VSBuffer.fromString(JSON.stringify(workspace, null, '\t'))); await promise; - }); + })); - test('update folders (remove last and add to end)', async () => { + test('update folders (remove last and add to end)', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const target = sinon.spy(); testObject.onWillChangeWorkspaceFolders(target); testObject.onDidChangeWorkspaceFolders(target); @@ -393,9 +393,9 @@ suite('WorkspaceContextService - Workspace Editing', () => { assert.deepStrictEqual(actual_1.added.map(r => r.uri.toString()), addedFolders.map(a => a.uri.toString())); assert.deepStrictEqual(actual_1.removed.map(r_1 => r_1.uri.toString()), removedFolders.map(a_1 => a_1.toString())); assert.deepStrictEqual(actual_1.changed, []); - }); + })); - test('update folders (rename first via add and remove)', async () => { + test('update folders (rename first via add and remove)', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const target = sinon.spy(); testObject.onWillChangeWorkspaceFolders(target); testObject.onDidChangeWorkspaceFolders(target); @@ -408,9 +408,9 @@ suite('WorkspaceContextService - Workspace Editing', () => { assert.deepStrictEqual(actual_1.added, []); assert.deepStrictEqual(actual_1.removed, []); assert.deepStrictEqual(actual_1.changed.map(r => r.uri.toString()), removedFolders.map(a => a.toString())); - }); + })); - test('update folders (remove first and add to end)', async () => { + test('update folders (remove first and add to end)', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const target = sinon.spy(); testObject.onWillChangeWorkspaceFolders(target); testObject.onDidChangeWorkspaceFolders(target); @@ -424,9 +424,9 @@ suite('WorkspaceContextService - Workspace Editing', () => { assert.deepStrictEqual(actual_1.added.map(r => r.uri.toString()), addedFolders.map(a => a.uri.toString())); assert.deepStrictEqual(actual_1.removed.map(r_1 => r_1.uri.toString()), removedFolders.map(a_1 => a_1.toString())); assert.deepStrictEqual(actual_1.changed.map(r_2 => r_2.uri.toString()), changedFolders.map(a_2 => a_2.toString())); - }); + })); - test('reorder folders trigger change event', async () => { + test('reorder folders trigger change event', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const target = sinon.spy(); testObject.onWillChangeWorkspaceFolders(target); testObject.onDidChangeWorkspaceFolders(target); @@ -439,9 +439,9 @@ suite('WorkspaceContextService - Workspace Editing', () => { assert.deepStrictEqual(actual_1.added, []); assert.deepStrictEqual(actual_1.removed, []); assert.deepStrictEqual(actual_1.changed.map(c => c.uri.toString()), testObject.getWorkspace().folders.map(f => f.uri.toString()).reverse()); - }); + })); - test('rename folders trigger change event', async () => { + test('rename folders trigger change event', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const target = sinon.spy(); testObject.onWillChangeWorkspaceFolders(target); testObject.onDidChangeWorkspaceFolders(target); @@ -454,7 +454,7 @@ suite('WorkspaceContextService - Workspace Editing', () => { assert.deepStrictEqual(actual_1.added, []); assert.deepStrictEqual(actual_1.removed, []); assert.deepStrictEqual(actual_1.changed.map(c => c.uri.toString()), [testObject.getWorkspace().folders[0].uri.toString()]); - }); + })); }); @@ -522,7 +522,7 @@ suite('WorkspaceService - Initialization', () => { teardown(() => disposables.clear()); - (isMacintosh ? test.skip : test)('initialize a folder workspace from an empty workspace with no configuration changes', async () => { + (isMacintosh ? test.skip : test)('initialize a folder workspace from an empty workspace with no configuration changes', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "initialization.testSetting1": "userValue" }')); @@ -545,9 +545,9 @@ suite('WorkspaceService - Initialization', () => { assert.deepStrictEqual((target.args[3][0]).removed, []); assert.deepStrictEqual((target.args[3][0]).changed, []); - }); + })); - (isMacintosh ? test.skip : test)('initialize a folder workspace from an empty workspace with configuration changes', async () => { + (isMacintosh ? test.skip : test)('initialize a folder workspace from an empty workspace with configuration changes', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "initialization.testSetting1": "userValue" }')); @@ -572,9 +572,9 @@ suite('WorkspaceService - Initialization', () => { assert.deepStrictEqual((target.args[4][0]).removed, []); assert.deepStrictEqual((target.args[4][0]).changed, []); - }); + })); - (isMacintosh ? test.skip : test)('initialize a multi root workspace from an empty workspace with no configuration changes', async () => { + (isMacintosh ? test.skip : test)('initialize a multi root workspace from an empty workspace with no configuration changes', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "initialization.testSetting1": "userValue" }')); @@ -595,9 +595,9 @@ suite('WorkspaceService - Initialization', () => { assert.deepStrictEqual((target.args[3][0]).removed, []); assert.deepStrictEqual((target.args[3][0]).changed, []); - }); + })); - (isMacintosh ? test.skip : test)('initialize a multi root workspace from an empty workspace with configuration changes', async () => { + (isMacintosh ? test.skip : test)('initialize a multi root workspace from an empty workspace with configuration changes', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "initialization.testSetting1": "userValue" }')); @@ -621,9 +621,9 @@ suite('WorkspaceService - Initialization', () => { assert.deepStrictEqual((target.args[4][0]).removed, []); assert.deepStrictEqual((target.args[4][0]).changed, []); - }); + })); - (isMacintosh ? test.skip : test)('initialize a folder workspace from a folder workspace with no configuration changes', async () => { + (isMacintosh ? test.skip : test)('initialize a folder workspace from a folder workspace with no configuration changes', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await testObject.initialize(convertToWorkspacePayload(joinPath(ROOT, 'a'))); await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "initialization.testSetting1": "userValue" }')); @@ -643,9 +643,9 @@ suite('WorkspaceService - Initialization', () => { assert.deepStrictEqual((target.args[1][0]).removed.map(folder_2 => folder_2.uri.toString()), [joinPath(ROOT, 'a').toString()]); assert.deepStrictEqual((target.args[1][0]).changed, []); - }); + })); - (isMacintosh ? test.skip : test)('initialize a folder workspace from a folder workspace with configuration changes', async () => { + (isMacintosh ? test.skip : test)('initialize a folder workspace from a folder workspace with configuration changes', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await testObject.initialize(convertToWorkspacePayload(joinPath(ROOT, 'a'))); const target = sinon.spy(); @@ -665,9 +665,9 @@ suite('WorkspaceService - Initialization', () => { assert.deepStrictEqual((target.args[2][0]).removed.map(folder_2 => folder_2.uri.toString()), [joinPath(ROOT, 'a').toString()]); assert.deepStrictEqual((target.args[2][0]).changed, []); - }); + })); - (isMacintosh ? test.skip : test)('initialize a multi folder workspace from a folder workspacce triggers change events in the right order', async () => { + (isMacintosh ? test.skip : test)('initialize a multi folder workspace from a folder workspacce triggers change events in the right order', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await testObject.initialize(convertToWorkspacePayload(joinPath(ROOT, 'a'))); const target = sinon.spy(); testObject.onDidChangeWorkbenchState(target); @@ -686,7 +686,7 @@ suite('WorkspaceService - Initialization', () => { assert.deepStrictEqual((target.args[4][0]).added.map(folder_1 => folder_1.uri.toString()), [joinPath(ROOT, 'b').toString()]); assert.deepStrictEqual((target.args[4][0]).removed, []); assert.deepStrictEqual((target.args[4][0]).changed, []); - }); + })); }); @@ -788,39 +788,39 @@ suite('WorkspaceConfigurationService - Folder', () => { assert.deepStrictEqual(testObject.getValue('configurationService'), { 'folder': { 'applicationSetting': 'isSet', 'machineSetting': 'isSet', 'machineOverridableSetting': 'isSet', 'testSetting': 'isSet', 'languageSetting': 'isSet', 'restrictedSetting': 'isSet', 'policySetting': 'isSet' } }); }); - test('globals override defaults', async () => { + test('globals override defaults', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.testSetting": "userValue" }')); await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.folder.testSetting'), 'userValue'); - }); + })); - test('globals', async () => { + test('globals', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "testworkbench.editor.tabs": true }')); await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('testworkbench.editor.tabs'), true); - }); + })); - test('workspace settings', async () => { + test('workspace settings', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(joinPath(workspaceService.getWorkspace().folders[0].uri, '.vscode', 'settings.json'), VSBuffer.fromString('{ "testworkbench.editor.icons": true }')); await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('testworkbench.editor.icons'), true); - }); + })); - test('workspace settings override user settings', async () => { + test('workspace settings override user settings', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.testSetting": "userValue" }')); await fileService.writeFile(joinPath(workspaceService.getWorkspace().folders[0].uri, '.vscode', 'settings.json'), VSBuffer.fromString('{ "configurationService.folder.testSetting": "workspaceValue" }')); await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.folder.testSetting'), 'workspaceValue'); - }); + })); - test('machine overridable settings override user Settings', async () => { + test('machine overridable settings override user Settings', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.machineOverridableSetting": "userValue" }')); await fileService.writeFile(joinPath(workspaceService.getWorkspace().folders[0].uri, '.vscode', 'settings.json'), VSBuffer.fromString('{ "configurationService.folder.machineOverridableSetting": "workspaceValue" }')); await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.folder.machineOverridableSetting'), 'workspaceValue'); - }); + })); - test('workspace settings override user settings after defaults are registered ', async () => { + test('workspace settings override user settings after defaults are registered ', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.newSetting": "userValue" }')); await fileService.writeFile(joinPath(workspaceService.getWorkspace().folders[0].uri, '.vscode', 'settings.json'), VSBuffer.fromString('{ "configurationService.folder.newSetting": "workspaceValue" }')); await testObject.reloadConfiguration(); @@ -835,9 +835,9 @@ suite('WorkspaceConfigurationService - Folder', () => { } }); assert.strictEqual(testObject.getValue('configurationService.folder.newSetting'), 'workspaceValue'); - }); + })); - test('machine overridable settings override user settings after defaults are registered ', async () => { + test('machine overridable settings override user settings after defaults are registered ', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.newMachineOverridableSetting": "userValue" }')); await fileService.writeFile(joinPath(workspaceService.getWorkspace().folders[0].uri, '.vscode', 'settings.json'), VSBuffer.fromString('{ "configurationService.folder.newMachineOverridableSetting": "workspaceValue" }')); await testObject.reloadConfiguration(); @@ -853,45 +853,45 @@ suite('WorkspaceConfigurationService - Folder', () => { } }); assert.strictEqual(testObject.getValue('configurationService.folder.newMachineOverridableSetting'), 'workspaceValue'); - }); + })); - test('application settings are not read from workspace', async () => { + test('application settings are not read from workspace', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.applicationSetting": "userValue" }')); await fileService.writeFile(joinPath(workspaceService.getWorkspace().folders[0].uri, '.vscode', 'settings.json'), VSBuffer.fromString('{ "configurationService.folder.applicationSetting": "workspaceValue" }')); await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.folder.applicationSetting'), 'userValue'); - }); + })); - test('application settings are not read from workspace when workspace folder uri is passed', async () => { + test('application settings are not read from workspace when workspace folder uri is passed', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.applicationSetting": "userValue" }')); await fileService.writeFile(joinPath(workspaceService.getWorkspace().folders[0].uri, '.vscode', 'settings.json'), VSBuffer.fromString('{ "configurationService.folder.applicationSetting": "workspaceValue" }')); await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.folder.applicationSetting', { resource: workspaceService.getWorkspace().folders[0].uri }), 'userValue'); - }); + })); - test('machine settings are not read from workspace', async () => { + test('machine settings are not read from workspace', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.machineSetting": "userValue" }')); await fileService.writeFile(joinPath(workspaceService.getWorkspace().folders[0].uri, '.vscode', 'settings.json'), VSBuffer.fromString('{ "configurationService.folder.machineSetting": "workspaceValue" }')); await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.folder.machineSetting', { resource: workspaceService.getWorkspace().folders[0].uri }), 'userValue'); - }); + })); - test('machine settings are not read from workspace when workspace folder uri is passed', async () => { + test('machine settings are not read from workspace when workspace folder uri is passed', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.machineSetting": "userValue" }')); await fileService.writeFile(joinPath(workspaceService.getWorkspace().folders[0].uri, '.vscode', 'settings.json'), VSBuffer.fromString('{ "configurationService.folder.machineSetting": "workspaceValue" }')); await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.folder.machineSetting', { resource: workspaceService.getWorkspace().folders[0].uri }), 'userValue'); - }); + })); - test('get application scope settings are not loaded after defaults are registered', async () => { + test('get application scope settings are not loaded after defaults are registered', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.applicationSetting-2": "userValue" }')); await fileService.writeFile(joinPath(workspaceService.getWorkspace().folders[0].uri, '.vscode', 'settings.json'), VSBuffer.fromString('{ "configurationService.folder.applicationSetting-2": "workspaceValue" }')); @@ -914,9 +914,9 @@ suite('WorkspaceConfigurationService - Folder', () => { await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.folder.applicationSetting-2'), 'userValue'); - }); + })); - test('get application scope settings are not loaded after defaults are registered when workspace folder uri is passed', async () => { + test('get application scope settings are not loaded after defaults are registered when workspace folder uri is passed', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.applicationSetting-3": "userValue" }')); await fileService.writeFile(joinPath(workspaceService.getWorkspace().folders[0].uri, '.vscode', 'settings.json'), VSBuffer.fromString('{ "configurationService.folder.applicationSetting-3": "workspaceValue" }')); @@ -939,9 +939,9 @@ suite('WorkspaceConfigurationService - Folder', () => { await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.folder.applicationSetting-3', { resource: workspaceService.getWorkspace().folders[0].uri }), 'userValue'); - }); + })); - test('get machine scope settings are not loaded after defaults are registered', async () => { + test('get machine scope settings are not loaded after defaults are registered', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.machineSetting-2": "userValue" }')); await fileService.writeFile(joinPath(workspaceService.getWorkspace().folders[0].uri, '.vscode', 'settings.json'), VSBuffer.fromString('{ "configurationService.folder.machineSetting-2": "workspaceValue" }')); @@ -964,9 +964,9 @@ suite('WorkspaceConfigurationService - Folder', () => { await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.folder.machineSetting-2'), 'userValue'); - }); + })); - test('get machine scope settings are not loaded after defaults are registered when workspace folder uri is passed', async () => { + test('get machine scope settings are not loaded after defaults are registered when workspace folder uri is passed', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.machineSetting-3": "userValue" }')); await fileService.writeFile(joinPath(workspaceService.getWorkspace().folders[0].uri, '.vscode', 'settings.json'), VSBuffer.fromString('{ "configurationService.folder.machineSetting-3": "workspaceValue" }')); @@ -989,9 +989,9 @@ suite('WorkspaceConfigurationService - Folder', () => { await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.folder.machineSetting-3', { resource: workspaceService.getWorkspace().folders[0].uri }), 'userValue'); - }); + })); - test('policy value override all', async () => { + test('policy value override all', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const result = await runWithFakedTimers({ useFakeTimers: true }, async () => { const promise = Event.toPromise(testObject.onDidChangeConfiguration); await fileService.writeFile(environmentService.policyFile!, VSBuffer.fromString('{ "configurationService.folder.policySetting": "policyValue" }')); @@ -1000,33 +1000,33 @@ suite('WorkspaceConfigurationService - Folder', () => { assert.deepStrictEqual(result.affectedKeys, ['configurationService.folder.policySetting']); assert.strictEqual(testObject.getValue('configurationService.folder.policySetting'), 'policyValue'); assert.strictEqual(testObject.inspect('configurationService.folder.policySetting').policyValue, 'policyValue'); - }); + })); - test('policy settings when policy value is not set', async () => { + test('policy settings when policy value is not set', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.policySetting": "userValue" }')); await fileService.writeFile(joinPath(workspaceService.getWorkspace().folders[0].uri, '.vscode', 'settings.json'), VSBuffer.fromString('{ "configurationService.folder.policySetting": "workspaceValue" }')); await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.folder.policySetting'), 'workspaceValue'); assert.strictEqual(testObject.inspect('configurationService.folder.policySetting').policyValue, undefined); - }); + })); - test('reload configuration emits events after global configuraiton changes', async () => { + test('reload configuration emits events after global configuraiton changes', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "testworkbench.editor.tabs": true }')); const target = sinon.spy(); testObject.onDidChangeConfiguration(target); await testObject.reloadConfiguration(); assert.ok(target.called); - }); + })); - test('reload configuration emits events after workspace configuraiton changes', async () => { + test('reload configuration emits events after workspace configuraiton changes', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(joinPath(workspaceService.getWorkspace().folders[0].uri, '.vscode', 'settings.json'), VSBuffer.fromString('{ "configurationService.folder.testSetting": "workspaceValue" }')); const target = sinon.spy(); testObject.onDidChangeConfiguration(target); await testObject.reloadConfiguration(); assert.ok(target.called); - }); + })); - test('reload configuration should not emit event if no changes', async () => { + test('reload configuration should not emit event if no changes', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "testworkbench.editor.tabs": true }')); await fileService.writeFile(joinPath(workspaceService.getWorkspace().folders[0].uri, '.vscode', 'settings.json'), VSBuffer.fromString('{ "configurationService.folder.testSetting": "workspaceValue" }')); await testObject.reloadConfiguration(); @@ -1034,9 +1034,9 @@ suite('WorkspaceConfigurationService - Folder', () => { testObject.onDidChangeConfiguration(() => { target(); }); await testObject.reloadConfiguration(); assert.ok(!target.called); - }); + })); - test('inspect', async () => { + test('inspect', () => runWithFakedTimers({ useFakeTimers: true }, async () => { let actual = testObject.inspect('something.missing'); assert.strictEqual(actual.defaultValue, undefined); assert.strictEqual(actual.application, undefined); @@ -1094,9 +1094,9 @@ suite('WorkspaceConfigurationService - Folder', () => { } } }); - }); + })); - test('inspect restricted settings', async () => { + test('inspect restricted settings', () => runWithFakedTimers({ useFakeTimers: true }, async () => { testObject.updateWorkspaceTrust(false); await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.restrictedSetting": "userRestrictedValue" }')); await testObject.reloadConfiguration(); @@ -1182,9 +1182,9 @@ suite('WorkspaceConfigurationService - Folder', () => { } } }); - }); + })); - test('keys', async () => { + test('keys', () => runWithFakedTimers({ useFakeTimers: true }, async () => { let actual = testObject.keys(); assert.ok(actual.default.indexOf('configurationService.folder.testSetting') !== -1); assert.deepStrictEqual(actual.user, []); @@ -1206,7 +1206,7 @@ suite('WorkspaceConfigurationService - Folder', () => { assert.deepStrictEqual(actual.user, ['configurationService.folder.testSetting']); assert.deepStrictEqual(actual.workspace, ['configurationService.folder.testSetting']); assert.deepStrictEqual(actual.workspaceFolder, []); - }); + })); test('update user configuration', () => { return testObject.updateValue('configurationService.folder.testSetting', 'value', ConfigurationTarget.USER) @@ -1223,39 +1223,39 @@ suite('WorkspaceConfigurationService - Folder', () => { .then(() => assert.strictEqual(testObject.getValue('configurationService.folder.testSetting'), 'value')); }); - test('update language configuration using configuration overrides', async () => { + test('update language configuration using configuration overrides', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await testObject.updateValue('configurationService.folder.languageSetting', 'abcLangValue', { overrideIdentifier: 'abclang' }); assert.strictEqual(testObject.getValue('configurationService.folder.languageSetting', { overrideIdentifier: 'abclang' }), 'abcLangValue'); - }); + })); - test('update language configuration using configuration update overrides', async () => { + test('update language configuration using configuration update overrides', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await testObject.updateValue('configurationService.folder.languageSetting', 'abcLangValue', { overrideIdentifiers: ['abclang'] }); assert.strictEqual(testObject.getValue('configurationService.folder.languageSetting', { overrideIdentifier: 'abclang' }), 'abcLangValue'); - }); + })); - test('update language configuration for multiple languages', async () => { + test('update language configuration for multiple languages', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await testObject.updateValue('configurationService.folder.languageSetting', 'multiLangValue', { overrideIdentifiers: ['deflang', 'xyzlang'] }, ConfigurationTarget.USER); assert.strictEqual(testObject.getValue('configurationService.folder.languageSetting', { overrideIdentifier: 'deflang' }), 'multiLangValue'); assert.strictEqual(testObject.getValue('configurationService.folder.languageSetting', { overrideIdentifier: 'xyzlang' }), 'multiLangValue'); assert.deepStrictEqual(testObject.getValue(keyFromOverrideIdentifiers(['deflang', 'xyzlang'])), { 'configurationService.folder.languageSetting': 'multiLangValue' }); - }); + })); - test('update resource language configuration', async () => { + test('update resource language configuration', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await testObject.updateValue('configurationService.folder.languageSetting', 'value', { resource: workspaceService.getWorkspace().folders[0].uri }, ConfigurationTarget.WORKSPACE_FOLDER); assert.strictEqual(testObject.getValue('configurationService.folder.languageSetting'), 'value'); - }); + })); - test('update resource language configuration for a language using configuration overrides', async () => { + test('update resource language configuration for a language using configuration overrides', () => runWithFakedTimers({ useFakeTimers: true }, async () => { assert.strictEqual(testObject.getValue('configurationService.folder.languageSetting', { resource: workspaceService.getWorkspace().folders[0].uri, overrideIdentifier: 'jsonc' }), 'languageValue'); await testObject.updateValue('configurationService.folder.languageSetting', 'languageValueUpdated', { resource: workspaceService.getWorkspace().folders[0].uri, overrideIdentifier: 'jsonc' }, ConfigurationTarget.WORKSPACE_FOLDER); assert.strictEqual(testObject.getValue('configurationService.folder.languageSetting', { resource: workspaceService.getWorkspace().folders[0].uri, overrideIdentifier: 'jsonc' }), 'languageValueUpdated'); - }); + })); - test('update resource language configuration for a language using configuration update overrides', async () => { + test('update resource language configuration for a language using configuration update overrides', () => runWithFakedTimers({ useFakeTimers: true }, async () => { assert.strictEqual(testObject.getValue('configurationService.folder.languageSetting', { resource: workspaceService.getWorkspace().folders[0].uri, overrideIdentifier: 'jsonc' }), 'languageValue'); await testObject.updateValue('configurationService.folder.languageSetting', 'languageValueUpdated', { resource: workspaceService.getWorkspace().folders[0].uri, overrideIdentifiers: ['jsonc'] }, ConfigurationTarget.WORKSPACE_FOLDER); assert.strictEqual(testObject.getValue('configurationService.folder.languageSetting', { resource: workspaceService.getWorkspace().folders[0].uri, overrideIdentifier: 'jsonc' }), 'languageValueUpdated'); - }); + })); test('update application setting into workspace configuration in a workspace is not supported', () => { return testObject.updateValue('configurationService.folder.applicationSetting', 'workspaceValue', {}, ConfigurationTarget.WORKSPACE, true) @@ -1298,7 +1298,7 @@ suite('WorkspaceConfigurationService - Folder', () => { .then(() => assert.ok(target.called)); }); - test('remove setting from all targets', async () => { + test('remove setting from all targets', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const key = 'configurationService.folder.testSetting'; await testObject.updateValue(key, 'workspaceValue', ConfigurationTarget.WORKSPACE); await testObject.updateValue(key, 'userValue', ConfigurationTarget.USER); @@ -1310,19 +1310,19 @@ suite('WorkspaceConfigurationService - Folder', () => { assert.strictEqual(actual.userValue, undefined); assert.strictEqual(actual.workspaceValue, undefined); assert.strictEqual(actual.workspaceFolderValue, undefined); - }); + })); - test('update user configuration to default value when target is not passed', async () => { + test('update user configuration to default value when target is not passed', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await testObject.updateValue('configurationService.folder.testSetting', 'value', ConfigurationTarget.USER); await testObject.updateValue('configurationService.folder.testSetting', 'isSet'); assert.strictEqual(testObject.inspect('configurationService.folder.testSetting').userValue, undefined); - }); + })); - test('update user configuration to default value when target is passed', async () => { + test('update user configuration to default value when target is passed', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await testObject.updateValue('configurationService.folder.testSetting', 'value', ConfigurationTarget.USER); await testObject.updateValue('configurationService.folder.testSetting', 'isSet', ConfigurationTarget.USER); assert.strictEqual(testObject.inspect('configurationService.folder.testSetting').userValue, 'isSet'); - }); + })); test('update task configuration should trigger change event before promise is resolve', () => { const target = sinon.spy(); @@ -1331,19 +1331,19 @@ suite('WorkspaceConfigurationService - Folder', () => { .then(() => assert.ok(target.called)); }); - test('no change event when there are no global tasks', async () => { + test('no change event when there are no global tasks', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const target = sinon.spy(); testObject.onDidChangeConfiguration(target); await timeout(5); assert.ok(target.notCalled); - }); + })); - test('change event when there are global tasks', async () => { + test('change event when there are global tasks', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(joinPath(environmentService.userRoamingDataHome, 'tasks.json'), VSBuffer.fromString('{ "version": "1.0.0", "tasks": [{ "taskName": "myTask" }')); const promise = Event.toPromise(testObject.onDidChangeConfiguration); await testObject.reloadLocalUserConfiguration(); await promise; - }); + })); test('creating workspace settings', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.testSetting": "userValue" }')); @@ -1372,7 +1372,7 @@ suite('WorkspaceConfigurationService - Folder', () => { assert.strictEqual(testObject.getValue('configurationService.folder.testSetting'), 'userValue'); })); - test('restricted setting is read from workspace when workspace is trusted', async () => { + test('restricted setting is read from workspace when workspace is trusted', () => runWithFakedTimers({ useFakeTimers: true }, async () => { testObject.updateWorkspaceTrust(true); await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.restrictedSetting": "userValue" }')); @@ -1386,9 +1386,9 @@ suite('WorkspaceConfigurationService - Folder', () => { assert.deepStrictEqual(testObject.restrictedSettings.workspace, ['configurationService.folder.restrictedSetting']); assert.strictEqual(testObject.restrictedSettings.workspaceFolder?.size, 1); assert.deepStrictEqual(testObject.restrictedSettings.workspaceFolder?.get(workspaceService.getWorkspace().folders[0].uri), ['configurationService.folder.restrictedSetting']); - }); + })); - test('restricted setting is not read from workspace when workspace is changed to trusted', async () => { + test('restricted setting is not read from workspace when workspace is changed to trusted', () => runWithFakedTimers({ useFakeTimers: true }, async () => { testObject.updateWorkspaceTrust(true); await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.restrictedSetting": "userValue" }')); @@ -1404,9 +1404,9 @@ suite('WorkspaceConfigurationService - Folder', () => { assert.deepStrictEqual(testObject.restrictedSettings.workspace, ['configurationService.folder.restrictedSetting']); assert.strictEqual(testObject.restrictedSettings.workspaceFolder?.size, 1); assert.deepStrictEqual(testObject.restrictedSettings.workspaceFolder?.get(workspaceService.getWorkspace().folders[0].uri), ['configurationService.folder.restrictedSetting']); - }); + })); - test('change event is triggered when workspace is changed to untrusted', async () => { + test('change event is triggered when workspace is changed to untrusted', () => runWithFakedTimers({ useFakeTimers: true }, async () => { testObject.updateWorkspaceTrust(true); await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.restrictedSetting": "userValue" }')); @@ -1419,9 +1419,9 @@ suite('WorkspaceConfigurationService - Folder', () => { const event = await promise; assert.ok(event.affectedKeys.includes('configurationService.folder.restrictedSetting')); assert.ok(event.affectsConfiguration('configurationService.folder.restrictedSetting')); - }); + })); - test('restricted setting is not read from workspace when workspace is not trusted', async () => { + test('restricted setting is not read from workspace when workspace is not trusted', () => runWithFakedTimers({ useFakeTimers: true }, async () => { testObject.updateWorkspaceTrust(false); await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.restrictedSetting": "userValue" }')); @@ -1435,9 +1435,9 @@ suite('WorkspaceConfigurationService - Folder', () => { assert.deepStrictEqual(testObject.restrictedSettings.workspace, ['configurationService.folder.restrictedSetting']); assert.strictEqual(testObject.restrictedSettings.workspaceFolder?.size, 1); assert.deepStrictEqual(testObject.restrictedSettings.workspaceFolder?.get(workspaceService.getWorkspace().folders[0].uri), ['configurationService.folder.restrictedSetting']); - }); + })); - test('restricted setting is read when workspace is changed to trusted', async () => { + test('restricted setting is read when workspace is changed to trusted', () => runWithFakedTimers({ useFakeTimers: true }, async () => { testObject.updateWorkspaceTrust(false); await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.restrictedSetting": "userValue" }')); @@ -1453,9 +1453,9 @@ suite('WorkspaceConfigurationService - Folder', () => { assert.deepStrictEqual(testObject.restrictedSettings.workspace, ['configurationService.folder.restrictedSetting']); assert.strictEqual(testObject.restrictedSettings.workspaceFolder?.size, 1); assert.deepStrictEqual(testObject.restrictedSettings.workspaceFolder?.get(workspaceService.getWorkspace().folders[0].uri), ['configurationService.folder.restrictedSetting']); - }); + })); - test('change event is triggered when workspace is changed to trusted', async () => { + test('change event is triggered when workspace is changed to trusted', () => runWithFakedTimers({ useFakeTimers: true }, async () => { testObject.updateWorkspaceTrust(false); await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.restrictedSetting": "userValue" }')); @@ -1468,7 +1468,7 @@ suite('WorkspaceConfigurationService - Folder', () => { const event = await promise; assert.ok(event.affectedKeys.includes('configurationService.folder.restrictedSetting')); assert.ok(event.affectsConfiguration('configurationService.folder.restrictedSetting')); - }); + })); test('adding an restricted setting triggers change event', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.restrictedSetting": "userValue" }')); @@ -1480,7 +1480,7 @@ suite('WorkspaceConfigurationService - Folder', () => { return promise; })); - test('remove an unregistered setting', async () => { + test('remove an unregistered setting', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const key = 'configurationService.folder.unknownSetting'; await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.unknownSetting": "userValue" }')); await fileService.writeFile(joinPath(workspaceService.getWorkspace().folders[0].uri, '.vscode', 'settings.json'), VSBuffer.fromString('{ "configurationService.folder.unknownSetting": "workspaceValue" }')); @@ -1492,7 +1492,7 @@ suite('WorkspaceConfigurationService - Folder', () => { assert.strictEqual(actual.userValue, undefined); assert.strictEqual(actual.workspaceValue, undefined); assert.strictEqual(actual.workspaceFolderValue, undefined); - }); + })); }); suite('WorkspaceConfigurationService - Profiles', () => { @@ -1563,12 +1563,12 @@ suite('WorkspaceConfigurationService - Profiles', () => { teardown(() => disposables.clear()); - test('initialize', async () => { + test('initialize', () => runWithFakedTimers({ useFakeTimers: true }, async () => { assert.strictEqual(testObject.getValue('configurationService.profiles.applicationSetting2'), 'applicationValue'); assert.strictEqual(testObject.getValue('configurationService.profiles.testSetting2'), 'profileValue'); - }); + })); - test('inspect', async () => { + test('inspect', () => runWithFakedTimers({ useFakeTimers: true }, async () => { let actual = testObject.inspect('something.missing'); assert.strictEqual(actual.defaultValue, undefined); assert.strictEqual(actual.application, undefined); @@ -1606,23 +1606,23 @@ suite('WorkspaceConfigurationService - Profiles', () => { assert.strictEqual(actual.workspaceValue, undefined); assert.strictEqual(actual.workspaceFolderValue, undefined); assert.strictEqual(actual.value, 'profileValue'); - }); + })); - test('update application scope setting', async () => { + test('update application scope setting', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await testObject.updateValue('configurationService.profiles.applicationSetting', 'applicationValue'); assert.deepStrictEqual(JSON.parse((await fileService.readFile(instantiationService.get(IUserDataProfilesService).defaultProfile.settingsResource)).value.toString()), { 'configurationService.profiles.applicationSetting': 'applicationValue', 'configurationService.profiles.applicationSetting2': 'applicationValue', 'configurationService.profiles.testSetting2': 'userValue' }); assert.strictEqual(testObject.getValue('configurationService.profiles.applicationSetting'), 'applicationValue'); - }); + })); - test('update normal setting', async () => { + test('update normal setting', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await testObject.updateValue('configurationService.profiles.testSetting', 'profileValue'); assert.deepStrictEqual(JSON.parse((await fileService.readFile(userDataProfileService.currentProfile.settingsResource)).value.toString()), { 'configurationService.profiles.testSetting': 'profileValue', 'configurationService.profiles.testSetting2': 'profileValue', 'configurationService.profiles.applicationSetting2': 'profileValue' }); assert.strictEqual(testObject.getValue('configurationService.profiles.testSetting'), 'profileValue'); - }); + })); - test('switch to default profile', async () => { + test('switch to default profile', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(instantiationService.get(IUserDataProfilesService).defaultProfile.settingsResource, VSBuffer.fromString('{ "configurationService.profiles.applicationSetting": "applicationValue", "configurationService.profiles.testSetting": "userValue" }')); await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.profiles.applicationSetting": "profileValue", "configurationService.profiles.testSetting": "profileValue" }')); await testObject.reloadConfiguration(); @@ -1634,9 +1634,9 @@ suite('WorkspaceConfigurationService - Profiles', () => { assert.deepStrictEqual(changeEvent.affectedKeys, ['configurationService.profiles.testSetting']); assert.strictEqual(testObject.getValue('configurationService.profiles.applicationSetting'), 'applicationValue'); assert.strictEqual(testObject.getValue('configurationService.profiles.testSetting'), 'userValue'); - }); + })); - test('switch to non default profile', async () => { + test('switch to non default profile', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(instantiationService.get(IUserDataProfilesService).defaultProfile.settingsResource, VSBuffer.fromString('{ "configurationService.profiles.applicationSetting": "applicationValue", "configurationService.profiles.testSetting": "userValue" }')); await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.profiles.applicationSetting": "profileValue", "configurationService.profiles.testSetting": "profileValue" }')); await testObject.reloadConfiguration(); @@ -1650,7 +1650,7 @@ suite('WorkspaceConfigurationService - Profiles', () => { assert.deepStrictEqual(changeEvent.affectedKeys, ['configurationService.profiles.testSetting']); assert.strictEqual(testObject.getValue('configurationService.profiles.applicationSetting'), 'applicationValue'); assert.strictEqual(testObject.getValue('configurationService.profiles.testSetting'), 'profileValue2'); - }); + })); }); @@ -1757,43 +1757,43 @@ suite('WorkspaceConfigurationService-Multiroot', () => { teardown(() => disposables.clear()); - test('application settings are not read from workspace', async () => { + test('application settings are not read from workspace', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.applicationSetting": "userValue" }')); await jsonEditingServce.write(workspaceContextService.getWorkspace().configuration!, [{ path: ['settings'], value: { 'configurationService.workspace.applicationSetting': 'workspaceValue' } }], true); await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.folder.applicationSetting'), 'userValue'); - }); + })); - test('application settings are not read from workspace when folder is passed', async () => { + test('application settings are not read from workspace when folder is passed', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.applicationSetting": "userValue" }')); await jsonEditingServce.write(workspaceContextService.getWorkspace().configuration!, [{ path: ['settings'], value: { 'configurationService.workspace.applicationSetting': 'workspaceValue' } }], true); await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.folder.applicationSetting', { resource: workspaceContextService.getWorkspace().folders[0].uri }), 'userValue'); - }); + })); - test('machine settings are not read from workspace', async () => { + test('machine settings are not read from workspace', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.machineSetting": "userValue" }')); await jsonEditingServce.write(workspaceContextService.getWorkspace().configuration!, [{ path: ['settings'], value: { 'configurationService.workspace.machineSetting': 'workspaceValue' } }], true); await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.folder.machineSetting'), 'userValue'); - }); + })); - test('machine settings are not read from workspace when folder is passed', async () => { + test('machine settings are not read from workspace when folder is passed', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.folder.machineSetting": "userValue" }')); await jsonEditingServce.write(workspaceContextService.getWorkspace().configuration!, [{ path: ['settings'], value: { 'configurationService.workspace.machineSetting': 'workspaceValue' } }], true); await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.folder.machineSetting', { resource: workspaceContextService.getWorkspace().folders[0].uri }), 'userValue'); - }); + })); - test('get application scope settings are not loaded after defaults are registered', async () => { + test('get application scope settings are not loaded after defaults are registered', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.workspace.newSetting": "userValue" }')); await jsonEditingServce.write(workspaceContextService.getWorkspace().configuration!, [{ path: ['settings'], value: { 'configurationService.workspace.newSetting': 'workspaceValue' } }], true); @@ -1816,9 +1816,9 @@ suite('WorkspaceConfigurationService-Multiroot', () => { await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.workspace.newSetting'), 'userValue'); - }); + })); - test('get application scope settings are not loaded after defaults are registered when workspace folder is passed', async () => { + test('get application scope settings are not loaded after defaults are registered when workspace folder is passed', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.workspace.newSetting-2": "userValue" }')); await jsonEditingServce.write(workspaceContextService.getWorkspace().configuration!, [{ path: ['settings'], value: { 'configurationService.workspace.newSetting-2': 'workspaceValue' } }], true); @@ -1841,9 +1841,9 @@ suite('WorkspaceConfigurationService-Multiroot', () => { await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.workspace.newSetting-2', { resource: workspaceContextService.getWorkspace().folders[0].uri }), 'userValue'); - }); + })); - test('workspace settings override user settings after defaults are registered for machine overridable settings ', async () => { + test('workspace settings override user settings after defaults are registered for machine overridable settings ', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.workspace.newMachineOverridableSetting": "userValue" }')); await jsonEditingServce.write(workspaceContextService.getWorkspace().configuration!, [{ path: ['settings'], value: { 'configurationService.workspace.newMachineOverridableSetting': 'workspaceValue' } }], true); @@ -1867,45 +1867,45 @@ suite('WorkspaceConfigurationService-Multiroot', () => { await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.workspace.newMachineOverridableSetting'), 'workspaceValue'); - }); + })); - test('application settings are not read from workspace folder', async () => { + test('application settings are not read from workspace folder', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.workspace.applicationSetting": "userValue" }')); await fileService.writeFile(workspaceContextService.getWorkspace().folders[0].toResource('.vscode/settings.json'), VSBuffer.fromString('{ "configurationService.workspace.applicationSetting": "workspaceFolderValue" }')); await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.workspace.applicationSetting'), 'userValue'); - }); + })); - test('application settings are not read from workspace folder when workspace folder is passed', async () => { + test('application settings are not read from workspace folder when workspace folder is passed', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.workspace.applicationSetting": "userValue" }')); await fileService.writeFile(workspaceContextService.getWorkspace().folders[0].toResource('.vscode/settings.json'), VSBuffer.fromString('{ "configurationService.workspace.applicationSetting": "workspaceFolderValue" }')); await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.workspace.applicationSetting', { resource: workspaceContextService.getWorkspace().folders[0].uri }), 'userValue'); - }); + })); - test('machine settings are not read from workspace folder', async () => { + test('machine settings are not read from workspace folder', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.workspace.machineSetting": "userValue" }')); await fileService.writeFile(workspaceContextService.getWorkspace().folders[0].toResource('.vscode/settings.json'), VSBuffer.fromString('{ "configurationService.workspace.machineSetting": "workspaceFolderValue" }')); await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.workspace.machineSetting'), 'userValue'); - }); + })); - test('machine settings are not read from workspace folder when workspace folder is passed', async () => { + test('machine settings are not read from workspace folder when workspace folder is passed', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.workspace.machineSetting": "userValue" }')); await fileService.writeFile(workspaceContextService.getWorkspace().folders[0].toResource('.vscode/settings.json'), VSBuffer.fromString('{ "configurationService.workspace.machineSetting": "workspaceFolderValue" }')); await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.workspace.machineSetting', { resource: workspaceContextService.getWorkspace().folders[0].uri }), 'userValue'); - }); + })); - test('application settings are not read from workspace folder after defaults are registered', async () => { + test('application settings are not read from workspace folder after defaults are registered', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.workspace.testNewApplicationSetting": "userValue" }')); await fileService.writeFile(workspaceContextService.getWorkspace().folders[0].toResource('.vscode/settings.json'), VSBuffer.fromString('{ "configurationService.workspace.testNewApplicationSetting": "workspaceFolderValue" }')); @@ -1928,9 +1928,9 @@ suite('WorkspaceConfigurationService-Multiroot', () => { await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.workspace.testNewApplicationSetting', { resource: workspaceContextService.getWorkspace().folders[0].uri }), 'userValue'); - }); + })); - test('application settings are not read from workspace folder after defaults are registered', async () => { + test('application settings are not read from workspace folder after defaults are registered', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.workspace.testNewMachineSetting": "userValue" }')); await fileService.writeFile(workspaceContextService.getWorkspace().folders[0].toResource('.vscode/settings.json'), VSBuffer.fromString('{ "configurationService.workspace.testNewMachineSetting": "workspaceFolderValue" }')); await testObject.reloadConfiguration(); @@ -1953,9 +1953,9 @@ suite('WorkspaceConfigurationService-Multiroot', () => { await testObject.reloadConfiguration(); assert.strictEqual(testObject.getValue('configurationService.workspace.testNewMachineSetting', { resource: workspaceContextService.getWorkspace().folders[0].uri }), 'userValue'); - }); + })); - test('resource setting in folder is read after it is registered later', async () => { + test('resource setting in folder is read after it is registered later', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(workspaceContextService.getWorkspace().folders[0].toResource('.vscode/settings.json'), VSBuffer.fromString('{ "configurationService.workspace.testNewResourceSetting2": "workspaceFolderValue" }')); await jsonEditingServce.write((workspaceContextService.getWorkspace().configuration!), [{ path: ['settings'], value: { 'configurationService.workspace.testNewResourceSetting2': 'workspaceValue' } }], true); await testObject.reloadConfiguration(); @@ -1971,9 +1971,9 @@ suite('WorkspaceConfigurationService-Multiroot', () => { } }); assert.strictEqual(testObject.getValue('configurationService.workspace.testNewResourceSetting2', { resource: workspaceContextService.getWorkspace().folders[0].uri }), 'workspaceFolderValue'); - }); + })); - test('resource language setting in folder is read after it is registered later', async () => { + test('resource language setting in folder is read after it is registered later', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(workspaceContextService.getWorkspace().folders[0].toResource('.vscode/settings.json'), VSBuffer.fromString('{ "configurationService.workspace.testNewResourceLanguageSetting2": "workspaceFolderValue" }')); await jsonEditingServce.write((workspaceContextService.getWorkspace().configuration!), [{ path: ['settings'], value: { 'configurationService.workspace.testNewResourceLanguageSetting2': 'workspaceValue' } }], true); await testObject.reloadConfiguration(); @@ -1989,9 +1989,9 @@ suite('WorkspaceConfigurationService-Multiroot', () => { } }); assert.strictEqual(testObject.getValue('configurationService.workspace.testNewResourceLanguageSetting2', { resource: workspaceContextService.getWorkspace().folders[0].uri }), 'workspaceFolderValue'); - }); + })); - test('machine overridable setting in folder is read after it is registered later', async () => { + test('machine overridable setting in folder is read after it is registered later', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(workspaceContextService.getWorkspace().folders[0].toResource('.vscode/settings.json'), VSBuffer.fromString('{ "configurationService.workspace.testNewMachineOverridableSetting2": "workspaceFolderValue" }')); await jsonEditingServce.write((workspaceContextService.getWorkspace().configuration!), [{ path: ['settings'], value: { 'configurationService.workspace.testNewMachineOverridableSetting2': 'workspaceValue' } }], true); await testObject.reloadConfiguration(); @@ -2007,9 +2007,9 @@ suite('WorkspaceConfigurationService-Multiroot', () => { } }); assert.strictEqual(testObject.getValue('configurationService.workspace.testNewMachineOverridableSetting2', { resource: workspaceContextService.getWorkspace().folders[0].uri }), 'workspaceFolderValue'); - }); + })); - test('inspect', async () => { + test('inspect', () => runWithFakedTimers({ useFakeTimers: true }, async () => { let actual = testObject.inspect('something.missing'); assert.strictEqual(actual.defaultValue, undefined); assert.strictEqual(actual.userValue, undefined); @@ -2050,9 +2050,9 @@ suite('WorkspaceConfigurationService-Multiroot', () => { assert.strictEqual(actual.workspaceValue, 'workspaceValue'); assert.strictEqual(actual.workspaceFolderValue, 'workspaceFolderValue'); assert.strictEqual(actual.value, 'workspaceFolderValue'); - }); + })); - test('inspect restricted settings', async () => { + test('inspect restricted settings', () => runWithFakedTimers({ useFakeTimers: true }, async () => { testObject.updateWorkspaceTrust(false); await jsonEditingServce.write((workspaceContextService.getWorkspace().configuration!), [{ path: ['settings'], value: { 'configurationService.workspace.testRestrictedSetting1': 'workspaceRestrictedValue' } }], true); await testObject.reloadConfiguration(); @@ -2094,9 +2094,9 @@ suite('WorkspaceConfigurationService-Multiroot', () => { assert.strictEqual(actual.workspaceValue, 'workspaceRestrictedValue'); assert.strictEqual(actual.workspaceFolderValue, 'workspaceFolderRestrictedValue'); assert.strictEqual(actual.value, 'workspaceFolderRestrictedValue'); - }); + })); - test('get launch configuration', async () => { + test('get launch configuration', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const expectedLaunchConfiguration = { 'version': '0.1.0', 'configurations': [ @@ -2117,9 +2117,9 @@ suite('WorkspaceConfigurationService-Multiroot', () => { await testObject.reloadConfiguration(); const actual = testObject.getValue('launch'); assert.deepStrictEqual(actual, expectedLaunchConfiguration); - }); + })); - test('inspect launch configuration', async () => { + test('inspect launch configuration', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const expectedLaunchConfiguration = { 'version': '0.1.0', 'configurations': [ @@ -2140,10 +2140,10 @@ suite('WorkspaceConfigurationService-Multiroot', () => { await testObject.reloadConfiguration(); const actual = testObject.inspect('launch').workspaceValue; assert.deepStrictEqual(actual, expectedLaunchConfiguration); - }); + })); - test('get tasks configuration', async () => { + test('get tasks configuration', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const expectedTasksConfiguration = { 'version': '2.0.0', 'tasks': [ @@ -2162,9 +2162,9 @@ suite('WorkspaceConfigurationService-Multiroot', () => { await testObject.reloadConfiguration(); const actual = testObject.getValue(TasksSchemaProperties.Tasks); assert.deepStrictEqual(actual, expectedTasksConfiguration); - }); + })); - test('inspect tasks configuration', async () => { + test('inspect tasks configuration', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const expectedTasksConfiguration = { 'version': '2.0.0', 'tasks': [ @@ -2183,31 +2183,31 @@ suite('WorkspaceConfigurationService-Multiroot', () => { await testObject.reloadConfiguration(); const actual = testObject.inspect('tasks').workspaceValue; assert.deepStrictEqual(actual, expectedTasksConfiguration); - }); + })); - test('update user configuration', async () => { + test('update user configuration', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await testObject.updateValue('configurationService.workspace.testSetting', 'userValue', ConfigurationTarget.USER); assert.strictEqual(testObject.getValue('configurationService.workspace.testSetting'), 'userValue'); - }); + })); - test('update user configuration should trigger change event before promise is resolve', async () => { + test('update user configuration should trigger change event before promise is resolve', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const target = sinon.spy(); testObject.onDidChangeConfiguration(target); await testObject.updateValue('configurationService.workspace.testSetting', 'userValue', ConfigurationTarget.USER); assert.ok(target.called); - }); + })); - test('update workspace configuration', async () => { + test('update workspace configuration', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await testObject.updateValue('configurationService.workspace.testSetting', 'workspaceValue', ConfigurationTarget.WORKSPACE); assert.strictEqual(testObject.getValue('configurationService.workspace.testSetting'), 'workspaceValue'); - }); + })); - test('update workspace configuration should trigger change event before promise is resolve', async () => { + test('update workspace configuration should trigger change event before promise is resolve', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const target = sinon.spy(); testObject.onDidChangeConfiguration(target); await testObject.updateValue('configurationService.workspace.testSetting', 'workspaceValue', ConfigurationTarget.WORKSPACE); assert.ok(target.called); - }); + })); test('update application setting into workspace configuration in a workspace is not supported', () => { return testObject.updateValue('configurationService.workspace.applicationSetting', 'workspaceValue', {}, ConfigurationTarget.WORKSPACE, true) @@ -2225,48 +2225,48 @@ suite('WorkspaceConfigurationService-Multiroot', () => { .then(() => assert.strictEqual(testObject.getValue('configurationService.workspace.testResourceSetting', { resource: workspace.folders[0].uri }), 'workspaceFolderValue')); }); - test('update resource language configuration in workspace folder', async () => { + test('update resource language configuration in workspace folder', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const workspace = workspaceContextService.getWorkspace(); await testObject.updateValue('configurationService.workspace.testLanguageSetting', 'workspaceFolderValue', { resource: workspace.folders[0].uri }, ConfigurationTarget.WORKSPACE_FOLDER); assert.strictEqual(testObject.getValue('configurationService.workspace.testLanguageSetting', { resource: workspace.folders[0].uri }), 'workspaceFolderValue'); - }); + })); - test('update workspace folder configuration should trigger change event before promise is resolve', async () => { + test('update workspace folder configuration should trigger change event before promise is resolve', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const workspace = workspaceContextService.getWorkspace(); const target = sinon.spy(); testObject.onDidChangeConfiguration(target); await testObject.updateValue('configurationService.workspace.testResourceSetting', 'workspaceFolderValue', { resource: workspace.folders[0].uri }, ConfigurationTarget.WORKSPACE_FOLDER); assert.ok(target.called); - }); + })); - test('update workspace folder configuration second time should trigger change event before promise is resolve', async () => { + test('update workspace folder configuration second time should trigger change event before promise is resolve', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const workspace = workspaceContextService.getWorkspace(); await testObject.updateValue('configurationService.workspace.testResourceSetting', 'workspaceFolderValue', { resource: workspace.folders[0].uri }, ConfigurationTarget.WORKSPACE_FOLDER); const target = sinon.spy(); testObject.onDidChangeConfiguration(target); await testObject.updateValue('configurationService.workspace.testResourceSetting', 'workspaceFolderValue2', { resource: workspace.folders[0].uri }, ConfigurationTarget.WORKSPACE_FOLDER); assert.ok(target.called); - }); + })); - test('update machine overridable setting in folder', async () => { + test('update machine overridable setting in folder', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const workspace = workspaceContextService.getWorkspace(); await testObject.updateValue('configurationService.workspace.machineOverridableSetting', 'workspaceFolderValue', { resource: workspace.folders[0].uri }, ConfigurationTarget.WORKSPACE_FOLDER); assert.strictEqual(testObject.getValue('configurationService.workspace.machineOverridableSetting', { resource: workspace.folders[0].uri }), 'workspaceFolderValue'); - }); + })); - test('update memory configuration', async () => { + test('update memory configuration', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await testObject.updateValue('configurationService.workspace.testSetting', 'memoryValue', ConfigurationTarget.MEMORY); assert.strictEqual(testObject.getValue('configurationService.workspace.testSetting'), 'memoryValue'); - }); + })); - test('update memory configuration should trigger change event before promise is resolve', async () => { + test('update memory configuration should trigger change event before promise is resolve', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const target = sinon.spy(); testObject.onDidChangeConfiguration(target); await testObject.updateValue('configurationService.workspace.testSetting', 'memoryValue', ConfigurationTarget.MEMORY); assert.ok(target.called); - }); + })); - test('remove setting from all targets', async () => { + test('remove setting from all targets', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const workspace = workspaceContextService.getWorkspace(); const key = 'configurationService.workspace.testResourceSetting'; await testObject.updateValue(key, 'workspaceFolderValue', { resource: workspace.folders[0].uri }, ConfigurationTarget.WORKSPACE_FOLDER); @@ -2280,28 +2280,28 @@ suite('WorkspaceConfigurationService-Multiroot', () => { assert.strictEqual(actual.userValue, undefined); assert.strictEqual(actual.workspaceValue, undefined); assert.strictEqual(actual.workspaceFolderValue, undefined); - }); + })); - test('update tasks configuration in a folder', async () => { + test('update tasks configuration in a folder', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const workspace = workspaceContextService.getWorkspace(); await testObject.updateValue('tasks', { 'version': '1.0.0', tasks: [{ 'taskName': 'myTask' }] }, { resource: workspace.folders[0].uri }, ConfigurationTarget.WORKSPACE_FOLDER); assert.deepStrictEqual(testObject.getValue(TasksSchemaProperties.Tasks, { resource: workspace.folders[0].uri }), { 'version': '1.0.0', tasks: [{ 'taskName': 'myTask' }] }); - }); + })); - test('update launch configuration in a workspace', async () => { + test('update launch configuration in a workspace', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const workspace = workspaceContextService.getWorkspace(); await testObject.updateValue('launch', { 'version': '1.0.0', configurations: [{ 'name': 'myLaunch' }] }, { resource: workspace.folders[0].uri }, ConfigurationTarget.WORKSPACE, true); assert.deepStrictEqual(testObject.getValue('launch'), { 'version': '1.0.0', configurations: [{ 'name': 'myLaunch' }] }); - }); + })); - test('update tasks configuration in a workspace', async () => { + test('update tasks configuration in a workspace', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const workspace = workspaceContextService.getWorkspace(); const tasks = { 'version': '2.0.0', tasks: [{ 'label': 'myTask' }] }; await testObject.updateValue('tasks', tasks, { resource: workspace.folders[0].uri }, ConfigurationTarget.WORKSPACE, true); assert.deepStrictEqual(testObject.getValue(TasksSchemaProperties.Tasks), tasks); - }); + })); - test('configuration of newly added folder is available on configuration change event', async () => { + test('configuration of newly added folder is available on configuration change event', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const workspaceService = testObject; const uri = workspaceService.getWorkspace().folders[1].uri; await workspaceService.removeFolders([uri]); @@ -2318,9 +2318,9 @@ suite('WorkspaceConfigurationService-Multiroot', () => { }); workspaceService.addFolders([{ uri }]); }); - }); + })); - test('restricted setting is read from workspace folders when workspace is trusted', async () => { + test('restricted setting is read from workspace folders when workspace is trusted', () => runWithFakedTimers({ useFakeTimers: true }, async () => { testObject.updateWorkspaceTrust(true); await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.workspace.testRestrictedSetting1": "userValue", "configurationService.workspace.testRestrictedSetting2": "userValue" }')); @@ -2338,9 +2338,9 @@ suite('WorkspaceConfigurationService-Multiroot', () => { assert.strictEqual(testObject.restrictedSettings.workspaceFolder?.size, 1); assert.strictEqual(testObject.restrictedSettings.workspaceFolder?.get(testObject.getWorkspace().folders[0].uri), undefined); assert.deepStrictEqual(testObject.restrictedSettings.workspaceFolder?.get(testObject.getWorkspace().folders[1].uri), ['configurationService.workspace.testRestrictedSetting2']); - }); + })); - test('restricted setting is not read from workspace when workspace is not trusted', async () => { + test('restricted setting is not read from workspace when workspace is not trusted', () => runWithFakedTimers({ useFakeTimers: true }, async () => { testObject.updateWorkspaceTrust(false); await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.workspace.testRestrictedSetting1": "userValue", "configurationService.workspace.testRestrictedSetting2": "userValue" }')); @@ -2358,9 +2358,9 @@ suite('WorkspaceConfigurationService-Multiroot', () => { assert.strictEqual(testObject.restrictedSettings.workspaceFolder?.size, 1); assert.strictEqual(testObject.restrictedSettings.workspaceFolder?.get(testObject.getWorkspace().folders[0].uri), undefined); assert.deepStrictEqual(testObject.restrictedSettings.workspaceFolder?.get(testObject.getWorkspace().folders[1].uri), ['configurationService.workspace.testRestrictedSetting2']); - }); + })); - test('remove an unregistered setting', async () => { + test('remove an unregistered setting', () => runWithFakedTimers({ useFakeTimers: true }, async () => { const key = 'configurationService.workspace.unknownSetting'; await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.workspace.unknownSetting": "userValue" }')); await jsonEditingServce.write((workspaceContextService.getWorkspace().configuration!), [{ path: ['settings'], value: { 'configurationService.workspace.unknownSetting': 'workspaceValue' } }], true); @@ -2380,7 +2380,7 @@ suite('WorkspaceConfigurationService-Multiroot', () => { assert.strictEqual(actual.userValue, undefined); assert.strictEqual(actual.workspaceValue, undefined); assert.strictEqual(actual.workspaceFolderValue, undefined); - }); + })); }); @@ -2474,23 +2474,23 @@ suite('WorkspaceConfigurationService - Remote Folder', () => { teardown(() => disposables.clear()); - test('remote settings override globals', async () => { + test('remote settings override globals', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(machineSettingsResource, VSBuffer.fromString('{ "configurationService.remote.machineSetting": "remoteValue" }')); registerRemoteFileSystemProvider(); resolveRemoteEnvironment(); await initialize(); assert.strictEqual(testObject.getValue('configurationService.remote.machineSetting'), 'remoteValue'); - }); + })); - test('remote settings override globals after remote provider is registered on activation', async () => { + test('remote settings override globals after remote provider is registered on activation', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(machineSettingsResource, VSBuffer.fromString('{ "configurationService.remote.machineSetting": "remoteValue" }')); resolveRemoteEnvironment(); registerRemoteFileSystemProviderOnActivation(); await initialize(); assert.strictEqual(testObject.getValue('configurationService.remote.machineSetting'), 'remoteValue'); - }); + })); - test('remote settings override globals after remote environment is resolved', async () => { + test('remote settings override globals after remote environment is resolved', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(machineSettingsResource, VSBuffer.fromString('{ "configurationService.remote.machineSetting": "remoteValue" }')); registerRemoteFileSystemProvider(); await initialize(); @@ -2508,9 +2508,9 @@ suite('WorkspaceConfigurationService - Remote Folder', () => { }); resolveRemoteEnvironment(); return promise; - }); + })); - test('remote settings override globals after remote provider is registered on activation and remote environment is resolved', async () => { + test('remote settings override globals after remote provider is registered on activation and remote environment is resolved', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(machineSettingsResource, VSBuffer.fromString('{ "configurationService.remote.machineSetting": "remoteValue" }')); registerRemoteFileSystemProviderOnActivation(); await initialize(); @@ -2528,52 +2528,52 @@ suite('WorkspaceConfigurationService - Remote Folder', () => { }); resolveRemoteEnvironment(); return promise; - }); + })); - test('machine settings in local user settings does not override defaults', async () => { + test('machine settings in local user settings does not override defaults', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.remote.machineSetting": "globalValue" }')); registerRemoteFileSystemProvider(); resolveRemoteEnvironment(); await initialize(); assert.strictEqual(testObject.getValue('configurationService.remote.machineSetting'), 'isSet'); - }); + })); - test('machine overridable settings in local user settings does not override defaults', async () => { + test('machine overridable settings in local user settings does not override defaults', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.remote.machineOverridableSetting": "globalValue" }')); registerRemoteFileSystemProvider(); resolveRemoteEnvironment(); await initialize(); assert.strictEqual(testObject.getValue('configurationService.remote.machineOverridableSetting'), 'isSet'); - }); + })); - test('non machine setting is written in local settings', async () => { + test('non machine setting is written in local settings', () => runWithFakedTimers({ useFakeTimers: true }, async () => { registerRemoteFileSystemProvider(); resolveRemoteEnvironment(); await initialize(); await testObject.updateValue('configurationService.remote.applicationSetting', 'applicationValue'); await testObject.reloadConfiguration(); assert.strictEqual(testObject.inspect('configurationService.remote.applicationSetting').userLocalValue, 'applicationValue'); - }); + })); - test('machine setting is written in remote settings', async () => { + test('machine setting is written in remote settings', () => runWithFakedTimers({ useFakeTimers: true }, async () => { registerRemoteFileSystemProvider(); resolveRemoteEnvironment(); await initialize(); await testObject.updateValue('configurationService.remote.machineSetting', 'machineValue'); await testObject.reloadConfiguration(); assert.strictEqual(testObject.inspect('configurationService.remote.machineSetting').userRemoteValue, 'machineValue'); - }); + })); - test('machine overridable setting is written in remote settings', async () => { + test('machine overridable setting is written in remote settings', () => runWithFakedTimers({ useFakeTimers: true }, async () => { registerRemoteFileSystemProvider(); resolveRemoteEnvironment(); await initialize(); await testObject.updateValue('configurationService.remote.machineOverridableSetting', 'machineValue'); await testObject.reloadConfiguration(); assert.strictEqual(testObject.inspect('configurationService.remote.machineOverridableSetting').userRemoteValue, 'machineValue'); - }); + })); - test('machine settings in local user settings does not override defaults after defalts are registered ', async () => { + test('machine settings in local user settings does not override defaults after defalts are registered ', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.remote.newMachineSetting": "userValue" }')); registerRemoteFileSystemProvider(); resolveRemoteEnvironment(); @@ -2590,9 +2590,9 @@ suite('WorkspaceConfigurationService - Remote Folder', () => { } }); assert.strictEqual(testObject.getValue('configurationService.remote.newMachineSetting'), 'isSet'); - }); + })); - test('machine overridable settings in local user settings does not override defaults after defaults are registered ', async () => { + test('machine overridable settings in local user settings does not override defaults after defaults are registered ', () => runWithFakedTimers({ useFakeTimers: true }, async () => { await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.remote.newMachineOverridableSetting": "userValue" }')); registerRemoteFileSystemProvider(); resolveRemoteEnvironment(); @@ -2609,7 +2609,7 @@ suite('WorkspaceConfigurationService - Remote Folder', () => { } }); assert.strictEqual(testObject.getValue('configurationService.remote.newMachineOverridableSetting'), 'isSet'); - }); + })); }); diff --git a/src/vs/workbench/services/views/test/browser/viewContainerModel.test.ts b/src/vs/workbench/services/views/test/browser/viewContainerModel.test.ts index 06e375acf9de2..8fea43d88920c 100644 --- a/src/vs/workbench/services/views/test/browser/viewContainerModel.test.ts +++ b/src/vs/workbench/services/views/test/browser/viewContainerModel.test.ts @@ -18,6 +18,7 @@ import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; import { Event } from 'vs/base/common/event'; import { getViewsStateStorageId } from 'vs/workbench/services/views/common/viewContainerModel'; +import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler'; const ViewContainerRegistry = Registry.as(ViewContainerExtensions.ViewContainersRegistry); const ViewsRegistry = Registry.as(ViewContainerExtensions.ViewsRegistry); @@ -95,7 +96,7 @@ suite('ViewContainerModel', () => { assert.strictEqual(target.elements.length, 0); }); - test('when contexts', async function () { + test('when contexts', () => runWithFakedTimers({ useFakeTimers: true }, async () => { container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); @@ -137,9 +138,9 @@ suite('ViewContainerModel', () => { await new Promise(c => setTimeout(c, 30)); assert.strictEqual(testObject.visibleViewDescriptors.length, 0, 'view should not be there anymore'); assert.strictEqual(target.elements.length, 0); - }); + })); - test('when contexts - multiple', async function () { + test('when contexts - multiple', () => runWithFakedTimers({ useFakeTimers: true }, async () => { container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); @@ -160,9 +161,9 @@ suite('ViewContainerModel', () => { assert.deepStrictEqual(target.elements, [view1, view2], 'both views should be visible'); ViewsRegistry.deregisterViews([view1, view2], container); - }); + })); - test('when contexts - multiple 2', async function () { + test('when contexts - multiple 2', () => runWithFakedTimers({ useFakeTimers: true }, async () => { container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); @@ -183,7 +184,7 @@ suite('ViewContainerModel', () => { assert.deepStrictEqual(target.elements, [view1, view2], 'both views should be visible'); ViewsRegistry.deregisterViews([view1, view2], container); - }); + })); test('setVisible', () => { container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); @@ -259,7 +260,7 @@ suite('ViewContainerModel', () => { assert.deepStrictEqual(target.elements, [view1, view2, view3]); }); - test('view states', async function () { + test('view states', () => runWithFakedTimers({ useFakeTimers: true }, async () => { storageService.store(`${container.id}.state.hidden`, JSON.stringify([{ id: 'view1', isHidden: true }]), StorageScope.PROFILE, StorageTarget.MACHINE); container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); @@ -277,9 +278,9 @@ suite('ViewContainerModel', () => { ViewsRegistry.registerViews([viewDescriptor], container); assert.strictEqual(testObject.visibleViewDescriptors.length, 0, 'view should not appear since it was set not visible in view state'); assert.strictEqual(target.elements.length, 0); - }); + })); - test('view states and when contexts', async function () { + test('view states and when contexts', () => runWithFakedTimers({ useFakeTimers: true }, async () => { storageService.store(`${container.id}.state.hidden`, JSON.stringify([{ id: 'view1', isHidden: true }]), StorageScope.PROFILE, StorageTarget.MACHINE); container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); @@ -307,9 +308,9 @@ suite('ViewContainerModel', () => { await new Promise(c => setTimeout(c, 30)); assert.strictEqual(testObject.visibleViewDescriptors.length, 0, 'view should still not appear since it was set not visible in view state'); assert.strictEqual(target.elements.length, 0); - }); + })); - test('view states and when contexts multiple views', async function () { + test('view states and when contexts multiple views', () => runWithFakedTimers({ useFakeTimers: true }, async () => { storageService.store(`${container.id}.state.hidden`, JSON.stringify([{ id: 'view1', isHidden: true }]), StorageScope.PROFILE, StorageTarget.MACHINE); container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); @@ -353,9 +354,9 @@ suite('ViewContainerModel', () => { await new Promise(c => setTimeout(c, 30)); assert.deepStrictEqual(testObject.visibleViewDescriptors, [view2], 'Only view2 should be visible'); assert.deepStrictEqual(target.elements, [view2]); - }); + })); - test('remove event is not triggered if view was hidden and removed', async function () { + test('remove event is not triggered if view was hidden and removed', () => runWithFakedTimers({ useFakeTimers: true }, async () => { container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); @@ -383,9 +384,9 @@ suite('ViewContainerModel', () => { key.set(false); await new Promise(c => setTimeout(c, 30)); assert.ok(!targetEvent.called, 'remove event should not be called since it is already hidden'); - }); + })); - test('add event is not triggered if view was set visible (when visible) and not active', async function () { + test('add event is not triggered if view was set visible (when visible) and not active', () => runWithFakedTimers({ useFakeTimers: true }, async () => { container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); @@ -410,9 +411,9 @@ suite('ViewContainerModel', () => { assert.ok(!targetEvent.called, 'add event should not be called since it is already visible'); assert.strictEqual(testObject.visibleViewDescriptors.length, 0); assert.strictEqual(target.elements.length, 0); - }); + })); - test('remove event is not triggered if view was hidden and not active', async function () { + test('remove event is not triggered if view was hidden and not active', () => runWithFakedTimers({ useFakeTimers: true }, async () => { container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); @@ -437,9 +438,9 @@ suite('ViewContainerModel', () => { assert.ok(!targetEvent.called, 'add event should not be called since it is disabled'); assert.strictEqual(testObject.visibleViewDescriptors.length, 0); assert.strictEqual(target.elements.length, 0); - }); + })); - test('add event is not triggered if view was set visible (when not visible) and not active', async function () { + test('add event is not triggered if view was set visible (when not visible) and not active', () => runWithFakedTimers({ useFakeTimers: true }, async () => { container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); @@ -468,9 +469,9 @@ suite('ViewContainerModel', () => { assert.ok(!targetEvent.called, 'add event should not be called since it is disabled'); assert.strictEqual(testObject.visibleViewDescriptors.length, 0); assert.strictEqual(target.elements.length, 0); - }); + })); - test('added view descriptors are in ascending order in the event', async function () { + test('added view descriptors are in ascending order in the event', () => runWithFakedTimers({ useFakeTimers: true }, async () => { container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); @@ -519,9 +520,9 @@ suite('ViewContainerModel', () => { assert.strictEqual(target.elements[2].id, 'view3'); assert.strictEqual(target.elements[3].id, 'view4'); assert.strictEqual(target.elements[4].id, 'view5'); - }); + })); - test('add event is triggered only once when view is set visible while it is set active', async function () { + test('add event is triggered only once when view is set visible while it is set active', () => runWithFakedTimers({ useFakeTimers: true }, async () => { container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); @@ -550,9 +551,9 @@ suite('ViewContainerModel', () => { assert.strictEqual(testObject.visibleViewDescriptors.length, 1); assert.strictEqual(target.elements.length, 1); assert.strictEqual(target.elements[0].id, 'view1'); - }); + })); - test('add event is not triggered only when view is set hidden while it is set active', async function () { + test('add event is not triggered only when view is set hidden while it is set active', () => runWithFakedTimers({ useFakeTimers: true }, async () => { container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); @@ -579,9 +580,9 @@ suite('ViewContainerModel', () => { assert.strictEqual(targetEvent.callCount, 0); assert.strictEqual(testObject.visibleViewDescriptors.length, 0); assert.strictEqual(target.elements.length, 0); - }); + })); - test('#142087: view descriptor visibility is not reset', async function () { + test('#142087: view descriptor visibility is not reset', () => runWithFakedTimers({ useFakeTimers: true }, async () => { container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const viewDescriptor: IViewDescriptor = { @@ -602,9 +603,9 @@ suite('ViewContainerModel', () => { assert.strictEqual(testObject.isVisible(viewDescriptor.id), false); assert.strictEqual(testObject.activeViewDescriptors[0].id, viewDescriptor.id); assert.strictEqual(testObject.visibleViewDescriptors.length, 0); - }); + })); - test('remove event is triggered properly if mutliple views are hidden at the same time', async function () { + test('remove event is triggered properly if mutliple views are hidden at the same time', () => runWithFakedTimers({ useFakeTimers: true }, async () => { container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); @@ -660,9 +661,9 @@ suite('ViewContainerModel', () => { }]); assert.strictEqual(target.elements.length, 1); assert.strictEqual(target.elements[0].id, viewDescriptor1.id); - }); + })); - test('add event is triggered properly if mutliple views are hidden at the same time', async function () { + test('add event is triggered properly if mutliple views are hidden at the same time', () => runWithFakedTimers({ useFakeTimers: true }, async () => { container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); @@ -728,9 +729,9 @@ suite('ViewContainerModel', () => { assert.strictEqual(target.elements[0].id, viewDescriptor1.id); assert.strictEqual(target.elements[1].id, viewDescriptor2.id); assert.strictEqual(target.elements[2].id, viewDescriptor3.id); - }); + })); - test('add and remove events are triggered properly if mutliple views are hidden and added at the same time', async function () { + test('add and remove events are triggered properly if mutliple views are hidden and added at the same time', () => runWithFakedTimers({ useFakeTimers: true }, async () => { container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); @@ -805,6 +806,6 @@ suite('ViewContainerModel', () => { assert.strictEqual(target.elements.length, 2); assert.strictEqual(target.elements[0].id, viewDescriptor1.id); assert.strictEqual(target.elements[1].id, viewDescriptor3.id); - }); + })); });