diff --git a/src/cli/cmake2gn/src/src/analyze_cmake.js b/src/cli/cmake2gn/src/src/analyze_cmake.js index cfcf7fb3a49bd7268e17e74f5fe2fb61c01157ce..fdd4ac87a30ea62b449601e48ac6e3fc501dfe5e 100755 --- a/src/cli/cmake2gn/src/src/analyze_cmake.js +++ b/src/cli/cmake2gn/src/src/analyze_cmake.js @@ -25,7 +25,7 @@ class AnalyzeCMake { } static mkdirBuildTemp(compileFile) { let buildTmp; - if (Tool.OHOS_PORTING_TO == '') { + if (Tool.OHOS_PORTING_TO === '') { buildTmp = path.join(compileFile.dir, 'build_tmp');//cmake编译的临时目录 } else { buildTmp = path.join(Tool.OHOS_PROJECT_PATH, Tool.OHOS_PORTING_TO, 'build_tmp');//cmake编译的临时目录 @@ -72,7 +72,7 @@ class AnalyzeCMake { Logger.err(data.toString(), true); }); ret.on('close', (code) => { - if (code == 0) { + if (code === 0) { Logger.info('------------------------cmake ok'); AnalyzeMake.analyze(path.join(buildTmp, 'Makefile')); //调用make生成命令行 } else { diff --git a/src/cli/cmake2gn/src/src/analyze_command.js b/src/cli/cmake2gn/src/src/analyze_command.js index 61829704a8c95a40b7cad0b51dc74dd3141eebf8..9725de69c90aad48f26d1f05b94eb5ebd6680d6a 100644 --- a/src/cli/cmake2gn/src/src/analyze_command.js +++ b/src/cli/cmake2gn/src/src/analyze_command.js @@ -151,15 +151,15 @@ class AnalyzeCommand { static resultTemplete() {//解析命令行之后的结果模板 return { - type: 0,//0 compile command,1 other command + type: 0, //0 compile command,1 other command workDir: process.cwd(), command: '', inputs: [], target: '', - isLink: false,//是否编译,.a/.o/可执行程序,需要生成目标 + isLink: false, //是否编译,.a/.o/可执行程序,需要生成目标 includes: [], defines: [ - '_XOPEN_SOURCE=600',//ohos的编译环境缺失宏 + '_XOPEN_SOURCE=600', //ohos的编译环境缺失宏 'FE_TONEAREST=0x00000000', 'FE_UPWARD=0x00400000', 'FE_DOWNWARD=0x00800000', @@ -168,14 +168,14 @@ class AnalyzeCommand { cflags: [ '-Wno-implicit-function-declaration', '-Wno-unused-function', - '-Wno-comments',//允许注释后面有个\ - '-Wno-string-conversion',//允许char*当做bool使用 - '-Wno-header-hygiene',//不检测命名空间污染 - '-frtti',//支持typeid(xxx) - '-fexceptions',//支持try catch - ],//c和c++选项 - cflagsCc: [],//c++选项 - cflagsC: [],//c选项 + '-Wno-comments', //允许注释后面有个\ + '-Wno-string-conversion', //允许char*当做bool使用 + '-Wno-header-hygiene', //不检测命名空间污染 + '-frtti', //支持typeid(xxx) + '-fexceptions', //支持try catch + ], //c和c++选项 + cflagsCc: [], //c++选项 + cflagsC: [], //c选项 }; } @@ -184,7 +184,7 @@ class AnalyzeCommand { let startp = -1; let isContinuChar = 0; for (let p = 0; p < s.length; p++) { - if (s[p] === '\"' && s[p-1] !== '\\') { + if (s[p] === '\"' && s[p - 1] !== '\\') { isContinuChar = 1 - isContinuChar; } if (startp >= 0) { @@ -536,13 +536,7 @@ class AnalyzeCommand { '.S', '.so' ]; - for (let d of datas) { - for (let p of pp) { - if (d.endsWith(p)) { - local.ret.inputs.push(d); - } - } - } + clangxxCheck9Func(datas, pp, local); return true; } return false; @@ -610,7 +604,7 @@ class AnalyzeCommand { case AnalyzeCommand.COMPILE_CMDS.ar: ret = AnalyzeCommand.analyzeCcAr(cmd); break; - case AnalyzeCommand.COMPILE_CMDS['clang++']: + case AnalyzeCommand.COMPILE_CMDS.clang++: ret = AnalyzeCommand.analyzeCcClangxx(cmd); break; } @@ -624,20 +618,30 @@ class AnalyzeCommand { } function clangCheck7RspEnds(e, local) { - console.log(Tool.CURRENT_DIR); - let rspth = path.join(Tool.CURRENT_DIR, e.substring(1)); - let data = fs.readFileSync(rspth, { encoding: 'utf8' }); - if (data.endsWith('\r\n')) { - data = data.substring(0, data.length - 2); - } - let datas = data.split(' '); - for (let d of datas) { - for (let s of ss) { - if (d.endsWith(s)) { - local.ret.inputs.push(d); - } - } - } + console.log(Tool.CURRENT_DIR); + let rspth = path.join(Tool.CURRENT_DIR, e.substring(1)); + let data = fs.readFileSync(rspth, { encoding: 'utf8' }); + if (data.endsWith('\r\n')) { + data = data.substring(0, data.length - 2); + } + let datas = data.split(' '); + for (let d of datas) { + for (let s of ss) { + if (d.endsWith(s)) { + local.ret.inputs.push(d); + } + } + } +} + +function clangxxCheck9Func(datas, pp, local) { + for (let d of datas) { + for (let p of pp) { + if (d.endsWith(p)) { + local.ret.inputs.push(d); + } + } + } } module.exports = { diff --git a/src/cli/cmake2gn/src/src/generate_gn.js b/src/cli/cmake2gn/src/src/generate_gn.js index 914ce0c8f8fcfc241182f6fa0269ddef45701dff..7643008d2014615acda95199dc5d45c05e06941e 100644 --- a/src/cli/cmake2gn/src/src/generate_gn.js +++ b/src/cli/cmake2gn/src/src/generate_gn.js @@ -34,28 +34,28 @@ function preProcessResult(analyzeResult) {//把所有路径搞成绝对路径 } function changePathToAbs(r) { - if (!r.target.startsWith('/')) { - if (!path.isAbsolute(r.target)) { - r.target = path.join(r.workDir, r.target); - } - } - for (let i = 0; i < r.inputs.length; i++) { - if (r.inputs[i].startsWith('"') && r.inputs[i].endsWith('"')) { - r.inputs[i] = r.inputs[i].substring(1, r.inputs[i].length - 1); + if (!r.target.startsWith('/')) { + if (!path.isAbsolute(r.target)) { + r.target = path.join(r.workDir, r.target); + } } - if (!r.inputs[i].startsWith('/')) { - if (!path.isAbsolute(r.inputs[i])) { - r.inputs[i] = path.join(r.workDir, r.inputs[i]); - } + for (let i = 0; i < r.inputs.length; i++) { + if (r.inputs[i].startsWith('"') && r.inputs[i].endsWith('"')) { + r.inputs[i] = r.inputs[i].substring(1, r.inputs[i].length - 1); + } + if (!r.inputs[i].startsWith('/')) { + if (!path.isAbsolute(r.inputs[i])) { + r.inputs[i] = path.join(r.workDir, r.inputs[i]); + } + } } - } - for (let i = 0; i < r.includes.length; i++) { - if (!r.includes[i].startsWith('/')) { - if (!path.isAbsolute(r.includes[i])) { - r.includes[i] = path.join(r.workDir, r.includes[i]); - } + for (let i = 0; i < r.includes.length; i++) { + if (!r.includes[i].startsWith('/')) { + if (!path.isAbsolute(r.includes[i])) { + r.includes[i] = path.join(r.workDir, r.includes[i]); + } + } } - } } function checkoutLibName(name) {//比如/home/libabc.so,返回['dynamic',abc] @@ -186,7 +186,7 @@ group("all_targets") { result = 'ohos_executable("' + targetName[1] + '")'; break; default: - // 为未处理的情况提供一个默认返回值 + // 为未处理的情况提供一个默认返回值 result = 'unknown_target_type'; // 或者其他适当的默认值 } return result; // 确保函数返回一个值 @@ -287,7 +287,9 @@ subsystem_name = "%s" let ss = ''; for (let s of detail) { s = Tool.swapPath(s); - if (ss.length > 0) ss += '",\n "'; + if (ss.length > 0) { + ss += '",\n "'; + } ss += s; } let ret = ` diff --git a/src/cli/dts2cpp/src/gen/analyze.js b/src/cli/dts2cpp/src/gen/analyze.js index 9b6b538b461540152a8e8c2c5aee270adf4d3143..962b8a0f9c66efa3b5d852204e38beed99387ef1 100644 --- a/src/cli/dts2cpp/src/gen/analyze.js +++ b/src/cli/dts2cpp/src/gen/analyze.js @@ -33,7 +33,7 @@ function analyzeFile(fn) { let result = { exportDefault: [], exports: [], - imports:[], + imports: [], declareType: [], declareFunction: [], declareNamespace: [], @@ -43,14 +43,15 @@ function analyzeFile(fn) { while (true) { // import let matchImport = re.search("import ([{}A-Za-z ,]+) from [\"']{1}([@_./a-zA-Z]+)[\"']{1};*", data); - if (matchImport != null) { + if (matchImport !== null && matchImport !== undefined) { result.imports.push(re.getReg(data, matchImport.regs[0])) data = re.removeReg(data, matchImport.regs[0]); + } else { + break; } - else break; } - if (null != licenseData) { + if (null !== licenseData && undefined !== licenseData) { result.declareLicense.push(licenseData) } return analyze(data, result) @@ -62,37 +63,37 @@ function analyze(data, result) { data = removeEmptyLine(data) let matchs = re.match(" *\n*", data) // 只剩下空格和回车时,解析完成 - if (matchs && matchs.regs[0][1] == data.length) break + if (matchs && matchs.regs[0][1] === data.length) break matchs = re.match("export default ([a-zA-Z0-9_]+);", data); - if (matchs != null) { + if (matchs !== null && matchs !== undefined) { let exportName = re.getReg(data, matchs.regs[1]) data = re.removeReg(data, matchs.regs[0]); result.exportDefault.push(exportName) } data = re.replaceAll(data, "\n{", "{"); let matchType = analyzeMatchType(matchs, data, result) - if (matchType != null) { + if (matchType !== null && matchType !== undefined) { data = matchType[0] - if (matchType[1] != null) { + if (matchType[1] !== null && matchType[1] !== undefined) { result = matchType[1] - } + } } let namespace = analyzeMatchNamespace(matchs, data, result) - if (namespace != null) { + if (namespace !== null && namespace !== undefined) { data = namespace[0] result = namespace[1] } let interface = analyzeMatchInterface(matchs, data, result) - if (interface != null) { + if (interface !== null && interface !== undefined) { data = interface[0] result = interface[1] } let functionMatch = analyzeMatchFunction(matchs, data, result) - if (functionMatch != null) { + if (functionMatch !== null && functionMatch !== undefined) { data = functionMatch[0] result = functionMatch[1] } - if (oldData == data) { + if (oldData === data) { NapiLog.logError("\nvvv 解析文件失败 vvv"); NapiLog.logError("[", data.substring(0, data.length > 64 ? 64 : data.length), "]"); break; @@ -104,7 +105,7 @@ function analyze(data, result) { function analyzeMatchNamespace(matchs, data, result) { matchs = re.match("declare namespace ([a-zA-Z_0-9]+) *({)", data); // 解析declare - if (matchs != null) { + if (matchs !== null && matchs !== undefined) { let namespaceName = re.getReg(data, matchs.regs[1]) let namespaceData = checkOutBody(data, matchs.regs[2][0], null, true) data = data.substring(matchs.regs[2][1] + namespaceData.length + 1, data.length) @@ -155,7 +156,7 @@ function analyzeMatchType(matchs, data, result) { name: exportName, body: exportBody }) - if (matchs.regs[1][0] != -1) { + if (matchs.regs[1][0] !== -1) { result.exports.push(exportName) } } @@ -169,7 +170,7 @@ function analyzeMatchType(matchs, data, result) { name: exportName, body: exportBody }) - if (matchs.regs[1][0] != -1) { + if (matchs.regs[1][0] !== -1) { result.exports.push(exportName) } } diff --git a/src/cli/dts2cpp/src/gen/analyze/enum.js b/src/cli/dts2cpp/src/gen/analyze/enum.js index 03f9a82900da29995a6a3db4c61ca14c9c3b3586..af28ec277dd55a793bbd5a9006fd82c3a73e3c5e 100644 --- a/src/cli/dts2cpp/src/gen/analyze/enum.js +++ b/src/cli/dts2cpp/src/gen/analyze/enum.js @@ -22,7 +22,7 @@ function analyzeEnum(data) { element: [], function: [], enumValueType: 0, // 0代表数字,1代表字符串 - } + }; for (let i in body) { let bodyContent = body[i]; while (bodyContent.length > 0 && bodyContent[0] === ' ') { diff --git a/src/cli/dts2cpp/src/gen/analyze/function.js b/src/cli/dts2cpp/src/gen/analyze/function.js index f8e76687abd5cb42cda5ec3582095b1ea0f8e7a7..e6a745f2725f3916efd281acbf0aeac6108a71ee 100644 --- a/src/cli/dts2cpp/src/gen/analyze/function.js +++ b/src/cli/dts2cpp/src/gen/analyze/function.js @@ -96,7 +96,7 @@ function getFuncParaType(v, interfaceName, data, results) { } } - let interfaceType = re.match('{([A-Za-z0-9_]+:[A-Za-z0-9_,]+)([A-Za-z0-9_]+:[A-Za-z0-9_]+)}$', v['type']); + let interfaceType = re.match('{([A-Za-z0-9_]+:[A-Za-z0-9_,]+)([A-Za-z0-9_]+:[A-Za-z0-9_]+)}$', v.type); if (interfaceType) { v.type = interfaceName; } diff --git a/src/cli/dts2cpp/src/gen/analyze/namespace.js b/src/cli/dts2cpp/src/gen/analyze/namespace.js index 2de916200dc4b161bedfe33280aaeb8b7b541714..71671babbdbbc317b363007c12b828caa41f365d 100644 --- a/src/cli/dts2cpp/src/gen/analyze/namespace.js +++ b/src/cli/dts2cpp/src/gen/analyze/namespace.js @@ -111,33 +111,37 @@ function parseEnumType(result) { return null; } - // 参数匹配 - for (let k in func.value) { - let v = func.value[k]; - if (!isValidValue(v)) { - NapiLog.logError('parseEnumType func.value is null!'); - return null; - } - - if (v.type === enumm.name) { - if (enumm.body.enumValueType === EnumValueType.ENUM_VALUE_TYPE_NUMBER) { - v.type = 'NUMBER_TYPE_' + NumberIncrease.getAndIncrease(); - } else if (enumm.body.enumValueType === EnumValueType.ENUM_VALUE_TYPE_STRING) { - v.type = 'string'; - } else { - NapiLog.logError('parseEnumType for interface function value is not support this type %s.' - .format(enumm.body.enumValueType), getLogErrInfo()); - return null; - } - result.interface[i].body.function[j].value[k].type = v.type; - } - } + parseEnumTypeFunc(func, enumm, result, i) } } } return result; } +function parseEnumTypeFunc(func, enumm, result, i) { + // 参数匹配 + for (let k in func.value) { + let v = func.value[k]; + if (!isValidValue(v)) { + NapiLog.logError('parseEnumType func.value is null!'); + return null; + } + + if (v.type === enumm.name) { + if (enumm.body.enumValueType === EnumValueType.ENUM_VALUE_TYPE_NUMBER) { + v.type = 'NUMBER_TYPE_' + NumberIncrease.getAndIncrease(); + } else if (enumm.body.enumValueType === EnumValueType.ENUM_VALUE_TYPE_STRING) { + v.type = 'string'; + } else { + NapiLog.logError('parseEnumType for interface function value is not support this type %s.' + .format(enumm.body.enumValueType), getLogErrInfo()); + return null; + } + result.interface[i].body.function[j].value[k].type = v.type; + } + } +} + function parseNamespace(matchs, data, result) { matchs = re.match('(export )*namespace ([a-zA-Z0-9]+) ({)', data); if (matchs) { @@ -254,16 +258,16 @@ function parseType(matchs, data, result) { if (matchs.regs[1][0] !== -1) { result.exports.push(typeName); } - } +} return data; } function parseFunction(matchs, data, result) { matchs = re.match('(export )*function (\\$*[A-Za-z0-9_]+) *(\\()', data); - if (null == matchs) { + if (null === matchs || undefined === matchs) { matchs = re.match('(export )*function (static )*(\\$*[A-Za-z0-9_]+) *(\\()', data); } - if (null == matchs) { + if (null === matchs || undefined === matchs) { matchs = re.match('(export )*function (static )*(register\\$*[A-Za-z0-9_]+) *(\\()', data); } if (matchs) { diff --git a/src/cli/dts2cpp/src/gen/analyze/params.js b/src/cli/dts2cpp/src/gen/analyze/params.js index 3a1cfd01c34eb187ccf48600ee731166c2e64045..9a658b431cff318fbe4cdb1e7da090f9b0de2879 100644 --- a/src/cli/dts2cpp/src/gen/analyze/params.js +++ b/src/cli/dts2cpp/src/gen/analyze/params.js @@ -94,24 +94,8 @@ function analyzeParams(funcName, values) { let optionalFlag = re.getReg(v, matchs.regs[2]) === '?' ? true : false; let checkParamOk = true; - if (optionalFlag) { - optionalParamCount++; - } else if (optionalParamCount > 0) { - // 可选参数之后不能再有必选参数,须是可选参数。 - NapiLog.logError('Invalid parameter [%s] of function [%s],'.format(v, funcName) + - ' the required parameter cannot follow an optional parameter.'); - checkParamOk = false; - } - if (checkParamOk) { - result.push({ 'name': re.getReg(v, matchs.regs[1]), 'type': type, 'optional': optionalFlag, 'realType': type }); - if (type.indexOf('AsyncCallback') >= 0) { - funcType = FuncType.ASYNC; - } - - if (isSyncFuncType(type, funcType)) { - funcType = FuncType.SYNC; - } - } + analyzaParamsFunc(optionalFlag, optionalParamCount, v, funcName, checkParamOk, + result, matchs, type, funcType); } else { NapiLog.logError('Failed to analyse parameter [%s] of function [%s].'.format(v, funcName)); @@ -120,6 +104,28 @@ function analyzeParams(funcName, values) { return [result, funcType, rsltCallFunction]; } +function analyzaParamsFunc(optionalFlag, optionalParamCount, v, funcName, checkParamOk, + result, matchs, type, funcType) { + if (optionalFlag) { + optionalParamCount++; + } else if (optionalParamCount > 0) { + // 可选参数之后不能再有必选参数,须是可选参数。 + NapiLog.logError('Invalid parameter [%s] of function [%s],'.format(v, funcName) + + ' the required parameter cannot follow an optional parameter.'); + checkParamOk = false; + } + if (checkParamOk) { + result.push({ 'name': re.getReg(v, matchs.regs[1]), 'type': type, 'optional': optionalFlag, 'realType': type }); + if (type.indexOf('AsyncCallback') >= 0) { + funcType = FuncType.ASYNC; + } + + if (isSyncFuncType(type, funcType)) { + funcType = FuncType.SYNC; + } + } +} + module.exports = { analyzeParams, }; diff --git a/src/cli/dts2cpp/src/gen/analyzeRaw.js b/src/cli/dts2cpp/src/gen/analyzeRaw.js index df61eee39b742016718af6026bb6f6ae27f2fbdc..84612563440d79274351b11ad31fb95cb30b7304 100644 --- a/src/cli/dts2cpp/src/gen/analyzeRaw.js +++ b/src/cli/dts2cpp/src/gen/analyzeRaw.js @@ -58,13 +58,13 @@ function analyzeFileRaw(fn) { } let imports = statements[0].getText(); - if (imports != null) { + if (imports !== null && imports !== undefined) { result.imports.push(imports); } let data = statements[0].getFullText(); let licenseData = getLicense(data); - if (null != licenseData) { + if (null !== licenseData && undefined !== licenseData) { result.declareLicense.push(licenseData) } @@ -75,25 +75,25 @@ function analyzeRaw(statements, result) { while (true) { let exportsInfo = statements[2].getText(); let matchs = re.match("export default ([a-zA-Z0-9_]+);", exportsInfo); - if (matchs != null) { + if (matchs !== null && matchs !== undefined) { let exportName = re.getReg(exportsInfo, matchs.regs[1]) result.exportDefault.push(exportName) } let data = statements[1].getText(); let namespace = analyzeMatchNamespace(matchs, data, result) - if (namespace != null) { + if (namespace !== null && namespace !== undefined) { data = namespace[0] result = namespace[1] } let interface = analyzeMatchInterface(matchs, data, result) - if (interface != null) { + if (interface !== null && interface !== undefined) { data = interface[0] result = interface[1] } let functionMatch = analyzeMatchFunction(matchs, data, result) - if (functionMatch != null) { + if (functionMatch !== null && functionMatch !== undefined) { data = functionMatch[0] result = functionMatch[1] } @@ -107,7 +107,7 @@ function analyzeRaw(statements, result) { function analyzeMatchNamespace(matchs, data, result) { matchs = re.match("declare namespace ([a-zA-Z_0-9]+) *({)", data); // 解析declare - if (matchs != null) { + if (matchs !== null && matchs !== undefined) { let namespaceName = re.getReg(data, matchs.regs[1]) let namespaceData = checkOutBody(data, matchs.regs[2][0], null, true) data = data.substring(matchs.regs[2][1] + namespaceData.length + 1, data.length) @@ -158,7 +158,7 @@ function analyzeMatchType(matchs, data, result) { name: exportName, body: exportBody }) - if (matchs.regs[1][0] != -1) { + if (matchs.regs[1][0] !== -1) { result.exports.push(exportName) } } @@ -172,7 +172,7 @@ function analyzeMatchType(matchs, data, result) { name: exportName, body: exportBody }) - if (matchs.regs[1][0] != -1) { + if (matchs.regs[1][0] !== -1) { result.exports.push(exportName) } } diff --git a/src/cli/dts2cpp/src/gen/cmd_gen.js b/src/cli/dts2cpp/src/gen/cmd_gen.js index 609bcb2dba3951191f2ca66c167e4cf748e7047c..60574c9f5d82ceaac3f057636ee64cb10983687d 100644 --- a/src/cli/dts2cpp/src/gen/cmd_gen.js +++ b/src/cli/dts2cpp/src/gen/cmd_gen.js @@ -46,7 +46,7 @@ NapiLog.init(ops.loglevel, path.join('' + ops.out, 'napi_gen.log')); let fileNames = ops.filename; var pathDir = ops.directory; var imports = ops.imports; -if (fileNames == null && pathDir == null) { +if (fileNames === null && pathDir === null) { NapiLog.logInfo('fileNames and pathDir both cannot be empty at the same time'); } else if (pathDir !== '') { readDirFiles(); diff --git a/src/cli/dts2cpp/src/gen/generate.js b/src/cli/dts2cpp/src/gen/generate.js index b89b953d752c6a998e282843a88f0aec8d8e9ed4..f844e44e803c51b5ee6b874de654e1b11305ddf4 100644 --- a/src/cli/dts2cpp/src/gen/generate.js +++ b/src/cli/dts2cpp/src/gen/generate.js @@ -158,7 +158,7 @@ var genFileList = []; function deleteFolder(folderPath) { if (fs.existsSync(folderPath)) { - fs.rmSync(folderPath, {'recursive': true}); + fs.rmSync(folderPath, { 'recursive': true }); } } @@ -197,7 +197,7 @@ function formatCode(destDir) { for (let i = 0; i < genFileList.length; ++i) { // 文件路径前后要用引号包含,防止因为路径中存在空格而导致命令执行失败 (windows的文件夹允许有空格) - let cmd = '\"' + localClangFmtFile + '\" -style=file -i \"' + path.resolve(path.join(destDir, genFileList[i])) + + let cmd = '\"' + localClangFmtFile + '\" -style=file -i \"' + path.resolve(path.join(destDir, genFileList[i])) + '\"'; try { execSync(cmd); // C++文件格式化 @@ -218,8 +218,8 @@ function analyzeJsonCfg(jsonCfg) { if (jsonCfg[i].interfaceName.indexOf('::') > 0) { let tt = jsonCfg[i].interfaceName.split('::'); interfaceBody = { - className: tt[0], - funcName: tt[1], + className: tt[0], + funcName: tt[1], }; } else { interfaceBody = { @@ -253,7 +253,7 @@ function generateAll(structOfTs, destDir, moduleName, numberType, jsonCfg) { let result = generateNamespace(ns0.name, ns0.body); jsonCfgList.pop(); - + let numberUsing = ''; var numbertype = 'uint32_t'; if (numberType !== '' && (numberType !== undefined && numberType !== null)) { @@ -280,13 +280,13 @@ function generateAll(structOfTs, destDir, moduleName, numberType, jsonCfg) { implCpp = implCpp.replaceAll('[include_configure_hCode]', includeH); implCpp = implCpp.replaceAll('[implCpp_detail]', result.implCpp); writeFile(re.pathJoin(destDir, '%s.cpp'.format(ns0.name)), (null !== license && undefined !== license) ? - (license + '\n' + implCpp) : implCpp); + (license + '\n' + implCpp) : implCpp); genFileList.push('%s.cpp'.format(ns0.name)); let partName = moduleName.replace('.', '_'); - generateGYP(destDir, ns0.name, license, bindingCpp) // 生成ubuntu下测试的编译脚本; - generateGN(destDir, ns0.name, license, partName, buildCpp) // 生成BUILD.gn for ohos; - generateBase(destDir, license) // tool_utility.h/cpp; + generateGYP(destDir, ns0.name, license, bindingCpp); // 生成ubuntu下测试的编译脚本 + generateGN(destDir, ns0.name, license, partName, buildCpp); // 生成BUILD.gn for ohos + generateBase(destDir, license) // tool_utility.h/cpp genFileList.push('tool_utility.h'); genFileList.push('tool_utility.cpp'); formatCode(destDir); @@ -298,11 +298,11 @@ function generateImplH(ns0, numberUsing, result, structOfTs, destDir, license) { implH = replaceAll(implH, '[implH_detail]', result.implH); let imports = ''; for (let i = 0; i < structOfTs.imports.length; i++) { - imports += structOfTs.imports[i]; + imports += structOfTs.imports[i]; } implH = replaceAll(implH, '[importTs]', imports); writeFile(re.pathJoin(destDir, '%s.h'.format(ns0.name)), (null !== license && undefined !== license) ? - (license + '\n' + implH) : implH); + (license + '\n' + implH) : implH); genFileList.push('%s.h'.format(ns0.name)); } @@ -313,12 +313,13 @@ function generateMiddleCpp(result, ns0, moduleName, destDir, license) { middleCpp = replaceAll(middleCpp, '[modulename]', moduleName); genFileList.splice(0, genFileList.length); writeFile(re.pathJoin(destDir, '%s_middle.cpp'.format(ns0.name)), - (null !== license && undefined !== license) ? (license + '\n' + middleCpp) : middleCpp); + (null !== license && undefined !== license) ? (license + '\n' + middleCpp) : middleCpp); genFileList.push('%s_middle.cpp'.format(ns0.name)); } // 将业务代码的头文件导入,若重复则跳过 -function includeHCppFunc(jsonCfg, includeH, bindingCpp, buildCpp) {; +function includeHCppFunc(jsonCfg, includeH, bindingCpp, buildCpp) { + ; for (let i = 0; i < jsonCfg.length; i++) { if (jsonCfg[i].includeName !== '') { let includeNamePath = jsonCfg[i].includeName; @@ -346,7 +347,7 @@ function generateMiddleH(ns0, result, destDir, license) { middleH = replaceAll(middleH, '[implName]', ns0.name); middleH = replaceAll(middleH, '[implH_detail]', result.middleH); writeFile(re.pathJoin(destDir, '%s_middle.h'.format(ns0.name)), - (null !== license && undefined !== license) ? (license + '\n' + middleH) : middleH); + (null !== license && undefined !== license) ? (license + '\n' + middleH) : middleH); genFileList.push('%s_middle.h'.format(ns0.name)); } diff --git a/src/cli/dts2cpp/src/gen/generate/class.js b/src/cli/dts2cpp/src/gen/generate/class.js index 5e9040202a8d7dc548cb3228ebc10f6fc35e155f..f6fd470c3b4881ae3ef4faacc2ffb54d653470e4 100644 --- a/src/cli/dts2cpp/src/gen/generate/class.js +++ b/src/cli/dts2cpp/src/gen/generate/class.js @@ -49,8 +49,12 @@ function generateVariable(name, type, variable, className) { variable.hDefine += '\n %s %s;'.format(type, name); } else if (type.indexOf('Array<') === 0) { let type2 = getArrayType(type); - if (type2 === 'string') type2 = 'std::string'; - if (type2 === 'boolean') type2 = 'bool'; + if (type2 === 'string') { + type2 = 'std::string'; + } + if (type2 === 'boolean') { + type2 = 'bool'; + } variable.hDefine += '\n std::vector<%s> %s;'.format(type2, name); } else if (type === 'boolean') { variable.hDefine += '\n bool %s;'.format(name); @@ -111,8 +115,8 @@ public:%s middleBody: middleBodyTmplete.replaceAll('[className]', name).replaceAll('[static_funcs]', middleFunc), middleInit: middleInit, declarationH: ` -class %s;\r`.format(name), - middleH: middleH +class %s;\r`.format(name), + middleH: middleH }; return result; } @@ -163,7 +167,7 @@ function connectResult(data, inNamespace, name) { implCpp += tmp[2]; middleH += tmp[3]; middleInit += `\n funcList["%s"] = %s%s%s_middle::%s_middle;` - .format(func.name, inNamespace, toolNamespace, name, func.name); + .format(func.name, inNamespace, toolNamespace, name, func.name); } return [middleFunc, implH, implCpp, middleInit, middleH]; } @@ -177,7 +181,7 @@ function getToolNamespace(inNamespace) { if (index2 > 0 && index2 < index) { toolNamespace = inNamespace.substring(index2 + 2, index) + '_interface::'; } else { - toolNamespace = bodyTmp + '_interface::'; + toolNamespace = bodyTmp + '_interface::'; } } else { toolNamespace = inNamespace + '_interface::'; diff --git a/src/cli/dts2cpp/src/gen/generate/function_async.js b/src/cli/dts2cpp/src/gen/generate/function_async.js index 363b34438aeef26787bbd92eece4e8673fda0afa..7d62227349ea10ba7fa0c0c496318d0467b8e395 100644 --- a/src/cli/dts2cpp/src/gen/generate/function_async.js +++ b/src/cli/dts2cpp/src/gen/generate/function_async.js @@ -130,15 +130,17 @@ function generateFunctionAsync(func, data, className, implHCbVariable) { let middleFunc = replaceAll(funcAsyncTemplete, '[funcName]', func.name); let middleH = ''; if (func.name !== 'constructor') { - middleH = replaceAll(funcAsyncMiddleHTemplete, '[funcName]', func.name); + middleH = replaceAll(funcAsyncMiddleHTemplete, '[funcName]', func.name); } let basicInfoRes = replaceBasicInfo(middleFunc, middleH, className); middleFunc = basicInfoRes[0]; middleH = basicInfoRes[1]; // 定义输入,定义输出,解析,填充到函数内,输出参数打包,impl参数定义,可选参数内存释放 - let param = { valueIn: '', valueOut: '', valueCheckout: '', valueFill: '', - valuePackage: '', valueDefine: '', optionalParamDestory: '' }; + let param = { + valueIn: '', valueOut: '', valueCheckout: '', valueFill: '', + valuePackage: '', valueDefine: '', optionalParamDestory: '' + }; for (let i in func.value) { paramGenerate(i, func.value[i], param, data); @@ -151,12 +153,12 @@ function generateFunctionAsync(func, data, className, implHCbVariable) { napi_value result = pxt->StartAsync(%s_execute, reinterpret_cast(vio), %s_complete, pxt->GetArgc() == %s? pxt->GetArgv(%d) : nullptr);` .format(func.name, func.name, getConstNum(parseInt(param.callback.offset) + 1), - getConstNum(param.callback.offset))) // 注册异步调用; + getConstNum(param.callback.offset))); // 注册异步调用 let callFunc = '%s%s(%s);'.format((className === null || className === undefined) ? - '' : 'pInstance->', func.name, param.valueFill); - middleFunc = replaceAll(middleFunc, '[callFunc]', callFunc) // 执行; - middleFunc = replaceAll(middleFunc, '[valuePackage]', param.valuePackage) // 输出参数打包; - middleFunc = replaceAll(middleFunc, '[optionalParamDestory]', param.optionalParamDestory) // 可选参数内存释放; + '' : 'pInstance->', func.name, param.valueFill); + middleFunc = replaceAll(middleFunc, '[callFunc]', callFunc); // 执行 + middleFunc = replaceAll(middleFunc, '[valuePackage]', param.valuePackage); // 输出参数打包 + middleFunc = replaceAll(middleFunc, '[optionalParamDestory]', param.optionalParamDestory); // 可选参数内存释放 let prefixArr = getPrefix(data, func); let implH = ''; @@ -165,10 +167,10 @@ function generateFunctionAsync(func, data, className, implHCbVariable) { // 只有类/接口自己的成员方法需要在.h.cpp中生成,父类/父接口不需要 implH = '\n%s%s%sbool %s(%s)%s;'.format( prefixArr[0], prefixArr[1], prefixArr[2], func.name, param.valueDefine, prefixArr[3]); - let callStatement = jsonCfgList.getValue((className === null || className === undefined) ? - '' : className, func.name); - implCpp = cppTemplate.format((className === null || className === undefined) ? - '' : className + '::', func.name, param.valueDefine, + let callStatement = jsonCfgList.getValue((className === null || className === undefined) ? '' : className, + func.name); + implCpp = cppTemplate.format((className === null || className === undefined) ? '' : className + '::', + func.name, param.valueDefine, (callStatement === null || callStatement === undefined) ? '' : callStatement); let outResult = generateCbInterfaceOutFunc(param, className, prefixArr, implHCbVariable, implCpp, implH); @@ -179,19 +181,19 @@ function generateFunctionAsync(func, data, className, implHCbVariable) { } function getMiddleFunc(param, middleFunc) { - if (param.valueCheckout === '') { - middleFunc = replaceAll(middleFunc, '[valueCheckout]', param.valueCheckout); // # 输入参数解析 - } else { - param.valueCheckout = removeEndlineEnter(param.valueCheckout); - middleFunc = replaceAll(middleFunc, '[valueCheckout]', param.valueCheckout); // # 输入参数解析 - } - let optionalCallback = getOptionalCallbackInit(param); - if (optionalCallback === '') { - middleFunc = replaceAll(middleFunc, '[optionalCallbackInit]', optionalCallback); // 可选callback参数初始化 - } else { - middleFunc = replaceAll(middleFunc, '[optionalCallbackInit]', optionalCallback + '\n '); // 可选callback参数初始化 - } - return middleFunc; + if (param.valueCheckout === '') { + middleFunc = replaceAll(middleFunc, '[valueCheckout]', param.valueCheckout); // # 输入参数解析 + } else { + param.valueCheckout = removeEndlineEnter(param.valueCheckout); + middleFunc = replaceAll(middleFunc, '[valueCheckout]', param.valueCheckout); // # 输入参数解析 + } + let optionalCallback = getOptionalCallbackInit(param); + if (optionalCallback === '') { + middleFunc = replaceAll(middleFunc, '[optionalCallbackInit]', optionalCallback); // 可选callback参数初始化 + } else { + middleFunc = replaceAll(middleFunc, '[optionalCallbackInit]', optionalCallback + '\n '); // 可选callback参数初始化 + } + return middleFunc; } function generateCbInterfaceOutFunc(param, className, prefixArr, implHCbVariable, implCpp, implH) { @@ -209,28 +211,27 @@ function generateCbInterfaceOutFunc(param, className, prefixArr, implHCbVariable let realType = interBody[i].type === 'string' ? 'std::string' : interBody[i].type; realType = interBody[i].type === 'boolean' ? 'bool' : realType; defineParams += '%s %s, '.format(realType, interBody[i].name); - useParams += '%s%sOutRes.%s = %s;\n'.format((className === null || className === undefined) ? - '' : className + '::', - outInterfaceName.toLocaleLowerCase(), interBody[i].name, interBody[i].name); + useParams += '%s%sOutRes.%s = %s;\n'.format((className === null || className === undefined) ? '' : className + + '::', outInterfaceName.toLocaleLowerCase(), interBody[i].name, interBody[i].name); } defineParams = defineParams.substring(0, defineParams.length - 2); let cbOutDefine = '\n%s %s%sOutRes = {};'.format(outInterfaceName, (className === null || className === undefined) ? - '' : className + '::', - outInterfaceName.toLocaleLowerCase()); + '' : className + '::', + outInterfaceName.toLocaleLowerCase()); cbInterfaceRes = cppCbResultTemplate.format((className === null || className === undefined) ? - '' : className + '::', outInterfaceName.toLocaleLowerCase(), + '' : className + '::', outInterfaceName.toLocaleLowerCase(), defineParams, useParams); if (className !== null && className !== undefined) { cbInterfaceRes = replaceAll(cbInterfaceRes, '[replace_outDefine]', cbOutDefine); } else { cbInterfaceRes = replaceAll(cbInterfaceRes, '[replace_outDefine]', ''); } - + // 多次使用interface(非匿名)作为Promise回调只需生成一次cbResult接口 let outResDefine = '\n%s%s%sstatic %s %sOutRes;'.format( prefixArr[0], prefixArr[1], prefixArr[2], outInterfaceName, outInterfaceName.toLocaleLowerCase()); let replaceOut = '\n out = %s%sOutRes;'.format((className === null || className === undefined) ? - '' : className + '::', + '' : className + '::', outInterfaceName.toLocaleLowerCase()); implCpp = replaceAll(implCpp, '[replace_valueOut]', replaceOut); if (implHCbVariable.indexOf(outResDefine) < 0) { diff --git a/src/cli/dts2cpp/src/gen/generate/function_direct.js b/src/cli/dts2cpp/src/gen/generate/function_direct.js index ee7eb7885dacea576c9f8ff041291976fef400ec..424b0acee1d235dc2b06655505218b0039cdc074 100644 --- a/src/cli/dts2cpp/src/gen/generate/function_direct.js +++ b/src/cli/dts2cpp/src/gen/generate/function_direct.js @@ -136,7 +136,7 @@ function getAddOrRemoveReg(func, isAddReg) { if (func.value.length !== addParaSize) { NapiLog.logError(`AddReg param do not support param number not 1!`); return ''; - } + } let ValueType = func.value[0].type; let funNames = []; @@ -176,9 +176,9 @@ function generateFunctionDirect(func, data, className, implHVariable) { let middleFunc = replaceAll(funcDirectTemplete, '[funcName]', func.name); let middleH = ''; if (func.name !== 'constructor') { - middleH = replaceAll(funcDirectMiddleHTemplete, '[funcName]', func.name); + middleH = replaceAll(funcDirectMiddleHTemplete, '[funcName]', func.name); } - + let isAddReg = isAddFunc(func.name); let isRemoveReg = isRemoveFunc(func.name); let addListenerCont = ''; @@ -191,13 +191,15 @@ function generateFunctionDirect(func, data, className, implHVariable) { middleFunc = isClassresult[0]; middleH = isClassresult[1]; // 定义输入,定义输出,解析,填充到函数内,输出参数打包,impl参数定义,可选参数内存释放 - let param = { valueIn: '', valueOut: '', valueCheckout: '', valueFill: '', - valuePackage: '', valueDefine: '', optionalParamDestory: '' }; + let param = { + valueIn: '', valueOut: '', valueCheckout: '', valueFill: '', + valuePackage: '', valueDefine: '', optionalParamDestory: '' + }; for (let i in func.value) { paramGenerate(i, func.value[i], param, data); } - let returnInfo = {type: func.ret, optional: false}; + let returnInfo = { type: func.ret, optional: false }; if (func.ret === 'void') { param.valuePackage = 'result = pxt->UndefinedValue();'; } else { @@ -207,7 +209,8 @@ function generateFunctionDirect(func, data, className, implHVariable) { param.valueCheckout = removeEndlineEnter(param.valueCheckout); middleFunc = replaceAll(middleFunc, '[valueCheckout]', param.valueCheckout) // # 输入参数解析; - let callFunc = '%s%s(%s);'.format(className == null ? '' : 'pInstance->', func.name, param.valueFill); + let callFunc = '%s%s(%s);'.format(className === null || className === undefined ? '' : 'pInstance->', + func.name, param.valueFill); middleFunc = replaceAll(middleFunc, '[callFunc]', callFunc) // 执行; middleFunc = replaceAll(middleFunc, '[valuePackage]', param.valuePackage) // 输出参数打包; middleFunc = replaceOptionalParamDestory(middleFunc, param); @@ -244,7 +247,7 @@ function getimplCppForComClassValue(isAddReg, param, className, func) { let implCpp = ''; let initListener = ''; let callStatement = jsonCfgList.getValue((className === null || className === undefined) ? - '' : className, func.name); + '' : className, func.name); if (isAddReg) { initListener = '%s %s::listener_ = {};'.format(func.value[0].type, className); @@ -252,8 +255,8 @@ function getimplCppForComClassValue(isAddReg, param, className, func) { } implCpp = cppTemplate.format(initListener, (className === null || className === undefined) ? - '' : className + '::', func.name, - param.valueDefine, (callStatement === null || callStatement === undefined) ? '' : callStatement); + '' : className + '::', func.name, + param.valueDefine, (callStatement === null || callStatement === undefined) ? '' : callStatement); return implCpp; } @@ -276,11 +279,11 @@ function isClassFunc(className, middleFunc, middleH) { else { middleH = middleH.replaceAll('[static_define]', 'static '); middleFunc = middleFunc.replaceAll('[unwarp_instance]', - `void *instPtr = pxt->UnWarpInstance(); + `void *instPtr = pxt->UnWarpInstance(); %s *pInstance = static_cast<%s *>(instPtr);`.format(className, className)); middleFunc = middleFunc.replaceAll('[middleClassName]', className + '_middle' + '::'); - } - return [middleFunc, middleH]; + } + return [middleFunc, middleH]; } function constructorFunc(param, implHVariable, implH, prefixArr, className) { @@ -319,12 +322,12 @@ function constructorFunc(param, implHVariable, implH, prefixArr, className) { // 构造函数只在h文件中,cpp文件中不包含 if (len > 0) { implH = '\n%s%s%s%s() {};'.format( - prefixArr[0], prefixArr[1], prefixArr[2], className); + prefixArr[0], prefixArr[1], prefixArr[2], className); implH += '\n%s%s%s%s(%s) : %s {};'.format( - prefixArr[0], prefixArr[1], prefixArr[2], className, valueDef, costructorStr); + prefixArr[0], prefixArr[1], prefixArr[2], className, valueDef, costructorStr); } else { implH = '\n%s%s%s%s() {};'.format( - prefixArr[0], prefixArr[1], prefixArr[2], className); + prefixArr[0], prefixArr[1], prefixArr[2], className); } return implH; } diff --git a/src/cli/dts2cpp/src/gen/generate/function_onoff.js b/src/cli/dts2cpp/src/gen/generate/function_onoff.js index 652945054e5a87867cbd291e42c3da0c6f9aa1b1..6d24a18afbae29ed6b6e5c16b5d4c231265c14b6 100644 --- a/src/cli/dts2cpp/src/gen/generate/function_onoff.js +++ b/src/cli/dts2cpp/src/gen/generate/function_onoff.js @@ -171,7 +171,7 @@ function gennerateOnOffContext(codeContext, func, data, className, param) { if (isRegister || isUnRegister) { let prefix = getPrefix(isRegister); - param.eventName = func.name.replaceAll(prefix, '') // 去掉注册、注销关键字前缀; + param.eventName = func.name.replaceAll(prefix, ''); // 去掉注册、注销关键字前缀 getEventName = 'vio->eventName = "%s";\n'.format(param.eventName); } else if (onObjFlag) { param.eventName = className + '_' + func.name; @@ -196,9 +196,9 @@ function gennerateOnOffContext(codeContext, func, data, className, param) { codeContext.middleFunc = codeContext.middleFunc.replaceAll('[middleClassName]', middleClassName + '::'); } let instancePtr = '%s'.format((className === null || className === undefined) ? '' : 'pInstance->'); - codeContext.middleFunc = replaceAll(codeContext.middleFunc, '[instance]', instancePtr) //执行; + codeContext.middleFunc = replaceAll(codeContext.middleFunc, '[instance]', instancePtr); //执行 - codeContext.middleFunc = replaceAll(codeContext.middleFunc, '[handleRegist]', registLine) //注册/去注册event; + codeContext.middleFunc = replaceAll(codeContext.middleFunc, '[handleRegist]', registLine); //注册/去注册event if (isRegister) { codeContext.middleFunc = replaceAll(codeContext.middleFunc, '(vio->eventName)', '()'); diff --git a/src/cli/dts2cpp/src/gen/generate/function_sync.js b/src/cli/dts2cpp/src/gen/generate/function_sync.js index 10d7497b290d601416ec300b997bb0fffb37e117..42bbc9f2806fb636d0b57616ca851daec98ced4d 100644 --- a/src/cli/dts2cpp/src/gen/generate/function_sync.js +++ b/src/cli/dts2cpp/src/gen/generate/function_sync.js @@ -114,22 +114,22 @@ function callBackReturnValJs2C(className, funcName, callbackRetType, funcRetType if (callbackRetType === 'void') { cbRetJs2CTrans = ''; } else if (callbackRetType === 'string') { - cbRetJs2CTrans = 'pxt->SwapJs2CUtf8(retVal, vio->cbOut);\n' + - '%s%sReturn(vio->cbOut%s);\n'.format((className === null || className === undefined) ? - '' : 'pInstance->', funcName, retOutFill); + cbRetJs2CTrans = 'pxt->SwapJs2CUtf8(retVal, vio->cbOut);\n' + + '%s%sReturn(vio->cbOut%s);\n'.format((className === null || className === undefined) ? + '' : 'pInstance->', funcName, retOutFill); } else if (callbackRetType === 'boolean') { - cbRetJs2CTrans = 'vio->cbOut = pxt->SwapJs2CBool(retVal);\n' + - '%s%sReturn(vio->cbOut%s);\n'.format((className === null || className === undefined) ? - '' : 'pInstance->', funcName, retOutFill); - } else if (callbackRetType.substring(0, 12) == 'NUMBER_TYPE_') { + cbRetJs2CTrans = 'vio->cbOut = pxt->SwapJs2CBool(retVal);\n' + + '%s%sReturn(vio->cbOut%s);\n'.format((className === null || className === undefined) ? + '' : 'pInstance->', funcName, retOutFill); + } else if (callbackRetType.substring(0, 12) === 'NUMBER_TYPE_') { let lt = NumberIncrease.getAndIncrease(); - cbRetJs2CTrans = 'NUMBER_JS_2_C(retVal, NUMBER_TYPE_%d, vio->cbOut);\n'.format(lt) + - '%s%sReturn(vio->cbOut%s);\n'.format((className === null || className === undefined) ? - '' : 'pInstance->', funcName, retOutFill); - } else if (callbackRetType === 'number') { - cbRetJs2CTrans = 'NUMBER_JS_2_C(retVal, NUMBER_TYPE_1, vio->cbOut);\n' + - '%s%sReturn(vio->cbOut%s);\n'.format((className === null || className === undefined) ? - '' : 'pInstance->', funcName, retOutFill); + cbRetJs2CTrans = 'NUMBER_JS_2_C(retVal, NUMBER_TYPE_%d, vio->cbOut);\n'.format(lt) + + '%s%sReturn(vio->cbOut%s);\n'.format((className === null || className === undefined) ? + '' : 'pInstance->', funcName, retOutFill); + } else if (callbackRetType === 'number') { + cbRetJs2CTrans = 'NUMBER_JS_2_C(retVal, NUMBER_TYPE_1, vio->cbOut);\n' + + '%s%sReturn(vio->cbOut%s);\n'.format((className === null || className === undefined) ? + '' : 'pInstance->', funcName, retOutFill); } else { NapiLog.logError('callBackReturnValJs2C not surpport callbackRetType:%s.' .format(callbackRetType), getLogErrInfo()); @@ -145,7 +145,7 @@ function returnProcRetC2Js(funRetType) { retC2JsCode = 'result = pxt->SwapC2JsUtf8(vio->retOut.c_str());'; } else if (funRetType === 'boolean') { retC2JsCode = 'result = pxt->SwapC2JsBool(vio->retOut);'; - } else if (funRetType.substring(0, 12) == 'NUMBER_TYPE_') { + } else if (funRetType.substring(0, 12) === 'NUMBER_TYPE_') { retC2JsCode = 'result = NUMBER_C_2_JS(pxt, vio->retOut);'; } else { NapiLog.logError('returnProcRetC2Js not surpport funRetType:%s'.format(funRetType)); @@ -160,16 +160,16 @@ function fillCbRetValueStruct(type, param, outName) { } if (type === 'void') { - NapiLog.logInfo("The current void type don't need generate"); - } else if (type === 'string') { + NapiLog.logInfo("The current void type don't need generate"); + } else if (type === 'string') { param.cbRetvalueDefine += '%sstd::string& %s'.format(param.cbRetvalueDefine.length > 0 ? ', ' : '', outName); } else if (type === 'boolean') { param.cbRetvalueDefine += '%sbool& %s'.format(param.cbRetvalueDefine.length > 0 ? ', ' : '', outName); } else if (type.substring(0, 12) === 'NUMBER_TYPE_') { param.cbRetvalueDefine += '%s%s& %s'.format(param.cbRetvalueDefine.length > 0 ? ', ' : '', type, outName); - } else if ( type === 'number') { + } else if (type === 'number') { param.cbRetvalueDefine += '%sNUMBER_TYPE_1& %s'.format(param.cbRetvalueDefine.length > 0 ? ', ' : '', - type, outName); + type, outName); } else { NapiLog.logError("[fillCbRetValueStruct] The current type:%s don't support." @@ -189,22 +189,22 @@ function fillValueStruct(type, param, outName) { param.valueOut += 'std::string %s;\n'.format(outName); if (param.callback.returnType === 'void') { param.valueDefine += '%sstd::string& %s'.format(param.valueDefine.length > 0 ? ', ' : '', outName); - } + } } else if (type === 'boolean') { param.valueOut += 'bool %s;\n'.format(outName); if (param.callback.returnType === 'void') { param.valueDefine += '%sbool& %s'.format(param.valueDefine.length > 0 ? ', ' : '', outName); - } + } } else if (type.substring(0, 12) === 'NUMBER_TYPE_') { param.valueOut += '%s %s;\n'.format(type, outName); if (param.callback.returnType === 'void') { param.valueDefine += '%s%s& %s'.format(param.valueDefine.length > 0 ? ', ' : '', type, outName); - } + } } else if (type === 'number') { param.valueOut += 'NUMBER_TYPE_1 %s;\n'.format(outName); if (param.callback.returnType === 'void') { param.valueDefine += '%sNUMBER_TYPE_1& %s'.format(param.valueDefine.length > 0 ? ', ' : '', outName); - } + } } else { NapiLog.logError("[fillValueStruct] The current type:%s don't support." @@ -212,7 +212,7 @@ function fillValueStruct(type, param, outName) { } } -function callbackReturnProc(param, func) { +function callbackReturnProc(param, func) { fillValueStruct(param.callback.returnType, param, 'cbOut'); fillValueStruct(func.ret, param, 'retOut'); @@ -236,19 +236,19 @@ function callbackReturnProc(param, func) { function replaceValueOut(param, middleH) { if (param.valueOut === '') { - middleH = replaceAll(middleH, '[valueOut]', param.valueOut) // # 输出参数定义; + middleH = replaceAll(middleH, '[valueOut]', param.valueOut); // # 输出参数定义 } else { - middleH = replaceAll(middleH, '[valueOut]', '\n ' + param.valueOut) // # 输出参数定义; + middleH = replaceAll(middleH, '[valueOut]', '\n ' + param.valueOut); // # 输出参数定义 } return middleH; } function replaceValueCheckout(param, middleFunc) { if (param.valueCheckout === '') { - middleFunc = replaceAll(middleFunc, '[valueCheckout]', param.valueCheckout) // # 输入参数解析; + middleFunc = replaceAll(middleFunc, '[valueCheckout]', param.valueCheckout); // # 输入参数解析 } else { param.valueCheckout = removeEndlineEnter(param.valueCheckout); - middleFunc = replaceAll(middleFunc, '[valueCheckout]', param.valueCheckout) // # 输入参数解析; + middleFunc = replaceAll(middleFunc, '[valueCheckout]', param.valueCheckout); // # 输入参数解析 } return middleFunc; } @@ -257,15 +257,17 @@ function generateFunctionSync(func, data, className) { let middleFunc = replaceAll(funcSyncTemplete, '[funcName]', func.name); let middleH = ''; if (func.name !== 'constructor') { - middleH = replaceAll(funcSyncMiddleHTemplete, '[funcName]', func.name); + middleH = replaceAll(funcSyncMiddleHTemplete, '[funcName]', func.name); } let isClassresult = isClassFunc(className, middleH, middleFunc); middleH = isClassresult[0]; middleFunc = isClassresult[1]; - + // 定义输入,定义输出,解析,填充到函数内,输出参数打包,impl参数定义,可选参数内存释放 - let param = { valueIn: '', valueOut: '', valueCheckout: '', valueFill: '', - valuePackage: '', valueDefine: '', optionalParamDestory: '', cbRetvalueDefine: '', paramSize: 1}; + let param = { + valueIn: '', valueOut: '', valueCheckout: '', valueFill: '', + valuePackage: '', valueDefine: '', optionalParamDestory: '', cbRetvalueDefine: '', paramSize: 1 + }; for (let i in func.value) { paramGenerate(i, func.value[i], param, data); @@ -273,14 +275,14 @@ function generateFunctionSync(func, data, className) { returnGenerate(param.callback, param); callbackReturnProc(param, func); - middleH = replaceAll(middleH, '[valueIn]', param.valueIn) // # 输入参数定义; + middleH = replaceAll(middleH, '[valueIn]', param.valueIn); // # 输入参数定义 middleH = replaceValueOut(param, middleH); middleFunc = replaceValueCheckout(param, middleFunc); let callFunc = '%s%s(%s);'.format((className === null || className === undefined) ? - '' : 'pInstance->', func.name, param.valueFill); + '' : 'pInstance->', func.name, param.valueFill); middleFunc = getMiddleFunc(middleFunc, callFunc, param); // 呼叫回调 - + // callback返回值处理,回调成功后根据js返回值,业务进行后续处理 let callBackReturnProc = callBackReturnValJs2C(className, func.name, param.callback.returnType, func.ret); middleFunc = middleFunc.replaceAll('[cbRetValJs2C]', callBackReturnProc); @@ -297,33 +299,33 @@ function generateFunctionSync(func, data, className) { // 只有类/接口自己的成员方法需要在.h.cpp中生成,父类/父接口不需要 implH = '\n%s%s%sbool %s(%s)%s;'.format( prefixArr[0], prefixArr[1], prefixArr[2], func.name, param.valueDefine, prefixArr[3]); - let callStatement = jsonCfgList.getValue((className === null || className === undefined)? - '': className, func.name); - implCpp = cppTemplate.format((className === null || className === undefined) ? - '' : className + '::', func.name, param.valueDefine, - (callStatement === null || callStatement === undefined)? '': callStatement); + let callStatement = jsonCfgList.getValue((className === null || className === undefined) ? '' : className, + func.name); + implCpp = cppTemplate.format((className === null || className === undefined) ? '' : className + + '::', func.name, param.valueDefine, + (callStatement === null || callStatement === undefined) ? '' : callStatement); if (param.callback.returnType !== 'void' && param.callback.returnType !== undefined) { implH += '\n%s%s%sbool %sReturn(%s)%s;'.format( prefixArr[0], prefixArr[1], prefixArr[2], func.name, param.cbRetvalueDefine, prefixArr[3]); implCpp += cppFuncReturnTemplate.format((className === null || className === undefined) ? - '' : className + '::', - func.name, param.cbRetvalueDefine); + '' : className + '::', + func.name, param.cbRetvalueDefine); } } return [middleFunc, implH, implCpp, middleH]; } function getMiddleFunc(middleFunc, callFunc, param) { - middleFunc = replaceAll(middleFunc, '[callFunc]', callFunc); // 执行 - let optionalCallback = getOptionalCallbackInit(param); - middleFunc = replaceAll(middleFunc, '[optionalCallbackInit]', optionalCallback); // 可选callback参数初始化 - middleFunc = replaceAll(middleFunc, '[valuePackage]', param.valuePackage); // 输出参数打包 - middleFunc = replaceAll(middleFunc, '[optionalParamDestory]', param.optionalParamDestory); // 可选参数内存释放 - middleFunc = replaceAll(middleFunc, '[agrs_size]', param.paramSize); - - middleFunc = middleFunc.replaceAll('[callback_param_offset]', param.callback.offset); // 呼叫回调 - return middleFunc; + middleFunc = replaceAll(middleFunc, '[callFunc]', callFunc); // 执行 + let optionalCallback = getOptionalCallbackInit(param); + middleFunc = replaceAll(middleFunc, '[optionalCallbackInit]', optionalCallback); // 可选callback参数初始化 + middleFunc = replaceAll(middleFunc, '[valuePackage]', param.valuePackage); // 输出参数打包 + middleFunc = replaceAll(middleFunc, '[optionalParamDestory]', param.optionalParamDestory); // 可选参数内存释放 + middleFunc = replaceAll(middleFunc, '[agrs_size]', param.paramSize); + + middleFunc = middleFunc.replaceAll('[callback_param_offset]', param.callback.offset); // 呼叫回调 + return middleFunc; } function isClassFunc(className, middleH, middleFunc) { @@ -335,7 +337,7 @@ function isClassFunc(className, middleH, middleFunc) { else { middleH = middleH.replaceAll('[static_define]', 'static '); middleFunc = middleFunc.replaceAll('[unwarp_instance]', - `void *instPtr = pxt->UnWarpInstance(); + `void *instPtr = pxt->UnWarpInstance(); %s *pInstance = static_cast<%s *>(instPtr);`.format(className, className)); middleFunc = middleFunc.replaceAll('[middleClassName]', className + '_middle' + '::'); } diff --git a/src/cli/dts2cpp/src/gen/generate/interface.js b/src/cli/dts2cpp/src/gen/generate/interface.js index d4fe855736573f598dcbc0945a1cd3c9f91cc62e..85d465c1c4cfe4660ea024fa29ef49b501381b7d 100644 --- a/src/cli/dts2cpp/src/gen/generate/interface.js +++ b/src/cli/dts2cpp/src/gen/generate/interface.js @@ -272,7 +272,7 @@ function mapTypeString(type, name, optional) { mapTypeString = 'std::string, %s'.format(mapType[1]); } } - if (mapType[2] != undefined) { + if (mapType[2] !== undefined) { if (mapType[2] === 'string') { mapTypeString = 'std::string, std::map'; } else if (mapType[2] === 'boolean') { @@ -281,7 +281,7 @@ function mapTypeString(type, name, optional) { mapTypeString = 'std::string, std::map'.format(mapType[2]); } } - if (mapType[3] != undefined) { + if (mapType[3] !== undefined) { if (mapType[3] === 'string') { mapTypeString = 'std::string, std::vector'; } else if (mapType[3] === 'boolean') { diff --git a/src/cli/dts2cpp/src/gen/generate/type.js b/src/cli/dts2cpp/src/gen/generate/type.js index aef7251b5ac4b3f471a273454e91f5e30ebabc4e..87e5594cf6e050db5850a548fefe5529c0dcd981 100644 --- a/src/cli/dts2cpp/src/gen/generate/type.js +++ b/src/cli/dts2cpp/src/gen/generate/type.js @@ -12,8 +12,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -const { TypeList, getArrayType, getArrayTypeTwo, getMapType, EnumList, jsType2CType } - = require('../tools/common'); +const { TypeList, getArrayType, getArrayTypeTwo, getMapType, EnumList, jsType2CType } = + require('../tools/common'); const { NapiLog } = require('../tools/NapiLog'); const { addUniqObj2List } = require('../tools/tool'); const re = require('../tools/re'); @@ -67,7 +67,7 @@ function generateTypeEnum(name, data, inNamespace, nameSpaceName, toolNamespace) implCpp: implCpp, midInitEnum: midInitEnum, midInitEnumDefine: midInitEnumDefine, - } + }; return result; } @@ -76,10 +76,11 @@ function getHDefineOfVariable(name, type, variable, optional) { unionTypeString(name, type, variable, optional); } else if (type === 'string') { variableTypeString(optional, variable, name); - } - else if (TypeList.getValue(type)) variable.hDefine += '\n %s %s;'.format(type, name); - else if (EnumList.getValue(type)) variable.hDefine += '\n %s %s;'.format(type, name); - else if (type.indexOf('Array<') === 0) { + } else if (TypeList.getValue(type)) { + variable.hDefine += '\n %s %s;'.format(type, name); + } else if (EnumList.getValue(type)) { + variable.hDefine += '\n %s %s;'.format(type, name); + } else if (type.indexOf('Array<') === 0) { typeArrFunctionOne(type, variable, name, optional); } else if (type === 'boolean') { variableTypeBoolean(optional, variable, name); @@ -183,31 +184,35 @@ function mapTypeString(type, name, optional) { let mapType = getMapType(type); let mapTypeString; if (mapType[1] !== undefined && mapType[2] === undefined) { - if (mapType[1] === 'string') mapTypeString = 'std::string, std::string' - else if (mapType[1] === 'boolean') mapTypeString = 'std::string, bool' - else if (mapType[1].substring(0, 12) === 'NUMBER_TYPE_') { + if (mapType[1] === 'string') { + mapTypeString = 'std::string, std::string'; + } else if (mapType[1] === 'boolean') { + mapTypeString = 'std::string, bool'; + } else if (mapType[1].substring(0, 12) === 'NUMBER_TYPE_') { mapTypeString = 'std::string, %s'.format(mapType[1]); - } - else if (mapType[1].substring(0, 12) === 'any') { + } else if (mapType[1].substring(0, 12) === 'any') { mapTypeString = `std::string, std::any`.format(mapType[1]); return `\n std::map<%s> %s; std::string %s_type;`.format(mapTypeString, name, name); - } - else if (TypeList.getValue(mapType[1])) { + } else if (TypeList.getValue(mapType[1])) { mapTypeString = 'std::string, %s'.format(mapType[1]); } } if (mapType[2] !== undefined) { - if (mapType[2] === 'string') mapTypeString = 'std::string, std::map'; - else if (mapType[2] === 'boolean') mapTypeString = 'std::string, std::map'; - else if (mapType[2].substring(0, 12) === 'NUMBER_TYPE_') { + if (mapType[2] === 'string') { + mapTypeString = 'std::string, std::map'; + } else if (mapType[2] === 'boolean') { + mapTypeString = 'std::string, std::map'; + } else if (mapType[2].substring(0, 12) === 'NUMBER_TYPE_') { mapTypeString = 'std::string, std::map'.format(mapType[2]); } } if (mapType[3] !== undefined) { - if (mapType[3] === 'string') mapTypeString = 'std::string, std::vector'; - else if (mapType[3] === 'boolean') mapTypeString = 'std::string, std::vector'; - else if (mapType[3].substring(0, 12) === 'NUMBER_TYPE_') { + if (mapType[3] === 'string') { + mapTypeString = 'std::string, std::vector'; + } else if (mapType[3] === 'boolean') { + mapTypeString = 'std::string, std::vector'; + } else if (mapType[3].substring(0, 12) === 'NUMBER_TYPE_') { mapTypeString = 'std::string, std::vector<%s>'.format(mapType[3]); } } @@ -245,7 +250,7 @@ function generateType(name, data, inNamespace, inNameSpaceEnum, nameSpaceName, t declarationH: '', middleH: '', midInitEnumDefine: '', - } + }; let resultConnect = connectResult(name, data, inNameSpaceEnum, nameSpaceName, toolNamespace); let implH = resultConnect[1]; let implCpp = resultConnect[2]; @@ -262,7 +267,7 @@ function generateType(name, data, inNamespace, inNameSpaceEnum, nameSpaceName, t declarationH: '', middleH: '', midInitEnumDefine: midInitEnumDefine, - } + }; } else if (implCpp !== '' && middleInit !== '') { result = { implH: implH, @@ -272,7 +277,7 @@ function generateType(name, data, inNamespace, inNameSpaceEnum, nameSpaceName, t declarationH: '', middleH: '', midInitEnumDefine: midInitEnumDefine, - } + }; } else { result = { implH: ` @@ -286,7 +291,7 @@ function generateType(name, data, inNamespace, inNameSpaceEnum, nameSpaceName, t struct %s;\r`.format(name), middleH: '', midInitEnumDefine: '', - } + }; } return result; } @@ -309,9 +314,9 @@ function connectResult(name, data, inNamespace, nameSpaceName, toolNamespace) { cppDefine: '', middleInitDefine: '', midInitEnumDefine: '', - } + }; if (Object.prototype.hasOwnProperty.call(data, 'value')) { - data.allProperties = { values: [] } + data.allProperties = { values: [] }; getAllPropties(data, data.allProperties); for (let i in data.allProperties.values) { let v = data.allProperties.values[i]; @@ -334,6 +339,4 @@ module.exports = { generateVariable, mapTypeString, generateTypeEnum, -} - - +}; \ No newline at end of file diff --git a/src/cli/dts2cpp/src/gen/main.js b/src/cli/dts2cpp/src/gen/main.js index 5322d2fe22d59184058cc74b10da569e2507fdd4..5fcd479ba4dc530a6d7c3ed69591e96b70a633a7 100644 --- a/src/cli/dts2cpp/src/gen/main.js +++ b/src/cli/dts2cpp/src/gen/main.js @@ -28,7 +28,7 @@ function doGenerate(ifname, destdir, imports, numberType, jsonCfg) { if (structOfTs === undefined || structOfTs.declareNamespace.length === 0 || structOfTs.declareNamespace[0].name === undefined) { NapiLog.logError('analyzeFile file fail and file name is: ' + fn); - return; + return ''; } // step2: generate code @@ -77,11 +77,11 @@ function importsFun(imports, destDir, ifname) { fs.mkdirSync(destDir + '/' + importPath[importPath.length - 1]); } imports[i] = '#include ' + '"' + importPath[importPath.length - 1] + '/' + - doGenerate(filePath, destDir + '/' + importPath[importPath.length - 1]) + '.h"\n' + doGenerate(filePath, destDir + '/' + importPath[importPath.length - 1]) + '.h"\n'; } } } module.exports = { doGenerate, -} +}; \ No newline at end of file diff --git a/src/cli/dts2cpp/src/gen/test.js b/src/cli/dts2cpp/src/gen/test.js index 681981125157cc0cf44e0b07a5207237dc3240a0..ee8f8c3de2e3290ab2a0387ab0c473cd8e372268 100644 --- a/src/cli/dts2cpp/src/gen/test.js +++ b/src/cli/dts2cpp/src/gen/test.js @@ -12,5 +12,5 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -const main = require("./main"); -main.doGenerate("nodejs_test/gen/@ohos.napitest.d.ts","nodejs_test/gen/out"); \ No newline at end of file +const main = require('./main'); +main.doGenerate('nodejs_test/gen/@ohos.napitest.d.ts', 'nodejs_test/gen/out'); \ No newline at end of file diff --git a/src/cli/dts2cpp/src/gen/tools/FileRW.js b/src/cli/dts2cpp/src/gen/tools/FileRW.js index 8f202d87137c5df895f8600dd6badc1a66ca7710..823228e7d70a338cbef2640e25fe339394958d20 100644 --- a/src/cli/dts2cpp/src/gen/tools/FileRW.js +++ b/src/cli/dts2cpp/src/gen/tools/FileRW.js @@ -18,7 +18,7 @@ function utf8ArrayToStr(array) { var out, i, len, c; var char2, char3; - out = ""; + out = ''; len = array.length; i = 0; while (i < len) { @@ -53,9 +53,9 @@ function stringToUint8Array(string, options = { stream: false }) { } let pos = 0; const len = string.length; - let at = 0; // output position - let tlen = Math.max(32, len + (len >> 1) + 7); // 1.5x size - let target = new Uint8Array((tlen >> 3) << 3); // ... but at 8 byte offset + let at = 0; // output position + let tlen = Math.max(32, len + (len >> 1) + 7); // 1.5x size + let target = new Uint8Array((tlen >> 3) << 3); // ... but at 8 byte offset while (pos < len) { let value = string.charCodeAt(pos++); @@ -69,16 +69,16 @@ function stringToUint8Array(string, options = { stream: false }) { } } if (value >= 0xd800 && value <= 0xdbff) { - isContinue = true; // drop lone surrogate + isContinue = true; // drop lone surrogate } } if (!isContinue) { // expand the buffer if we couldn't write 4 bytes if (at + 4 > target.length) { - tlen += 8; // minimum extra - tlen *= (1.0 + (pos / string.length) * 2); // take 2x the remaining - tlen = (tlen >> 3) << 3; // 8 byte offset + tlen += 8; // minimum extra + tlen *= (1.0 + (pos / string.length) * 2); // take 2x the remaining + tlen = (tlen >> 3) << 3; // 8 byte offset target = uint8Array(tlen, target); } @@ -94,15 +94,15 @@ function stringToUint8Array(string, options = { stream: false }) { function calculate(value, target, at) { let isContinue = false; - if ((value & 0xffffff80) === 0) { // 1-byte - target[at++] = value; // ASCII + if ((value & 0xffffff80) === 0) { // 1-byte + target[at++] = value; // ASCII isContinue = true; - } else if ((value & 0xfffff800) === 0) { // 2-byte + } else if ((value & 0xfffff800) === 0) { // 2-byte target[at++] = ((value >> 6) & 0x1f) | 0xc0; - } else if ((value & 0xffff0000) === 0) { // 3-byte + } else if ((value & 0xffff0000) === 0) { // 3-byte target[at++] = ((value >> 12) & 0x0f) | 0xe0; target[at++] = ((value >> 6) & 0x3f) | 0x80; - } else if ((value & 0xffe00000) === 0) { // 4-byte + } else if ((value & 0xffe00000) === 0) { // 4-byte target[at++] = ((value >> 18) & 0x07) | 0xf0; target[at++] = ((value >> 12) & 0x3f) | 0x80; target[at++] = ((value >> 6) & 0x3f) | 0x80; @@ -123,7 +123,7 @@ function uint8Array(tlen, target) { function readFile(fn) { if (!fs.existsSync(fn)) { - return ""; + return ''; } let data = fs.readFileSync(fn); data = utf8ArrayToStr(data); diff --git a/src/cli/dts2cpp/src/gen/tools/NapiLog.js b/src/cli/dts2cpp/src/gen/tools/NapiLog.js index b35db3cfd6dcfa5d71f54d3ced930faa8009b4fb..188f24040a729a383685402e63de831704990a45 100644 --- a/src/cli/dts2cpp/src/gen/tools/NapiLog.js +++ b/src/cli/dts2cpp/src/gen/tools/NapiLog.js @@ -52,7 +52,7 @@ NapiLog.init = function (level, fileName) { logLevel = level in [NapiLog.LEV_NONE, NapiLog.LEV_ERROR, NapiLog.LEV_DEBUG, NapiLog.LEV_INFO] ? level : NapiLog.LEV_ERROR; logFileName = fileName ? fileName : 'napi_generator.log'; -} +}; /** * 通过调用栈获取当前正在执行的方法名,代码行数及文件路径 @@ -64,7 +64,7 @@ NapiLog.getCallPath = function (callerFuncName = null) { let stackArray = new Error().stack.split('\n'); // 如果没有指定目标方法,默认在调用栈中查找当前方法"getCallPath"所在的帧 - let destFuncName = callerFuncName != null ? callerFuncName : 'getCallPath'; + let destFuncName = callerFuncName !== null ? callerFuncName : 'getCallPath'; for (let i = stackArray.length - 1; i >= 0; --i) { // debug模式和打包后的可执行程序调用栈函数名不同, 以NapiLog.log()方法为例: @@ -92,7 +92,7 @@ NapiLog.getCallPath = function (callerFuncName = null) { } return callPath; -} +}; function print(...args) { if (vscode) { @@ -111,7 +111,9 @@ function recordLog(lev, ...args) { logResultMessage = [false, detail]; } let logStr = callPath + ' ' + detail; - if (logLevel <= lev) return logStr; + if (logLevel <= lev) { + return logStr; + } NapiLog.logInfo(origMsgInfo[0]); return logStr; } diff --git a/src/cli/dts2cpp/src/gen/tools/common.js b/src/cli/dts2cpp/src/gen/tools/common.js index dffc6d9375a2abc6d0d9eeafbf6ce218e8dc2159..1c69ecea51816fd8e3afd1ba91eb8555c0a9da39 100644 --- a/src/cli/dts2cpp/src/gen/tools/common.js +++ b/src/cli/dts2cpp/src/gen/tools/common.js @@ -43,10 +43,15 @@ FuncType.SYNC = 2; FuncType.ASYNC = 4; FuncType.PROMISE = 8; FuncType.ToString = function (type) { - if (type === FuncType.DIRECT) return 'DIRECT'; - else if (type === FuncType.SYNC) return 'SYNC'; - else if (type === FuncType.ASYNC) return 'ASYNC'; - else if (type === FuncType.PROMISE) return 'PROMISE'; + if (type === FuncType.DIRECT) { + return 'DIRECT'; + } else if (type === FuncType.SYNC) { + return 'SYNC'; + } else if (type === FuncType.ASYNC) { + return 'ASYNC'; + } else if (type === FuncType.PROMISE) { + return 'PROMISE'; + } return 'UNKNOW'; }; @@ -338,13 +343,13 @@ function getUnionType(type) { function isFuncType(type) { let isFunction = false; if (type === null || type === undefined) { - return isFunction; + isFunction = true; } if (type === 'function' || type === 'Function') { isFunction = true; - return isFunction; } + return isFunction; } function isRegisterFunc(name) { @@ -439,8 +444,8 @@ JsonCfgList.getValue = function (className, inter) { }; function getLogErrInfo() { - let errInfo = ' Please refer to for support capacity:' - + 'https://gitee.com/openharmony/napi_generator/tree/master/release-notes'; + let errInfo = ' Please refer to for support capacity:' + + 'https://gitee.com/openharmony/' + 'napi_generator/tree/master/release-notes'; return errInfo; } diff --git a/src/cli/dts2cpp/src/gen/tools/re.js b/src/cli/dts2cpp/src/gen/tools/re.js index 6ee3f9928e2d655c099c2f56d96f0f7d536b42bc..03db0147bf29c4ed1439aed1b173b4ad9194a2b9 100644 --- a/src/cli/dts2cpp/src/gen/tools/re.js +++ b/src/cli/dts2cpp/src/gen/tools/re.js @@ -18,15 +18,17 @@ function search(ss, data) { ss = replaceAll(ss, '\\.', '\\.'); let reg = new RegExp(ss); let tt = reg.exec(data); - if (tt == null) return null; + if (tt === null || tt === undefined) { + return null; + } let ret = { 'regs': [] }; for (let i = 0; i < tt.length; i++) { let p = data.indexOf(tt[i]); - if (tt[i] == null) { - ret['regs'].push([-1, -1]); + if (tt[i] === null || tt[i] === undefined) { + ret.regs.push([-1, -1]); } else { - ret['regs'].push([p, p + tt[i].length]); + ret.regs.push([p, p + tt[i].length]); } } @@ -35,7 +37,7 @@ function search(ss, data) { function match(ss, data) { let tt = search(ss, data); - if (tt !== null && tt !== undefined && tt.regs[0][0] == 0) { + if (tt !== null && tt !== undefined && tt.regs[0][0] === 0) { return tt; } return null; diff --git a/src/cli/dts2ets/appCodeGen/src/analyze.js b/src/cli/dts2ets/appCodeGen/src/analyze.js index 9ed28a81d0b6326eb16533ac63de365d066013bc..36cc38f4929a9995c99c8fcd042f6941cd9c1603 100644 --- a/src/cli/dts2ets/appCodeGen/src/analyze.js +++ b/src/cli/dts2ets/appCodeGen/src/analyze.js @@ -43,14 +43,14 @@ function analyzeFile(fn) { while (true) { // import let matchImport = re.search("import ([{}A-Za-z ,]+) from [\"']{1}([@_./a-zA-Z]+)[\"']{1};*", data); - if (matchImport != null) { + if (matchImport !== null && matchImport !== undefined) { result.imports.push(re.getReg(data, matchImport.regs[0])) data = re.removeReg(data, matchImport.regs[0]); } else break; } - if (null != licenseData) { + if (null !== licenseData && undefined !== licenseData) { result.declareLicense.push(licenseData) } return analyze(data, result) @@ -62,37 +62,37 @@ function analyze(data, result) { data = removeEmptyLine(data) let matchs = re.match(" *\n*", data) // 只剩下空格和回车时,解析完成 - if (matchs && matchs.regs[0][1] == data.length) break + if (matchs && matchs.regs[0][1] === data.length) break matchs = re.match("export default ([a-zA-Z0-9_]+);", data); - if (matchs != null) { + if (matchs !== null && matchs !== undefined) { let exportName = re.getReg(data, matchs.regs[1]) data = re.removeReg(data, matchs.regs[0]); result.exportDefault.push(exportName) } data = re.replaceAll(data, "\n{", "{"); let matchType = analyzeMatchType(matchs, data, result) - if (matchType != null) { + if (matchType !== null && matchType !== undefined) { data = matchType[0] - if (matchType[1] != null) { + if (matchType[1] !== null && matchType[1] !== undefined) { result = matchType[1] } } let namespace = analyzeMatchNamespace(matchs, data, result) - if (namespace != null) { + if (namespace !== null && namespace !== undefined) { data = namespace[0] result = namespace[1] } let interface = analyzeMatchInterface(matchs, data, result) - if (interface != null) { + if (interface !== null && interface !== undefined) { data = interface[0] result = interface[1] } let functionMatch = analyzeMatchFunction(matchs, data, result) - if (functionMatch != null) { + if (functionMatch !== null && functionMatch !== undefined) { data = functionMatch[0] result = functionMatch[1] } - if (oldData == data) { + if (oldData === data) { NapiLog.logError("\nvvv 解析文件失败 vvv"); NapiLog.logError("[", data.substring(0, data.length > 64 ? 64 : data.length), "]"); break; @@ -104,7 +104,7 @@ function analyze(data, result) { function analyzeMatchNamespace(matchs, data, result) { matchs = re.match("declare namespace ([a-zA-Z_0-9]+) *({)", data); // 解析declare - if (matchs != null) { + if (matchs !== null && matchs !== undefined) { let namespaceName = re.getReg(data, matchs.regs[1]) let namespaceData = checkOutBody(data, matchs.regs[2][0], null, true) data = data.substring(matchs.regs[2][1] + namespaceData.length + 1, data.length) @@ -155,7 +155,7 @@ function analyzeMatchType(matchs, data, result) { name: exportName, body: exportBody }) - if (matchs.regs[1][0] != -1) { + if (matchs.regs[1][0] !== -1) { result.exports.push(exportName) } } @@ -169,7 +169,7 @@ function analyzeMatchType(matchs, data, result) { name: exportName, body: exportBody }) - if (matchs.regs[1][0] != -1) { + if (matchs.regs[1][0] !== -1) { result.exports.push(exportName) } } diff --git a/src/cli/dts2ets/appCodeGen/src/analyze/enum.js b/src/cli/dts2ets/appCodeGen/src/analyze/enum.js index 179307a04c2e0c4fe3d1e09b0bf1cc0b39503ea1..af28ec277dd55a793bbd5a9006fd82c3a73e3c5e 100644 --- a/src/cli/dts2ets/appCodeGen/src/analyze/enum.js +++ b/src/cli/dts2ets/appCodeGen/src/analyze/enum.js @@ -17,7 +17,7 @@ const re = require('../tools/re'); /** Enum解析 */ function analyzeEnum(data) { - let body = re.replaceAll(data, '\n', '').split(',') + let body = re.replaceAll(data, '\n', '').split(','); let result = { element: [], function: [], diff --git a/src/cli/dts2ets/appCodeGen/src/analyze/function.js b/src/cli/dts2ets/appCodeGen/src/analyze/function.js index 2cbe699d4d8af418177caa41ea5a548f13dd998a..bcf1651844154851c7d79812d394e3b57f8a9d89 100644 --- a/src/cli/dts2ets/appCodeGen/src/analyze/function.js +++ b/src/cli/dts2ets/appCodeGen/src/analyze/function.js @@ -32,7 +32,7 @@ function analyzeSubInterface(data) { }; for (let i in body) { let t = body[i]; - while (t.length > 0 && t[0] === ' '); { + while (t.length > 0 && t[0] === ' ') { t = t.substring(1, t.length); } while (t.length > 0 && t[-1] === ' ') { @@ -95,13 +95,13 @@ function getFuncParaType(v, interfaceName, data, results) { } } - let interfaceType = re.match('{([A-Za-z0-9_]+:[A-Za-z0-9_,]+)([A-Za-z0-9_]+:[A-Za-z0-9_]+)}$', v['type']) + let interfaceType = re.match('{([A-Za-z0-9_]+:[A-Za-z0-9_,]+)([A-Za-z0-9_]+:[A-Za-z0-9_]+)}$', v.type); if (interfaceType) { v.type = interfaceName; } if (parameter.indexOf('number') >= 0) { - v.type = v.type.replace('number', 'NUMBER_TYPE_' + NumberIncrease.getAndIncrease()) + v.type = v.type.replace('number', 'NUMBER_TYPE_' + NumberIncrease.getAndIncrease()); } // type的处理 diff --git a/src/cli/dts2ets/appCodeGen/src/analyze/interface.js b/src/cli/dts2ets/appCodeGen/src/analyze/interface.js index 6d2dc24b77c1587a8253665369ea0646554fe09b..7b4dae7f81d8c63b98580847392b069a226ec4df 100644 --- a/src/cli/dts2ets/appCodeGen/src/analyze/interface.js +++ b/src/cli/dts2ets/appCodeGen/src/analyze/interface.js @@ -74,14 +74,14 @@ function analyzeInterface(data, rsltInterface = null, results, interfaceName = ' t = t.substring(0, t.length - 1); } // 去除后面的空格 if (t === '') { - break + break; }// 如果t为空直接返回 let tt = re.match(' *([a-zA-Z0-9_]+)(\\?*)*: *([a-zA-Z_0-9<>,:{}[\\]| ]+)', t); if (tt && t.indexOf('=>') < 0) { // 接口成员变量, 但不包括带'=>'的成员,带'=>'的接口成员需要按函数处理 analyzeInterfaceVariable(t, tt, rsltInterface, result); } - tt = re.match('(static )* *(\\$*[A-Za-z0-9_]+) *[:]? *\\(([\n \'a-zA-Z\'\'\"\":;=,_0-9?<>{}()=>|[\\]]*)\\)' - + ' *(:|=>)? *([A-Za-z0-9_<>{}:;, .[\\]]+)?', t); + tt = re.match('(static )* *(\\$*[A-Za-z0-9_]+) *[:]? *\\(([\n \'a-zA-Z\'\'\"\":;=,_0-9?<>{}()=>|[\\]]*)\\)' + + ' *(:|=>)? *([A-Za-z0-9_<>{}:;, .[\\]]+)?', t); if (tt) { // 接口函数成员 analyzeInterfaceFunction(t, tt, data, results, interfaceName, result); } diff --git a/src/cli/dts2ets/appCodeGen/src/analyze/namespace.js b/src/cli/dts2ets/appCodeGen/src/analyze/namespace.js index 347e19db808ff4d2a023fa42f810b9c09910b2b2..5910bcd09c3ab90801e4b5af8633c4046d135538 100644 --- a/src/cli/dts2ets/appCodeGen/src/analyze/namespace.js +++ b/src/cli/dts2ets/appCodeGen/src/analyze/namespace.js @@ -111,33 +111,37 @@ function parseEnumType(result) { return null; } - // 参数匹配 - for (let k in func.value) { - let v = func.value[k]; - if (!isValidValue(v)) { - NapiLog.logError('parseEnumType func.value is null!'); - return null; - } - - if (v.type === enumm.name) { - if (enumm.body.enumValueType === EnumValueType.ENUM_VALUE_TYPE_NUMBER) { - v.type = 'NUMBER_TYPE_' + NumberIncrease.getAndIncrease(); - } else if (enumm.body.enumValueType === EnumValueType.ENUM_VALUE_TYPE_STRING) { - v.type = 'string'; - } else { - NapiLog.logError('parseEnumType for interface function value is not support this type %s.' - .format(enumm.body.enumValueType), getLogErrInfo()); - return null; - } - result.interface[i].body.function[j].value[k].type = v.type; - } - } + parseEnumTypeFunc(func, enumm, result, i) } } } return result; } +function parseEnumTypeFunc(func, enumm, result, i) { + // 参数匹配 + for (let k in func.value) { + let v = func.value[k]; + if (!isValidValue(v)) { + NapiLog.logError('parseEnumType func.value is null!'); + return null; + } + + if (v.type === enumm.name) { + if (enumm.body.enumValueType === EnumValueType.ENUM_VALUE_TYPE_NUMBER) { + v.type = 'NUMBER_TYPE_' + NumberIncrease.getAndIncrease(); + } else if (enumm.body.enumValueType === EnumValueType.ENUM_VALUE_TYPE_STRING) { + v.type = 'string'; + } else { + NapiLog.logError('parseEnumType for interface function value is not support this type %s.' + .format(enumm.body.enumValueType), getLogErrInfo()); + return null; + } + result.interface[i].body.function[j].value[k].type = v.type; + } + } +} + function parseNamespace(matchs, data, result) { matchs = re.match('(export )*namespace ([a-zA-Z0-9]+) ({)', data); if (matchs) { @@ -220,7 +224,7 @@ function parseType(matchs, data, result) { let typeType = re.getReg(data, matchs.regs[3]); let index = typeType.indexOf('number'); if (index !== -1) { - typeType = typeType.replace('number', 'NUMBER_TYPE_' + NumberIncrease.getAndIncrease()) + typeType = typeType.replace('number', 'NUMBER_TYPE_' + NumberIncrease.getAndIncrease()); } getTypeInfo(result, typeName, typeType, false); data = re.removeReg(data, matchs.regs[0]); @@ -260,10 +264,10 @@ function parseType(matchs, data, result) { function parseFunction(matchs, data, result) { matchs = re.match('(export )*function (\\$*[A-Za-z0-9_]+) *(\\()', data); - if (null == matchs) { + if (null === matchs || undefined === matchs) { matchs = re.match('(export )*function (static )*(\\$*[A-Za-z0-9_]+) *(\\()', data); } - if (null == matchs) { + if (null === matchs || undefined === matchs) { matchs = re.match('(export )*function (static )*(register\\$*[A-Za-z0-9_]+) *(\\()', data); } if (matchs) { @@ -279,11 +283,9 @@ function parseFunction(matchs, data, result) { let matchFuncArray = re.match(' *: *([A-Za-z0-9]+)(\\[]);*', funcRet); if (matchFuncArray) { funcRet = re.getReg(funcRet, [matchFuncArray.regs[1][0], matchFuncArray.regs[2][1]]); - } - else if (matchFunc) { + } else if (matchFunc) { funcRet = re.getReg(funcRet, matchFunc.regs[1]); - } - else { + } else { funcRet = 'void'; } funcRet = re.replaceAll(re.replaceAll(funcRet, ' ', ''), '\n', ''); diff --git a/src/cli/dts2ets/appCodeGen/src/analyze/params.js b/src/cli/dts2ets/appCodeGen/src/analyze/params.js index a24b7739d0ebe544c87e3b1b5be3c8a1779f7a2c..cb50d1b40236eb7921c238fb9d8d4b816a4108db 100644 --- a/src/cli/dts2ets/appCodeGen/src/analyze/params.js +++ b/src/cli/dts2ets/appCodeGen/src/analyze/params.js @@ -94,24 +94,9 @@ function analyzeParams(funcName, values) { let optionalFlag = re.getReg(v, matchs.regs[2]) === '?' ? true : false; let checkParamOk = true; - if (optionalFlag) { - optionalParamCount++; - } else if (optionalParamCount > 0) { - // 可选参数之后不能再有必选参数,须是可选参数。 - NapiLog.logError('Invalid parameter [%s] of function [%s],'.format(v, funcName) + - ' the required parameter cannot follow an optional parameter.'); - checkParamOk = false; - } - if (checkParamOk) { - result.push({ 'name': re.getReg(v, matchs.regs[1]), 'type': type, 'optional': optionalFlag }); - if (type.indexOf('AsyncCallback') >= 0) { - funcType = FuncType.ASYNC; - } - if (isSyncFuncType(type, funcType)) { - funcType = FuncType.SYNC; - } - } + analyzaParamsFunc(optionalFlag, optionalParamCount, v, funcName, checkParamOk, + result, matchs, type, funcType); } else { NapiLog.logError('Failed to analyse parameter [%s] of function [%s].'.format(v, funcName)); @@ -120,6 +105,28 @@ function analyzeParams(funcName, values) { return [result, funcType, rsltCallFunction]; } +function analyzaParamsFunc(optionalFlag, optionalParamCount, v, funcName, checkParamOk, + result, matchs, type, funcType) { + if (optionalFlag) { + optionalParamCount++; + } else if (optionalParamCount > 0) { + // 可选参数之后不能再有必选参数,须是可选参数。 + NapiLog.logError('Invalid parameter [%s] of function [%s],'.format(v, funcName) + + ' the required parameter cannot follow an optional parameter.'); + checkParamOk = false; + } + if (checkParamOk) { + result.push({ 'name': re.getReg(v, matchs.regs[1]), 'type': type, 'optional': optionalFlag }); + if (type.indexOf('AsyncCallback') >= 0) { + funcType = FuncType.ASYNC; + } + + if (isSyncFuncType(type, funcType)) { + funcType = FuncType.SYNC; + } + } +} + module.exports = { analyzeParams, }; diff --git a/src/cli/dts2ets/appCodeGen/src/analyze/type.js b/src/cli/dts2ets/appCodeGen/src/analyze/type.js index 24ab076e2b2cd4dd30967eff1c243bb3f773bd49..a503cf0ea8b933e2ae5c203b8797a5390c72648f 100644 --- a/src/cli/dts2ets/appCodeGen/src/analyze/type.js +++ b/src/cli/dts2ets/appCodeGen/src/analyze/type.js @@ -18,7 +18,7 @@ const { NumberIncrease } = require('../tools/common'); /* 去除单行注释// */ function parseNotes(data) { let notes = data.indexOf('//') >= 0 ? data.substring(data.indexOf('//'), data.length) : ''; - while (notes != '') { + while (notes !== '') { notes = notes.substring(0, notes.indexOf('\n')); data = data.replace(notes, ''); notes = ''; @@ -76,7 +76,7 @@ function analyzeTypeVariable(t, tt, result) { } function analyzeType2(data) { - let body = re.replaceAll(data, ' ', '').split('"|"') + let body = re.replaceAll(data, ' ', '').split('"|"'); let result = { element: [], function: [], diff --git a/src/cli/dts2ets/appCodeGen/src/app_code_gen.js b/src/cli/dts2ets/appCodeGen/src/app_code_gen.js index e599da27fed83a9ce543ab4be16463c25a199b2f..bf5f2995892655cb9df585cc8e7ffeb159c5dd42 100644 --- a/src/cli/dts2ets/appCodeGen/src/app_code_gen.js +++ b/src/cli/dts2ets/appCodeGen/src/app_code_gen.js @@ -40,7 +40,7 @@ let ops = stdio.getopt({ NapiLog.init(ops.loglevel, path.join('' + ops.out, 'napi_gen.log')); let fileNames = ops.filename; -if (fileNames == null) { +if (fileNames === null) { NapiLog.logInfo('fileNames cannot be empty!'); } else if (fileNames !== '') { readFiles(); @@ -81,7 +81,7 @@ function checkGenerate(fileName) { let tt = re.match('(@ohos\.)*([.a-z_A-Z0-9]+).d.ts', fn); if (tt) { let result = checkFileError(fileName); - let funcConfig + let funcConfig; if (ops.functionsCfg) { funcConfig = getJsonCfg(ops.functionsCfg); } diff --git a/src/cli/dts2ets/appCodeGen/src/generate.js b/src/cli/dts2ets/appCodeGen/src/generate.js index 287a87d0773b046a10c756787b4c49b25e0a99e7..dad37c812c814208dd7e6fbb5cfd0ce61472838e 100644 --- a/src/cli/dts2ets/appCodeGen/src/generate.js +++ b/src/cli/dts2ets/appCodeGen/src/generate.js @@ -20,7 +20,7 @@ const re = require('./tools/re'); const { jsonCfgList } = require('./tools/common'); const os = require('os'); -const path = require('path') +const path = require('path'); const { NapiLog } = require('./tools/NapiLog'); const DIRECT = 1; @@ -152,7 +152,7 @@ function generateAppCode(structOfTs, destDir, moduleName, jsonCfg) { // 从文件分析的数据中拿到接口名,接口参数类型与个数,读取出来以此给接口参数赋初值。 // 当前只支持一个接口的测试代码生成 - let indexEts = '' + let indexEts = ''; // 测试interface中的方法 for (let i in ns0.body.interface) { let ii = ns0.body.interface[i]; @@ -173,7 +173,7 @@ function generateAppCode(structOfTs, destDir, moduleName, jsonCfg) { // index.ets文件生成 indexEts = replaceAll(indexEts, '[import_module_name]', moduleName); - writeFile(re.pathJoin(destDir, 'Index.ets'), null != license ? (license + '\n' + indexEts) : indexEts); + writeFile(re.pathJoin(destDir, 'Index.ets'), null !== license && undefined !== license ? (license + '\n' + indexEts) : indexEts); } // 遍历 interface/class 中的function,生成对interface/class中的接口测试的代码 @@ -222,16 +222,16 @@ function callDirectFunction(funcName, funcValue, retValue, indexEts, className = // 返回值的处理 let useFunction = ''; if (retValue === 'void') { - useFunction = '%s.%s(%s);'.format(className === null? 'napitest': className + 'Obj', funcName, funcParamValue); + useFunction = '%s.%s(%s);'.format(className === null ? 'napitest' : className + 'Obj', funcName, funcParamValue); } else if (retValue === 'string') { - useFunction = 'let strRet: string = %s.%s(%s);\n'.format(className === null? 'napitest': className + 'Obj', funcName, funcParamValue); - useFunction += 'hilog.info(0x0000, "testTag", "%s.%s ret: " + strRet);'.format(className === null? 'napitest': className + 'Obj', funcName); + useFunction = 'let strRet: string = %s.%s(%s);\n'.format(className === null ? 'napitest' : className + 'Obj', funcName, funcParamValue); + useFunction += 'hilog.info(0x0000, "testTag", "%s.%s ret: " + strRet);'.format(className === null ? 'napitest': className + 'Obj', funcName); } else if (retValue === 'boolean') { - useFunction = 'let boolRet: boolean = %s.%s(%s);\n'.format(className === null? 'napitest': className + 'Obj', funcName, funcParamValue); - useFunction += 'hilog.info(0x0000, "testTag", "%s.%s ret: " + boolRet);'.format(className === null? 'napitest': className + 'Obj', funcName); + useFunction = 'let boolRet: boolean = %s.%s(%s);\n'.format(className === null ? 'napitest': className + 'Obj', funcName, funcParamValue); + useFunction += 'hilog.info(0x0000, "testTag", "%s.%s ret: " + boolRet);'.format(className === null ? 'napitest' : className + 'Obj', funcName); } else if (retValue.substring(0, SUBSTREND) === 'NUMBER_TYPE') { - useFunction = 'let numRet: number = %s.%s(%s);\n'.format(className === null? 'napitest': className + 'Obj', funcName, funcParamValue); - useFunction += 'hilog.info(0x0000, "testTag", "%s.%s ret: " + numRet);'.format(className === null? 'napitest': className + 'Obj', funcName); + useFunction = 'let numRet: number = %s.%s(%s);\n'.format(className === null ? 'napitest': className + 'Obj', funcName, funcParamValue); + useFunction += 'hilog.info(0x0000, "testTag", "%s.%s ret: " + numRet);'.format(className === null ? 'napitest' : className + 'Obj', funcName); } else { console.error('The current return type is not supported.'); } diff --git a/src/cli/dts2ets/appCodeGen/src/main.js b/src/cli/dts2ets/appCodeGen/src/main.js index d5a5eafe49b848194f697e3fe3cf6473908dccb9..46b44811ebec76f8438c9b34235c285f8dab3128 100644 --- a/src/cli/dts2ets/appCodeGen/src/main.js +++ b/src/cli/dts2ets/appCodeGen/src/main.js @@ -26,7 +26,7 @@ function doGenerate(ifname, destdir, jsonCfg) { if (structOfTs === undefined || structOfTs.declareNamespace.length === 0 || structOfTs.declareNamespace[0].name === undefined) { NapiLog.logError('analyzeFile file fail and file name is: ' + fn); - return; + return ''; } // step2: generate code diff --git a/src/cli/dts2ets/appCodeGen/src/tools/FileRW.js b/src/cli/dts2ets/appCodeGen/src/tools/FileRW.js index 8748fd129409b2f1b4717d16c7b620796b41aad1..823228e7d70a338cbef2640e25fe339394958d20 100644 --- a/src/cli/dts2ets/appCodeGen/src/tools/FileRW.js +++ b/src/cli/dts2ets/appCodeGen/src/tools/FileRW.js @@ -53,9 +53,9 @@ function stringToUint8Array(string, options = { stream: false }) { } let pos = 0; const len = string.length; - let at = 0; // output position - let tlen = Math.max(32, len + (len >> 1) + 7); // 1.5x size - let target = new Uint8Array((tlen >> 3) << 3); // ... but at 8 byte offset + let at = 0; // output position + let tlen = Math.max(32, len + (len >> 1) + 7); // 1.5x size + let target = new Uint8Array((tlen >> 3) << 3); // ... but at 8 byte offset while (pos < len) { let value = string.charCodeAt(pos++); @@ -69,16 +69,16 @@ function stringToUint8Array(string, options = { stream: false }) { } } if (value >= 0xd800 && value <= 0xdbff) { - isContinue = true; // drop lone surrogate + isContinue = true; // drop lone surrogate } } if (!isContinue) { // expand the buffer if we couldn't write 4 bytes if (at + 4 > target.length) { - tlen += 8; // minimum extra - tlen *= (1.0 + (pos / string.length) * 2); // take 2x the remaining - tlen = (tlen >> 3) << 3; // 8 byte offset + tlen += 8; // minimum extra + tlen *= (1.0 + (pos / string.length) * 2); // take 2x the remaining + tlen = (tlen >> 3) << 3; // 8 byte offset target = uint8Array(tlen, target); } @@ -94,15 +94,15 @@ function stringToUint8Array(string, options = { stream: false }) { function calculate(value, target, at) { let isContinue = false; - if ((value & 0xffffff80) === 0) { // 1-byte - target[at++] = value; // ASCII + if ((value & 0xffffff80) === 0) { // 1-byte + target[at++] = value; // ASCII isContinue = true; - } else if ((value & 0xfffff800) === 0) { // 2-byte + } else if ((value & 0xfffff800) === 0) { // 2-byte target[at++] = ((value >> 6) & 0x1f) | 0xc0; - } else if ((value & 0xffff0000) === 0) { // 3-byte + } else if ((value & 0xffff0000) === 0) { // 3-byte target[at++] = ((value >> 12) & 0x0f) | 0xe0; target[at++] = ((value >> 6) & 0x3f) | 0x80; - } else if ((value & 0xffe00000) === 0) { // 4-byte + } else if ((value & 0xffe00000) === 0) { // 4-byte target[at++] = ((value >> 18) & 0x07) | 0xf0; target[at++] = ((value >> 12) & 0x3f) | 0x80; target[at++] = ((value >> 6) & 0x3f) | 0x80; diff --git a/src/cli/dts2ets/appCodeGen/src/tools/NapiLog.js b/src/cli/dts2ets/appCodeGen/src/tools/NapiLog.js index b35db3cfd6dcfa5d71f54d3ced930faa8009b4fb..3b8496d410333e4e629924a4011c1a6b8e4549cc 100644 --- a/src/cli/dts2ets/appCodeGen/src/tools/NapiLog.js +++ b/src/cli/dts2ets/appCodeGen/src/tools/NapiLog.js @@ -52,7 +52,7 @@ NapiLog.init = function (level, fileName) { logLevel = level in [NapiLog.LEV_NONE, NapiLog.LEV_ERROR, NapiLog.LEV_DEBUG, NapiLog.LEV_INFO] ? level : NapiLog.LEV_ERROR; logFileName = fileName ? fileName : 'napi_generator.log'; -} +}; /** * 通过调用栈获取当前正在执行的方法名,代码行数及文件路径 @@ -64,7 +64,7 @@ NapiLog.getCallPath = function (callerFuncName = null) { let stackArray = new Error().stack.split('\n'); // 如果没有指定目标方法,默认在调用栈中查找当前方法"getCallPath"所在的帧 - let destFuncName = callerFuncName != null ? callerFuncName : 'getCallPath'; + let destFuncName = callerFuncName !== null && callerFuncName !== undefined ? callerFuncName : 'getCallPath'; for (let i = stackArray.length - 1; i >= 0; --i) { // debug模式和打包后的可执行程序调用栈函数名不同, 以NapiLog.log()方法为例: @@ -92,7 +92,7 @@ NapiLog.getCallPath = function (callerFuncName = null) { } return callPath; -} +}; function print(...args) { if (vscode) { @@ -111,7 +111,9 @@ function recordLog(lev, ...args) { logResultMessage = [false, detail]; } let logStr = callPath + ' ' + detail; - if (logLevel <= lev) return logStr; + if (logLevel <= lev) { + return logStr; + } NapiLog.logInfo(origMsgInfo[0]); return logStr; } diff --git a/src/cli/dts2ets/appCodeGen/src/tools/common.js b/src/cli/dts2ets/appCodeGen/src/tools/common.js index a275abf3d04f13761d253ef078b41306c356fcde..cb8cd75f397e61cc88080e66fdc831ca038cef7f 100644 --- a/src/cli/dts2ets/appCodeGen/src/tools/common.js +++ b/src/cli/dts2ets/appCodeGen/src/tools/common.js @@ -43,11 +43,15 @@ FuncType.SYNC = 2; FuncType.ASYNC = 4; FuncType.PROMISE = 8; FuncType.ToString = function (type) { - if (type === FuncType.DIRECT) return 'DIRECT'; - else if (type === FuncType.SYNC) return 'SYNC'; - else if (type === FuncType.ASYNC) return 'ASYNC'; - else if (type === FuncType.PROMISE) return 'PROMISE'; - return 'UNKNOW'; + if (type === FuncType.DIRECT) { + return 'DIRECT'; + } else if (type === FuncType.ASYNC) { + return 'ASYNC'; + } else if (type === FuncType.PROMISE) { + return 'PROMISE'; + } else { + return 'UNKNOW'; + } }; class NumberIncrease { } @@ -75,7 +79,7 @@ InterfaceList.getValue = function (name) { for (let i in ifs) { let vv = ifs[i]; if (ifs[i].name === name) { - var hasProperty = Object.prototype.hasOwnProperty.call(ifs[i].body, 'allProperties') + var hasProperty = Object.prototype.hasOwnProperty.call(ifs[i].body, 'allProperties'); if (hasProperty) { return ifs[i].body.allProperties.values; } else { @@ -109,14 +113,14 @@ CallFunctionList.getValue = function (name) { return null; } - let cfs = CallFunctionList.callFuncs[CallFunctionList.callFuncs.length - 1] + let cfs = CallFunctionList.callFuncs[CallFunctionList.callFuncs.length - 1]; if (cfs === undefined) { return null; } for (let i = 0; i < cfs.length; i++) { if (cfs[i].name === name) { - return [cfs[i].body, cfs[i].ret] + return [cfs[i].body, cfs[i].ret]; } } return null; @@ -338,13 +342,13 @@ function getUnionType(type) { function isFuncType(type) { let isFunction = false; if (type === null || type === undefined) { - return isFunction; + isFunction = false; } if (type === 'function' || type === 'Function') { isFunction = true; - return isFunction; } + return isFunction; } function isRegisterFunc(name) { @@ -362,7 +366,7 @@ function isUnRegisterFunc(name) { if (unRegIndex === 0) { isRegister = true; } - return isRegister + return isRegister; } function isOnObjCallback(name) { @@ -420,27 +424,27 @@ function getOnCallbackFunAndInterName(CallbackType) { return [interName, funcName]; } -class jsonCfgList { } -jsonCfgList.jsonCfg = []; -jsonCfgList.push = function (ifs) { - jsonCfgList.jsonCfg.push(ifs); +class JsonCfgList { } +JsonCfgList.jsonCfg = []; +JsonCfgList.push = function (ifs) { + JsonCfgList.jsonCfg.push(ifs); }; -jsonCfgList.pop = function () { - jsonCfgList.jsonCfg.pop(); +JsonCfgList.pop = function () { + JsonCfgList.jsonCfg.pop(); }; -jsonCfgList.getValue = function (className, inter) { - let ifs = jsonCfgList.jsonCfg[jsonCfgList.jsonCfg.length - 1]; +JsonCfgList.getValue = function (className, inter) { + let ifs = JsonCfgList.jsonCfg[JsonCfgList.jsonCfg.length - 1]; for (let i in ifs) { if (ifs[i].interfaceName.className === className && ifs[i].interfaceName.funcName === inter) { return ifs[i].serviceCode; } } return null; -} +}; function getLogErrInfo() { let errInfo = ' Please refer to for support capacity:' + - 'https://gitee.com/openharmony/napi_generator/tree/master/release-notes'; + 'https://gitee.com/openharmony/' + 'napi_generator/tree/master/release-notes'; return errInfo; } @@ -464,7 +468,7 @@ module.exports = { getUnionType, isFuncType, isArrowFunc, - jsonCfgList, + JsonCfgList, isRegisterFunc, isUnRegisterFunc, isOnObjCallback, diff --git a/src/cli/dts2ets/appCodeGen/src/tools/re.js b/src/cli/dts2ets/appCodeGen/src/tools/re.js index 04c3233f7fa2495fc59994cb704f141cb6508aec..1d99bf8ee576ce3c3aa1c54f5b9807443986af2f 100644 --- a/src/cli/dts2ets/appCodeGen/src/tools/re.js +++ b/src/cli/dts2ets/appCodeGen/src/tools/re.js @@ -18,15 +18,16 @@ function search(ss, data) { ss = replaceAll(ss, '\\.', '\\.'); let reg = new RegExp(ss); let tt = reg.exec(data); - if (tt == null) return null; + if (tt === null || tt === undefined) { + return null; + } let ret = { 'regs': [] }; for (let i = 0; i < tt.length; i++) { let p = data.indexOf(tt[i]); - if (tt[i] == null) { - ret['regs'].push([-1, -1]); - } - else { - ret['regs'].push([p, p + tt[i].length]); + if (tt[i] === null || tt[i] === undefined) { + ret.regs.push([-1, -1]); + } else { + ret.regs.push([p, p + tt[i].length]); } } @@ -34,8 +35,10 @@ function search(ss, data) { } function match(ss, data) { - let tt = search(ss, data) - if (tt !== null && tt !== undefined && tt.regs[0][0] == 0) return tt; + let tt = search(ss, data); + if (tt !== null && tt !== undefined && tt.regs[0][0] === 0) { + return tt; + } return null; } diff --git a/src/cli/dts2ets/appCodeGen/src/tools/tool.js b/src/cli/dts2ets/appCodeGen/src/tools/tool.js index dffad320d434e4ff78b5d62edf581f078959185a..39baef9d155aee9904201c8b746de5660a0713de 100644 --- a/src/cli/dts2ets/appCodeGen/src/tools/tool.js +++ b/src/cli/dts2ets/appCodeGen/src/tools/tool.js @@ -39,7 +39,9 @@ String.prototype.format = function (...args) { let reg = new RegExp('%[sd]{1}'); for (let i = 0; i < args.length; i++) { let p = result.search(reg); - if (p < 0) break; + if (p < 0) { + break; + } result = result.substring(0, p) + args[i] + result.substring(p + 2, result.length); } return result; @@ -96,7 +98,9 @@ function checkOutBody(body, off, flag, binside) { if (body[i] in csl) { csl[body[i]] += 1; - if (body[i] in csr) csr[body[i]] += 1; + if (body[i] in csr) { + csr[body[i]] += 1; + } } if (body[i] in csr) { if (!(body[i] === '>' && body[i - 1] === '=')) { // 尖括号匹配时忽略关键字 "=>" @@ -190,7 +194,7 @@ function replaceTab(data) { } function removeEmptyLine2(data) { - while (data.indexOf(' \n')); { + while (data.indexOf(' \n')) { data = data.replace(' \n', '\n'); } while (data.indexOf('\n\n\n')) { diff --git a/src/cli/h2dts/src/tsGen/tsMain.js b/src/cli/h2dts/src/tsGen/tsMain.js index ee77776da39197b2651a81a73a54fdf27e3eb6e3..2ef18ff6f2e00978f1c63b679db63e8f020ab42d 100644 --- a/src/cli/h2dts/src/tsGen/tsMain.js +++ b/src/cli/h2dts/src/tsGen/tsMain.js @@ -156,7 +156,7 @@ function createFuncInfo(parseFuncInfo, isClassFunc) { 'namespace': '', 'retType': '', 'static': '', - } + }; funcInfo.name = parseFuncInfo.name; funcInfo.namespace = parseFuncInfo.namespace; let tokenIndex = funcInfo.namespace.indexOf('::'); @@ -208,7 +208,7 @@ function analyzeRootFunction(rootInfo, parseResult) { function createProperties(parseProperties) { let propertyList = []; for (var i = 0; i < parseProperties.length; ++i) { - let property = {} + let property = {}; property.name = parseProperties[i].name; property.type = getJsTypeFromC(parseProperties[i].raw_type, parseProperties[i]); propertyList.push(property); diff --git a/src/cli/h2dtscpp/src/src/napiGen/functionDirectTest.js b/src/cli/h2dtscpp/src/src/napiGen/functionDirectTest.js index f1de13d43976141683719f03649cdbf8421e37d4..b1eca49d11d6147742f5d4d51cc17fefc3c13ae1 100644 --- a/src/cli/h2dtscpp/src/src/napiGen/functionDirectTest.js +++ b/src/cli/h2dtscpp/src/src/napiGen/functionDirectTest.js @@ -12,12 +12,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -const { NapiLog } = require("../tools/NapiLog"); +const { NapiLog } = require('../tools/NapiLog'); const util = require('util'); -const { generateRandomInteger } = require("../tools/tool"); -const { InterfaceList, TypeList } = require('../tools/common') -const path = require('path') -const fs = require("fs"); +const { generateRandomInteger } = require('../tools/tool'); +const { InterfaceList, TypeList } = require('../tools/common'); +const path = require('path'); +const fs = require('fs'); const LENGTH = 10; const TWO_DECIMAL = 2; const MODTWO = 2; @@ -52,42 +52,42 @@ function generateRandomString(length) { function generateFuncTestCase(params, funcIndex, tsFuncName, abilityTestTemplete, hFileName) { let funcInfo = { - "name": "", - "params": [], - "retType": "", + 'name': '', + 'params': [], + 'retType': '', + }; + funcInfo.name = params.functions[funcIndex].name; + let parseParams = params.functions[funcIndex].parameters; + for (let i = 0; i < parseParams.length; ++i) { + let param = createParam(parseParams[i]); + funcInfo.params.push(param); } - funcInfo.name = params.functions[funcIndex].name - let parseParams = params.functions[funcIndex].parameters - for(let i = 0; i < parseParams.length; ++i) { - let param = createParam(parseParams[i]) - funcInfo.params.push(param) - } - funcInfo.retType = params.functions[funcIndex].rtnType + funcInfo.retType = params.functions[funcIndex].rtnType; let { funcParamUse, funcParamDefine, funcInfoParams } = genInitTestfunc(funcInfo); // 去除调用参数的最后一个',' let index = funcParamUse.lastIndexOf(', '); funcParamUse = funcParamUse.substring(0, index); - let callFunc = '' - let hilogContent = '' + let callFunc = ''; + let hilogContent = ''; // 调用函数 if (getJsType(funcInfo.retType) !== 'void') { - callFunc = util.format('let result: %s = testNapi.%s(%s)\n ', getJsType(funcInfo.retType), tsFuncName, funcParamUse) + callFunc = util.format('let result: %s = testNapi.%s(%s)\n ', getJsType(funcInfo.retType), tsFuncName, funcParamUse); // 加 hilog 打印 - hilogContent = util.format('hilog.info(0x0000, "testTag", "Test NAPI %s: ", JSON.stringify(result));\n ', tsFuncName) - hilogContent += util.format('console.info("testTag", "Test NAPI %s: ", JSON.stringify(result));\n ', tsFuncName) + hilogContent = util.format('hilog.info(0x0000, "testTag", "Test NAPI %s: ", JSON.stringify(result));\n ', tsFuncName); + hilogContent += util.format('console.info("testTag", "Test NAPI %s: ", JSON.stringify(result));\n ', tsFuncName); } else { - callFunc = util.format('testNapi.%s(%s)\n ', tsFuncName, funcParamUse) + callFunc = util.format('testNapi.%s(%s)\n ', tsFuncName, funcParamUse); } - let func_test_replace = funcParamDefine + callFunc + hilogContent + let funcTestReplace = funcParamDefine + callFunc + hilogContent; // 替换test_case_name - let funcTestContent = replaceAll(abilityTestTemplete,'[func_direct_testCase]', func_test_replace) - funcTestContent = replaceAll(funcTestContent, '[test_case_name]', tsFuncName) - funcTestContent = replaceAll(funcTestContent, '[file_introduce_replace]', hFileName) - funcTestContent = replaceAll(funcTestContent, '[func_introduce_replace]', funcInfo.name) - funcTestContent = replaceAll(funcTestContent, '[input_introduce_replace]', funcInfoParams === ''? 'void': funcInfoParams) - funcTestContent = replaceAll(funcTestContent, '[output_introduce_replace]', funcInfo.retType) - - return funcTestContent + let funcTestContent = replaceAll(abilityTestTemplete, '[func_direct_testCase]', funcTestReplace); + funcTestContent = replaceAll(funcTestContent, '[test_case_name]', tsFuncName); + funcTestContent = replaceAll(funcTestContent, '[file_introduce_replace]', hFileName); + funcTestContent = replaceAll(funcTestContent, '[func_introduce_replace]', funcInfo.name); + funcTestContent = replaceAll(funcTestContent, '[input_introduce_replace]', funcInfoParams === '' ? 'void' : funcInfoParams); + funcTestContent = replaceAll(funcTestContent, '[output_introduce_replace]', funcInfo.retType); + + return funcTestContent; } function genInitTestfunc(funcInfo) { @@ -188,55 +188,55 @@ function getInterfaceDefine(testType, funcParamDefine, funcInfo, i, funcParamUse function replaceAll(s, sfrom, sto) { while (s.indexOf(sfrom) >= 0) { - s = s.replace(sfrom, sto) + s = s.replace(sfrom, sto); } return s; } function getTestType(type) { // 去掉const 和 * - type = type.replaceAll('const', '').replaceAll('*', '').trim() + type = type.replaceAll('const', '').replaceAll('*', '').trim(); if (type === 'uint32_t' || type === 'int32_t' || type === 'int16_t' || type === 'int64_t' || type === 'int' || type === 'size_t') { - return 'int' + return 'int'; } else if (type === 'double_t' || type === 'double' || type === 'float') { - return 'float' + return 'float'; } else if (type === 'bool') { - return 'bool' + return 'bool'; } else if (type === 'std::string' || type.indexOf('char') >= 0) { - return 'string' + return 'string'; } - return type + return type; } function getJsType(type) { // 去掉const 和 * - type = type.replaceAll('const', '').replaceAll('*', '').trim() + type = type.replaceAll('const', '').replaceAll('*', '').trim(); if (type === 'uint32_t' || type === 'int32_t' || type === 'int16_t' || type === 'int64_t' || type === 'int' || type === 'double_t' || type === 'double' || type === 'float' || type === 'size_t') { - return 'number' + return 'number'; } else if (type.indexOf('char') >= 0 || type === 'std::string') { - return 'string' + return 'string'; } else if (type === 'bool') { - return 'boolean' + return 'boolean'; } else if (type === 'void') { - return type + return type; } else { // 对象,在ts中定义为interface - return 'testNapi.' + type.replace('*', '').trim() + return 'testNapi.' + type.replace('*', '').trim(); } } function createParam(parseParamInfo) { let param = { - "name": "", - "type": "" + 'name': '', + 'type': '' } - param.name = parseParamInfo.name - param.type = parseParamInfo.type - return param + param.name = parseParamInfo.name; + param.type = parseParamInfo.type; + return param; } module.exports = { generateFuncTestCase -} \ No newline at end of file +}; \ No newline at end of file diff --git a/src/cli/h2dtscpp/src/src/tools/NapiLog.js b/src/cli/h2dtscpp/src/src/tools/NapiLog.js index b0d3f40740f85a399f13422df6b969fe627aec6b..d4a5cb8456cf70a219f2b7383bcd3a62bac7e488 100644 --- a/src/cli/h2dtscpp/src/src/tools/NapiLog.js +++ b/src/cli/h2dtscpp/src/src/tools/NapiLog.js @@ -64,7 +64,7 @@ NapiLog.getCallPath = function (callerFuncName = null) { let stackArray = new Error().stack.split('\n'); // 如果没有指定目标方法,默认在调用栈中查找当前方法"getCallPath"所在的帧 - let destFuncName = callerFuncName != null ? callerFuncName : 'getCallPath'; + let destFuncName = callerFuncName !== null && callerFuncName !== undefined ? callerFuncName : 'getCallPath'; for (let i = stackArray.length - 1; i >= 0; --i) { // debug模式和打包后的可执行程序调用栈函数名不同, 以NapiLog.log()方法为例: diff --git a/src/cli/h2dtscpp/src/src/tools/commonTemplete.js b/src/cli/h2dtscpp/src/src/tools/commonTemplete.js index f5144fdff968e32588d9d68fb8034dd2c8e6b384..3f5de8740ea320408d35603ca0023386696a6473 100644 --- a/src/cli/h2dtscpp/src/src/tools/commonTemplete.js +++ b/src/cli/h2dtscpp/src/src/tools/commonTemplete.js @@ -87,8 +87,8 @@ function generateBase(destDir, license, hFilePath) { let businessInclude = hFilePath.substring(index + 1, hFilePath.length); commonH = replaceAll(commonH, '[business_include_replace]', businessInclude); commonCpp = replaceAll(commonCpp, '[include_name]', hFileName); - writeFile(re.pathJoin(destDir, hFileName + 'common.h'), null != license ? (license + '\n' + commonH) : commonH); - writeFile(re.pathJoin(destDir, hFileName + 'common.cpp'), null != license ? (license + '\n' + commonCpp) : commonCpp); + writeFile(re.pathJoin(destDir, hFileName + 'common.h'), null !== license && undefined !== license ? (license + '\n' + commonH) : commonH); + writeFile(re.pathJoin(destDir, hFileName + 'common.cpp'), null !== license && undefined !== license ? (license + '\n' + commonCpp) : commonCpp); } function replaceAll(s, sfrom, sto) { diff --git a/src/cli/h2dtscpp/src/src/tools/re.js b/src/cli/h2dtscpp/src/src/tools/re.js index 76729bf18282a61799145c2837eb091593e9b8d0..5b1657bdfac1f9d760562e5b6dda5e0b1da4677c 100644 --- a/src/cli/h2dtscpp/src/src/tools/re.js +++ b/src/cli/h2dtscpp/src/src/tools/re.js @@ -18,7 +18,9 @@ function search(ss, data) { ss = replaceAll(ss, '\\.', '\\.'); let reg = new RegExp(ss); let tt = reg.exec(data); - if (tt === null || tt === undefined) { return null; } + if (tt === null || tt === undefined) { + return null; + } let ret = { 'regs': [] }; for (let i = 0; i < tt.length; i++) { let p = data.indexOf(tt[i]); @@ -35,7 +37,9 @@ function search(ss, data) { function match(ss, data) { let tt = search(ss, data); - if ((tt !== null && tt !== undefined) && tt.regs[0][0] === 0) { return tt; } + if ((tt !== null && tt !== undefined) && tt.regs[0][0] === 0) { + return tt; + } return null; } diff --git a/src/cli/h2sa/src/src/gen/analyze.js b/src/cli/h2sa/src/src/gen/analyze.js index 14da2e1a4d15a2de1bda46e4bc86d8853d63e34f..f23e26b592f03cc487ba2980ccd32abcfd6bd2ca 100644 --- a/src/cli/h2sa/src/src/gen/analyze.js +++ b/src/cli/h2sa/src/src/gen/analyze.js @@ -41,7 +41,7 @@ function parseFileAll(hFilePath) { } function analyzeNameSpace(rootInfo, parseResult) { - if (parseResult.namespaces.length == 0) { + if (parseResult.namespaces.length === 0) { return; } let lastNameSpace = parseResult.namespaces[parseResult.namespaces.length - 1]; diff --git a/src/cli/h2sa/src/src/gen/generate.js b/src/cli/h2sa/src/src/gen/generate.js index 55040b801f1943bb6672ce5f49c73aa8c4e90099..e273e942774fc5a2569700e7d2514c417c8c5a65 100644 --- a/src/cli/h2sa/src/src/gen/generate.js +++ b/src/cli/h2sa/src/src/gen/generate.js @@ -220,7 +220,7 @@ function saveClassSrc(classInfo) { return; } for (let i = 0; i < dependSrcList.length; ++i) { - if (dependSrcList[i].name === classInfo.name){ + if (dependSrcList[i].name === classInfo.name) { // 该class的定义源码已经保存过了。 return; } diff --git a/src/cli/h2sa/src/src/gen/main.js b/src/cli/h2sa/src/src/gen/main.js index d02ba33937c0a2a56c09a7eefb42fe0faf7f5e4a..76ce99407766b74bbf1a8ee7f3582c1632140594 100644 --- a/src/cli/h2sa/src/src/gen/main.js +++ b/src/cli/h2sa/src/src/gen/main.js @@ -67,21 +67,25 @@ function readDirFiles() { if (i === files.length) { return; } - fs.stat(path.join(pathDir + '', files[i]), function (err, data) { - if (err) { - NapiLog.logError('read file error' + err); - return; - } - if (data.isFile()) { - let fileName = files[i]; - checkGenerate(pathDir + '/' + fileName); - } - iterator(i + 1); - }); + readDirFilesFunc(files, i, iterator); })(0); }); } +function readDirFilesFunc(files, i, iterator) { + fs.stat(path.join(pathDir + '', files[i]), function (err, data) { + if (err) { + NapiLog.logError('read file error' + err); + return; + } + if (data.isFile()) { + let fileName = files[i]; + checkGenerate(pathDir + '/' + fileName); + } + iterator(i + 1); + }); +} + function wirte2Disk(fileInfo, destDir) { let filePath = re.pathJoin(destDir, fileInfo.name); writeFile(filePath, fileInfo.content); diff --git a/src/cli/h2sa/src/src/tools/common.js b/src/cli/h2sa/src/src/tools/common.js index 1034342160392c13ee9e52cc9ad774585b31fc11..5cb0e87cddf38881627ed08800a7f817f05f4cd0 100644 --- a/src/cli/h2sa/src/src/tools/common.js +++ b/src/cli/h2sa/src/src/tools/common.js @@ -104,7 +104,7 @@ AllParseFileList.findClassByName = function (destClassName) { class ProcessingClassList { } ProcessingClassList.classes_ = []; ProcessingClassList.push = function (classObj) { - if (this.findByName(classObj.className) != null) { + if (this.findByName(classObj.className) !== null) { // 已存在的class不重复添加 return; } diff --git a/src/cli/h2sa/src/src/tools/re.js b/src/cli/h2sa/src/src/tools/re.js index e26f4b287aa4eaf3e4d83a9137fe3a7634bbc99d..c4b6165736caf4e93d54696057c58fa7c61852aa 100644 --- a/src/cli/h2sa/src/src/tools/re.js +++ b/src/cli/h2sa/src/src/tools/re.js @@ -18,17 +18,17 @@ function search(ss, data) { ss = replaceAll(ss, '\\.', '\\.'); let reg = new RegExp(ss); let tt = reg.exec(data); - if (tt == null) { + if (tt === null || tt === undefined) { return null; } let ret = { 'regs': [] }; for (let i = 0; i < tt.length; i++) { let p = data.indexOf(tt[i]); - if (tt[i] == null) { - ret['regs'].push([-1, -1]); + if (tt[i] === null || tt[i] === undefined) { + ret.regs.push([-1, -1]); } else { - ret['regs'].push([p, p + tt[i].length]); + ret.regs.push([p, p + tt[i].length]); } } @@ -37,7 +37,7 @@ function search(ss, data) { function match(ss, data) { let tt = search(ss, data); - if (tt !== null && tt !== undefined && tt.regs[0][0] == 0) { + if (tt !== null && tt !== undefined && tt.regs[0][0] === 0) { return tt; } return null; diff --git a/src/tool/api/api_scan_vs_plugin/src/gen/tools/VsPluginLog.js b/src/tool/api/api_scan_vs_plugin/src/gen/tools/VsPluginLog.js index bf58a703f6fed77878ce95429e152b286e7f8dd8..a2d236bc722344f5901322a3dba68d70bf232b87 100644 --- a/src/tool/api/api_scan_vs_plugin/src/gen/tools/VsPluginLog.js +++ b/src/tool/api/api_scan_vs_plugin/src/gen/tools/VsPluginLog.js @@ -50,7 +50,7 @@ function recordLog(lev, ...args) { let dataStr = getDateString(); let detail = args.join(' '); saveLog(dataStr, LEV_STR[lev], detail); - if (lev == VsPluginLog.LEV_ERROR) { + if (lev === VsPluginLog.LEV_ERROR) { logResultMessage = [false, detail]; } if (logLevel < lev) { diff --git a/src/tool/api/api_scan_vs_plugin/src/gen/tools/VsPluginRe.js b/src/tool/api/api_scan_vs_plugin/src/gen/tools/VsPluginRe.js index f127f4b254cf0a827bdaf69aba4316046435260a..558d38ff62729228b8125c6405070cdce2d5df1f 100644 --- a/src/tool/api/api_scan_vs_plugin/src/gen/tools/VsPluginRe.js +++ b/src/tool/api/api_scan_vs_plugin/src/gen/tools/VsPluginRe.js @@ -18,17 +18,17 @@ function search(ss, data) { ss = replaceAll(ss, '\\.', '\\.'); let reg = new RegExp(ss); let tt = reg.exec(data); - if (tt == null) { - return null + if (tt === null || tt === undefined) { + return null; }; let ret = { 'regs': [] }; for (let i = 0; i < tt.length; i++) { let p = data.indexOf(tt[i]); - if (tt[i] == null) { - ret['regs'].push([-1, -1]); + if (tt[i] === null || tt[i] === undefined) { + ret.regs.push([-1, -1]); } else { - ret['regs'].push([p, p + tt[i].length]); + ret.regs.push([p, p + tt[i].length]); } } @@ -37,7 +37,7 @@ function search(ss, data) { function match(ss, data) { let tt = search(ss, data); - if (tt != null && tt.regs[0][0] == 0) { + if (tt !== null && tt.regs[0][0] === 0) { return tt; } return null; diff --git a/src/tool/api/api_scan_vs_plugin/src/gen/tools/VsPluginTool.js b/src/tool/api/api_scan_vs_plugin/src/gen/tools/VsPluginTool.js index 794a6a76910b77e174366a2ccc80805b679f7736..e19bc6feef64bb9ff8da5eebb117f4e150219ae6 100644 --- a/src/tool/api/api_scan_vs_plugin/src/gen/tools/VsPluginTool.js +++ b/src/tool/api/api_scan_vs_plugin/src/gen/tools/VsPluginTool.js @@ -31,11 +31,11 @@ function replaceAll(s, sfrom, sto) { } function detectPlatform() { - if (os.type() == 'Windows_NT') { + if (os.type() === 'Windows_NT') { return 'win'; - } else if (os.type() == 'Darwin') { + } else if (os.type() === 'Darwin') { return 'mac'; - } else if (os.type() == 'Linux') { + } else if (os.type() === 'Linux') { return 'Linux'; } else { return ''; diff --git a/src/tool/api/src/scan.js b/src/tool/api/src/scan.js index 530b1fb42987aa1ab7ee3c53b7bc71a39595153e..36249e5f7cf030d288a5cdde8669af40c0c45ed4 100644 --- a/src/tool/api/src/scan.js +++ b/src/tool/api/src/scan.js @@ -138,8 +138,8 @@ function collectFeature(pth) { collectFeature(distDir); let result = { - function: intersection(androidFeature['function'], projectFeature['function']), - include: intersection(androidFeature['include'], projectFeature['include']), + function: intersection(androidFeature.function, projectFeature.function), + include: intersection(androidFeature.include, projectFeature.include), }; console.log(result); ///////////////////////////////save to excel diff --git a/src/vscode_plugin/cmake2gn/gn_vs_plugin/src/extension.js b/src/vscode_plugin/cmake2gn/gn_vs_plugin/src/extension.js index a7bd1d533bf5c42a6d88909b5f3e8b381f521bb6..054360e44194f5f58de2e745702f8d2d18db2a4f 100644 --- a/src/vscode_plugin/cmake2gn/gn_vs_plugin/src/extension.js +++ b/src/vscode_plugin/cmake2gn/gn_vs_plugin/src/extension.js @@ -85,7 +85,7 @@ function genGnCommand(outputCodeDir, originCodeDir, inputScriptDir, scriptType, transplantDir, subsystemName, componentName, compileOptions) { let command = exeFilePath + ' -o ' + outputCodeDir + ' -p ' + originCodeDir + ' -f ' + inputScriptDir + ' -t ' + scriptType + ' -s ' + subsystemName + ' -m ' + componentName + ' -d ' + transplantDir; - if (compileOptions != '') { + if (compileOptions !== '') { command += ' -a ' + '\'' + compileOptions + '\''; } diff --git a/src/vscode_plugin/cmake2gn/gn_vs_plugin/src/gen/tools/VsPluginLog.js b/src/vscode_plugin/cmake2gn/gn_vs_plugin/src/gen/tools/VsPluginLog.js index bf58a703f6fed77878ce95429e152b286e7f8dd8..a2d236bc722344f5901322a3dba68d70bf232b87 100644 --- a/src/vscode_plugin/cmake2gn/gn_vs_plugin/src/gen/tools/VsPluginLog.js +++ b/src/vscode_plugin/cmake2gn/gn_vs_plugin/src/gen/tools/VsPluginLog.js @@ -50,7 +50,7 @@ function recordLog(lev, ...args) { let dataStr = getDateString(); let detail = args.join(' '); saveLog(dataStr, LEV_STR[lev], detail); - if (lev == VsPluginLog.LEV_ERROR) { + if (lev === VsPluginLog.LEV_ERROR) { logResultMessage = [false, detail]; } if (logLevel < lev) { diff --git a/src/vscode_plugin/cmake2gn/gn_vs_plugin/src/gen/tools/VsPluginRe.js b/src/vscode_plugin/cmake2gn/gn_vs_plugin/src/gen/tools/VsPluginRe.js index 4eed0af99bdcfccc1d95a42df6febb8589776f6b..20fd6264a8cc1a3662ed1ff2bce8ab6ab49d1c13 100644 --- a/src/vscode_plugin/cmake2gn/gn_vs_plugin/src/gen/tools/VsPluginRe.js +++ b/src/vscode_plugin/cmake2gn/gn_vs_plugin/src/gen/tools/VsPluginRe.js @@ -18,15 +18,17 @@ function search(ss, data) { ss = replaceAll(ss, '\\.', '\\.'); let reg = new RegExp(ss); let tt = reg.exec(data); - if (tt == null) return null; + if (tt === null || tt === undefined) { + return null; + } let ret = { 'regs': [] }; for (let i = 0; i < tt.length; i++) { let p = data.indexOf(tt[i]); - if (tt[i] == null) { - ret['regs'].push([-1, -1]); + if (tt[i] === null) { + ret.regs.push([-1, -1]); } else { - ret['regs'].push([p, p + tt[i].length]); + ret.regs.push([p, p + tt[i].length]); } } @@ -35,7 +37,9 @@ function search(ss, data) { function match(ss, data) { let tt = search(ss, data); - if (tt != null && tt.regs[0][0] == 0) return tt; + if (tt !== null && tt.regs[0][0] === 0) { + return tt; + } return null; } diff --git a/src/vscode_plugin/cmake2gn/gn_vs_plugin/src/gen/tools/VsPluginTool.js b/src/vscode_plugin/cmake2gn/gn_vs_plugin/src/gen/tools/VsPluginTool.js index 552b623f015c2edbe8d892f698332247524aef51..bb33bf14fc002b0619570c776335cb52c5887b2c 100644 --- a/src/vscode_plugin/cmake2gn/gn_vs_plugin/src/gen/tools/VsPluginTool.js +++ b/src/vscode_plugin/cmake2gn/gn_vs_plugin/src/gen/tools/VsPluginTool.js @@ -31,11 +31,11 @@ function replaceAll(s, sfrom, sto) { } function detectPlatform() { - if (os.type() == 'Windows_NT') { + if (os.type() === 'Windows_NT') { return 'win'; - } else if (os.type() == 'Darwin') { + } else if (os.type() === 'Darwin') { return 'mac'; - } else if (os.type() == 'Linux') { + } else if (os.type() === 'Linux') { return 'Linux'; } } diff --git a/src/vscode_plugin/dts2cpp/napi_vs_plugin/src/gen/tools/VsPluginLog.js b/src/vscode_plugin/dts2cpp/napi_vs_plugin/src/gen/tools/VsPluginLog.js index 75734534770701fbabad73c8db8d8274e0c96ad1..e3d6f097bba04a04573f77fad496dcc7de46e66e 100644 --- a/src/vscode_plugin/dts2cpp/napi_vs_plugin/src/gen/tools/VsPluginLog.js +++ b/src/vscode_plugin/dts2cpp/napi_vs_plugin/src/gen/tools/VsPluginLog.js @@ -50,10 +50,12 @@ function recordLog(lev, ...args) { let dataStr = getDateString(); let detail = args.join(' '); saveLog(dataStr, LEV_STR[lev], detail); - if (lev == VsPluginLog.LEV_ERROR) { + if (lev === VsPluginLog.LEV_ERROR) { logResultMessage = [false, detail]; } - if (logLevel < lev) return; + if (logLevel < lev) { + return; + } VsPluginLog.logInfo(dataStr + LEV_STR[lev] + detail); } diff --git a/src/vscode_plugin/dts2cpp/napi_vs_plugin/src/gen/tools/VsPluginRe.js b/src/vscode_plugin/dts2cpp/napi_vs_plugin/src/gen/tools/VsPluginRe.js index 4eed0af99bdcfccc1d95a42df6febb8589776f6b..4fdd451df84614b72e858aaff87a2845cb383464 100644 --- a/src/vscode_plugin/dts2cpp/napi_vs_plugin/src/gen/tools/VsPluginRe.js +++ b/src/vscode_plugin/dts2cpp/napi_vs_plugin/src/gen/tools/VsPluginRe.js @@ -18,15 +18,16 @@ function search(ss, data) { ss = replaceAll(ss, '\\.', '\\.'); let reg = new RegExp(ss); let tt = reg.exec(data); - if (tt == null) return null; + if (tt === null || tt === undefined) { + return null; + } let ret = { 'regs': [] }; for (let i = 0; i < tt.length; i++) { let p = data.indexOf(tt[i]); - if (tt[i] == null) { - ret['regs'].push([-1, -1]); - } - else { - ret['regs'].push([p, p + tt[i].length]); + if (tt[i] === null || tt[i] === undefined) { + ret.regs.push([-1, -1]); + } else { + ret.regs.push([p, p + tt[i].length]); } } @@ -35,7 +36,9 @@ function search(ss, data) { function match(ss, data) { let tt = search(ss, data); - if (tt != null && tt.regs[0][0] == 0) return tt; + if (tt !== null && tt.regs[0][0] === 0) { + return tt; + } return null; } diff --git a/src/vscode_plugin/dts2cpp/napi_vs_plugin/src/gen/tools/VsPluginTool.js b/src/vscode_plugin/dts2cpp/napi_vs_plugin/src/gen/tools/VsPluginTool.js index 4cdfaeeedc50bd265b7deb1d4c601c459795489f..4d7d51aee09ccd5d9c93643b498fca11d9d6b158 100644 --- a/src/vscode_plugin/dts2cpp/napi_vs_plugin/src/gen/tools/VsPluginTool.js +++ b/src/vscode_plugin/dts2cpp/napi_vs_plugin/src/gen/tools/VsPluginTool.js @@ -31,11 +31,11 @@ function replaceAll(s, sfrom, sto) { } function detectPlatform() { - if (os.type() == 'Windows_NT') { + if (os.type() === 'Windows_NT') { return 'win'; - } else if (os.type() == 'Darwin') { + } else if (os.type() === 'Darwin') { return 'mac'; - } else if (os.type() == 'Linux') { + } else if (os.type() === 'Linux') { return 'Linux'; } } diff --git a/src/vscode_plugin/h2dts/ts_vs_plugin/src/gen/tools/VsPluginLog.js b/src/vscode_plugin/h2dts/ts_vs_plugin/src/gen/tools/VsPluginLog.js index 75734534770701fbabad73c8db8d8274e0c96ad1..e3d6f097bba04a04573f77fad496dcc7de46e66e 100644 --- a/src/vscode_plugin/h2dts/ts_vs_plugin/src/gen/tools/VsPluginLog.js +++ b/src/vscode_plugin/h2dts/ts_vs_plugin/src/gen/tools/VsPluginLog.js @@ -50,10 +50,12 @@ function recordLog(lev, ...args) { let dataStr = getDateString(); let detail = args.join(' '); saveLog(dataStr, LEV_STR[lev], detail); - if (lev == VsPluginLog.LEV_ERROR) { + if (lev === VsPluginLog.LEV_ERROR) { logResultMessage = [false, detail]; } - if (logLevel < lev) return; + if (logLevel < lev) { + return; + } VsPluginLog.logInfo(dataStr + LEV_STR[lev] + detail); } diff --git a/src/vscode_plugin/h2dts/ts_vs_plugin/src/gen/tools/VsPluginRe.js b/src/vscode_plugin/h2dts/ts_vs_plugin/src/gen/tools/VsPluginRe.js index 0c2f4f566681046c30cd033b1521592d89adc563..5279d00673f380ebda56588c076bf496cef24520 100644 --- a/src/vscode_plugin/h2dts/ts_vs_plugin/src/gen/tools/VsPluginRe.js +++ b/src/vscode_plugin/h2dts/ts_vs_plugin/src/gen/tools/VsPluginRe.js @@ -18,15 +18,16 @@ function search(ss, data) { ss = replaceAll(ss, '\\.', '\\.'); let reg = new RegExp(ss); let tt = reg.exec(data); - if (tt == null) return null; + if (tt === null || tt === undefined) { + return null; + } let ret = { 'regs': [] }; for (let i = 0; i < tt.length; i++) { let p = data.indexOf(tt[i]); - if (tt[i] == null) { - ret['regs'].push([-1, -1]); - } - else { - ret['regs'].push([p, p + tt[i].length]); + if (tt[i] === null || tt[i] === undefined) { + ret.regs.push([-1, -1]); + } else { + ret.regs.push([p, p + tt[i].length]); } } @@ -35,7 +36,9 @@ function search(ss, data) { function match(ss, data) { let tt = search(ss, data); - if (tt != null && tt.regs[0][0] == 0) return tt; + if (tt !== null && tt.regs[0][0] === 0) { + return tt; + } return null; } diff --git a/src/vscode_plugin/h2dts/ts_vs_plugin/src/gen/tools/VsPluginTool.js b/src/vscode_plugin/h2dts/ts_vs_plugin/src/gen/tools/VsPluginTool.js index 4cdfaeeedc50bd265b7deb1d4c601c459795489f..4d7d51aee09ccd5d9c93643b498fca11d9d6b158 100644 --- a/src/vscode_plugin/h2dts/ts_vs_plugin/src/gen/tools/VsPluginTool.js +++ b/src/vscode_plugin/h2dts/ts_vs_plugin/src/gen/tools/VsPluginTool.js @@ -31,11 +31,11 @@ function replaceAll(s, sfrom, sto) { } function detectPlatform() { - if (os.type() == 'Windows_NT') { + if (os.type() === 'Windows_NT') { return 'win'; - } else if (os.type() == 'Darwin') { + } else if (os.type() === 'Darwin') { return 'mac'; - } else if (os.type() == 'Linux') { + } else if (os.type() === 'Linux') { return 'Linux'; } } diff --git a/src/vscode_plugin/h2sa/service_vs_plugin/src/gen/tools/VsPluginLog.js b/src/vscode_plugin/h2sa/service_vs_plugin/src/gen/tools/VsPluginLog.js index 75734534770701fbabad73c8db8d8274e0c96ad1..e3d6f097bba04a04573f77fad496dcc7de46e66e 100644 --- a/src/vscode_plugin/h2sa/service_vs_plugin/src/gen/tools/VsPluginLog.js +++ b/src/vscode_plugin/h2sa/service_vs_plugin/src/gen/tools/VsPluginLog.js @@ -50,10 +50,12 @@ function recordLog(lev, ...args) { let dataStr = getDateString(); let detail = args.join(' '); saveLog(dataStr, LEV_STR[lev], detail); - if (lev == VsPluginLog.LEV_ERROR) { + if (lev === VsPluginLog.LEV_ERROR) { logResultMessage = [false, detail]; } - if (logLevel < lev) return; + if (logLevel < lev) { + return; + } VsPluginLog.logInfo(dataStr + LEV_STR[lev] + detail); } diff --git a/src/vscode_plugin/h2sa/service_vs_plugin/src/gen/tools/VsPluginRe.js b/src/vscode_plugin/h2sa/service_vs_plugin/src/gen/tools/VsPluginRe.js index 4eed0af99bdcfccc1d95a42df6febb8589776f6b..dd782a7e7836064500a3b5238e71939d1d8f68ff 100644 --- a/src/vscode_plugin/h2sa/service_vs_plugin/src/gen/tools/VsPluginRe.js +++ b/src/vscode_plugin/h2sa/service_vs_plugin/src/gen/tools/VsPluginRe.js @@ -18,15 +18,17 @@ function search(ss, data) { ss = replaceAll(ss, '\\.', '\\.'); let reg = new RegExp(ss); let tt = reg.exec(data); - if (tt == null) return null; + if (tt === null || tt === undefined) { + return null; + } let ret = { 'regs': [] }; for (let i = 0; i < tt.length; i++) { let p = data.indexOf(tt[i]); - if (tt[i] == null) { - ret['regs'].push([-1, -1]); + if (tt[i] === null || tt[i] === undefined) { + ret.regs.push([-1, -1]); } else { - ret['regs'].push([p, p + tt[i].length]); + ret.regs.push([p, p + tt[i].length]); } } @@ -35,7 +37,9 @@ function search(ss, data) { function match(ss, data) { let tt = search(ss, data); - if (tt != null && tt.regs[0][0] == 0) return tt; + if (tt !== null && tt.regs[0][0] == 0) { + return tt; + } return null; } diff --git a/src/vscode_plugin/h2sa/service_vs_plugin/src/gen/tools/VsPluginTool.js b/src/vscode_plugin/h2sa/service_vs_plugin/src/gen/tools/VsPluginTool.js index 348d90b57b5ddae8641aa6de0ee54c6595f63c5f..681fff06365d1817b7823a9dda90196e27ae4ffa 100644 --- a/src/vscode_plugin/h2sa/service_vs_plugin/src/gen/tools/VsPluginTool.js +++ b/src/vscode_plugin/h2sa/service_vs_plugin/src/gen/tools/VsPluginTool.js @@ -31,11 +31,11 @@ function replaceAll(s, sfrom, sto) { } function detectPlatform() { - if (os.type() == 'Windows_NT') { + if (os.type() === 'Windows_NT') { return 'win'; - } else if (os.type() == 'Darwin') { + } else if (os.type() === 'Darwin') { return 'mac'; - } else if (os.type() == 'Linux') { + } else if (os.type() === 'Linux') { return 'Linux'; } } diff --git a/test/unittest/analyze.test.js b/test/unittest/analyze.test.js index f307be4f417165c481c5314e794274ed37981c96..26fb421ae41f264b722cc0b26632bb3304262402 100755 --- a/test/unittest/analyze.test.js +++ b/test/unittest/analyze.test.js @@ -1,35 +1,35 @@ /* * Copyright (c) 2022 Shenzhen Kaihong Digital Industry Development Co., Ltd. -* Licensed under the Apache License, Version 2.0 (the "License"); +* Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, +* distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ -let genDir = "../../src/gen/" -const re = require(genDir + "tools/re"); -const { analyzeFile } = require(genDir + "analyze"); -const { analyzeEnum, analyzeEnumResult } = require(genDir + "analyze/enum"); +let genDir = '../../src/gen/' +const re = require(genDir + 'tools/re'); +const { analyzeFile } = require(genDir + 'analyze'); +const { analyzeEnum, analyzeEnumResult } = require(genDir + 'analyze/enum'); const { analyzeFunction, analyzeSubInterface, getFuncParaType, analyzeFuncNoNameInterface, - analyseSubReturn } = require(genDir + "analyze/function"); -const { analyzeInterface } = require(genDir + "analyze/interface"); -const { analyzeType, analyzeType2 } = require(genDir + "analyze/type"); -const { analyzeNamespace, parseNamespace } = require(genDir + "analyze/namespace"); -const { parseEnum, parseFunction, parseInterface, parseClass, parseType } = require(genDir + "analyze/namespace"); -const { analyzeParams } = require(genDir + "analyze/params"); -const { analyzeReturn } = require(genDir + "analyze/return"); -const { readFile } = require("../../src/gen/tools/FileRW"); - -var assert = require("assert"); + analyseSubReturn } = require(genDir + 'analyze/function'); +const { analyzeInterface } = require(genDir + 'analyze/interface'); +const { analyzeType, analyzeType2 } = require(genDir + 'analyze/type'); +const { analyzeNamespace, parseNamespace } = require(genDir + 'analyze/namespace'); +const { parseEnum, parseFunction, parseInterface, parseClass, parseType } = require(genDir + 'analyze/namespace'); +const { analyzeParams } = require(genDir + 'analyze/params'); +const { analyzeReturn } = require(genDir + 'analyze/return'); +const { readFile } = require('../../src/gen/tools/FileRW'); + +var assert = require('assert'); var correctResult; function before() { - let data = readFile("test/unittest/result.json") + let data = readFile('test/unittest/result.json'); if (data) { correctResult = JSON.parse(data); } @@ -41,11 +41,11 @@ describe('Analyze', function () { }); it('test gen/analyze analyzeFile', function () { - let structOfTs = analyzeFile("test/unittest/@ohos.input_sample.d.ts"); - let retJson = JSON.stringify(structOfTs) - let retNameSpace = retJson.search("\"name\":\"napitest\""); + let structOfTs = analyzeFile('test/unittest/@ohos.input_sample.d.ts'); + let retJson = JSON.stringify(structOfTs); + let retNameSpace = retJson.search('\'name\':\'napitest\''); assert.strictEqual(retNameSpace > 0, true); - let retLicense = retJson.search("Copyright"); + let retLicense = retJson.search('Copyright'); assert.strictEqual(retLicense > 0, true); }); @@ -62,19 +62,19 @@ describe('Analyze', function () { partOfParam(); it('test gen/analyze/return analyzeReturn', function () { - let ret = analyzeReturn("string"); + let ret = analyzeReturn('string'); assert.strictEqual(ret[0], 'string'); assert.strictEqual(ret[1], false); - let ret2 = analyzeReturn("boolean"); + let ret2 = analyzeReturn('boolean'); assert.strictEqual(ret2[0], 'boolean'); - assert.strictEqual(ret2[1], false); + assert.strictEqual(ret2[1], false); }); it('test gen/analyze/return analyzeReturn', function () { - let ret = analyzeReturn("Promise"); + let ret = analyzeReturn('Promise'); assert.strictEqual(ret[0], 'Promise'); assert.strictEqual(ret[1], true); - let ret2 = analyzeReturn("Promise"); + let ret2 = analyzeReturn('Promise'); assert.strictEqual(ret2[0], 'Promise'); assert.strictEqual(ret2[1], true); }); @@ -84,44 +84,44 @@ function partOfEnum() { it('test gen/analyze/enum analyzeStringEnum', function () { let data = '\nDENIED = "-1"'; let retJson = JSON.stringify(analyzeEnum(data)); - let enumValueType = retJson.search("\"enumValueType\":1"); + let enumValueType = retJson.search('\'enumValueType\':1'); assert.strictEqual(enumValueType > 0, true); - let element = retJson.search("\"name\":\"DENIED\",\"value\":\"-1\",\"type\":\"string\""); + let element = retJson.search('\'name\':\'DENIED\',\'value\':\'-1\',\'type\':\'string\''); assert.strictEqual(element > 0, true); }); it('test gen/analyze/enum analyzeNumberEnum', function () { let data = '\nFAULT = 1,\nSTATISTIC = 2,\nSECURITY = 3,\nBEHAVIOR = 4,\n'; let retJson = JSON.stringify(analyzeEnum(data)); - let enumValueType = retJson.search("\"enumValueType\":0"); + let enumValueType = retJson.search('\'enumValueType\':0'); assert.strictEqual(enumValueType > 0, true); - let element = retJson.search("\"name\":\"FAULT\",\"value\":\"1\",\"type\":\"NUMBER_TYPE_"); + let element = retJson.search('\'name\':\'FAULT\',\'value\':\'1\',\'type\':\'NUMBER_TYPE_'); assert.strictEqual(element > 0, true); - let retFunc = retJson.substring(retJson.search("function") - 1, retJson.search("function") + 12); - assert.strictEqual(retFunc, "\"function\":[]"); + let retFunc = retJson.substring(retJson.search('function') - 1, retJson.search('function') + 12); + assert.strictEqual(retFunc, '\'function\':[]'); }); it('test gen/analyze/enum analyzeEnumStringResult', function () { let result = { - element: [{ name: "STATUS0", value: "0", type: "string" }], + element: [{ name: 'STATUS0', value: '0', type: 'string' }], function: [], enumValueType: 0 - } - let retJson = JSON.stringify(analyzeEnumResult(result, 'STATUS0 = "1"', '0')) - let enumValueType = retJson.search("\"enumValueType\":1"); + }; + let retJson = JSON.stringify(analyzeEnumResult(result, 'STATUS0 = "1"', '0')); + let enumValueType = retJson.search('\'enumValueType\':1'); assert.strictEqual(enumValueType > 0, true); }); it('test gen/analyze/enum analyzeEnumNumberResult', function () { - let result = { - element: [{ name: "STATUS1", value: "0", type: "NUMBER_TYPE_1" }], - function: [], - enumValueType: 0 - } - let retJson = JSON.stringify(analyzeEnumResult(result, 'STATUS1 = 1', '0')) - let enumValueType = retJson.search("\"enumValueType\":0"); - assert.strictEqual(enumValueType > 0, true); - }); + let result = { + element: [{ name: 'STATUS1', value: '0', type: 'NUMBER_TYPE_1' }], + function: [], + enumValueType: 0 + }; + let retJson = JSON.stringify(analyzeEnumResult(result, 'STATUS1 = 1', '0')); + let enumValueType = retJson.search('\'enumValueType\':0'); + assert.strictEqual(enumValueType > 0, true); + }); } function partOfFunction(correctResult) { @@ -137,11 +137,11 @@ function partOfFunction(correctResult) { interface: [], class: [], namespace: [], - } - let values = "fp3: {nm: string, isTrue: boolean}"; + }; + let values = 'fp3: {nm: string, isTrue: boolean}'; let retJson = JSON.stringify(analyzeFuncNoNameInterface(data, values)); - retJson = re.replaceAll(retJson,"AUTO_INTERFACE_[0-9]+","AUTO_INTERFACE") - assert.strictEqual(retJson, "{\"interfaceName\":\"AUTO_INTERFACE\",\"values\":\"fp3:AUTO_INTERFACE\"}"); + retJson = re.replaceAll(retJson, 'AUTO_INTERFACE_[0-9]+', 'AUTO_INTERFACE'); + assert.strictEqual(retJson, '{\'interfaceName\':\'AUTO_INTERFACE\',\'values\':\'fp3:AUTO_INTERFACE\'}'); }); it('test gen/analyze/function analyseSubReturn', function () { @@ -154,18 +154,18 @@ function partOfFunction(correctResult) { interface: [], class: [], namespace: [], - } - let ret = "{read:number;written:number}"; + }; + let ret = '{read:number;written:number}'; let retJson = JSON.stringify(analyseSubReturn(ret, data)); - retJson = re.replaceAll(retJson,"AUTO_INTERFACE_[0-9]+","AUTO_INTERFACE") - assert.strictEqual(retJson, "\"AUTO_INTERFACE\""); + retJson = re.replaceAll(retJson, 'AUTO_INTERFACE_[0-9]+', 'AUTO_INTERFACE'); + assert.strictEqual(retJson, '\'AUTO_INTERFACE\''); }); it('test gen/analyze/function getFuncParaType', function () { let data = 'if_direct(v1: string, v2: boolean): string;'; let v = { name: 'v1', type: 'string' }; - let retJson = JSON.stringify(getFuncParaType(v, '', data)) - assert.strictEqual(retJson, "{\"name\":\"v1\",\"type\":\"string\"}"); + let retJson = JSON.stringify(getFuncParaType(v, '', data)); + assert.strictEqual(retJson, '{\'name\':\'v1\',\'type\':\'string\'}'); }); partOfFunctionTwo(); @@ -173,178 +173,178 @@ function partOfFunction(correctResult) { function partOfFunctionOne(correctResult) { it('test gen/analyze/function analyzeSubInterface', function () { - let data = correctResult['ParamIn']['analyzeSubInterface']; - let retJson = JSON.stringify(analyzeSubInterface(data)) - let retNum = retJson.search("{\"name\":\"num1\",\"type\":\"NUMBER_TYPE_"); + let data = correctResult.ParamIn.analyzeSubInterface; + let retJson = JSON.stringify(analyzeSubInterface(data)); + let retNum = retJson.search('{\'name\':\'num1\',\'type\':\'NUMBER_TYPE_'); assert.strictEqual(retNum > 0, true); - let retString = retJson.search("{\"name\":\"str1\",\"type\":\"string\"}"); + let retString = retJson.search('{\'name\':\'str1\',\'type\':\'string\'}'); assert.strictEqual(retString > 0, true); - let retBoolean = retJson.search("{\"name\":\"bool1\",\"type\":\"boolean\"}"); + let retBoolean = retJson.search('{\'name\':\'bool1\',\'type\':\'boolean\'}'); assert.strictEqual(retBoolean > 0, true); - let retArrayNum = retJson.search("{\"name\":\"nums\",\"type\":\"Array 0, true); - let retArrayString = retJson.search("{\"name\":\"strs\",\"type\":\"Array\"}"); + let retArrayString = retJson.search('{\'name\':\'strs\',\'type\':\'Array\'}'); assert.strictEqual(retArrayString > 0, true); - let retArrayBoolean = retJson.search("{\"name\":\"bools\",\"type\":\"Array\"}"); + let retArrayBoolean = retJson.search('{\'name\':\'bools\',\'type\':\'Array\'}'); assert.strictEqual(retArrayBoolean > 0, true); - let retMapNumber = retJson.search("{\"name\":\"mapNum\",\"type\":\"Map 0, true); - let retMapString = retJson.search("{\"name\":\"mapStr\",\"type\":\"Map\"}"); + let retMapString = retJson.search('{\'name\':\'mapStr\',\'type\':\'Map\'}'); assert.strictEqual(retMapString > 0, true); - let retMapBoolean = retJson.search("{\"name\":\"mapBool\",\"type\":\"Map\"}"); + let retMapBoolean = retJson.search('{\'name\':\'mapBool\',\'type\':\'Map\'}'); assert.strictEqual(retMapBoolean > 0, true); - let retMapNumber2 = retJson.indexOf("\"name\":\"mapNum2\",\"type\":\"{[key: string]: NUMBER_TYPE_"); + let retMapNumber2 = retJson.indexOf('\'name\':\'mapNum2\',\'type\':\'{[key: string]: NUMBER_TYPE_'); assert.strictEqual(retMapNumber2 > 0, true); - let strictEqual = retJson.indexOf("\"name\":\"mapStr2\",\"type\":\"{[key: string]: string}"); + let strictEqual = retJson.indexOf('\'name\':\'mapStr2\',\'type\':\'{[key: string]: string}'); assert.strictEqual(strictEqual > 0, true); - let retMapBoolean2 = retJson.indexOf("\"name\":\"mapBool2\",\"type\":\"{[key: string]: boolean}"); + let retMapBoolean2 = retJson.indexOf('\'name\':\'mapBool2\',\'type\':\'{[key: string]: boolean}'); assert.strictEqual(retMapBoolean2 > 0, true); }); } function partOfFunctionTwo() { it('test gen/analyze/function analyzeDirectFunction', function () { - let data = "if_direct(v1: string, v2: boolean): string;"; - let ret = analyzeFunction(data, false, `if_direct`, "v1: string, v2: boolean", "asdfgh"); + let data = 'if_direct(v1: string, v2: boolean): string;'; + let ret = analyzeFunction(data, false, `if_direct`, 'v1: string, v2: boolean', 'asdfgh'); let retJson = JSON.stringify(ret); - let str1 = "{\"name\":\"v1\",\"type\":\"string\",\"optional\":false,\"realType\":\"string\"},"; - let str2 = "{\"name\":\"v2\",\"type\":\"boolean\",\"optional\":false,\"realType\":\"boolean\"}"; + let str1 = '{\'name\':\'v1\',\'type\':\'string\',\'optional\':false,\'realType\':\'string\'},'; + let str2 = '{\'name\':\'v2\',\'type\':\'boolean\',\'optional\':false,\'realType\':\'boolean\'}'; let retValue = retJson.search(str1 + str2) assert.strictEqual(retValue > 0, true); - let retName = retJson.search("\"name\":\"if_direct\""); + let retName = retJson.search('\'name\':\'if_direct\''); assert.strictEqual(retName > 0, true); - let retType = retJson.search("\"type\":1"); + let retType = retJson.search('\'type\':1'); assert.strictEqual(retType > 0, true); }); - + it('test gen/analyze/function analyzeAsyncFunction', function () { - let data = "if_async(v1: string, cb: AsyncCallback): string;"; - let ret = analyzeFunction(data, false, `if_async`, "v1: string, cb: AsyncCallback", "qwerty"); - let retJson = JSON.stringify(ret) - let str1 = "{\"name\":\"v1\",\"type\":\"string\",\"optional\":false,\"realType\":\"string\"},"; - let str2 = "{\"name\":\"cb\",\"type\":\"AsyncCallback\",\"optional\":false,\"realType\":\"AsyncCallback\"}"; - let retValue = retJson.search(str1 + str2) + let data = 'if_async(v1: string, cb: AsyncCallback): string;'; + let ret = analyzeFunction(data, false, `if_async`, 'v1: string, cb: AsyncCallback', 'qwerty'); + let retJson = JSON.stringify(ret); + let str1 = '{\'name\':\'v1\',\'type\':\'string\',\'optional\':false,\'realType\':\'string\'},'; + let str2 = '{\'name\':\'cb\',\'type\':\'AsyncCallback\',\'optional\':false,\'realType\':\'AsyncCallback\'}'; + let retValue = retJson.search(str1 + str2); assert.strictEqual(retValue > 0, true); - let retName = retJson.search("\"name\":\"if_async\"") + let retName = retJson.search('\'name\':\'if_async\''); assert.strictEqual(retName > 0, true); - let retType = retJson.search("\"type\":4") + let retType = retJson.search('\'type\':4'); assert.strictEqual(retType > 0, true); }); it('test gen/analyze/function analyzeSyncFunction', function () { - let data = "if_callback(v1: string, cb: Callback>): string;"; - let ret = analyzeFunction(data, false, `if_callback`, "v1: string, cb: Callback>", "zxcvbn"); - let retJson = JSON.stringify(ret) - let retType = retJson.search("\"type\":2") + let data = 'if_callback(v1: string, cb: Callback>): string;'; + let ret = analyzeFunction(data, false, `if_callback`, 'v1: string, cb: Callback>', 'zxcvbn'); + let retJson = JSON.stringify(ret); + let retType = retJson.search('\'type\':2'); assert.strictEqual(retType > 0, true); }); it('test gen/analyze/function analyzePromiseFunction', function () { - let data = "if_promise(v1: Array): Promise;"; - let ret = analyzeFunction(data, false, `if_promise`, "v1: Array", "Promise"); - let retJson = JSON.stringify(ret) - let retType = retJson.search("\"type\":4") + let data = 'if_promise(v1: Array): Promise;'; + let ret = analyzeFunction(data, false, `if_promise`, 'v1: Array', 'Promise'); + let retJson = JSON.stringify(ret); + let retType = retJson.search('\'type\':4'); assert.strictEqual(retType > 0, true); - let retReturn = retJson.search('\"ret\":\"void\"') + let retReturn = retJson.search('\'ret\':\'void\''); assert.strictEqual(retReturn > 0, true); }); } function partOfInterface(correctResult) { it('test gen/analyze/interface analyzeInterface', function () { - let data = correctResult['ParamIn']['analyzeInterface'] + let data = correctResultParamIn.analyzeInterface; let ret = analyzeInterface(data); - let retJson = JSON.stringify(ret) - let valueArray = retJson.substring(retJson.indexOf("\[") + 1, retJson.indexOf("\]")).split("}"); - let numContain = valueArray[0].indexOf("\"name\":\"num1\",\"type\":\"NUMBER_TYPE_"); + let retJson = JSON.stringify(ret); + let valueArray = retJson.substring(retJson.indexOf('\[') + 1, retJson.indexOf('\]')).split('}'); + let numContain = valueArray[0].indexOf('\'name\':\'num1\',\'type\':\'NUMBER_TYPE_'); assert.strictEqual(numContain > 0, true); - assert.strictEqual(valueArray[1], ",{\"name\":\"str1\",\"type\":\"string\",\"realType\":\"string\",\"optional\":false"); - assert.strictEqual(valueArray[2], ",{\"name\":\"bool1\",\"type\":\"boolean\",\"realType\":\"boolean\",\"optional\":false"); - let numArrayCon = valueArray[3].indexOf("\"name\":\"nums\",\"type\":\"Array 0, true); - assert.strictEqual(valueArray[4], ",{\"name\":\"strs\",\"type\":\"Array\",\"realType\":\"Array\",\"optional\":false"); - assert.strictEqual(valueArray[5], ",{\"name\":\"bools\",\"type\":\"Array\",\"realType\":\"Array\",\"optional\":false"); - let numMapCon = valueArray[6].indexOf("\"name\":\"mapNum\",\"type\":\"Map\',\'realType\':\'Array\',\'optional\':false'); + assert.strictEqual(valueArray[5], ',{\'name\':\'bools\',\'type\':\'Array\',\'realType\':\'Array\',\'optional\':false'); + let numMapCon = valueArray[6].indexOf('\'name\':\'mapNum\',\'type\':\'Map 0, true); - assert.strictEqual(valueArray[7], ",{\"name\":\"mapStr\",\"type\":\"Map\",\"realType\":\"Map\",\"optional\":false"); - let mapNumCon = retJson.indexOf("\"name\":\"mapNum2\",\"type\":\"{[key:string]:NUMBER_TYPE_"); + assert.strictEqual(valueArray[7], ',{\'name\':\'mapStr\',\'type\':\'Map\',\'realType\':\'Map\',\'optional\':false'); + let mapNumCon = retJson.indexOf('\'name\':\'mapNum2\',\'type\':\'{[key:string]:NUMBER_TYPE_'); assert.strictEqual(mapNumCon > 0, true); - let mapStrCon = retJson.indexOf("\"name\":\"mapStr2\",\"type\":\"{[key:string]:string}"); + let mapStrCon = retJson.indexOf('\'name\':\'mapStr2\',\'type\':\'{[key:string]:string}'); assert.strictEqual(mapStrCon > 0, true); - let mapBoolCon = retJson.indexOf("\"name\":\"mapBool2\",\"type\":\"{[key:string]:boolean}"); + let mapBoolCon = retJson.indexOf('\'name\':\'mapBool2\',\'type\':\'{[key:string]:boolean}'); assert.strictEqual(mapBoolCon > 0, true); - let asyncExit = retJson.search("\"name\":\"if_async\",\"type\":4") + let asyncExit = retJson.search('\'name\':\'if_async\',\'type\':4'); assert.strictEqual(asyncExit > 0, true); - let asyncArray = retJson.substring(retJson.lastIndexOf("\[") + 1, retJson.lastIndexOf("\]")).split("}"); - assert.strictEqual(asyncArray[0], "{\"name\":\"v1\",\"type\":\"string\",\"optional\":false,\"realType\":\"string\""); - assert.strictEqual(asyncArray[1], ",{\"name\":\"cb\",\"type\":\"AsyncCallback\",\"optional\":false,\"realType\":\"AsyncCallback\""); - assert.strictEqual(asyncArray[2], "],\"ret\":\"string\",\"isStatic\":false"); + let asyncArray = retJson.substring(retJson.lastIndexOf('\[') + 1, retJson.lastIndexOf('\]')).split('}'); + assert.strictEqual(asyncArray[0], '{\'name\':\'v1\',\'type\':\'string\',\'optional\':false,\'realType\':\'string\''); + assert.strictEqual(asyncArray[1], ',{\'name\':\'cb\',\'type\':\'AsyncCallback\',\'optional\':false,\'realType\':\'AsyncCallback\''); + assert.strictEqual(asyncArray[2], '],\'ret\':\'string\',\'isStatic\':false'); }); } function partOfType() { it('test gen/analyze/type analyzeType', function () { - let retJson = JSON.stringify(analyzeType("tomato: string;\ntomatoTag: boolean;")); - let value0 = retJson.search("\"name\":\"tomato\",\"type\":\"string\""); + let retJson = JSON.stringify(analyzeType('tomato: string;\ntomatoTag: boolean;')); + let value0 = retJson.search('\'name\':\'tomato\',\'type\':\'string\''); assert.strictEqual(value0 > 0, true); - let value1 = retJson.search("\"name\":\"tomatoTag\",\"type\":\"boolean\""); - assert.strictEqual(value1 > 0, true); + let value1 = retJson.search('\'name\':\'tomatoTag\',\'type\':\'boolean\''); + assert.strictEqual(value1 > 0, true); }); it('test gen/analyze/type analyzeType2', function () { - let retJson = JSON.stringify(analyzeType2("aaa' | 'bbb' | 'ccc")); - let enumValueType = retJson.search("\"enumValueType\":1"); + let retJson = JSON.stringify(analyzeType2('aaa' | 'bbb' | 'ccc')); + let enumValueType = retJson.search('\'enumValueType\':1'); assert.strictEqual(enumValueType > 0, true); - let element0 = retJson.search("\"name\":\"NAME_AAA\",\"value\":\"aaa\",\"type\":\"string\""); + let element0 = retJson.search('\'name\':\'NAME_AAA\',\'value\':\'aaa\',\'type\':\'string\''); assert.strictEqual(element0 > 0, true); - let element1 = retJson.search("\"name\":\"NAME_BBB\",\"value\":\"bbb\",\"type\":\"string\""); + let element1 = retJson.search('\'name\':\'NAME_BBB\',\'value\':\'bbb\',\'type\':\'string\''); assert.strictEqual(element1 > 0, true); - let element2 = retJson.search("\"name\":\"NAME_CCC\",\"value\":\"ccc\",\"type\":\"string\""); - assert.strictEqual(element2 > 0, true); + let element2 = retJson.search('\'name\':\'NAME_CCC\',\'value\':\'ccc\',\'type\':\'string\''); + assert.strictEqual(element2 > 0, true); }); } function partOfNamespace(correctResult) { it('test gen/analyze/namespace analyzeNamespace', function () { - let ret = analyzeNamespace(correctResult['ParamIn']['analyzeNamespace']); + let ret = analyzeNamespace(correctResult.ParamIn.analyzeNamespace); let retJson = JSON.stringify(ret); - let nameResult = retJson.substring(retJson.search("namespace") - 1, retJson.length - 1); - let searchExport = nameResult.search("\"exports\"") - let exportResult = nameResult.substring(searchExport, nameResult.search("\"exports\"") + 20); - assert.strictEqual(exportResult, "\"exports\":[\"Entity\"]") - let enumResult = nameResult.substring(nameResult.search("\"enum\""), nameResult.indexOf("\"const\"") - 1); - assert.strictEqual(enumResult.search("\"name\":\"Entity\"") > 0, true); - assert.strictEqual(enumResult.search("\"enumValueType\":1") > 0, true); - let searchInte = nameResult.indexOf("\"interface\"") - let interResult = nameResult.substring(searchInte, nameResult.indexOf("\"class\"") - 1); - assert.strictEqual(interResult.search("{\"name\":\"animal\",\"type\":\"string\"}") > 0, false); - let qiePianStart = interResult.lastIndexOf("function") - 1; - let qiepianEnd = interResult.lastIndexOf("parentNameList")-2; + let nameResult = retJson.substring(retJson.search('namespace') - 1, retJson.length - 1); + let searchExport = nameResult.search('\'exports\''); + let exportResult = nameResult.substring(searchExport, nameResult.search('\'exports\'') + 20); + assert.strictEqual(exportResult, '\'exports\':[\'Entity\']'); + let enumResult = nameResult.substring(nameResult.search('\'enum\''), nameResult.indexOf('\'const\'') - 1); + assert.strictEqual(enumResult.search('\'name\':\'Entity\'') > 0, true); + assert.strictEqual(enumResult.search('\'enumValueType\':1') > 0, true); + let searchInte = nameResult.indexOf('\'interface\''); + let interResult = nameResult.substring(searchInte, nameResult.indexOf('\'class\'') - 1); + assert.strictEqual(interResult.search('{\'name\':\'animal\',\'type\':\'string\'}') > 0, false); + let qiePianStart = interResult.lastIndexOf('function') - 1; + let qiepianEnd = interResult.lastIndexOf('parentNameList') - 2; let interFun = interResult.substring(qiePianStart, qiepianEnd); - let interValue = "\"value\":[{\"name\":\"v1\",\"type\":\"string\",\"optional\":false,\"realType\":\"string\"}],"; - let interRet = "\"ret\":\"string\"," - let interIsStatic = "\"isStatic\":false\}]" - let funcResult = "\"function\":[{\"name\":\"fix\",\"type\":1," + interValue + interRet + interIsStatic; + let interValue = '\'value\':[{\'name\':\'v1\',\'type\':\'string\',\'optional\':false,\'realType\':\'string\'}],'; + let interRet = '\'ret\':\'string\','; + let interIsStatic = '\'isStatic\':false\}]'; + let funcResult = '\'function\':[{\'name\':\'fix\',\'type\':1,' + interValue + interRet + interIsStatic; assert.strictEqual(interFun, funcResult); }); - + it('test gen/analyze/namespace analyzeNamespaceClass', function () { let ret = analyzeNamespace('\nnamespace Space3 {\nclass TestClass {\nstatic $fun1(v:string):boolean;\n}\n}\n'); let retJson = JSON.stringify(ret); - let nameResult = retJson.substring(retJson.search("namespace"), retJson.length - 2) - let interResult = nameResult.substring(nameResult.search("\"interface\"") - 1,nameResult.length) - let classResult = interResult.substring(interResult.search("\"function\"") - 1, interResult.length) - assert.strictEqual(classResult.search("\"isStatic\":true") > 0, true) + let nameResult = retJson.substring(retJson.search('namespace'), retJson.length - 2); + let interResult = nameResult.substring(nameResult.search('\'interface\'') - 1, nameResult.length); + let classResult = interResult.substring(interResult.search('\'function\'') - 1, interResult.length); + assert.strictEqual(classResult.search('\'isStatic\':true') > 0, true); }); it('test gen/analyze/namespace analyzeNamespaceFunction', function () { let ret = analyzeNamespace('\nnamespace Space3 {\nfunction fun1(v: string): boolean;\n}\n'); let retJson = JSON.stringify(ret); - let nameResult = retJson.substring(retJson.search("namespace"), retJson.length - 2) - let qiePianStart = nameResult.lastIndexOf("\"function\""); - let funcResult = nameResult.substring(qiePianStart, nameResult.lastIndexOf("\"interface\"") - 2); - assert.strictEqual(funcResult.search("\"name\":\"fun1\",\"type\":1") > 0, true) - assert.strictEqual(funcResult.search("{\"name\":\"v\",\"type\":\"string\",\"optional\":false,\"realType\":\"string\"}") > 0, true) + let nameResult = retJson.substring(retJson.search('namespace'), retJson.length - 2); + let qiePianStart = nameResult.lastIndexOf('\'function\''); + let funcResult = nameResult.substring(qiePianStart, nameResult.lastIndexOf('\'interface\'') - 2); + assert.strictEqual(funcResult.search('\'name\':\'fun1\',\'type\':1') > 0, true); + assert.strictEqual(funcResult.search('{\'name\':\'v\',\'type\':\'string\',\'optional\':false,\'realType\':\'string\'}') > 0, true); }); partOfNamespaceTwo(correctResult); @@ -356,8 +356,8 @@ function partOfNamespace(correctResult) { function partOfNamespaceTwo(correctResult) { it('test gen/analyze/namespace parseNamespace', function () { - let data = correctResult['ParamIn']['parseNamespace']; - let matchs = re.match(" *\n*", data) + let data = correctResult.ParamIn.parseNamespace; + let matchs = re.match(' *\n*', data); let result = { exports: [], enum: [], @@ -367,15 +367,15 @@ function partOfNamespaceTwo(correctResult) { interface: [], class: [], namespace: [], - } + }; let ret = parseNamespace(matchs, data, result); - let retJson = JSON.stringify(ret) - assert.strictEqual(retJson, "\"\\n\""); + let retJson = JSON.stringify(ret); + assert.strictEqual(retJson, '\'\\n\''); }); it('test gen/analyze/namespace parseEnum', function () { - let data = correctResult['ParamIn']['parseEnum'] - let matchs = re.match(" *\n*", data) + let data = correctResult.ParamIn.parseEnum; + let matchs = re.match(' *\n*', data); let result = { exports: [], enum: [], @@ -385,17 +385,17 @@ function partOfNamespaceTwo(correctResult) { interface: [], class: [], namespace: [], - } + }; let ret = parseEnum(matchs, data, result); - let retJson = JSON.stringify(ret) - assert.strictEqual(retJson, "\"\\n\""); + let retJson = JSON.stringify(ret); + assert.strictEqual(retJson, '\'\\n\''); }) } function partOfNamespaceThree(correctResult) { it('test gen/analyze/namespace parseFunction', function () { let data = 'function fun1(name: string, flags: number): boolean;\n'; - let matchs = re.match(" *\n*", data) + let matchs = re.match(' *\n*', data); let result = { exports: [], enum: [], @@ -405,15 +405,15 @@ function partOfNamespaceThree(correctResult) { interface: [], class: [], namespace: [], - } + }; let ret = parseFunction(matchs, data, result); - let retJson = JSON.stringify(ret) - assert.strictEqual(retJson, "\"\""); + let retJson = JSON.stringify(ret); + assert.strictEqual(retJson, '\'\''); }); it('test gen/analyze/namespace parseInterface', function () { - let data = correctResult['ParamIn']['parseInterface'] - let matchs = re.match(" *\n*", data) + let data = correctResult.ParamIn.parseInterface; + let matchs = re.match(' *\n*', data) let result = { exports: [], enum: [], @@ -423,17 +423,17 @@ function partOfNamespaceThree(correctResult) { interface: [], class: [], namespace: [], - } + }; let ret = parseInterface(matchs, data, result); - let retJson = JSON.stringify(ret) - assert.strictEqual(retJson, "\"\\nfunction fun1(v: ConfigOption): void\\n\""); + let retJson = JSON.stringify(ret); + assert.strictEqual(retJson, '\'\\nfunction fun1(v: ConfigOption): void\\n\''); }); } function partOfNamespaceFour(correctResult) { it('test gen/analyze/namespace parseClass', function () { - let data = correctResult['ParamIn']['parseClass'] - let matchs = re.match(" *\n*", data) + let data = correctResult.ParamIn.parseClass; + let matchs = re.match(' *\n*', data) let result = { exports: [], enum: [], @@ -443,28 +443,28 @@ function partOfNamespaceFour(correctResult) { interface: [], class: [], namespace: [], - } + }; let ret = parseClass(matchs, data, result); let retJson = JSON.stringify(ret); - assert.strictEqual(retJson, correctResult['ParamOut']['parseClass']); + assert.strictEqual(retJson, correctResult.ParamOut.parseClass); }); it('test gen/analyze/namespace parseType', function () { - let data = correctResult['ParamIn']['parseType'] - let matchs = re.match(" *\n*", data) - let result = { - exports: [], - enum: [], - const: [], - type: [], - function: [], - interface: [], - class: [], - namespace: [], - } - let ret = parseType(matchs, data, result); - let retJson = JSON.stringify(ret) - assert.strictEqual(retJson, correctResult['ParamOut']['parseType']); + let data = correctResult.ParamIn.parseType; + let matchs = re.match(' *\n*', data) + let result = { + exports: [], + enum: [], + const: [], + type: [], + function: [], + interface: [], + class: [], + namespace: [], + }; + let ret = parseType(matchs, data, result); + let retJson = JSON.stringify(ret); + assert.strictEqual(retJson, correctResult.ParamOut.parseType); }); } @@ -472,18 +472,18 @@ function partOfParam() { it('test gen/analyze/params analyzeDirectParams', function () { let ret = analyzeParams('', 'v1:string,v2:boolean'); let retJson = JSON.stringify(ret); - let retJsonpian = retJson.substring(2, retJson.length - 4).split("}"); - assert.strictEqual(retJsonpian[0].indexOf("\"name\":\"v1\",\"type\":\"string\",\"optional\":false") > 0, true); - assert.strictEqual(retJsonpian[1].indexOf("\"name\":\"v2\",\"type\":\"boolean\",\"optional\":false") > 0, true); + let retJsonpian = retJson.substring(2, retJson.length - 4).split('}'); + assert.strictEqual(retJsonpian[0].indexOf('\'name\':\'v1\',\'type\':\'string\',\'optional\':false') > 0, true); + assert.strictEqual(retJsonpian[1].indexOf('\'name\':\'v2\',\'type\':\'boolean\',\'optional\':false') > 0, true); assert.strictEqual(ret[1], 1); }); it('test gen/analyze/params analyzeOptionalParams', function () { let ret = analyzeParams('', 'v1:string,v2?:boolean'); let retJson = JSON.stringify(ret); - let retJsonpian = retJson.substring(2, retJson.length - 4).split("}"); - assert.strictEqual(retJsonpian[0].indexOf("\"name\":\"v1\",\"type\":\"string\",\"optional\":false") > 0, true); - assert.strictEqual(retJsonpian[1].indexOf("\"name\":\"v2\",\"type\":\"boolean\",\"optional\":true") > 0, true); + let retJsonpian = retJson.substring(2, retJson.length - 4).split('}'); + assert.strictEqual(retJsonpian[0].indexOf('\'name\':\'v1\',\'type\':\'string\',\'optional\':false') > 0, true); + assert.strictEqual(retJsonpian[1].indexOf('\'name\':\'v2\',\'type\':\'boolean\',\'optional\':true') > 0, true); assert.strictEqual(ret[1], 1); }); @@ -491,9 +491,9 @@ function partOfParam() { it('test gen/analyze/params analyzeAsynctParams', function () { let ret = analyzeParams('', 'v2:string,cb:AsyncCallback'); let retJson = JSON.stringify(ret); - let retJsonpian = retJson.substring(2, retJson.length - 4).split("}"); - assert.strictEqual(retJsonpian[0].indexOf("\"name\":\"v2\",\"type\":\"string\",\"optional\":false") > 0, true); - let flag = retJsonpian[1].indexOf("\"name\":\"cb\",\"type\":\"AsyncCallback\",\"optional\":false") > 0 + let retJsonpian = retJson.substring(2, retJson.length - 4).split('}'); + assert.strictEqual(retJsonpian[0].indexOf('\'name\':\'v2\',\'type\':\'string\',\'optional\':false') > 0, true); + let flag = retJsonpian[1].indexOf('\'name\':\'cb\',\'type\':\'AsyncCallback\',\'optional\':false') > 0 assert.strictEqual(flag, true); assert.strictEqual(ret[1], 4); }); @@ -501,54 +501,53 @@ function partOfParam() { it('test gen/analyze/params analyzeSynctParams', function () { let ret = analyzeParams('', 'v2:boolean,cb:Callback'); let retJson = JSON.stringify(ret); - let retJsonpian = retJson.substring(2, retJson.length - 4).split("}"); - assert.strictEqual(retJsonpian[0].indexOf("\"name\":\"v2\",\"type\":\"boolean\",\"optional\":false") > 0, true); - let flag = retJsonpian[1].indexOf("\"name\":\"cb\",\"type\":\"Callback\",\"optional\":false") > 0 + let retJsonpian = retJson.substring(2, retJson.length - 4).split('}'); + assert.strictEqual(retJsonpian[0].indexOf('\'name\':\'v2\',\'type\':\'boolean\',\'optional\':false') > 0, true); + let flag = retJsonpian[1].indexOf('\'name\':\'cb\',\'type\':\'Callback\',\'optional\':false') > 0 assert.strictEqual(flag, true); assert.strictEqual(ret[1], 2); }); it('test gen/analyze/params analyzeArrayParams', function () { - let ret = analyzeParams('', "v1: Array,v2:Map"); + let ret = analyzeParams('', 'v1: Array,v2:Map'); let retJson = JSON.stringify(ret); - let retJsonpian = retJson.substring(2, retJson.length - 4).split("}"); - let flagArray = retJsonpian[0].indexOf("\"name\":\"v1\",\"type\":\"Array\",\"optional\":false") > 0 + let retJsonpian = retJson.substring(2, retJson.length - 4).split('}'); + let flagArray = retJsonpian[0].indexOf('\'name\':\'v1\',\'type\':\'Array\',\'optional\':false') > 0 assert.strictEqual(flagArray, true); - let flag = retJsonpian[1].indexOf("\"name\":\"v2\",\"type\":\"Map\",\"optional\":false") > 0 + let flag = retJsonpian[1].indexOf('\'name\':\'v2\',\'type\':\'Map\',\'optional\':false') > 0 assert.strictEqual(flag, true); }); - partOfParamTwo(); + partOfParamTwo(); } function partOfParamTwo() { it('test gen/analyze/params analyzeMapParams', function () { - let ret = analyzeParams('', "v1: string[],v2:{[key:string]:boolean}"); + let ret = analyzeParams('', 'v1: string[],v2:{[key:string]:boolean}'); let retJson = JSON.stringify(ret); let retJsonpian = retJson.substring(2, retJson.length - 4); - assert.strictEqual(retJsonpian.indexOf("\"name\":\"v2\",\"type\":\"{\[key:string\]:boolean}\"") > 0, true); - assert.strictEqual(retJsonpian.indexOf("\"name\":\"v1\",\"type\":\"string[]\",\"optional\":false") > 0, true); + assert.strictEqual(retJsonpian.indexOf('\'name\':\'v2\',\'type\':\'{\[key:string\]:boolean}\'') > 0, true); + assert.strictEqual(retJsonpian.indexOf('\'name\':\'v1\',\'type\':\'string[]\',\'optional\':false') > 0, true); }); it('test gen/analyze/params analyzeInterfaceParams', function () { - let ret = analyzeParams('', "v: Human"); + let ret = analyzeParams('', 'v: Human'); let retJson = JSON.stringify(ret); let retJsonpian = retJson.substring(2, retJson.length - 4); - assert.strictEqual(retJsonpian.indexOf("\"name\":\"v\",\"type\":\"Human\"") > 0, true); + assert.strictEqual(retJsonpian.indexOf('\'name\':\'v\',\'type\':\'Human\'') > 0, true); }); it('test gen/analyze/params analyzeInterfaceParams', function () { - let ret = analyzeParams('', "v: any"); + let ret = analyzeParams('', 'v: any'); let retJson = JSON.stringify(ret); let retJsonpian = retJson.substring(2, retJson.length - 4); - assert.strictEqual(retJsonpian.indexOf("\"name\":\"v\",\"type\":\"any\"") > 0, true); + assert.strictEqual(retJsonpian.indexOf('\'name\':\'v\',\'type\':\'any\'') > 0, true); }); it('test gen/analyze/params analyzeInterfaceParams', function () { - let ret = analyzeParams('', "v: string|number|boolean"); + let ret = analyzeParams('', 'v: string|number|boolean'); let retJson = JSON.stringify(ret); let retJsonpian = retJson.substring(2, retJson.length - 4); - assert.strictEqual(retJsonpian.indexOf("\"name\":\"v\",\"type\":\"string|number|boolean\"") > 0, true); + assert.strictEqual(retJsonpian.indexOf('\'name\':\'v\',\'type\':\'string|number|boolean\'') > 0, true); }); -} - +} \ No newline at end of file diff --git a/test/unittest/tools.test.js b/test/unittest/tools.test.js index 80a48865aff67bfa2cbce6151f7d9a483a1224b8..819c81ee6e8fd0e692c7946e906fcb277b74d0dd 100755 --- a/test/unittest/tools.test.js +++ b/test/unittest/tools.test.js @@ -12,42 +12,42 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -let genDir = "../../src/gen/" +let genDir = "../../src/gen/"; const { readFile, writeFile } = require(genDir + "tools/FileRW"); const { getArrayType, getArrayTypeTwo } = require(genDir + "tools/common"); -const { isEnum, enumIndex, getMapType,checkFileError } = require(genDir + "tools/common"); -const { search, match, removeReg, getReg} = require(genDir + "tools/re"); -const { replaceAll, all } = require(genDir + "tools/re"); -const { checkOutBody, removeExplains,replaceTab } = require(genDir + "tools/tool"); -const { removeEmptyLine, print,getLicense,removeEmptyLine2 } = require(genDir + "tools/tool"); +const { isEnum, enumIndex, getMapType, checkFileError } = require(genDir + "tools/common"); +const { search, match, removeReg, getReg } = require(genDir + "tools/re"); +const { replaceAll, all } = require(genDir + "tools/re"); +const { checkOutBody, removeExplains, replaceTab } = require(genDir + "tools/tool"); +const { removeEmptyLine, print, getLicense, removeEmptyLine2 } = require(genDir + "tools/tool"); const assert = require("assert"); const rewire = require("rewire"); const { json } = require("stream/consumers"); var correctResult; -function before(){ - let data = readFile("test/unittest/result.json") - if (data) { - correctResult = JSON.parse(data); - } +function before() { + let data = readFile("test/unittest/result.json"); + if (data) { + correctResult = JSON.parse(data); + } } describe('Tools', function () { - + before(function () { before(); }); it('test gen/tools/re search', function () { - let ret = search('@ohos([.a-z_A-Z0-9]+).d.ts','@ohos.input_sample.d.ts'); + let ret = search('@ohos([.a-z_A-Z0-9]+).d.ts', '@ohos.input_sample.d.ts'); assert.strictEqual(JSON.stringify(ret), `{"regs":[[0,23],[5,18]]}`); }); it('test gen/tools/re match', function () { - let ret = match('@ohos([.a-z_A-Z0-9]+).d.ts','@ohos.input_sample.d.ts'); - assert.strictEqual(JSON.stringify(ret), `{"regs":[[0,23],[5,18]]}`); + let ret = match('@ohos([.a-z_A-Z0-9]+).d.ts', '@ohos.input_sample.d.ts'); + assert.strictEqual(JSON.stringify(ret), `{"regs":[[0,23],[5,18]]}`); }); - + partOfReTest(); partOfCommonTest(); @@ -55,147 +55,147 @@ describe('Tools', function () { partOfToolsTest(correctResult); it('test gen/tools/tool removeExplains', function () { - let param = correctResult['ParamIn']['removeExplains']; + let param = correctResult.ParamIn.removeExplains; let ret = removeExplains(param); - let result = correctResult['tools']['removeExplains']; + let result = correctResult.tools.removeExplains; assert.strictEqual(JSON.stringify(ret), JSON.stringify(result)); }); - it('test gen/tools/FileRW readFile', function () { - let aaa = Math.random()*10000 - let content="时间 = %^(^*%*&^*"+aaa; - writeFile("test/unittest/testrw.txt",content); - let ret = readFile("test/unittest/testrw.txt") + it('test gen/tools/FileRW readFile', function () { + let aaa = Math.random() * 10000; + let content = "时间 = %^(^*%*&^*" + aaa; + writeFile("test/unittest/testrw.txt", content); + let ret = readFile("test/unittest/testrw.txt"); assert.strictEqual(ret, content); }); }); -function partOfReTest(){ +function partOfReTest() { it('test gen/tools/re removeReg', function () { - let ret = removeReg('export default napitest;',[4, 22]); - + let ret = removeReg('export default napitest;', [4, 22]); + assert.strictEqual(JSON.stringify(ret), `"expot;"`); }); - + it('test gen/tools/re getReg', function () { let data = 'declare namespace napitest {function fun6(v2: string): void;}export default napitest;'; - assert.strictEqual(JSON.stringify(getReg(data,[0, 10])), `"declare na"`); + assert.strictEqual(JSON.stringify(getReg(data, [0, 10])), `"declare na"`); }); - + it('test gen/tools/re replaceAll', function () { - let ret = replaceAll('\n *//([a-zA-Z .]+)\n','\\.','\\.'); - let retJson = JSON.stringify(ret) + let ret = replaceAll('\n *//([a-zA-Z .]+)\n', '\\.', '\\.'); + let retJson = JSON.stringify(ret); assert.strictEqual(retJson, `"\\n *//([a-zA-Z \\\\.]+)\\n"`); }); - + it('test gen/tools/re all', function () { assert.strictEqual(JSON.stringify(all('\\.')), "{}"); }); - } - - function partOfCommonTest() { - it('test gen/tools/common getArrayType', function () { - let ret = getArrayType('Array'); - assert.strictEqual(ret, 'number'); - }); - - it('test gen/tools/common getArrayTypeTwo', function () { - let ret = getArrayTypeTwo('string[]'); - assert.strictEqual(ret, 'string'); - }); - - it('test gen/tools/common isEnum', function () { - let enumElement = [{name:"STATUS0",value:"0",type:"NUMBER_TYPE_1"}]; - let data = { - class: [], - const: [], - enum: [{name:"HttpStatus",body:{element:enumElement,function:[],enumValueType:0}}], - exports: ['HttpStatus'], - function: [], - interface: [], - namespace: [], - } - let ret = isEnum('HttpStatus', data); - assert.strictEqual(ret, true); - }); - - it('test gen/tools/common enumIndex', function () { - let enumElement = [{name:"STATUS0",value:"0",type:"NUMBER_TYPE_1"}]; - let data = { - class: [], - const: [], - enum: [{name:"HttpStatus",body:{element:enumElement,function:[],enumValueType:0}}], - exports: ['HttpStatus'], - function: [], - interface: [], - namespace: [], - } - let ret = enumIndex('HttpStatus', data); - assert.strictEqual(ret, '0'); - }); - - partOfCommonTwo(); - } - - function partOfCommonTwo(){ - it('test gen/tools/common getMapType', function () { - let result = [ 'string', 'NUMBER_TYPE_1', undefined, undefined ]; - let ret = getMapType('{[key:string]:NUMBER_TYPE_1}'); - assert.strictEqual(JSON.stringify(ret), JSON.stringify(result)); - }); - - it('test gen/tools/common checkFileError', function () { - let result = [ - false, - "File 'napi_generator-master/test/unittest/@ohos.input_sample.d.ts' not found.\n" + - ' The file is in the program because:\n' + - ' Root file specified for compilation\n' - ]; - let ret = checkFileError('napi_generator-master\\test\\unittest\\@ohos.input_sample.d.ts'); - this.timeout(5000) - assert.strictEqual(JSON.stringify(ret), JSON.stringify(result)); - }); - } - - function partOfToolsTest(correctResult) { - it('test gen/tools/tool print', function () { - let lib = rewire(genDir+'tools/tool.js'); - let print = lib.__get__("print"); - print("tool test print"); - }); - - it('test gen/tools/tool checkOutBody', function () { - let body = correctResult['ParamIn']['checkOutBody']; - let ret = checkOutBody(body,27,null,true); - let result = "function fun1(v1: { [key: string]: Array }):void;"; - assert.strictEqual(JSON.stringify(ret), JSON.stringify(result)); - }); - - it('test gen/tools/tool removeEmptyLine', function () { - param = correctResult['ParamIn']['removeEmptyLine']; - let retJson = JSON.stringify(removeEmptyLine(param)) - let result = 'declare namespace napitest {\nfunction fun1(v1: string):void;\n}\nexport default napitest;\n'; - assert.strictEqual(retJson, JSON.stringify(result)); - }); - - it('test gen/tools/tool getLicense', function () { - param = correctResult['ParamIn']['getLicense']; - let retJson = JSON.stringify(getLicense(param)) - let result = '/*\n* Copyright (c) 2022 Shenzhen Kaihong Digital Industry Development Co., Ltd. \n*/'; - assert.strictEqual(retJson, JSON.stringify(result)); - }); - - it('test gen/tools/tool replaceTab', function () { - param = 'declare namespace napitest {\tfunction fun1():void;}export default napitest;'; - let retJson = JSON.stringify(replaceTab(param)) - let result = 'declare namespace napitest { function fun1():void;}export default napitest;'; - assert.strictEqual(retJson, JSON.stringify(result)); - }); - - it('test gen/tools/tool replaceAll', function () { - param = correctResult['toolsParam']['replaceAll'] - let ret = replaceAll(JSON.stringify(param),'[funcName]','if_direct'); - assert.strictEqual(JSON.stringify(ret), correctResult['tools']['replaceAll']); - }); - } \ No newline at end of file +} + +function partOfCommonTest() { + it('test gen/tools/common getArrayType', function () { + let ret = getArrayType('Array'); + assert.strictEqual(ret, 'number'); + }); + + it('test gen/tools/common getArrayTypeTwo', function () { + let ret = getArrayTypeTwo('string[]'); + assert.strictEqual(ret, 'string'); + }); + + it('test gen/tools/common isEnum', function () { + let enumElement = [{ name: "STATUS0", value: "0", type: "NUMBER_TYPE_1" }]; + let data = { + class: [], + const: [], + enum: [{ name: "HttpStatus", body: { element: enumElement, function: [], enumValueType: 0 } }], + exports: ['HttpStatus'], + function: [], + interface: [], + namespace: [], + }; + let ret = isEnum('HttpStatus', data); + assert.strictEqual(ret, true); + }); + + it('test gen/tools/common enumIndex', function () { + let enumElement = [{ name: "STATUS0", value: "0", type: "NUMBER_TYPE_1" }]; + let data = { + class: [], + const: [], + enum: [{ name: "HttpStatus", body: { element: enumElement, function: [], enumValueType: 0 } }], + exports: ['HttpStatus'], + function: [], + interface: [], + namespace: [], + }; + let ret = enumIndex('HttpStatus', data); + assert.strictEqual(ret, '0'); + }); + + partOfCommonTwo(); +} + +function partOfCommonTwo() { + it('test gen/tools/common getMapType', function () { + let result = ['string', 'NUMBER_TYPE_1', undefined, undefined]; + let ret = getMapType('{[key:string]:NUMBER_TYPE_1}'); + assert.strictEqual(JSON.stringify(ret), JSON.stringify(result)); + }); + + it('test gen/tools/common checkFileError', function () { + let result = [ + false, + "File 'napi_generator-master/test/unittest/@ohos.input_sample.d.ts' not found.\n" + + ' The file is in the program because:\n' + + ' Root file specified for compilation\n' + ]; + let ret = checkFileError('napi_generator-master\\test\\unittest\\@ohos.input_sample.d.ts'); + this.timeout(5000); + assert.strictEqual(JSON.stringify(ret), JSON.stringify(result)); + }); +} + +function partOfToolsTest(correctResult) { + it('test gen/tools/tool print', function () { + let lib = rewire(genDir + 'tools/tool.js'); + let print = lib.__get__("print"); + print("tool test print"); + }); + + it('test gen/tools/tool checkOutBody', function () { + let body = correctResult.ParamIn.checkOutBody; + let ret = checkOutBody(body, 27, null, true); + let result = "function fun1(v1: { [key: string]: Array }):void;"; + assert.strictEqual(JSON.stringify(ret), JSON.stringify(result)); + }); + + it('test gen/tools/tool removeEmptyLine', function () { + param = correctResult.ParamIn.removeEmptyLine; + let retJson = JSON.stringify(removeEmptyLine(param)); + let result = 'declare namespace napitest {\nfunction fun1(v1: string):void;\n}\nexport default napitest;\n'; + assert.strictEqual(retJson, JSON.stringify(result)); + }); + + it('test gen/tools/tool getLicense', function () { + param = correctResult.ParamIn.getLicense; + let retJson = JSON.stringify(getLicense(param)); + let result = '/*\n* Copyright (c) 2022 Shenzhen Kaihong Digital Industry Development Co., Ltd. \n*/'; + assert.strictEqual(retJson, JSON.stringify(result)); + }); + + it('test gen/tools/tool replaceTab', function () { + param = 'declare namespace napitest {\tfunction fun1():void;}export default napitest;'; + let retJson = JSON.stringify(replaceTab(param)); + let result = 'declare namespace napitest { function fun1():void;}export default napitest;'; + assert.strictEqual(retJson, JSON.stringify(result)); + }); + + it('test gen/tools/tool replaceAll', function () { + param = correctResult.toolsParam.replaceAll; + let ret = replaceAll(JSON.stringify(param), '[funcName]', 'if_direct'); + assert.strictEqual(JSON.stringify(ret), correctResult.tools.replaceAll); + }); +} \ No newline at end of file