Path: blob/main/src/vs/workbench/test/browser/treeview.test.ts
4778 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import assert from 'assert';6import { TreeView } from '../../browser/parts/views/treeView.js';7import { workbenchInstantiationService } from './workbenchTestServices.js';8import { TestInstantiationService } from '../../../platform/instantiation/test/common/instantiationServiceMock.js';9import { ITreeItem, IViewDescriptorService, TreeItemCollapsibleState } from '../../common/views.js';10import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../base/test/common/utils.js';11import { ViewDescriptorService } from '../../services/views/browser/viewDescriptorService.js';1213suite('TreeView', function () {1415let treeView: TreeView;16let largestBatchSize: number = 0;1718const disposables = ensureNoDisposablesAreLeakedInTestSuite();1920setup(async () => {21largestBatchSize = 0;22const instantiationService: TestInstantiationService = workbenchInstantiationService(undefined, disposables);23const viewDescriptorService = disposables.add(instantiationService.createInstance(ViewDescriptorService));24instantiationService.stub(IViewDescriptorService, viewDescriptorService);25treeView = disposables.add(instantiationService.createInstance(TreeView, 'testTree', 'Test Title'));26const getChildrenOfItem = async (element?: ITreeItem): Promise<ITreeItem[] | undefined> => {27if (element) {28return undefined;29} else {30const rootChildren: ITreeItem[] = [];31for (let i = 0; i < 100; i++) {32rootChildren.push({ handle: `item_${i}`, collapsibleState: TreeItemCollapsibleState.Expanded });33}34return rootChildren;35}36};3738treeView.dataProvider = {39getChildren: getChildrenOfItem,40getChildrenBatch: async (elements?: ITreeItem[]): Promise<ITreeItem[][] | undefined> => {41if (elements && elements.length > largestBatchSize) {42largestBatchSize = elements.length;43}44if (elements) {45return Array(elements.length).fill([]);46} else {47return [(await getChildrenOfItem()) ?? []];48}49}50};51});5253test('children are batched', async () => {54assert.strictEqual(largestBatchSize, 0);55treeView.setVisibility(true);56await treeView.refresh();57assert.strictEqual(largestBatchSize, 100);58});596061});626364