mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-12 18:53:53 -05:00
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
75 lines
3.5 KiB
TypeScript
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),
|
|
};
|