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