Files
Matt Bierner 3c8134184b Enable no-unexternalized-strings in repo (#2448)
Enables the same `no-unexternalized-strings` with have in `vscode` in this repo. This make sure we have a more consistent style across repos and when generating edits
2025-12-05 18:45:12 +00:00

75 lines
3.5 KiB
TypeScript

/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { ITestingServicesAccessor } from '../../../src/platform/test/node/services';
import { extractCodeBlocks } from '../../../src/util/common/markdown';
import { isValidPythonFile } from '../../simulation/diagnosticProviders/python';
import { ScenarioEvaluator } from '../scenarioLoader';
async function pythonTestFnEvaluator(
accessor: ITestingServicesAccessor,
query: string,
response: string,
testFn: string
): Promise<{ success: boolean; errorMessage?: string }> {
const codeBlock = extractCodeBlocks(response).filter(x => x.language === 'python').at(0);
if (!codeBlock) {
return { success: false, errorMessage: 'No python code block found in response' };
}
const testCode = '\n' + codeBlock.code + '\n\n' + testFn + '\n\n' + 'test()';
const isValid = await isValidPythonFile(accessor, testCode);
return isValid ? { success: true } : { success: false, errorMessage: 'Unit test failed' };
}
const testFnSubArrayMinMaxSum = `
def test():
assert subarray_min_max_sum([1,2,3,4,5,6,7,8,9]) == (36,44)
assert subarray_min_max_sum([1,1,1]) == (2,2)
assert subarray_min_max_sum([-1,-1,-1]) == (-2,-2)
assert subarray_min_max_sum([-1,0,1]) == (-1,1)
assert subarray_min_max_sum([1]) == None
`;
const testFnPalindrome = `
def test():
assert palindrome('') == ''
assert palindrome('a') == 'a'
assert palindrome('aaaaaa') == 'aaaaaa'
assert palindrome('aaaaa') == 'aaaaa'
assert palindrome('abcddcba') == 'abcddcba'
assert palindrome('abcdcba') == 'abcdcba'
assert palindrome('xabcddcba') == 'abcddcba'
assert palindrome('axbcdcba') == 'abcdcba'
assert palindrome('abcxdcba') == 'abcdcba'
assert palindrome('abcdxcba') == 'abcxcba'
assert palindrome('abcdcxba') == 'abcdcba'
assert palindrome('abcdcbxa') == 'abcdcba'
assert palindrome('abcdcbax') == 'abcdcba'
assert palindrome('xabcdcbay') == None
assert palindrome('axbcdcbax') == None
`;
const PythonTestFnEvaluatorGenerator = (testFn: string): ScenarioEvaluator => {
return (accessor: ITestingServicesAccessor, question: string, answer: string) =>
pythonTestFnEvaluator(accessor, question, answer, testFn);
};
export const pythonFixEvaluators: { [key: string]: ScenarioEvaluator } = {
'case1.conversation.json': PythonTestFnEvaluatorGenerator(testFnSubArrayMinMaxSum),
'case2.conversation.json': PythonTestFnEvaluatorGenerator(testFnSubArrayMinMaxSum),
'case3.conversation.json': PythonTestFnEvaluatorGenerator(testFnSubArrayMinMaxSum),
'case4.conversation.json': PythonTestFnEvaluatorGenerator(testFnSubArrayMinMaxSum),
'case5.conversation.json': PythonTestFnEvaluatorGenerator(testFnSubArrayMinMaxSum),
'case6.conversation.json': PythonTestFnEvaluatorGenerator(testFnPalindrome),
'case7.conversation.json': PythonTestFnEvaluatorGenerator(testFnPalindrome),
'case8.conversation.json': PythonTestFnEvaluatorGenerator(testFnPalindrome),
'case9.conversation.json': PythonTestFnEvaluatorGenerator(testFnPalindrome),
'case10.conversation.json': PythonTestFnEvaluatorGenerator(testFnPalindrome),
'case11.conversation.json': PythonTestFnEvaluatorGenerator(testFnPalindrome),
'case12.conversation.json': PythonTestFnEvaluatorGenerator(testFnPalindrome),
};