adopt ensureNoDisposablesAreLeakedInTestSuite (#193803)

#190503 adopt ensureNoDisposablesAreLeakedInTestSuite
This commit is contained in:
Sandeep Somavarapu
2023-09-22 15:35:41 +02:00
committed by GitHub
parent 2a691f77e4
commit e88e309ab5
3 changed files with 228 additions and 192 deletions

View File

@@ -446,8 +446,8 @@ class FileServiceBasedRemoteUserConfiguration extends Disposable {
protected readonly _onDidChangeConfiguration: Emitter<ConfigurationModel> = this._register(new Emitter<ConfigurationModel>());
readonly onDidChangeConfiguration: Event<ConfigurationModel> = this._onDidChangeConfiguration.event;
private fileWatcherDisposable: IDisposable = Disposable.None;
private directoryWatcherDisposable: IDisposable = Disposable.None;
private readonly fileWatcherDisposable = this._register(new MutableDisposable());
private readonly directoryWatcherDisposable = this._register(new MutableDisposable());
constructor(
private readonly configurationResource: URI,
@@ -469,22 +469,20 @@ class FileServiceBasedRemoteUserConfiguration extends Disposable {
}
private watchResource(): void {
this.fileWatcherDisposable = this.fileService.watch(this.configurationResource);
this.fileWatcherDisposable.value = this.fileService.watch(this.configurationResource);
}
private stopWatchingResource(): void {
this.fileWatcherDisposable.dispose();
this.fileWatcherDisposable = Disposable.None;
this.fileWatcherDisposable.value = undefined;
}
private watchDirectory(): void {
const directory = this.uriIdentityService.extUri.dirname(this.configurationResource);
this.directoryWatcherDisposable = this.fileService.watch(directory);
this.directoryWatcherDisposable.value = this.fileService.watch(directory);
}
private stopWatchingDirectory(): void {
this.directoryWatcherDisposable.dispose();
this.directoryWatcherDisposable = Disposable.None;
this.directoryWatcherDisposable.value = undefined;
}
async initialize(): Promise<ConfigurationModel> {

View File

@@ -33,7 +33,7 @@ import { IFileService } from 'vs/platform/files/common/files';
import { KeybindingsEditingService, IKeybindingEditingService } from 'vs/workbench/services/keybinding/common/keybindingEditing';
import { FileUserDataProvider } from 'vs/platform/userData/common/fileUserDataProvider';
import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService';
import { DisposableStore, toDisposable } from 'vs/base/common/lifecycle';
import { toDisposable } from 'vs/base/common/lifecycle';
import { InMemoryFileSystemProvider } from 'vs/platform/files/common/inMemoryFilesystemProvider';
import { joinPath } from 'vs/base/common/resources';
import { VSBuffer } from 'vs/base/common/buffer';
@@ -46,6 +46,7 @@ import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler';
import { UserDataProfileService } from 'vs/workbench/services/userDataProfile/common/userDataProfileService';
import { IUserDataProfileService } from 'vs/workbench/services/userDataProfile/common/userDataProfile';
import { IBrowserWorkbenchEnvironmentService } from 'vs/workbench/services/environment/browser/environmentService';
import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils';
const ROOT = URI.file('tests').with({ scheme: 'vscode-tests' });
@@ -65,8 +66,6 @@ suite('ConfigurationEditing', () => {
let workspaceService: WorkspaceService;
let testObject: ConfigurationEditing;
const disposables = new DisposableStore();
suiteSetup(() => {
const configurationRegistry = Registry.as<IConfigurationRegistry>(ConfigurationExtensions.Configuration);
configurationRegistry.registerConfiguration({
@@ -97,6 +96,8 @@ suite('ConfigurationEditing', () => {
});
});
const disposables = ensureNoDisposablesAreLeakedInTestSuite();
setup(async () => {
disposables.add(toDisposable(() => sinon.restore()));
const logService = new NullLogService();
@@ -111,14 +112,14 @@ suite('ConfigurationEditing', () => {
environmentService = TestEnvironmentService;
environmentService.policyFile = joinPath(workspaceFolder, 'policies.json');
instantiationService.stub(IEnvironmentService, environmentService);
const uriIdentityService = new UriIdentityService(fileService);
const userDataProfilesService = instantiationService.stub(IUserDataProfilesService, new UserDataProfilesService(environmentService, fileService, uriIdentityService, logService));
userDataProfileService = new UserDataProfileService(userDataProfilesService.defaultProfile);
const uriIdentityService = disposables.add(new UriIdentityService(fileService));
const userDataProfilesService = instantiationService.stub(IUserDataProfilesService, disposables.add(new UserDataProfilesService(environmentService, fileService, uriIdentityService, logService)));
userDataProfileService = disposables.add(new UserDataProfileService(userDataProfilesService.defaultProfile));
const remoteAgentService = disposables.add(instantiationService.createInstance(RemoteAgentService));
disposables.add(fileService.registerProvider(Schemas.vscodeUserData, disposables.add(new FileUserDataProvider(ROOT.scheme, fileSystemProvider, Schemas.vscodeUserData, userDataProfilesService, uriIdentityService, logService))));
instantiationService.stub(IFileService, fileService);
instantiationService.stub(IRemoteAgentService, remoteAgentService);
workspaceService = disposables.add(new WorkspaceService({ configurationCache: new ConfigurationCache() }, environmentService, userDataProfileService, userDataProfilesService, fileService, remoteAgentService, uriIdentityService, new NullLogService(), new FilePolicyService(environmentService.policyFile, fileService, logService)));
workspaceService = disposables.add(new WorkspaceService({ configurationCache: new ConfigurationCache() }, environmentService, userDataProfileService, userDataProfilesService, fileService, remoteAgentService, uriIdentityService, new NullLogService(), disposables.add(new FilePolicyService(environmentService.policyFile, fileService, logService))));
await workspaceService.initialize({
id: hash(workspaceFolder.toString()).toString(16),
uri: workspaceFolder
@@ -134,8 +135,6 @@ suite('ConfigurationEditing', () => {
testObject = instantiationService.createInstance(ConfigurationEditing, null);
});
teardown(() => disposables.clear());
test('errors cases - invalid key', async () => {
try {
await testObject.writeConfiguration(EditableConfigurationTarget.WORKSPACE, { key: 'unknown.key', value: 'value' }, { donotNotifyError: true });

View File

@@ -35,7 +35,6 @@ import { IKeybindingEditingService, KeybindingsEditingService } from 'vs/workben
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
import { timeout } from 'vs/base/common/async';
import { VSBuffer } from 'vs/base/common/buffer';
import { DisposableStore } from 'vs/base/common/lifecycle';
import { Event } from 'vs/base/common/event';
import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService';
import { InMemoryFileSystemProvider } from 'vs/platform/files/common/inMemoryFilesystemProvider';
@@ -52,6 +51,7 @@ import { UserDataProfileService } from 'vs/workbench/services/userDataProfile/co
import { IUserDataProfileService } from 'vs/workbench/services/userDataProfile/common/userDataProfile';
import { TasksSchemaProperties } from 'vs/workbench/contrib/tasks/common/tasks';
import { RemoteSocketFactoryService } from 'vs/platform/remote/common/remoteSocketFactoryService';
import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils';
function convertToWorkspacePayload(folder: URI): ISingleFolderWorkspaceIdentifier {
return {
@@ -74,28 +74,41 @@ suite('WorkspaceContextService - Folder', () => {
const folderName = 'Folder A';
let folder: URI;
let testObject: WorkspaceService;
const disposables = new DisposableStore();
const disposables = ensureNoDisposablesAreLeakedInTestSuite();
setup(async () => {
const logService = new NullLogService();
const fileService = disposables.add(new FileService(logService));
const fileSystemProvider = disposables.add(new InMemoryFileSystemProvider());
fileService.registerProvider(ROOT.scheme, fileSystemProvider);
disposables.add(fileService.registerProvider(ROOT.scheme, fileSystemProvider));
folder = joinPath(ROOT, folderName);
await fileService.createFolder(folder);
const environmentService = TestEnvironmentService;
const uriIdentityService = new UriIdentityService(fileService);
const userDataProfilesService = new UserDataProfilesService(environmentService, fileService, uriIdentityService, logService);
fileService.registerProvider(Schemas.vscodeUserData, disposables.add(new FileUserDataProvider(ROOT.scheme, fileSystemProvider, Schemas.vscodeUserData, userDataProfilesService, uriIdentityService, new NullLogService())));
const userDataProfileService = new UserDataProfileService(userDataProfilesService.defaultProfile);
testObject = disposables.add(new WorkspaceService({ configurationCache: new ConfigurationCache() }, environmentService, userDataProfileService, userDataProfilesService, fileService, new RemoteAgentService(new RemoteSocketFactoryService(), userDataProfileService, environmentService, TestProductService, new RemoteAuthorityResolverService(false, undefined, undefined, TestProductService, logService), new SignService(TestProductService), new NullLogService()), uriIdentityService, new NullLogService(), new NullPolicyService()));
const uriIdentityService = disposables.add(new UriIdentityService(fileService));
const userDataProfilesService = disposables.add(new UserDataProfilesService(environmentService, fileService, uriIdentityService, logService));
disposables.add(fileService.registerProvider(Schemas.vscodeUserData, disposables.add(new FileUserDataProvider(ROOT.scheme, fileSystemProvider, Schemas.vscodeUserData, userDataProfilesService, uriIdentityService, new NullLogService()))));
const userDataProfileService = disposables.add(new UserDataProfileService(userDataProfilesService.defaultProfile));
testObject = disposables.add(new WorkspaceService(
{ configurationCache: new ConfigurationCache() },
environmentService,
userDataProfileService,
userDataProfilesService,
fileService,
disposables.add(new RemoteAgentService(
new RemoteSocketFactoryService(),
userDataProfileService,
environmentService,
TestProductService,
disposables.add(new RemoteAuthorityResolverService(false, undefined, undefined, TestProductService, logService)),
new SignService(TestProductService), new NullLogService())),
uriIdentityService,
new NullLogService(),
new NullPolicyService()));
await (<WorkspaceService>testObject).initialize(convertToWorkspacePayload(folder));
});
teardown(() => disposables.clear());
test('getWorkspace()', () => {
const actual = testObject.getWorkspace();
@@ -123,17 +136,26 @@ suite('WorkspaceContextService - Folder', () => {
const logService = new NullLogService();
const fileService = disposables.add(new FileService(logService));
const fileSystemProvider = disposables.add(new InMemoryFileSystemProvider());
fileService.registerProvider(ROOT.scheme, fileSystemProvider);
disposables.add(fileService.registerProvider(ROOT.scheme, fileSystemProvider));
const folder = joinPath(ROOT, folderName).with({ query: 'myquery=1' });
await fileService.createFolder(folder);
const environmentService = TestEnvironmentService;
const uriIdentityService = new UriIdentityService(fileService);
const userDataProfilesService = new UserDataProfilesService(environmentService, fileService, uriIdentityService, logService);
fileService.registerProvider(Schemas.vscodeUserData, disposables.add(new FileUserDataProvider(ROOT.scheme, fileSystemProvider, Schemas.vscodeUserData, userDataProfilesService, uriIdentityService, new NullLogService())));
const userDataProfileService = new UserDataProfileService(userDataProfilesService.defaultProfile);
const testObject = disposables.add(new WorkspaceService({ configurationCache: new ConfigurationCache() }, environmentService, userDataProfileService, userDataProfilesService, fileService, new RemoteAgentService(new RemoteSocketFactoryService(), userDataProfileService, environmentService, TestProductService, new RemoteAuthorityResolverService(false, undefined, undefined, TestProductService, logService), new SignService(TestProductService), new NullLogService()), uriIdentityService, new NullLogService(), new NullPolicyService()));
const uriIdentityService = disposables.add(new UriIdentityService(fileService));
const userDataProfilesService = disposables.add(new UserDataProfilesService(environmentService, fileService, uriIdentityService, logService));
disposables.add(fileService.registerProvider(Schemas.vscodeUserData, disposables.add(new FileUserDataProvider(ROOT.scheme, fileSystemProvider, Schemas.vscodeUserData, userDataProfilesService, uriIdentityService, new NullLogService()))));
const userDataProfileService = disposables.add(new UserDataProfileService(userDataProfilesService.defaultProfile));
const testObject = disposables.add(new WorkspaceService(
{ configurationCache: new ConfigurationCache() },
environmentService,
userDataProfileService,
userDataProfilesService,
fileService,
disposables.add(new RemoteAgentService(new RemoteSocketFactoryService(), userDataProfileService, environmentService, TestProductService, disposables.add(new RemoteAuthorityResolverService(false, undefined, undefined, TestProductService, logService)), new SignService(TestProductService), new NullLogService())),
uriIdentityService,
new NullLogService(),
new NullPolicyService()));
await (<WorkspaceService>testObject).initialize(convertToWorkspacePayload(folder));
const actual = testObject.getWorkspaceFolder(joinPath(folder, 'a'));
@@ -146,20 +168,28 @@ suite('WorkspaceContextService - Folder', () => {
const logService = new NullLogService();
const fileService = disposables.add(new FileService(logService));
const fileSystemProvider = disposables.add(new InMemoryFileSystemProvider());
fileService.registerProvider(ROOT.scheme, fileSystemProvider);
disposables.add(fileService.registerProvider(ROOT.scheme, fileSystemProvider));
const folder = joinPath(ROOT, folderName);
await fileService.createFolder(folder);
const environmentService = TestEnvironmentService;
const uriIdentityService = new UriIdentityService(fileService);
const userDataProfilesService = new UserDataProfilesService(environmentService, fileService, uriIdentityService, logService);
fileService.registerProvider(Schemas.vscodeUserData, disposables.add(new FileUserDataProvider(ROOT.scheme, fileSystemProvider, Schemas.vscodeUserData, userDataProfilesService, uriIdentityService, new NullLogService())));
const userDataProfileService = new UserDataProfileService(userDataProfilesService.defaultProfile);
const testObject = disposables.add(new WorkspaceService({ configurationCache: new ConfigurationCache() }, environmentService, userDataProfileService, userDataProfilesService, fileService, new RemoteAgentService(new RemoteSocketFactoryService(), userDataProfileService, environmentService, TestProductService, new RemoteAuthorityResolverService(false, undefined, undefined, TestProductService, logService), new SignService(TestProductService), new NullLogService()), uriIdentityService, new NullLogService(), new NullPolicyService()));
const uriIdentityService = disposables.add(new UriIdentityService(fileService));
const userDataProfilesService = disposables.add(new UserDataProfilesService(environmentService, fileService, uriIdentityService, logService));
disposables.add(fileService.registerProvider(Schemas.vscodeUserData, disposables.add(new FileUserDataProvider(ROOT.scheme, fileSystemProvider, Schemas.vscodeUserData, userDataProfilesService, uriIdentityService, new NullLogService()))));
const userDataProfileService = disposables.add(new UserDataProfileService(userDataProfilesService.defaultProfile));
const testObject = disposables.add(new WorkspaceService(
{ configurationCache: new ConfigurationCache() },
environmentService,
userDataProfileService,
userDataProfilesService,
fileService,
disposables.add(new RemoteAgentService(new RemoteSocketFactoryService(), userDataProfileService, environmentService, TestProductService, disposables.add(new RemoteAuthorityResolverService(false, undefined, undefined, TestProductService, logService)), new SignService(TestProductService), new NullLogService())),
uriIdentityService,
new NullLogService(),
new NullPolicyService()));
await (<WorkspaceService>testObject).initialize(convertToWorkspacePayload(folder));
const actual = testObject.getWorkspaceFolder(joinPath(folder, 'a').with({ query: 'myquery=1' }));
assert.strictEqual(actual, testObject.getWorkspace().folders[0]);
@@ -179,13 +209,13 @@ suite('WorkspaceContextService - Folder', () => {
suite('WorkspaceContextService - Workspace', () => {
let testObject: WorkspaceService;
const disposables = new DisposableStore();
const disposables = ensureNoDisposablesAreLeakedInTestSuite();
setup(async () => {
const logService = new NullLogService();
const fileService = disposables.add(new FileService(logService));
const fileSystemProvider = disposables.add(new InMemoryFileSystemProvider());
fileService.registerProvider(ROOT.scheme, fileSystemProvider);
disposables.add(fileService.registerProvider(ROOT.scheme, fileSystemProvider));
const appSettingsHome = joinPath(ROOT, 'user');
const folderA = joinPath(ROOT, 'a');
@@ -200,12 +230,16 @@ suite('WorkspaceContextService - Workspace', () => {
const instantiationService = <TestInstantiationService>workbenchInstantiationService(undefined, disposables);
const environmentService = TestEnvironmentService;
const remoteAgentService = disposables.add(instantiationService.createInstance(RemoteAgentService));
const remoteAgentService = disposables.add(disposables.add(instantiationService.createInstance(RemoteAgentService)));
instantiationService.stub(IRemoteAgentService, remoteAgentService);
const uriIdentityService = new UriIdentityService(fileService);
const userDataProfilesService = instantiationService.stub(IUserDataProfilesService, new UserDataProfilesService(environmentService, fileService, uriIdentityService, logService));
fileService.registerProvider(Schemas.vscodeUserData, disposables.add(new FileUserDataProvider(ROOT.scheme, fileSystemProvider, Schemas.vscodeUserData, userDataProfilesService, uriIdentityService, new NullLogService())));
testObject = disposables.add(new WorkspaceService({ configurationCache: new ConfigurationCache() }, environmentService, new UserDataProfileService(userDataProfilesService.defaultProfile), userDataProfilesService, fileService, remoteAgentService, uriIdentityService, new NullLogService(), new NullPolicyService()));
const uriIdentityService = disposables.add(new UriIdentityService(fileService));
const userDataProfilesService = instantiationService.stub(IUserDataProfilesService, disposables.add(new UserDataProfilesService(environmentService, fileService, uriIdentityService, logService)));
disposables.add(fileService.registerProvider(Schemas.vscodeUserData, disposables.add(new FileUserDataProvider(ROOT.scheme, fileSystemProvider, Schemas.vscodeUserData, userDataProfilesService, uriIdentityService, new NullLogService()))));
testObject = disposables.add(new WorkspaceService(
{ configurationCache: new ConfigurationCache() },
environmentService,
disposables.add(new UserDataProfileService(userDataProfilesService.defaultProfile)),
userDataProfilesService, fileService, remoteAgentService, uriIdentityService, new NullLogService(), new NullPolicyService()));
instantiationService.stub(IWorkspaceContextService, testObject);
instantiationService.stub(IConfigurationService, testObject);
@@ -215,8 +249,6 @@ suite('WorkspaceContextService - Workspace', () => {
testObject.acquireInstantiationService(instantiationService);
});
teardown(() => disposables.clear());
test('workspace folders', () => {
const actual = testObject.getWorkspace().folders;
@@ -239,13 +271,13 @@ suite('WorkspaceContextService - Workspace', () => {
suite('WorkspaceContextService - Workspace Editing', () => {
let testObject: WorkspaceService, fileService: IFileService;
const disposables = new DisposableStore();
const disposables = ensureNoDisposablesAreLeakedInTestSuite();
setup(async () => {
const logService = new NullLogService();
fileService = disposables.add(new FileService(logService));
const fileSystemProvider = disposables.add(new InMemoryFileSystemProvider());
fileService.registerProvider(ROOT.scheme, fileSystemProvider);
disposables.add(fileService.registerProvider(ROOT.scheme, fileSystemProvider));
const appSettingsHome = joinPath(ROOT, 'user');
const folderA = joinPath(ROOT, 'a');
@@ -260,12 +292,16 @@ suite('WorkspaceContextService - Workspace Editing', () => {
const instantiationService = <TestInstantiationService>workbenchInstantiationService(undefined, disposables);
const environmentService = TestEnvironmentService;
const remoteAgentService = instantiationService.createInstance(RemoteAgentService);
const remoteAgentService = disposables.add(instantiationService.createInstance(RemoteAgentService));
instantiationService.stub(IRemoteAgentService, remoteAgentService);
const uriIdentityService = new UriIdentityService(fileService);
const userDataProfilesService = instantiationService.stub(IUserDataProfilesService, new UserDataProfilesService(environmentService, fileService, uriIdentityService, logService));
fileService.registerProvider(Schemas.vscodeUserData, disposables.add(new FileUserDataProvider(ROOT.scheme, fileSystemProvider, Schemas.vscodeUserData, userDataProfilesService, uriIdentityService, new NullLogService())));
testObject = disposables.add(new WorkspaceService({ configurationCache: new ConfigurationCache() }, environmentService, new UserDataProfileService(userDataProfilesService.defaultProfile), userDataProfilesService, fileService, remoteAgentService, uriIdentityService, new NullLogService(), new NullPolicyService()));
const uriIdentityService = disposables.add(new UriIdentityService(fileService));
const userDataProfilesService = instantiationService.stub(IUserDataProfilesService, disposables.add(new UserDataProfilesService(environmentService, fileService, uriIdentityService, logService)));
disposables.add(fileService.registerProvider(Schemas.vscodeUserData, disposables.add(new FileUserDataProvider(ROOT.scheme, fileSystemProvider, Schemas.vscodeUserData, userDataProfilesService, uriIdentityService, new NullLogService()))));
testObject = disposables.add(new WorkspaceService(
{ configurationCache: new ConfigurationCache() },
environmentService,
disposables.add(new UserDataProfileService(userDataProfilesService.defaultProfile)),
userDataProfilesService, fileService, remoteAgentService, uriIdentityService, new NullLogService(), new NullPolicyService()));
instantiationService.stub(IFileService, fileService);
instantiationService.stub(IWorkspaceContextService, testObject);
@@ -279,8 +315,6 @@ suite('WorkspaceContextService - Workspace Editing', () => {
testObject.acquireInstantiationService(instantiationService);
});
teardown(() => disposables.clear());
test('add folders', () => runWithFakedTimers<void>({ useFakeTimers: true }, async () => {
await testObject.addFolders([{ uri: joinPath(ROOT, 'd') }, { uri: joinPath(ROOT, 'c') }]);
const actual = testObject.getWorkspace().folders;
@@ -329,8 +363,8 @@ suite('WorkspaceContextService - Workspace Editing', () => {
test('add folders triggers change event', () => runWithFakedTimers<void>({ useFakeTimers: true }, async () => {
const target = sinon.spy();
testObject.onWillChangeWorkspaceFolders(target);
testObject.onDidChangeWorkspaceFolders(target);
disposables.add(testObject.onWillChangeWorkspaceFolders(target));
disposables.add(testObject.onDidChangeWorkspaceFolders(target));
const addedFolders = [{ uri: joinPath(ROOT, 'd') }, { uri: joinPath(ROOT, 'c') }];
await testObject.addFolders(addedFolders);
@@ -352,8 +386,8 @@ suite('WorkspaceContextService - Workspace Editing', () => {
test('remove folders triggers change event', () => runWithFakedTimers<void>({ useFakeTimers: true }, async () => {
const target = sinon.spy();
testObject.onWillChangeWorkspaceFolders(target);
testObject.onDidChangeWorkspaceFolders(target);
disposables.add(testObject.onWillChangeWorkspaceFolders(target));
disposables.add(testObject.onDidChangeWorkspaceFolders(target));
const removedFolder = testObject.getWorkspace().folders[0];
await testObject.removeFolders([removedFolder.uri]);
@@ -369,14 +403,14 @@ suite('WorkspaceContextService - Workspace Editing', () => {
await testObject.removeFolders([folders[0].uri]);
const promise = new Promise<void>((resolve, reject) => {
testObject.onDidChangeWorkspaceFolders(actual => {
disposables.add(testObject.onDidChangeWorkspaceFolders(actual => {
try {
assert.deepStrictEqual(actual.added.map(r => r.uri.toString()), [folders[0].uri.toString()]);
resolve();
} catch (error) {
reject(error);
}
});
}));
});
const workspace = { folders: [{ path: folders[0].uri.path }, { path: folders[1].uri.path }] };
@@ -386,8 +420,8 @@ suite('WorkspaceContextService - Workspace Editing', () => {
test('update folders (remove last and add to end)', () => runWithFakedTimers<void>({ useFakeTimers: true }, async () => {
const target = sinon.spy();
testObject.onWillChangeWorkspaceFolders(target);
testObject.onDidChangeWorkspaceFolders(target);
disposables.add(testObject.onWillChangeWorkspaceFolders(target));
disposables.add(testObject.onDidChangeWorkspaceFolders(target));
const addedFolders = [{ uri: joinPath(ROOT, 'd') }, { uri: joinPath(ROOT, 'c') }];
const removedFolders = [testObject.getWorkspace().folders[1]].map(f => f.uri);
await testObject.updateFolders(addedFolders, removedFolders);
@@ -401,8 +435,8 @@ suite('WorkspaceContextService - Workspace Editing', () => {
test('update folders (rename first via add and remove)', () => runWithFakedTimers<void>({ useFakeTimers: true }, async () => {
const target = sinon.spy();
testObject.onWillChangeWorkspaceFolders(target);
testObject.onDidChangeWorkspaceFolders(target);
disposables.add(testObject.onWillChangeWorkspaceFolders(target));
disposables.add(testObject.onDidChangeWorkspaceFolders(target));
const addedFolders = [{ uri: joinPath(ROOT, 'a'), name: 'The Folder' }];
const removedFolders = [testObject.getWorkspace().folders[0]].map(f => f.uri);
await testObject.updateFolders(addedFolders, removedFolders, 0);
@@ -416,8 +450,8 @@ suite('WorkspaceContextService - Workspace Editing', () => {
test('update folders (remove first and add to end)', () => runWithFakedTimers<void>({ useFakeTimers: true }, async () => {
const target = sinon.spy();
testObject.onWillChangeWorkspaceFolders(target);
testObject.onDidChangeWorkspaceFolders(target);
disposables.add(testObject.onWillChangeWorkspaceFolders(target));
disposables.add(testObject.onDidChangeWorkspaceFolders(target));
const addedFolders = [{ uri: joinPath(ROOT, 'd') }, { uri: joinPath(ROOT, 'c') }];
const removedFolders = [testObject.getWorkspace().folders[0]].map(f => f.uri);
const changedFolders = [testObject.getWorkspace().folders[1]].map(f => f.uri);
@@ -432,8 +466,8 @@ suite('WorkspaceContextService - Workspace Editing', () => {
test('reorder folders trigger change event', () => runWithFakedTimers<void>({ useFakeTimers: true }, async () => {
const target = sinon.spy();
testObject.onWillChangeWorkspaceFolders(target);
testObject.onDidChangeWorkspaceFolders(target);
disposables.add(testObject.onWillChangeWorkspaceFolders(target));
disposables.add(testObject.onDidChangeWorkspaceFolders(target));
const workspace = { folders: [{ path: testObject.getWorkspace().folders[1].uri.path }, { path: testObject.getWorkspace().folders[0].uri.path }] };
await fileService.writeFile(testObject.getWorkspace().configuration!, VSBuffer.fromString(JSON.stringify(workspace, null, '\t')));
await testObject.reloadConfiguration();
@@ -447,8 +481,8 @@ suite('WorkspaceContextService - Workspace Editing', () => {
test('rename folders trigger change event', () => runWithFakedTimers<void>({ useFakeTimers: true }, async () => {
const target = sinon.spy();
testObject.onWillChangeWorkspaceFolders(target);
testObject.onDidChangeWorkspaceFolders(target);
disposables.add(testObject.onWillChangeWorkspaceFolders(target));
disposables.add(testObject.onDidChangeWorkspaceFolders(target));
const workspace = { folders: [{ path: testObject.getWorkspace().folders[0].uri.path, name: '1' }, { path: testObject.getWorkspace().folders[1].uri.path }] };
fileService.writeFile(testObject.getWorkspace().configuration!, VSBuffer.fromString(JSON.stringify(workspace, null, '\t')));
await testObject.reloadConfiguration();
@@ -466,7 +500,7 @@ suite('WorkspaceService - Initialization', () => {
let configResource: URI, testObject: WorkspaceService, fileService: IFileService, environmentService: BrowserWorkbenchEnvironmentService, userDataProfileService: IUserDataProfileService;
const configurationRegistry = Registry.as<IConfigurationRegistry>(ConfigurationExtensions.Configuration);
const disposables = new DisposableStore();
const disposables = ensureNoDisposablesAreLeakedInTestSuite();
suiteSetup(() => {
configurationRegistry.registerConfiguration({
@@ -491,7 +525,7 @@ suite('WorkspaceService - Initialization', () => {
const logService = new NullLogService();
fileService = disposables.add(new FileService(logService));
const fileSystemProvider = disposables.add(new InMemoryFileSystemProvider());
fileService.registerProvider(ROOT.scheme, fileSystemProvider);
disposables.add(fileService.registerProvider(ROOT.scheme, fileSystemProvider));
const appSettingsHome = joinPath(ROOT, 'user');
const folderA = joinPath(ROOT, 'a');
@@ -506,37 +540,39 @@ suite('WorkspaceService - Initialization', () => {
const instantiationService = <TestInstantiationService>workbenchInstantiationService(undefined, disposables);
environmentService = TestEnvironmentService;
const remoteAgentService = instantiationService.createInstance(RemoteAgentService);
const remoteAgentService = disposables.add(instantiationService.createInstance(RemoteAgentService));
instantiationService.stub(IRemoteAgentService, remoteAgentService);
const uriIdentityService = new UriIdentityService(fileService);
const userDataProfilesService = instantiationService.stub(IUserDataProfilesService, new UserDataProfilesService(environmentService, fileService, uriIdentityService, logService));
fileService.registerProvider(Schemas.vscodeUserData, disposables.add(new FileUserDataProvider(ROOT.scheme, fileSystemProvider, Schemas.vscodeUserData, userDataProfilesService, uriIdentityService, new NullLogService())));
userDataProfileService = instantiationService.stub(IUserDataProfileService, new UserDataProfileService(userDataProfilesService.defaultProfile));
testObject = disposables.add(new WorkspaceService({ configurationCache: new ConfigurationCache() }, environmentService, userDataProfileService, userDataProfilesService, fileService, remoteAgentService, uriIdentityService, new NullLogService(), new NullPolicyService()));
const uriIdentityService = disposables.add(new UriIdentityService(fileService));
const userDataProfilesService = instantiationService.stub(IUserDataProfilesService, disposables.add(new UserDataProfilesService(environmentService, fileService, uriIdentityService, logService)));
disposables.add(fileService.registerProvider(Schemas.vscodeUserData, disposables.add(new FileUserDataProvider(ROOT.scheme, fileSystemProvider, Schemas.vscodeUserData, userDataProfilesService, uriIdentityService, new NullLogService()))));
userDataProfileService = instantiationService.stub(IUserDataProfileService, disposables.add(new UserDataProfileService(userDataProfilesService.defaultProfile)));
testObject = disposables.add(new WorkspaceService(
{ configurationCache: new ConfigurationCache() },
environmentService,
userDataProfileService,
userDataProfilesService, fileService, remoteAgentService, uriIdentityService, new NullLogService(), new NullPolicyService()));
instantiationService.stub(IFileService, fileService);
instantiationService.stub(IWorkspaceContextService, testObject);
instantiationService.stub(IConfigurationService, testObject);
instantiationService.stub(IEnvironmentService, environmentService);
await testObject.initialize({ id: '' });
instantiationService.stub(ITextFileService, instantiationService.createInstance(TestTextFileService));
instantiationService.stub(ITextModelService, <ITextModelService>instantiationService.createInstance(TextModelResolverService));
instantiationService.stub(ITextFileService, disposables.add(instantiationService.createInstance(TestTextFileService)));
instantiationService.stub(ITextModelService, <ITextModelService>disposables.add(instantiationService.createInstance(TextModelResolverService)));
testObject.acquireInstantiationService(instantiationService);
});
teardown(() => disposables.clear());
(isMacintosh ? test.skip : test)('initialize a folder workspace from an empty workspace with no configuration changes', () => runWithFakedTimers<void>({ useFakeTimers: true }, async () => {
await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "initialization.testSetting1": "userValue" }'));
await testObject.reloadConfiguration();
const target = sinon.spy();
testObject.onDidChangeWorkbenchState(target);
testObject.onDidChangeWorkspaceName(target);
testObject.onWillChangeWorkspaceFolders(target);
testObject.onDidChangeWorkspaceFolders(target);
testObject.onDidChangeConfiguration(target);
disposables.add(testObject.onDidChangeWorkbenchState(target));
disposables.add(testObject.onDidChangeWorkspaceName(target));
disposables.add(testObject.onWillChangeWorkspaceFolders(target));
disposables.add(testObject.onDidChangeWorkspaceFolders(target));
disposables.add(testObject.onDidChangeConfiguration(target));
const folder = joinPath(ROOT, 'a');
await testObject.initialize(convertToWorkspacePayload(folder));
@@ -557,11 +593,11 @@ suite('WorkspaceService - Initialization', () => {
await testObject.reloadConfiguration();
const target = sinon.spy();
testObject.onDidChangeWorkbenchState(target);
testObject.onDidChangeWorkspaceName(target);
testObject.onWillChangeWorkspaceFolders(target);
testObject.onDidChangeWorkspaceFolders(target);
testObject.onDidChangeConfiguration(target);
disposables.add(testObject.onDidChangeWorkbenchState(target));
disposables.add(testObject.onDidChangeWorkspaceName(target));
disposables.add(testObject.onWillChangeWorkspaceFolders(target));
disposables.add(testObject.onDidChangeWorkspaceFolders(target));
disposables.add(testObject.onDidChangeConfiguration(target));
const folder = joinPath(ROOT, 'a');
await fileService.writeFile(joinPath(folder, '.vscode', 'settings.json'), VSBuffer.fromString('{ "initialization.testSetting1": "workspaceValue" }'));
@@ -584,11 +620,11 @@ suite('WorkspaceService - Initialization', () => {
await testObject.reloadConfiguration();
const target = sinon.spy();
testObject.onDidChangeWorkbenchState(target);
testObject.onDidChangeWorkspaceName(target);
testObject.onWillChangeWorkspaceFolders(target);
testObject.onDidChangeWorkspaceFolders(target);
testObject.onDidChangeConfiguration(target);
disposables.add(testObject.onDidChangeWorkbenchState(target));
disposables.add(testObject.onDidChangeWorkspaceName(target));
disposables.add(testObject.onWillChangeWorkspaceFolders(target));
disposables.add(testObject.onDidChangeWorkspaceFolders(target));
disposables.add(testObject.onDidChangeConfiguration(target));
await testObject.initialize(getWorkspaceIdentifier(configResource));
@@ -607,11 +643,11 @@ suite('WorkspaceService - Initialization', () => {
await testObject.reloadConfiguration();
const target = sinon.spy();
testObject.onDidChangeWorkbenchState(target);
testObject.onDidChangeWorkspaceName(target);
testObject.onWillChangeWorkspaceFolders(target);
testObject.onDidChangeWorkspaceFolders(target);
testObject.onDidChangeConfiguration(target);
disposables.add(testObject.onDidChangeWorkbenchState(target));
disposables.add(testObject.onDidChangeWorkspaceName(target));
disposables.add(testObject.onWillChangeWorkspaceFolders(target));
disposables.add(testObject.onDidChangeWorkspaceFolders(target));
disposables.add(testObject.onDidChangeConfiguration(target));
await fileService.writeFile(joinPath(ROOT, 'a', '.vscode', 'settings.json'), VSBuffer.fromString('{ "initialization.testSetting1": "workspaceValue1" }'));
await fileService.writeFile(joinPath(ROOT, 'b', '.vscode', 'settings.json'), VSBuffer.fromString('{ "initialization.testSetting2": "workspaceValue2" }'));
@@ -633,11 +669,11 @@ suite('WorkspaceService - Initialization', () => {
await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "initialization.testSetting1": "userValue" }'));
await testObject.reloadConfiguration();
const target = sinon.spy();
testObject.onDidChangeWorkbenchState(target);
testObject.onDidChangeWorkspaceName(target);
testObject.onWillChangeWorkspaceFolders(target);
testObject.onDidChangeWorkspaceFolders(target);
testObject.onDidChangeConfiguration(target);
disposables.add(testObject.onDidChangeWorkbenchState(target));
disposables.add(testObject.onDidChangeWorkspaceName(target));
disposables.add(testObject.onWillChangeWorkspaceFolders(target));
disposables.add(testObject.onDidChangeWorkspaceFolders(target));
disposables.add(testObject.onDidChangeConfiguration(target));
await testObject.initialize(convertToWorkspacePayload(joinPath(ROOT, 'b')));
@@ -653,11 +689,11 @@ suite('WorkspaceService - Initialization', () => {
await testObject.initialize(convertToWorkspacePayload(joinPath(ROOT, 'a')));
const target = sinon.spy();
testObject.onDidChangeWorkbenchState(target);
testObject.onDidChangeWorkspaceName(target);
testObject.onWillChangeWorkspaceFolders(target);
testObject.onDidChangeWorkspaceFolders(target);
testObject.onDidChangeConfiguration(target);
disposables.add(testObject.onDidChangeWorkbenchState(target));
disposables.add(testObject.onDidChangeWorkspaceName(target));
disposables.add(testObject.onWillChangeWorkspaceFolders(target));
disposables.add(testObject.onDidChangeWorkspaceFolders(target));
disposables.add(testObject.onDidChangeConfiguration(target));
await fileService.writeFile(joinPath(ROOT, 'b', '.vscode', 'settings.json'), VSBuffer.fromString('{ "initialization.testSetting1": "workspaceValue2" }'));
await testObject.initialize(convertToWorkspacePayload(joinPath(ROOT, 'b')));
@@ -674,11 +710,11 @@ suite('WorkspaceService - Initialization', () => {
(isMacintosh ? test.skip : test)('initialize a multi folder workspace from a folder workspacce triggers change events in the right order', () => runWithFakedTimers<void>({ useFakeTimers: true }, async () => {
await testObject.initialize(convertToWorkspacePayload(joinPath(ROOT, 'a')));
const target = sinon.spy();
testObject.onDidChangeWorkbenchState(target);
testObject.onDidChangeWorkspaceName(target);
testObject.onWillChangeWorkspaceFolders(target);
testObject.onDidChangeWorkspaceFolders(target);
testObject.onDidChangeConfiguration(target);
disposables.add(testObject.onDidChangeWorkbenchState(target));
disposables.add(testObject.onDidChangeWorkspaceName(target));
disposables.add(testObject.onWillChangeWorkspaceFolders(target));
disposables.add(testObject.onDidChangeWorkspaceFolders(target));
disposables.add(testObject.onDidChangeConfiguration(target));
await fileService.writeFile(joinPath(ROOT, 'a', '.vscode', 'settings.json'), VSBuffer.fromString('{ "initialization.testSetting1": "workspaceValue2" }'));
await testObject.initialize(getWorkspaceIdentifier(configResource));
@@ -698,7 +734,7 @@ suite('WorkspaceConfigurationService - Folder', () => {
let testObject: WorkspaceService, workspaceService: WorkspaceService, fileService: IFileService, environmentService: IBrowserWorkbenchEnvironmentService, userDataProfileService: IUserDataProfileService, instantiationService: TestInstantiationService;
const configurationRegistry = Registry.as<IConfigurationRegistry>(ConfigurationExtensions.Configuration);
const disposables: DisposableStore = new DisposableStore();
const disposables = ensureNoDisposablesAreLeakedInTestSuite();
suiteSetup(() => {
configurationRegistry.registerConfiguration({
@@ -759,7 +795,7 @@ suite('WorkspaceConfigurationService - Folder', () => {
const logService = new NullLogService();
fileService = disposables.add(new FileService(logService));
const fileSystemProvider = disposables.add(new InMemoryFileSystemProvider());
fileService.registerProvider(ROOT.scheme, fileSystemProvider);
disposables.add(fileService.registerProvider(ROOT.scheme, fileSystemProvider));
const folder = joinPath(ROOT, 'a');
await fileService.createFolder(folder);
@@ -767,27 +803,29 @@ suite('WorkspaceConfigurationService - Folder', () => {
instantiationService = <TestInstantiationService>workbenchInstantiationService(undefined, disposables);
environmentService = TestEnvironmentService;
environmentService.policyFile = joinPath(folder, 'policies.json');
const remoteAgentService = instantiationService.createInstance(RemoteAgentService);
const remoteAgentService = disposables.add(instantiationService.createInstance(RemoteAgentService));
instantiationService.stub(IRemoteAgentService, remoteAgentService);
const uriIdentityService = new UriIdentityService(fileService);
const userDataProfilesService = instantiationService.stub(IUserDataProfilesService, new UserDataProfilesService(environmentService, fileService, uriIdentityService, logService));
fileService.registerProvider(Schemas.vscodeUserData, disposables.add(new FileUserDataProvider(ROOT.scheme, fileSystemProvider, Schemas.vscodeUserData, userDataProfilesService, uriIdentityService, new NullLogService())));
userDataProfileService = instantiationService.stub(IUserDataProfileService, new UserDataProfileService(userDataProfilesService.defaultProfile));
workspaceService = testObject = disposables.add(new WorkspaceService({ configurationCache: new ConfigurationCache() }, environmentService, userDataProfileService, userDataProfilesService, fileService, remoteAgentService, uriIdentityService, new NullLogService(), new FilePolicyService(environmentService.policyFile, fileService, logService)));
const uriIdentityService = disposables.add(new UriIdentityService(fileService));
const userDataProfilesService = instantiationService.stub(IUserDataProfilesService, disposables.add(new UserDataProfilesService(environmentService, fileService, uriIdentityService, logService)));
disposables.add(fileService.registerProvider(Schemas.vscodeUserData, disposables.add(new FileUserDataProvider(ROOT.scheme, fileSystemProvider, Schemas.vscodeUserData, userDataProfilesService, uriIdentityService, new NullLogService()))));
userDataProfileService = instantiationService.stub(IUserDataProfileService, disposables.add(new UserDataProfileService(userDataProfilesService.defaultProfile)));
workspaceService = testObject = disposables.add(new WorkspaceService(
{ configurationCache: new ConfigurationCache() },
environmentService, userDataProfileService, userDataProfilesService,
fileService, remoteAgentService, uriIdentityService, new NullLogService(),
disposables.add(new FilePolicyService(environmentService.policyFile, fileService, logService))));
instantiationService.stub(IFileService, fileService);
instantiationService.stub(IWorkspaceContextService, testObject);
instantiationService.stub(IConfigurationService, testObject);
instantiationService.stub(IEnvironmentService, environmentService);
await workspaceService.initialize(convertToWorkspacePayload(folder));
instantiationService.stub(IKeybindingEditingService, instantiationService.createInstance(KeybindingsEditingService));
instantiationService.stub(ITextFileService, instantiationService.createInstance(TestTextFileService));
instantiationService.stub(ITextModelService, <ITextModelService>instantiationService.createInstance(TextModelResolverService));
instantiationService.stub(IKeybindingEditingService, disposables.add(instantiationService.createInstance(KeybindingsEditingService)));
instantiationService.stub(ITextFileService, disposables.add(instantiationService.createInstance(TestTextFileService)));
instantiationService.stub(ITextModelService, <ITextModelService>disposables.add(instantiationService.createInstance(TextModelResolverService)));
workspaceService.acquireInstantiationService(instantiationService);
});
teardown(() => disposables.clear());
test('defaults', () => {
assert.deepStrictEqual(testObject.getValue('configurationService'), { 'folder': { 'applicationSetting': 'isSet', 'machineSetting': 'isSet', 'machineOverridableSetting': 'isSet', 'testSetting': 'isSet', 'languageSetting': 'isSet', 'restrictedSetting': 'isSet', 'policySetting': 'isSet' } });
});
@@ -1017,7 +1055,7 @@ suite('WorkspaceConfigurationService - Folder', () => {
test('reload configuration emits events after global configuraiton changes', () => runWithFakedTimers<void>({ useFakeTimers: true }, async () => {
await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "testworkbench.editor.tabs": true }'));
const target = sinon.spy();
testObject.onDidChangeConfiguration(target);
disposables.add(testObject.onDidChangeConfiguration(target));
await testObject.reloadConfiguration();
assert.ok(target.called);
}));
@@ -1025,7 +1063,7 @@ suite('WorkspaceConfigurationService - Folder', () => {
test('reload configuration emits events after workspace configuraiton changes', () => runWithFakedTimers<void>({ 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);
disposables.add(testObject.onDidChangeConfiguration(target));
await testObject.reloadConfiguration();
assert.ok(target.called);
}));
@@ -1035,7 +1073,7 @@ suite('WorkspaceConfigurationService - Folder', () => {
await fileService.writeFile(joinPath(workspaceService.getWorkspace().folders[0].uri, '.vscode', 'settings.json'), VSBuffer.fromString('{ "configurationService.folder.testSetting": "workspaceValue" }'));
await testObject.reloadConfiguration();
const target = sinon.spy();
testObject.onDidChangeConfiguration(() => { target(); });
disposables.add(testObject.onDidChangeConfiguration(() => { target(); }));
await testObject.reloadConfiguration();
assert.ok(!target.called);
}));
@@ -1297,14 +1335,14 @@ suite('WorkspaceConfigurationService - Folder', () => {
test('update user configuration should trigger change event before promise is resolve', () => {
const target = sinon.spy();
testObject.onDidChangeConfiguration(target);
disposables.add(testObject.onDidChangeConfiguration(target));
return testObject.updateValue('configurationService.folder.testSetting', 'value', ConfigurationTarget.USER)
.then(() => assert.ok(target.called));
});
test('update workspace configuration should trigger change event before promise is resolve', () => {
const target = sinon.spy();
testObject.onDidChangeConfiguration(target);
disposables.add(testObject.onDidChangeConfiguration(target));
return testObject.updateValue('configurationService.folder.testSetting', 'value', ConfigurationTarget.WORKSPACE)
.then(() => assert.ok(target.called));
});
@@ -1316,7 +1354,7 @@ suite('WorkspaceConfigurationService - Folder', () => {
test('update memory configuration should trigger change event before promise is resolve', () => {
const target = sinon.spy();
testObject.onDidChangeConfiguration(target);
disposables.add(testObject.onDidChangeConfiguration(target));
return testObject.updateValue('configurationService.folder.testSetting', 'memoryValue', ConfigurationTarget.MEMORY)
.then(() => assert.ok(target.called));
});
@@ -1349,14 +1387,14 @@ suite('WorkspaceConfigurationService - Folder', () => {
test('update task configuration should trigger change event before promise is resolve', () => {
const target = sinon.spy();
testObject.onDidChangeConfiguration(target);
disposables.add(testObject.onDidChangeConfiguration(target));
return testObject.updateValue('tasks', { 'version': '1.0.0', tasks: [{ 'taskName': 'myTask' }] }, ConfigurationTarget.WORKSPACE)
.then(() => assert.ok(target.called));
});
test('no change event when there are no global tasks', () => runWithFakedTimers<void>({ useFakeTimers: true }, async () => {
const target = sinon.spy();
testObject.onDidChangeConfiguration(target);
disposables.add(testObject.onDidChangeConfiguration(target));
await timeout(5);
assert.ok(target.notCalled);
}));
@@ -1522,7 +1560,7 @@ suite('WorkspaceConfigurationService - Profiles', () => {
let testObject: WorkspaceService, workspaceService: WorkspaceService, fileService: IFileService, environmentService: IBrowserWorkbenchEnvironmentService, userDataProfileService: IUserDataProfileService, instantiationService: TestInstantiationService;
const configurationRegistry = Registry.as<IConfigurationRegistry>(ConfigurationExtensions.Configuration);
const disposables: DisposableStore = new DisposableStore();
const disposables = ensureNoDisposablesAreLeakedInTestSuite();
suiteSetup(() => {
configurationRegistry.registerConfiguration({
@@ -1560,7 +1598,7 @@ suite('WorkspaceConfigurationService - Profiles', () => {
const logService = new NullLogService();
fileService = disposables.add(new FileService(logService));
const fileSystemProvider = disposables.add(new InMemoryFileSystemProvider());
fileService.registerProvider(ROOT.scheme, fileSystemProvider);
disposables.add(fileService.registerProvider(ROOT.scheme, fileSystemProvider));
const folder = joinPath(ROOT, 'a');
await fileService.createFolder(folder);
@@ -1568,13 +1606,17 @@ suite('WorkspaceConfigurationService - Profiles', () => {
instantiationService = <TestInstantiationService>workbenchInstantiationService(undefined, disposables);
environmentService = TestEnvironmentService;
environmentService.policyFile = joinPath(folder, 'policies.json');
const remoteAgentService = instantiationService.createInstance(RemoteAgentService);
const remoteAgentService = disposables.add(instantiationService.createInstance(RemoteAgentService));
instantiationService.stub(IRemoteAgentService, remoteAgentService);
const uriIdentityService = new UriIdentityService(fileService);
const userDataProfilesService = instantiationService.stub(IUserDataProfilesService, new UserDataProfilesService(environmentService, fileService, uriIdentityService, logService));
fileService.registerProvider(Schemas.vscodeUserData, disposables.add(new FileUserDataProvider(ROOT.scheme, fileSystemProvider, Schemas.vscodeUserData, userDataProfilesService, uriIdentityService, new NullLogService())));
userDataProfileService = instantiationService.stub(IUserDataProfileService, new UserDataProfileService(toUserDataProfile('custom', 'custom', joinPath(environmentService.userRoamingDataHome, 'profiles', 'temp'), joinPath(environmentService.cacheHome, 'profilesCache'))));
workspaceService = testObject = disposables.add(new WorkspaceService({ configurationCache: new ConfigurationCache() }, environmentService, userDataProfileService, userDataProfilesService, fileService, remoteAgentService, uriIdentityService, new NullLogService(), new FilePolicyService(environmentService.policyFile, fileService, logService)));
const uriIdentityService = disposables.add(new UriIdentityService(fileService));
const userDataProfilesService = instantiationService.stub(IUserDataProfilesService, disposables.add(new UserDataProfilesService(environmentService, fileService, uriIdentityService, logService)));
disposables.add(fileService.registerProvider(Schemas.vscodeUserData, disposables.add(new FileUserDataProvider(ROOT.scheme, fileSystemProvider, Schemas.vscodeUserData, userDataProfilesService, uriIdentityService, new NullLogService()))));
userDataProfileService = instantiationService.stub(IUserDataProfileService, disposables.add(new UserDataProfileService(toUserDataProfile('custom', 'custom', joinPath(environmentService.userRoamingDataHome, 'profiles', 'temp'), joinPath(environmentService.cacheHome, 'profilesCache')))));
workspaceService = testObject = disposables.add(new WorkspaceService(
{ configurationCache: new ConfigurationCache() },
environmentService, userDataProfileService, userDataProfilesService,
fileService, remoteAgentService, uriIdentityService, new NullLogService(),
disposables.add(new FilePolicyService(environmentService.policyFile, fileService, logService))));
instantiationService.stub(IFileService, fileService);
instantiationService.stub(IWorkspaceContextService, testObject);
instantiationService.stub(IConfigurationService, testObject);
@@ -1583,14 +1625,12 @@ suite('WorkspaceConfigurationService - Profiles', () => {
await fileService.writeFile(userDataProfilesService.defaultProfile.settingsResource, VSBuffer.fromString('{ "configurationService.profiles.applicationSetting2": "applicationValue", "configurationService.profiles.testSetting2": "userValue" }'));
await fileService.writeFile(userDataProfileService.currentProfile.settingsResource, VSBuffer.fromString('{ "configurationService.profiles.applicationSetting2": "profileValue", "configurationService.profiles.testSetting2": "profileValue" }'));
await workspaceService.initialize(convertToWorkspacePayload(folder));
instantiationService.stub(IKeybindingEditingService, instantiationService.createInstance(KeybindingsEditingService));
instantiationService.stub(ITextFileService, instantiationService.createInstance(TestTextFileService));
instantiationService.stub(ITextModelService, <ITextModelService>instantiationService.createInstance(TextModelResolverService));
instantiationService.stub(IKeybindingEditingService, disposables.add(instantiationService.createInstance(KeybindingsEditingService)));
instantiationService.stub(ITextFileService, disposables.add(instantiationService.createInstance(TestTextFileService)));
instantiationService.stub(ITextModelService, <ITextModelService>disposables.add(instantiationService.createInstance(TextModelResolverService)));
workspaceService.acquireInstantiationService(instantiationService);
});
teardown(() => disposables.clear());
test('initialize', () => runWithFakedTimers<void>({ useFakeTimers: true }, async () => {
assert.strictEqual(testObject.getValue('configurationService.profiles.applicationSetting2'), 'applicationValue');
assert.strictEqual(testObject.getValue('configurationService.profiles.testSetting2'), 'profileValue');
@@ -1849,7 +1889,7 @@ suite('WorkspaceConfigurationService-Multiroot', () => {
let workspaceContextService: IWorkspaceContextService, jsonEditingServce: IJSONEditingService, testObject: WorkspaceService, fileService: IFileService, environmentService: BrowserWorkbenchEnvironmentService, userDataProfileService: IUserDataProfileService;
const configurationRegistry = Registry.as<IConfigurationRegistry>(ConfigurationExtensions.Configuration);
const disposables = new DisposableStore();
const disposables = ensureNoDisposablesAreLeakedInTestSuite();
suiteSetup(() => {
configurationRegistry.registerConfiguration({
@@ -1905,7 +1945,7 @@ suite('WorkspaceConfigurationService-Multiroot', () => {
const logService = new NullLogService();
fileService = disposables.add(new FileService(logService));
const fileSystemProvider = disposables.add(new InMemoryFileSystemProvider());
fileService.registerProvider(ROOT.scheme, fileSystemProvider);
disposables.add(fileService.registerProvider(ROOT.scheme, fileSystemProvider));
const appSettingsHome = joinPath(ROOT, 'user');
const folderA = joinPath(ROOT, 'a');
@@ -1920,13 +1960,16 @@ suite('WorkspaceConfigurationService-Multiroot', () => {
const instantiationService = <TestInstantiationService>workbenchInstantiationService(undefined, disposables);
environmentService = TestEnvironmentService;
const remoteAgentService = instantiationService.createInstance(RemoteAgentService);
const remoteAgentService = disposables.add(instantiationService.createInstance(RemoteAgentService));
instantiationService.stub(IRemoteAgentService, remoteAgentService);
const uriIdentityService = new UriIdentityService(fileService);
const userDataProfilesService = instantiationService.stub(IUserDataProfilesService, new UserDataProfilesService(environmentService, fileService, uriIdentityService, logService));
fileService.registerProvider(Schemas.vscodeUserData, disposables.add(new FileUserDataProvider(ROOT.scheme, fileSystemProvider, Schemas.vscodeUserData, userDataProfilesService, uriIdentityService, new NullLogService())));
userDataProfileService = instantiationService.stub(IUserDataProfileService, new UserDataProfileService(userDataProfilesService.defaultProfile));
const workspaceService = disposables.add(new WorkspaceService({ configurationCache: new ConfigurationCache() }, environmentService, userDataProfileService, userDataProfilesService, fileService, remoteAgentService, uriIdentityService, new NullLogService(), new NullPolicyService()));
const uriIdentityService = disposables.add(new UriIdentityService(fileService));
const userDataProfilesService = instantiationService.stub(IUserDataProfilesService, disposables.add(new UserDataProfilesService(environmentService, fileService, uriIdentityService, logService)));
disposables.add(fileService.registerProvider(Schemas.vscodeUserData, disposables.add(new FileUserDataProvider(ROOT.scheme, fileSystemProvider, Schemas.vscodeUserData, userDataProfilesService, uriIdentityService, new NullLogService()))));
userDataProfileService = instantiationService.stub(IUserDataProfileService, disposables.add(new UserDataProfileService(userDataProfilesService.defaultProfile)));
const workspaceService = disposables.add(new WorkspaceService(
{ configurationCache: new ConfigurationCache() },
environmentService, userDataProfileService, userDataProfilesService,
fileService, remoteAgentService, uriIdentityService, new NullLogService(), new NullPolicyService()));
instantiationService.stub(IFileService, fileService);
instantiationService.stub(IWorkspaceContextService, workspaceService);
@@ -1935,9 +1978,9 @@ suite('WorkspaceConfigurationService-Multiroot', () => {
instantiationService.stub(IEnvironmentService, environmentService);
await workspaceService.initialize(getWorkspaceIdentifier(configResource));
instantiationService.stub(IKeybindingEditingService, instantiationService.createInstance(KeybindingsEditingService));
instantiationService.stub(ITextFileService, instantiationService.createInstance(TestTextFileService));
instantiationService.stub(ITextModelService, <ITextModelService>instantiationService.createInstance(TextModelResolverService));
instantiationService.stub(IKeybindingEditingService, disposables.add(instantiationService.createInstance(KeybindingsEditingService)));
instantiationService.stub(ITextFileService, disposables.add(instantiationService.createInstance(TestTextFileService)));
instantiationService.stub(ITextModelService, <ITextModelService>disposables.add(instantiationService.createInstance(TextModelResolverService)));
jsonEditingServce = instantiationService.createInstance(JSONEditingService);
instantiationService.stub(IJSONEditingService, jsonEditingServce);
workspaceService.acquireInstantiationService(instantiationService);
@@ -1946,8 +1989,6 @@ suite('WorkspaceConfigurationService-Multiroot', () => {
testObject = workspaceService;
});
teardown(() => disposables.clear());
test('application settings are not read from workspace', () => runWithFakedTimers<void>({ 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);
@@ -2415,7 +2456,7 @@ suite('WorkspaceConfigurationService-Multiroot', () => {
test('update user configuration should trigger change event before promise is resolve', () => runWithFakedTimers<void>({ useFakeTimers: true }, async () => {
const target = sinon.spy();
testObject.onDidChangeConfiguration(target);
disposables.add(testObject.onDidChangeConfiguration(target));
await testObject.updateValue('configurationService.workspace.testSetting', 'userValue', ConfigurationTarget.USER);
assert.ok(target.called);
}));
@@ -2427,7 +2468,7 @@ suite('WorkspaceConfigurationService-Multiroot', () => {
test('update workspace configuration should trigger change event before promise is resolve', () => runWithFakedTimers<void>({ useFakeTimers: true }, async () => {
const target = sinon.spy();
testObject.onDidChangeConfiguration(target);
disposables.add(testObject.onDidChangeConfiguration(target));
await testObject.updateValue('configurationService.workspace.testSetting', 'workspaceValue', ConfigurationTarget.WORKSPACE);
assert.ok(target.called);
}));
@@ -2457,7 +2498,7 @@ suite('WorkspaceConfigurationService-Multiroot', () => {
test('update workspace folder configuration should trigger change event before promise is resolve', () => runWithFakedTimers<void>({ useFakeTimers: true }, async () => {
const workspace = workspaceContextService.getWorkspace();
const target = sinon.spy();
testObject.onDidChangeConfiguration(target);
disposables.add(testObject.onDidChangeConfiguration(target));
await testObject.updateValue('configurationService.workspace.testResourceSetting', 'workspaceFolderValue', { resource: workspace.folders[0].uri }, ConfigurationTarget.WORKSPACE_FOLDER);
assert.ok(target.called);
}));
@@ -2466,7 +2507,7 @@ suite('WorkspaceConfigurationService-Multiroot', () => {
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);
disposables.add(testObject.onDidChangeConfiguration(target));
await testObject.updateValue('configurationService.workspace.testResourceSetting', 'workspaceFolderValue2', { resource: workspace.folders[0].uri }, ConfigurationTarget.WORKSPACE_FOLDER);
assert.ok(target.called);
}));
@@ -2484,7 +2525,7 @@ suite('WorkspaceConfigurationService-Multiroot', () => {
test('update memory configuration should trigger change event before promise is resolve', () => runWithFakedTimers<void>({ useFakeTimers: true }, async () => {
const target = sinon.spy();
testObject.onDidChangeConfiguration(target);
disposables.add(testObject.onDidChangeConfiguration(target));
await testObject.updateValue('configurationService.workspace.testSetting', 'memoryValue', ConfigurationTarget.MEMORY);
assert.ok(target.called);
}));
@@ -2531,14 +2572,14 @@ suite('WorkspaceConfigurationService-Multiroot', () => {
await fileService.writeFile(joinPath(uri, '.vscode', 'settings.json'), VSBuffer.fromString('{ "configurationService.workspace.testResourceSetting": "workspaceFolderValue" }'));
return new Promise<void>((c, e) => {
testObject.onDidChangeConfiguration(() => {
disposables.add(testObject.onDidChangeConfiguration(() => {
try {
assert.strictEqual(testObject.getValue('configurationService.workspace.testResourceSetting', { resource: uri }), 'workspaceFolderValue');
c();
} catch (error) {
e(error);
}
});
}));
workspaceService.addFolders([{ uri }]);
});
}));
@@ -2614,7 +2655,7 @@ suite('WorkspaceConfigurationService - Remote Folder', () => {
instantiationService: TestInstantiationService, fileService: IFileService, environmentService: BrowserWorkbenchEnvironmentService, userDataProfileService: IUserDataProfileService;
const remoteAuthority = 'configuraiton-tests';
const configurationRegistry = Registry.as<IConfigurationRegistry>(ConfigurationExtensions.Configuration);
const disposables = new DisposableStore();
const disposables = ensureNoDisposablesAreLeakedInTestSuite();
suiteSetup(() => {
configurationRegistry.registerConfiguration({
@@ -2649,7 +2690,7 @@ suite('WorkspaceConfigurationService - Remote Folder', () => {
const logService = new NullLogService();
fileService = disposables.add(new FileService(logService));
fileSystemProvider = disposables.add(new InMemoryFileSystemProvider());
fileService.registerProvider(ROOT.scheme, fileSystemProvider);
disposables.add(fileService.registerProvider(ROOT.scheme, fileSystemProvider));
const appSettingsHome = joinPath(ROOT, 'user');
folder = joinPath(ROOT, 'a');
@@ -2663,10 +2704,10 @@ suite('WorkspaceConfigurationService - Remote Folder', () => {
const remoteEnvironmentPromise = new Promise<Partial<IRemoteAgentEnvironment>>(c => resolveRemoteEnvironment = () => c({ settingsPath: remoteSettingsResource }));
const remoteAgentService = instantiationService.stub(IRemoteAgentService, <Partial<IRemoteAgentService>>{ getEnvironment: () => remoteEnvironmentPromise });
const configurationCache: IConfigurationCache = { read: () => Promise.resolve(''), write: () => Promise.resolve(), remove: () => Promise.resolve(), needsCaching: () => false };
const uriIdentityService = new UriIdentityService(fileService);
const userDataProfilesService = instantiationService.stub(IUserDataProfilesService, new UserDataProfilesService(environmentService, fileService, uriIdentityService, logService));
fileService.registerProvider(Schemas.vscodeUserData, disposables.add(new FileUserDataProvider(ROOT.scheme, fileSystemProvider, Schemas.vscodeUserData, userDataProfilesService, uriIdentityService, new NullLogService())));
userDataProfileService = instantiationService.stub(IUserDataProfileService, new UserDataProfileService(userDataProfilesService.defaultProfile));
const uriIdentityService = disposables.add(new UriIdentityService(fileService));
const userDataProfilesService = instantiationService.stub(IUserDataProfilesService, disposables.add(new UserDataProfilesService(environmentService, fileService, uriIdentityService, logService)));
disposables.add(fileService.registerProvider(Schemas.vscodeUserData, disposables.add(new FileUserDataProvider(ROOT.scheme, fileSystemProvider, Schemas.vscodeUserData, userDataProfilesService, uriIdentityService, new NullLogService()))));
userDataProfileService = instantiationService.stub(IUserDataProfileService, disposables.add(new UserDataProfileService(userDataProfilesService.defaultProfile)));
testObject = disposables.add(new WorkspaceService({ configurationCache, remoteAuthority }, environmentService, userDataProfileService, userDataProfilesService, fileService, remoteAgentService, uriIdentityService, new NullLogService(), new NullPolicyService()));
instantiationService.stub(IWorkspaceContextService, testObject);
instantiationService.stub(IConfigurationService, testObject);
@@ -2676,27 +2717,25 @@ suite('WorkspaceConfigurationService - Remote Folder', () => {
async function initialize(): Promise<void> {
await testObject.initialize(convertToWorkspacePayload(folder));
instantiationService.stub(ITextFileService, instantiationService.createInstance(TestTextFileService));
instantiationService.stub(ITextModelService, <ITextModelService>instantiationService.createInstance(TextModelResolverService));
instantiationService.stub(ITextFileService, disposables.add(instantiationService.createInstance(TestTextFileService)));
instantiationService.stub(ITextModelService, <ITextModelService>disposables.add(instantiationService.createInstance(TextModelResolverService)));
instantiationService.stub(IJSONEditingService, instantiationService.createInstance(JSONEditingService));
testObject.acquireInstantiationService(instantiationService);
}
function registerRemoteFileSystemProvider(): void {
instantiationService.get(IFileService).registerProvider(Schemas.vscodeRemote, new RemoteFileSystemProvider(fileSystemProvider, remoteAuthority));
disposables.add(instantiationService.get(IFileService).registerProvider(Schemas.vscodeRemote, new RemoteFileSystemProvider(fileSystemProvider, remoteAuthority)));
}
function registerRemoteFileSystemProviderOnActivation(): void {
const disposable = instantiationService.get(IFileService).onWillActivateFileSystemProvider(e => {
const disposable = disposables.add(instantiationService.get(IFileService).onWillActivateFileSystemProvider(e => {
if (e.scheme === Schemas.vscodeRemote) {
disposable.dispose();
e.join(Promise.resolve().then(() => registerRemoteFileSystemProvider()));
}
});
}));
}
teardown(() => disposables.clear());
test('remote settings override globals', () => runWithFakedTimers<void>({ useFakeTimers: true }, async () => {
await fileService.writeFile(machineSettingsResource, VSBuffer.fromString('{ "configurationService.remote.machineSetting": "remoteValue" }'));
registerRemoteFileSystemProvider();
@@ -2718,7 +2757,7 @@ suite('WorkspaceConfigurationService - Remote Folder', () => {
registerRemoteFileSystemProvider();
await initialize();
const promise = new Promise<void>((c, e) => {
testObject.onDidChangeConfiguration(event => {
disposables.add(testObject.onDidChangeConfiguration(event => {
try {
assert.strictEqual(event.source, ConfigurationTarget.USER);
assert.deepStrictEqual([...event.affectedKeys], ['configurationService.remote.machineSetting']);
@@ -2727,7 +2766,7 @@ suite('WorkspaceConfigurationService - Remote Folder', () => {
} catch (error) {
e(error);
}
});
}));
});
resolveRemoteEnvironment();
return promise;
@@ -2738,7 +2777,7 @@ suite('WorkspaceConfigurationService - Remote Folder', () => {
registerRemoteFileSystemProviderOnActivation();
await initialize();
const promise = new Promise<void>((c, e) => {
testObject.onDidChangeConfiguration(event => {
disposables.add(testObject.onDidChangeConfiguration(event => {
try {
assert.strictEqual(event.source, ConfigurationTarget.USER);
assert.deepStrictEqual([...event.affectedKeys], ['configurationService.remote.machineSetting']);
@@ -2747,7 +2786,7 @@ suite('WorkspaceConfigurationService - Remote Folder', () => {
} catch (error) {
e(error);
}
});
}));
});
resolveRemoteEnvironment();
return promise;