Path: blob/main/extensions/copilot/test/e2e/explain.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 * as path from 'path';6import { getLanguage } from '../../src/util/common/languages';7import { ssuite, stest } from '../base/stest';8import { validate } from '../base/validate';9import { fetchConversationScenarios } from './scenarioLoader';10import { generateScenarioTestRunner } from './scenarioTest';1112ssuite({ title: 'explain', subtitle: 'expanded context', location: 'panel' }, (inputPath) => {1314const scenarioFolder = inputPath ?? path.join(__dirname, '..', 'test/scenarios/test-explain');15const scenarios = fetchConversationScenarios(scenarioFolder);1617for (const scenario of scenarios) {18const language = scenario[0].getState?.().activeTextEditor?.document.languageId;19stest({ description: scenario[0].json.description ?? scenario[0].question.replace('/explain', ''), language: language ? getLanguage(language).languageId : undefined }, generateScenarioTestRunner(20scenario,21async (accessor, question, answer) => {22// Answers should not contain speculation23const containsSpeculation = validate(answer, [{ not: [{ anyOf: ['presumably', 'unclear'] }] }]);24if (containsSpeculation) {25return { success: false, errorMessage: 'Answer contained speculation about current selection' };26}2728if (scenario[0].json.keywords !== undefined) {29const err = validate(answer, scenario[0].json.keywords);30if (err) {31return { success: false, errorMessage: err };32}3334return { success: true, errorMessage: answer };35}3637return { success: true, errorMessage: 'No requirements set for test.' };38}39));40}41});424344