Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/copilot/test/e2e/semanticSearchView.stest.ts
13388 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 * as path from 'path';
8
import type { TextSearchMatch2 } from 'vscode';
9
import { SemanticSearchTextSearchProvider } from '../../src/extension/workspaceSemanticSearch/node/semanticSearchTextSearchProvider';
10
import { IConversationOptions } from '../../src/platform/chat/common/conversationOptions';
11
import { TestingServiceCollection } from '../../src/platform/test/node/services';
12
import { SimulationWorkspace } from '../../src/platform/test/node/simulationWorkspace';
13
import { CancellationToken } from '../../src/util/vs/base/common/cancellation';
14
import { IInstantiationService } from '../../src/util/vs/platform/instantiation/common/instantiation';
15
import { ssuite, stest } from '../base/stest';
16
import { discoverScenarios } from './scenarioLoader';
17
import { fetchConversationOptions } from './scenarioTest';
18
19
ssuite({ title: 'semanticSearchView', location: 'panel' }, (inputPath) => {
20
// No default cases checked in at the moment
21
if (!inputPath) {
22
return;
23
}
24
25
if (inputPath.endsWith('tests')) {
26
inputPath = path.join(inputPath, 'semantic-search-view');
27
}
28
29
const scenariosFolder = inputPath;
30
const scenarios = discoverScenarios(scenariosFolder);
31
32
for (const scenario of scenarios) {
33
for (const testCase of scenario) {
34
stest({ description: 'Semantic search view: ' + testCase.question }, async (testingServiceCollection: TestingServiceCollection) => {
35
const workspaceState = testCase.getState ? testCase.getState() : undefined;
36
testingServiceCollection.define(IConversationOptions, fetchConversationOptions());
37
const simulationWorkspace = new SimulationWorkspace();
38
simulationWorkspace.setupServices(testingServiceCollection);
39
simulationWorkspace.resetFromDeserializedWorkspaceState(workspaceState);
40
const accessor = testingServiceCollection.createTestingAccessor();
41
const question = testCase.question;
42
const instantiationService = accessor.get(IInstantiationService);
43
const provider = instantiationService.createInstance(SemanticSearchTextSearchProvider);
44
45
const results: TextSearchMatch2[] = [];
46
await provider.provideAITextSearchResults(question, {
47
folderOptions: [],
48
maxResults: 1000,
49
previewOptions: {
50
matchLines: 100,
51
charsPerLine: 100
52
},
53
maxFileSize: undefined,
54
surroundingContext: 0
55
}, {
56
report: (value: TextSearchMatch2) => {
57
results.push(value);
58
}
59
}, CancellationToken.None);
60
61
if (testCase.json.keywords) {
62
for (const r of results) {
63
const matched = testCase.json.keywords.some((keyword: string) => r.previewText.includes(keyword));
64
if (matched) {
65
return { success: true };
66
}
67
}
68
}
69
70
assert.fail('No keywords found in results');
71
});
72
}
73
}
74
});
75
76