Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/test/browser/treeview.test.ts
4778 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 assert from 'assert';
7
import { TreeView } from '../../browser/parts/views/treeView.js';
8
import { workbenchInstantiationService } from './workbenchTestServices.js';
9
import { TestInstantiationService } from '../../../platform/instantiation/test/common/instantiationServiceMock.js';
10
import { ITreeItem, IViewDescriptorService, TreeItemCollapsibleState } from '../../common/views.js';
11
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../base/test/common/utils.js';
12
import { ViewDescriptorService } from '../../services/views/browser/viewDescriptorService.js';
13
14
suite('TreeView', function () {
15
16
let treeView: TreeView;
17
let largestBatchSize: number = 0;
18
19
const disposables = ensureNoDisposablesAreLeakedInTestSuite();
20
21
setup(async () => {
22
largestBatchSize = 0;
23
const instantiationService: TestInstantiationService = workbenchInstantiationService(undefined, disposables);
24
const viewDescriptorService = disposables.add(instantiationService.createInstance(ViewDescriptorService));
25
instantiationService.stub(IViewDescriptorService, viewDescriptorService);
26
treeView = disposables.add(instantiationService.createInstance(TreeView, 'testTree', 'Test Title'));
27
const getChildrenOfItem = async (element?: ITreeItem): Promise<ITreeItem[] | undefined> => {
28
if (element) {
29
return undefined;
30
} else {
31
const rootChildren: ITreeItem[] = [];
32
for (let i = 0; i < 100; i++) {
33
rootChildren.push({ handle: `item_${i}`, collapsibleState: TreeItemCollapsibleState.Expanded });
34
}
35
return rootChildren;
36
}
37
};
38
39
treeView.dataProvider = {
40
getChildren: getChildrenOfItem,
41
getChildrenBatch: async (elements?: ITreeItem[]): Promise<ITreeItem[][] | undefined> => {
42
if (elements && elements.length > largestBatchSize) {
43
largestBatchSize = elements.length;
44
}
45
if (elements) {
46
return Array(elements.length).fill([]);
47
} else {
48
return [(await getChildrenOfItem()) ?? []];
49
}
50
}
51
};
52
});
53
54
test('children are batched', async () => {
55
assert.strictEqual(largestBatchSize, 0);
56
treeView.setVisibility(true);
57
await treeView.refresh();
58
assert.strictEqual(largestBatchSize, 100);
59
});
60
61
62
});
63
64