Spaces:
Paused
Paused
| import { VarType } from '../../types' | |
| import { extractFunctionParams, extractReturnType } from './code-parser' | |
| import { CodeLanguage } from './types' | |
| const SAMPLE_CODES = { | |
| python3: { | |
| noParams: 'def main():', | |
| singleParam: 'def main(param1):', | |
| multipleParams: `def main(param1, param2, param3): | |
| return {"result": param1}`, | |
| withTypes: `def main(param1: str, param2: int, param3: List[str]): | |
| result = process_data(param1, param2) | |
| return {"output": result}`, | |
| withDefaults: `def main(param1: str = "default", param2: int = 0): | |
| return {"data": param1}`, | |
| }, | |
| javascript: { | |
| noParams: 'function main() {', | |
| singleParam: 'function main(param1) {', | |
| multipleParams: `function main(param1, param2, param3) { | |
| return { result: param1 } | |
| }`, | |
| withComments: `// Main function | |
| function main(param1, param2) { | |
| // Process data | |
| return { output: process(param1, param2) } | |
| }`, | |
| withSpaces: 'function main( param1 , param2 ) {', | |
| }, | |
| } | |
| describe('extractFunctionParams', () => { | |
| describe('Python3', () => { | |
| test('handles no parameters', () => { | |
| const result = extractFunctionParams(SAMPLE_CODES.python3.noParams, CodeLanguage.python3) | |
| expect(result).toEqual([]) | |
| }) | |
| test('extracts single parameter', () => { | |
| const result = extractFunctionParams(SAMPLE_CODES.python3.singleParam, CodeLanguage.python3) | |
| expect(result).toEqual(['param1']) | |
| }) | |
| test('extracts multiple parameters', () => { | |
| const result = extractFunctionParams(SAMPLE_CODES.python3.multipleParams, CodeLanguage.python3) | |
| expect(result).toEqual(['param1', 'param2', 'param3']) | |
| }) | |
| test('handles type hints', () => { | |
| const result = extractFunctionParams(SAMPLE_CODES.python3.withTypes, CodeLanguage.python3) | |
| expect(result).toEqual(['param1', 'param2', 'param3']) | |
| }) | |
| test('handles default values', () => { | |
| const result = extractFunctionParams(SAMPLE_CODES.python3.withDefaults, CodeLanguage.python3) | |
| expect(result).toEqual(['param1', 'param2']) | |
| }) | |
| }) | |
| // JavaScriptのテストケース | |
| describe('JavaScript', () => { | |
| test('handles no parameters', () => { | |
| const result = extractFunctionParams(SAMPLE_CODES.javascript.noParams, CodeLanguage.javascript) | |
| expect(result).toEqual([]) | |
| }) | |
| test('extracts single parameter', () => { | |
| const result = extractFunctionParams(SAMPLE_CODES.javascript.singleParam, CodeLanguage.javascript) | |
| expect(result).toEqual(['param1']) | |
| }) | |
| test('extracts multiple parameters', () => { | |
| const result = extractFunctionParams(SAMPLE_CODES.javascript.multipleParams, CodeLanguage.javascript) | |
| expect(result).toEqual(['param1', 'param2', 'param3']) | |
| }) | |
| test('handles comments in code', () => { | |
| const result = extractFunctionParams(SAMPLE_CODES.javascript.withComments, CodeLanguage.javascript) | |
| expect(result).toEqual(['param1', 'param2']) | |
| }) | |
| test('handles whitespace', () => { | |
| const result = extractFunctionParams(SAMPLE_CODES.javascript.withSpaces, CodeLanguage.javascript) | |
| expect(result).toEqual(['param1', 'param2']) | |
| }) | |
| }) | |
| }) | |
| const RETURN_TYPE_SAMPLES = { | |
| python3: { | |
| singleReturn: ` | |
| def main(param1): | |
| return {"result": "value"}`, | |
| multipleReturns: ` | |
| def main(param1, param2): | |
| return {"result": "value", "status": "success"}`, | |
| noReturn: ` | |
| def main(): | |
| print("Hello")`, | |
| complexReturn: ` | |
| def main(): | |
| data = process() | |
| return {"result": data, "count": 42, "messages": ["hello"]}`, | |
| nestedObject: ` | |
| def main(name, age, city): | |
| return { | |
| 'personal_info': { | |
| 'name': name, | |
| 'age': age, | |
| 'city': city | |
| }, | |
| 'timestamp': int(time.time()), | |
| 'status': 'active' | |
| }`, | |
| }, | |
| javascript: { | |
| singleReturn: ` | |
| function main(param1) { | |
| return { result: "value" } | |
| }`, | |
| multipleReturns: ` | |
| function main(param1) { | |
| return { result: "value", status: "success" } | |
| }`, | |
| withParentheses: ` | |
| function main() { | |
| return ({ result: "value", status: "success" }) | |
| }`, | |
| noReturn: ` | |
| function main() { | |
| console.log("Hello") | |
| }`, | |
| withQuotes: ` | |
| function main() { | |
| return { "result": 'value', 'status': "success" } | |
| }`, | |
| nestedObject: ` | |
| function main(name, age, city) { | |
| return { | |
| personal_info: { | |
| name: name, | |
| age: age, | |
| city: city | |
| }, | |
| timestamp: Date.now(), | |
| status: 'active' | |
| } | |
| }`, | |
| withJSDoc: ` | |
| /** | |
| * Creates a user profile with personal information and metadata | |
| * @param {string} name - The user's name | |
| * @param {number} age - The user's age | |
| * @param {string} city - The user's city of residence | |
| * @returns {Object} An object containing the user profile | |
| */ | |
| function main(name, age, city) { | |
| return { | |
| result: { | |
| personal_info: { | |
| name: name, | |
| age: age, | |
| city: city | |
| }, | |
| timestamp: Date.now(), | |
| status: 'active' | |
| } | |
| }; | |
| }`, | |
| }, | |
| } | |
| describe('extractReturnType', () => { | |
| // Python3のテスト | |
| describe('Python3', () => { | |
| test('extracts single return value', () => { | |
| const result = extractReturnType(RETURN_TYPE_SAMPLES.python3.singleReturn, CodeLanguage.python3) | |
| expect(result).toEqual({ | |
| result: { | |
| type: VarType.string, | |
| children: null, | |
| }, | |
| }) | |
| }) | |
| test('extracts multiple return values', () => { | |
| const result = extractReturnType(RETURN_TYPE_SAMPLES.python3.multipleReturns, CodeLanguage.python3) | |
| expect(result).toEqual({ | |
| result: { | |
| type: VarType.string, | |
| children: null, | |
| }, | |
| status: { | |
| type: VarType.string, | |
| children: null, | |
| }, | |
| }) | |
| }) | |
| test('returns empty object when no return statement', () => { | |
| const result = extractReturnType(RETURN_TYPE_SAMPLES.python3.noReturn, CodeLanguage.python3) | |
| expect(result).toEqual({}) | |
| }) | |
| test('handles complex return statement', () => { | |
| const result = extractReturnType(RETURN_TYPE_SAMPLES.python3.complexReturn, CodeLanguage.python3) | |
| expect(result).toEqual({ | |
| result: { | |
| type: VarType.string, | |
| children: null, | |
| }, | |
| count: { | |
| type: VarType.string, | |
| children: null, | |
| }, | |
| messages: { | |
| type: VarType.string, | |
| children: null, | |
| }, | |
| }) | |
| }) | |
| test('handles nested object structure', () => { | |
| const result = extractReturnType(RETURN_TYPE_SAMPLES.python3.nestedObject, CodeLanguage.python3) | |
| expect(result).toEqual({ | |
| personal_info: { | |
| type: VarType.string, | |
| children: null, | |
| }, | |
| timestamp: { | |
| type: VarType.string, | |
| children: null, | |
| }, | |
| status: { | |
| type: VarType.string, | |
| children: null, | |
| }, | |
| }) | |
| }) | |
| }) | |
| // JavaScriptのテスト | |
| describe('JavaScript', () => { | |
| test('extracts single return value', () => { | |
| const result = extractReturnType(RETURN_TYPE_SAMPLES.javascript.singleReturn, CodeLanguage.javascript) | |
| expect(result).toEqual({ | |
| result: { | |
| type: VarType.string, | |
| children: null, | |
| }, | |
| }) | |
| }) | |
| test('extracts multiple return values', () => { | |
| const result = extractReturnType(RETURN_TYPE_SAMPLES.javascript.multipleReturns, CodeLanguage.javascript) | |
| expect(result).toEqual({ | |
| result: { | |
| type: VarType.string, | |
| children: null, | |
| }, | |
| status: { | |
| type: VarType.string, | |
| children: null, | |
| }, | |
| }) | |
| }) | |
| test('handles return with parentheses', () => { | |
| const result = extractReturnType(RETURN_TYPE_SAMPLES.javascript.withParentheses, CodeLanguage.javascript) | |
| expect(result).toEqual({ | |
| result: { | |
| type: VarType.string, | |
| children: null, | |
| }, | |
| status: { | |
| type: VarType.string, | |
| children: null, | |
| }, | |
| }) | |
| }) | |
| test('returns empty object when no return statement', () => { | |
| const result = extractReturnType(RETURN_TYPE_SAMPLES.javascript.noReturn, CodeLanguage.javascript) | |
| expect(result).toEqual({}) | |
| }) | |
| test('handles quoted keys', () => { | |
| const result = extractReturnType(RETURN_TYPE_SAMPLES.javascript.withQuotes, CodeLanguage.javascript) | |
| expect(result).toEqual({ | |
| result: { | |
| type: VarType.string, | |
| children: null, | |
| }, | |
| status: { | |
| type: VarType.string, | |
| children: null, | |
| }, | |
| }) | |
| }) | |
| test('handles nested object structure', () => { | |
| const result = extractReturnType(RETURN_TYPE_SAMPLES.javascript.nestedObject, CodeLanguage.javascript) | |
| expect(result).toEqual({ | |
| personal_info: { | |
| type: VarType.string, | |
| children: null, | |
| }, | |
| timestamp: { | |
| type: VarType.string, | |
| children: null, | |
| }, | |
| status: { | |
| type: VarType.string, | |
| children: null, | |
| }, | |
| }) | |
| }) | |
| }) | |
| }) | |