From 5ee6b28ed3864fb95fce79f229c3b01e8863fd56 Mon Sep 17 00:00:00 2001 From: yy8545 <854551495@qq.com> Date: Wed, 20 Sep 2023 16:44:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9callback=E5=9B=9E=E8=B0=83?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E4=B8=AD=E5=A4=9A=E5=8F=82=E6=95=B0=E7=9A=84?= =?UTF-8?q?=E5=87=BD=E6=95=B0mock=E6=8A=A5=E9=94=99=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: yy8545 <854551495@qq.com> --- .../src/generate/generateCommonUtil.ts | 108 +++++++++++------- 1 file changed, 68 insertions(+), 40 deletions(-) diff --git a/automock/mock-generate/src/generate/generateCommonUtil.ts b/automock/mock-generate/src/generate/generateCommonUtil.ts index 85d34b0..229df94 100644 --- a/automock/mock-generate/src/generate/generateCommonUtil.ts +++ b/automock/mock-generate/src/generate/generateCommonUtil.ts @@ -301,7 +301,7 @@ const paramsTypeStart = { 'Array': '[]', 'Object': '{}', '{': '{}', - 'string': '', + 'string': '""', 'number': 0, 'boolean': false }; @@ -322,6 +322,9 @@ const removeCallback = (str: string) => { callbackParams.value = matchValue ? matchValue[1] : ''; callbackParams.type = 'AsyncCallback'; } + if (callbackParams.value.includes(',')) { + callbackParams.value = callbackParams.value.split(',')[0]; + } return callbackParams; }; @@ -353,54 +356,79 @@ const hasDotFirstWord = (str: string) => { return str.includes('.') ? str.split('.')[0] : str; }; +/** + * get callback parameters data + * @returns data: parameters data: type: AsyncCallback or Callback + */ +const setCallbackData = (mockApi: string, paramTypeString: string): {data: string, type: string} => { + const callbackParams = removeCallback(paramTypeString); + let callbackData = ''; + let importType = ''; + if (callbackParams.value) { + importType = isInImportType(mockApi, callbackParams.value); + } + if (importType === 'isHasDotImportMock') { + const upperWord = firstLetterWord(callbackParams.value); // Image.PixelMap + const firstWord = hasDotFirstWord(upperWord); // Image + callbackData = `mock${firstWord}()${upperWord.slice(firstWord.length)}`; + } else if (importType === 'isNoHasDotImportMock') { + callbackData = callbackParams.value; + } else if (importType === 'isImportMock') { + callbackData = `mock${firstLetterWord(callbackParams.value)}()`; + } else if (importType === 'isImport') { + callbackData = callbackParams.value; + } else if (importType === 'noImport') { + let paramsTypeNoHas = true; + if (callbackParams.value.endsWith(']')) { + callbackData = '[]'; + } else { + Object.keys(paramsTypeStart).forEach(item => { + if (callbackParams.value.startsWith(item)) { + callbackData = paramsTypeStart[item]; + paramsTypeNoHas = false; + } + }); + if (paramsTypeNoHas) { + callbackData = callbackParams.value; + } + if (callbackParams.value === 'Date') { + callbackData = 'new Date()'; + } + if (callbackParams.value === 'Uint8Array') { + callbackData = 'new Uint8Array()'; + } + if (callbackParams.value === 'T') { + callbackData = '[PC Preview] unknown type'; + } + } + } else { + callbackData = '[PC Preview] unknown type'; + } + return { + data: callbackData, + type: callbackParams.type + }; +}; + /** * get callback statement - * @returns image.PixelMap mockImage.PixelMap mockImage + * @returns callback statement */ export function getCallbackStatement(mockApi: string, paramTypeString?: string): string { let outPut = `if (args && typeof args[args.length - 1] === 'function') { args[args.length - 1].call(this,`; const callbackError = "{'code': '','data': '','name': '','message': '','stack': ''}"; - let callbackData = ''; + let callbackDataParams = { + type: '', + data: '[PC Preview] unknown type' + }; if (paramTypeString) { - const callbackParams = removeCallback(paramTypeString); - let importType = ''; - if (callbackParams.value) { - importType = isInImportType(mockApi, callbackParams.value); - } - if (importType === 'isHasDotImportMock') { - const upperWord = firstLetterWord(callbackParams.value); // Image.PixelMap - const firstWord = hasDotFirstWord(upperWord); // Image - callbackData = `mock${firstWord}()${upperWord.slice(firstWord.length)}`; - } else if (importType === 'isNoHasDotImportMock') { - callbackData = callbackParams.value; - } else if (importType === 'isImportMock') { - callbackData = `mock${firstLetterWord(callbackParams.value)}()`; - } else if (importType === 'isImport') { - callbackData = callbackParams.value; - } else if (importType === 'noImport') { - let paramsTypeNoHas = true; - if (callbackParams.value.endsWith(']')) { - callbackData = '[]'; - } else { - Object.keys(paramsTypeStart).forEach(item => { - if (callbackParams.value.startsWith(item)) { - callbackData = paramsTypeStart[item]; - paramsTypeNoHas = false; - } - }); - if (paramsTypeNoHas) { - callbackData = callbackParams.value; - } - } - } else { - callbackData = '[PC Preview] unknown type'; - } - if (callbackParams.type === 'AsyncCallback') { - outPut += ` ${callbackError},`; - } + callbackDataParams = setCallbackData(mockApi, paramTypeString); } - outPut += callbackData === '[PC Preview] unknown type' ? ` '${callbackData}');\n}` : ` ${callbackData});\n}`; + if (callbackDataParams?.type === 'AsyncCallback') { + outPut += ` ${callbackError},`; + } + outPut += callbackDataParams.data === '[PC Preview] unknown type' ? ` '${callbackDataParams.data}');\n}` : ` ${callbackDataParams.data});\n}`; return outPut; }