Path: blob/main/src/vs/workbench/api/test/browser/mainThreadWorkspace.test.ts
3296 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 { CancellationToken } from '../../../../base/common/cancellation.js';7import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';8import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';9import { TestConfigurationService } from '../../../../platform/configuration/test/common/testConfigurationService.js';10import { TestInstantiationService } from '../../../../platform/instantiation/test/common/instantiationServiceMock.js';11import { MainThreadWorkspace } from '../../browser/mainThreadWorkspace.js';12import { SingleProxyRPCProtocol } from '../common/testRPCProtocol.js';13import { IFileQuery, ISearchService } from '../../../services/search/common/search.js';14import { workbenchInstantiationService } from '../../../test/browser/workbenchTestServices.js';15import { URI, UriComponents } from '../../../../base/common/uri.js';1617suite('MainThreadWorkspace', () => {18const disposables = ensureNoDisposablesAreLeakedInTestSuite();1920let configService: TestConfigurationService;21let instantiationService: TestInstantiationService;2223setup(() => {24instantiationService = workbenchInstantiationService(undefined, disposables) as TestInstantiationService;2526configService = instantiationService.get(IConfigurationService) as TestConfigurationService;27configService.setUserConfiguration('search', {});28});2930test('simple', () => {31instantiationService.stub(ISearchService, {32fileSearch(query: IFileQuery) {33assert.strictEqual(query.folderQueries.length, 1);34assert.strictEqual(query.folderQueries[0].disregardIgnoreFiles, true);3536assert.deepStrictEqual({ ...query.includePattern }, { 'foo': true });37assert.strictEqual(query.maxResults, 10);3839return Promise.resolve({ results: [], messages: [] });40}41});4243const mtw = disposables.add(instantiationService.createInstance(MainThreadWorkspace, SingleProxyRPCProtocol({ $initializeWorkspace: () => { } })));44return mtw.$startFileSearch(null, { maxResults: 10, includePattern: 'foo', disregardSearchExcludeSettings: true }, CancellationToken.None);45});4647test('exclude defaults', () => {48configService.setUserConfiguration('search', {49'exclude': { 'searchExclude': true }50});51configService.setUserConfiguration('files', {52'exclude': { 'filesExclude': true }53});5455instantiationService.stub(ISearchService, {56fileSearch(query: IFileQuery) {57assert.strictEqual(query.folderQueries.length, 1);58assert.strictEqual(query.folderQueries[0].disregardIgnoreFiles, true);59assert.strictEqual(query.folderQueries[0].excludePattern?.length, 1);60assert.deepStrictEqual(query.folderQueries[0].excludePattern[0].pattern, { 'filesExclude': true });6162return Promise.resolve({ results: [], messages: [] });63}64});6566const mtw = disposables.add(instantiationService.createInstance(MainThreadWorkspace, SingleProxyRPCProtocol({ $initializeWorkspace: () => { } })));67return mtw.$startFileSearch(null, { maxResults: 10, includePattern: '', disregardSearchExcludeSettings: true }, CancellationToken.None);68});6970test('disregard excludes', () => {71configService.setUserConfiguration('search', {72'exclude': { 'searchExclude': true }73});74configService.setUserConfiguration('files', {75'exclude': { 'filesExclude': true }76});7778instantiationService.stub(ISearchService, {79fileSearch(query: IFileQuery) {80assert.deepStrictEqual(query.folderQueries[0].excludePattern, []);81assert.deepStrictEqual(query.excludePattern, undefined);8283return Promise.resolve({ results: [], messages: [] });84}85});8687const mtw = disposables.add(instantiationService.createInstance(MainThreadWorkspace, SingleProxyRPCProtocol({ $initializeWorkspace: () => { } })));88return mtw.$startFileSearch(null, { maxResults: 10, includePattern: '', disregardSearchExcludeSettings: true, disregardExcludeSettings: true }, CancellationToken.None);89});9091test('do not disregard anything if disregardExcludeSettings is true', () => {92configService.setUserConfiguration('search', {93'exclude': { 'searchExclude': true }94});95configService.setUserConfiguration('files', {96'exclude': { 'filesExclude': true }97});9899instantiationService.stub(ISearchService, {100fileSearch(query: IFileQuery) {101assert.strictEqual(query.folderQueries.length, 1);102assert.strictEqual(query.folderQueries[0].disregardIgnoreFiles, true);103assert.deepStrictEqual(query.folderQueries[0].excludePattern, []);104105return Promise.resolve({ results: [], messages: [] });106}107});108109const mtw = disposables.add(instantiationService.createInstance(MainThreadWorkspace, SingleProxyRPCProtocol({ $initializeWorkspace: () => { } })));110return mtw.$startFileSearch(null, { maxResults: 10, includePattern: '', disregardExcludeSettings: true, disregardSearchExcludeSettings: false }, CancellationToken.None);111});112113test('exclude string', () => {114instantiationService.stub(ISearchService, {115fileSearch(query: IFileQuery) {116assert.deepStrictEqual(query.folderQueries[0].excludePattern, []);117assert.deepStrictEqual({ ...query.excludePattern }, { 'exclude/**': true });118119return Promise.resolve({ results: [], messages: [] });120}121});122123const mtw = disposables.add(instantiationService.createInstance(MainThreadWorkspace, SingleProxyRPCProtocol({ $initializeWorkspace: () => { } })));124return mtw.$startFileSearch(null, { maxResults: 10, includePattern: '', excludePattern: [{ pattern: 'exclude/**' }], disregardSearchExcludeSettings: true }, CancellationToken.None);125});126test('Valid revived URI after moving to EH', () => {127const uriComponents: UriComponents = {128scheme: 'test',129path: '/Users/username/Downloads',130};131instantiationService.stub(ISearchService, {132fileSearch(query: IFileQuery) {133assert.strictEqual(query.folderQueries?.length, 1);134assert.ok(URI.isUri(query.folderQueries[0].folder));135assert.strictEqual(query.folderQueries[0].folder.path, '/Users/username/Downloads');136assert.strictEqual(query.folderQueries[0].folder.scheme, 'test');137138return Promise.resolve({ results: [], messages: [] });139}140});141142const mtw = disposables.add(instantiationService.createInstance(MainThreadWorkspace, SingleProxyRPCProtocol({ $initializeWorkspace: () => { } })));143return mtw.$startFileSearch(uriComponents, { filePattern: '*.md' }, CancellationToken.None);144});145});146147148