| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 | 
                        - 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,
 -         },
 -       })
 -     })
 -   })
 - })
 
 
  |