Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/api/test/browser/mainThreadTreeViews.test.ts
3296 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import * as nls from '../../../../nls.js';
7
import assert from 'assert';
8
import { mock } from '../../../../base/test/common/mock.js';
9
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';
10
import { SyncDescriptor } from '../../../../platform/instantiation/common/descriptors.js';
11
import { TestInstantiationService } from '../../../../platform/instantiation/test/common/instantiationServiceMock.js';
12
import { NullLogService } from '../../../../platform/log/common/log.js';
13
import { TestNotificationService } from '../../../../platform/notification/test/common/testNotificationService.js';
14
import { Registry } from '../../../../platform/registry/common/platform.js';
15
import { MainThreadTreeViews } from '../../browser/mainThreadTreeViews.js';
16
import { ExtHostTreeViewsShape } from '../../common/extHost.protocol.js';
17
import { CustomTreeView } from '../../../browser/parts/views/treeView.js';
18
import { Extensions, ITreeItem, ITreeView, ITreeViewDescriptor, IViewContainersRegistry, IViewDescriptorService, IViewsRegistry, TreeItemCollapsibleState, ViewContainer, ViewContainerLocation } from '../../../common/views.js';
19
import { IExtHostContext } from '../../../services/extensions/common/extHostCustomers.js';
20
import { ExtensionHostKind } from '../../../services/extensions/common/extensionHostKind.js';
21
import { ViewDescriptorService } from '../../../services/views/browser/viewDescriptorService.js';
22
import { TestViewsService, workbenchInstantiationService } from '../../../test/browser/workbenchTestServices.js';
23
import { TestExtensionService } from '../../../test/common/workbenchTestServices.js';
24
25
suite('MainThreadHostTreeView', function () {
26
const testTreeViewId = 'testTreeView';
27
const customValue = 'customValue';
28
const ViewsRegistry = Registry.as<IViewsRegistry>(Extensions.ViewsRegistry);
29
30
interface CustomTreeItem extends ITreeItem {
31
customProp: string;
32
}
33
34
class MockExtHostTreeViewsShape extends mock<ExtHostTreeViewsShape>() {
35
override async $getChildren(treeViewId: string, treeItemHandle?: string[]): Promise<(number | ITreeItem)[][]> {
36
return [[0, <CustomTreeItem>{ handle: 'testItem1', collapsibleState: TreeItemCollapsibleState.Expanded, customProp: customValue }]];
37
}
38
39
override async $hasResolve(): Promise<boolean> {
40
return false;
41
}
42
43
override $setVisible(): void { }
44
}
45
46
let container: ViewContainer;
47
let mainThreadTreeViews: MainThreadTreeViews;
48
let extHostTreeViewsShape: MockExtHostTreeViewsShape;
49
50
teardown(() => {
51
ViewsRegistry.deregisterViews(ViewsRegistry.getViews(container), container);
52
});
53
54
const disposables = ensureNoDisposablesAreLeakedInTestSuite();
55
56
setup(async () => {
57
const instantiationService: TestInstantiationService = workbenchInstantiationService(undefined, disposables);
58
const viewDescriptorService = disposables.add(instantiationService.createInstance(ViewDescriptorService));
59
instantiationService.stub(IViewDescriptorService, viewDescriptorService);
60
container = Registry.as<IViewContainersRegistry>(Extensions.ViewContainersRegistry).registerViewContainer({ id: 'testContainer', title: nls.localize2('test', 'test'), ctorDescriptor: new SyncDescriptor(<any>{}) }, ViewContainerLocation.Sidebar);
61
const viewDescriptor: ITreeViewDescriptor = {
62
id: testTreeViewId,
63
ctorDescriptor: null!,
64
name: nls.localize2('Test View 1', 'Test View 1'),
65
treeView: disposables.add(instantiationService.createInstance(CustomTreeView, 'testTree', 'Test Title', 'extension.id')),
66
};
67
ViewsRegistry.registerViews([viewDescriptor], container);
68
69
const testExtensionService = new TestExtensionService();
70
extHostTreeViewsShape = new MockExtHostTreeViewsShape();
71
mainThreadTreeViews = disposables.add(new MainThreadTreeViews(
72
new class implements IExtHostContext {
73
remoteAuthority = '';
74
extensionHostKind = ExtensionHostKind.LocalProcess;
75
dispose() { }
76
assertRegistered() { }
77
set(v: any): any { return null; }
78
getProxy(): any {
79
return extHostTreeViewsShape;
80
}
81
drain(): any { return null; }
82
}, new TestViewsService(), new TestNotificationService(), testExtensionService, new NullLogService()));
83
mainThreadTreeViews.$registerTreeViewDataProvider(testTreeViewId, { showCollapseAll: false, canSelectMany: false, dropMimeTypes: [], dragMimeTypes: [], hasHandleDrag: false, hasHandleDrop: false, manuallyManageCheckboxes: false });
84
await testExtensionService.whenInstalledExtensionsRegistered();
85
});
86
87
test('getChildren keeps custom properties', async () => {
88
const treeView: ITreeView = (<ITreeViewDescriptor>ViewsRegistry.getView(testTreeViewId)).treeView;
89
const children = await treeView.dataProvider?.getChildren({ handle: 'root', collapsibleState: TreeItemCollapsibleState.Expanded });
90
assert(children!.length === 1, 'Exactly one child should be returned');
91
assert((<CustomTreeItem>children![0]).customProp === customValue, 'Tree Items should keep custom properties');
92
});
93
94
95
});
96
97