From 557df6e2017be4e5144732f96e3c019f9f2deafc Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Mon, 17 Sep 2018 18:16:00 -0700 Subject: [PATCH] Tests for #55790 --- .../api/extHostSearch.test.ts | 59 ++++++++++++++----- 1 file changed, 45 insertions(+), 14 deletions(-) diff --git a/src/vs/workbench/test/electron-browser/api/extHostSearch.test.ts b/src/vs/workbench/test/electron-browser/api/extHostSearch.test.ts index 138d41fa2f7..c17064b88c0 100644 --- a/src/vs/workbench/test/electron-browser/api/extHostSearch.test.ts +++ b/src/vs/workbench/test/electron-browser/api/extHostSearch.test.ts @@ -688,7 +688,7 @@ suite('ExtHostSearch', () => { test('no results', async () => { await registerTestTextSearchProvider({ - provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { + provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { return TPromise.wrap(null); } }); @@ -705,7 +705,7 @@ suite('ExtHostSearch', () => { ]; await registerTestTextSearchProvider({ - provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { + provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { providedResults.forEach(r => progress.report(r)); return TPromise.wrap(null); } @@ -718,7 +718,7 @@ suite('ExtHostSearch', () => { test('all provider calls get global include/excludes', async () => { await registerTestTextSearchProvider({ - provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { + provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { assert.equal(options.includes.length, 1); assert.equal(options.excludes.length, 1); return TPromise.wrap(null); @@ -747,7 +747,7 @@ suite('ExtHostSearch', () => { test('global/local include/excludes combined', async () => { await registerTestTextSearchProvider({ - provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { + provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { if (options.folder.toString() === rootFolderA.toString()) { assert.deepEqual(options.includes.sort(), ['*.ts', 'foo']); assert.deepEqual(options.excludes.sort(), ['*.js', 'bar']); @@ -788,7 +788,7 @@ suite('ExtHostSearch', () => { test('include/excludes resolved correctly', async () => { await registerTestTextSearchProvider({ - provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { + provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { assert.deepEqual(options.includes.sort(), ['*.jsx', '*.ts']); assert.deepEqual(options.excludes.sort(), []); @@ -825,7 +825,7 @@ suite('ExtHostSearch', () => { test('provider fail', async () => { await registerTestTextSearchProvider({ - provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { + provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { throw new Error('Provider fail'); } }); @@ -856,7 +856,7 @@ suite('ExtHostSearch', () => { ]; await registerTestTextSearchProvider({ - provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { + provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { providedResults.forEach(r => progress.report(r)); return TPromise.wrap(null); } @@ -900,7 +900,7 @@ suite('ExtHostSearch', () => { }; await registerTestTextSearchProvider({ - provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { + provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { let reportedResults; if (options.folder.fsPath === rootFolderA.fsPath) { reportedResults = [ @@ -964,7 +964,7 @@ suite('ExtHostSearch', () => { ]; await registerTestTextSearchProvider({ - provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { + provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { providedResults.forEach(r => progress.report(r)); return TPromise.wrap(null); } @@ -994,7 +994,7 @@ suite('ExtHostSearch', () => { let wasCanceled = false; await registerTestTextSearchProvider({ - provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { + provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { token.onCancellationRequested(() => wasCanceled = true); providedResults.forEach(r => progress.report(r)); return TPromise.wrap(null); @@ -1026,7 +1026,7 @@ suite('ExtHostSearch', () => { let wasCanceled = false; await registerTestTextSearchProvider({ - provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { + provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { token.onCancellationRequested(() => wasCanceled = true); providedResults.forEach(r => progress.report(r)); return TPromise.wrap(null); @@ -1057,7 +1057,7 @@ suite('ExtHostSearch', () => { let wasCanceled = false; await registerTestTextSearchProvider({ - provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { + provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { token.onCancellationRequested(() => wasCanceled = true); providedResults.forEach(r => progress.report(r)); return TPromise.wrap(null); @@ -1080,10 +1080,39 @@ suite('ExtHostSearch', () => { assert(!wasCanceled, 'Expected not to be canceled'); }); + test('provider returns early with limitHit', async () => { + const providedResults: vscode.TextSearchResult[] = [ + makeTextResult(rootFolderA, 'file1.ts'), + makeTextResult(rootFolderA, 'file2.ts'), + makeTextResult(rootFolderA, 'file3.ts') + ]; + + await registerTestTextSearchProvider({ + provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { + providedResults.forEach(r => progress.report(r)); + return TPromise.wrap({ limitHit: true }); + } + }); + + const query: ISearchQuery = { + type: QueryType.Text, + + maxResults: 1000, + + folderQueries: [ + { folder: rootFolderA } + ] + }; + + const { results, stats } = await runTextSearch(getPattern('foo'), query); + assert(stats.limitHit, 'Expected to return limitHit'); + assertResults(results, providedResults); + }); + test('multiroot max results', async () => { let cancels = 0; await registerTestTextSearchProvider({ - provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { + provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { token.onCancellationRequested(() => cancels++); return new TPromise(r => process.nextTick(r)) .then(() => { @@ -1092,6 +1121,8 @@ suite('ExtHostSearch', () => { 'file2.ts', 'file3.ts', ].forEach(f => progress.report(makeTextResult(options.folder, f))); + + return null; }); } }); @@ -1120,7 +1151,7 @@ suite('ExtHostSearch', () => { ]; await registerTestTextSearchProvider({ - provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { + provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable { providedResults.forEach(r => progress.report(r)); return TPromise.wrap(null); }