18c339a94Sopenharmony_ci/* 28c339a94Sopenharmony_ci* Copyright (c) 2022 Shenzhen Kaihong Digital Industry Development Co., Ltd. 38c339a94Sopenharmony_ci* Licensed under the Apache License, Version 2.0 (the 'License'); 48c339a94Sopenharmony_ci* you may not use this file except in compliance with the License. 58c339a94Sopenharmony_ci* You may obtain a copy of the License at 68c339a94Sopenharmony_ci* 78c339a94Sopenharmony_ci* http://www.apache.org/licenses/LICENSE-2.0 88c339a94Sopenharmony_ci* 98c339a94Sopenharmony_ci* Unless required by applicable law or agreed to in writing, software 108c339a94Sopenharmony_ci* distributed under the License is distributed on an 'AS IS' BASIS, 118c339a94Sopenharmony_ci* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 128c339a94Sopenharmony_ci* See the License for the specific language governing permissions and 138c339a94Sopenharmony_ci* limitations under the License. 148c339a94Sopenharmony_ci*/ 158c339a94Sopenharmony_cilet genDir = '../../src/gen/' 168c339a94Sopenharmony_ciconst re = require(genDir + 'tools/re'); 178c339a94Sopenharmony_ciconst { analyzeFile } = require(genDir + 'analyze'); 188c339a94Sopenharmony_ciconst { analyzeEnum, analyzeEnumResult } = require(genDir + 'analyze/enum'); 198c339a94Sopenharmony_ciconst { analyzeFunction, analyzeSubInterface, getFuncParaType, analyzeFuncNoNameInterface, 208c339a94Sopenharmony_ci analyseSubReturn } = require(genDir + 'analyze/function'); 218c339a94Sopenharmony_ciconst { analyzeInterface } = require(genDir + 'analyze/interface'); 228c339a94Sopenharmony_ciconst { analyzeType, analyzeType2 } = require(genDir + 'analyze/type'); 238c339a94Sopenharmony_ciconst { analyzeNamespace, parseNamespace } = require(genDir + 'analyze/namespace'); 248c339a94Sopenharmony_ciconst { parseEnum, parseFunction, parseInterface, parseClass, parseType } = require(genDir + 'analyze/namespace'); 258c339a94Sopenharmony_ciconst { analyzeParams } = require(genDir + 'analyze/params'); 268c339a94Sopenharmony_ciconst { analyzeReturn } = require(genDir + 'analyze/return'); 278c339a94Sopenharmony_ciconst { readFile } = require('../../src/gen/tools/FileRW'); 288c339a94Sopenharmony_ci 298c339a94Sopenharmony_civar assert = require('assert'); 308c339a94Sopenharmony_civar correctResult; 318c339a94Sopenharmony_cifunction before() { 328c339a94Sopenharmony_ci let data = readFile('test/unittest/result.json'); 338c339a94Sopenharmony_ci if (data) { 348c339a94Sopenharmony_ci correctResult = JSON.parse(data); 358c339a94Sopenharmony_ci } 368c339a94Sopenharmony_ci} 378c339a94Sopenharmony_ci 388c339a94Sopenharmony_cidescribe('Analyze', function () { 398c339a94Sopenharmony_ci before(function () { 408c339a94Sopenharmony_ci before(); 418c339a94Sopenharmony_ci }); 428c339a94Sopenharmony_ci 438c339a94Sopenharmony_ci it('test gen/analyze analyzeFile', function () { 448c339a94Sopenharmony_ci let structOfTs = analyzeFile('test/unittest/@ohos.input_sample.d.ts'); 458c339a94Sopenharmony_ci let retJson = JSON.stringify(structOfTs); 468c339a94Sopenharmony_ci let retNameSpace = retJson.search('\'name\':\'napitest\''); 478c339a94Sopenharmony_ci assert.strictEqual(retNameSpace > 0, true); 488c339a94Sopenharmony_ci let retLicense = retJson.search('Copyright'); 498c339a94Sopenharmony_ci assert.strictEqual(retLicense > 0, true); 508c339a94Sopenharmony_ci }); 518c339a94Sopenharmony_ci 528c339a94Sopenharmony_ci partOfEnum(); 538c339a94Sopenharmony_ci 548c339a94Sopenharmony_ci partOfFunction(correctResult); 558c339a94Sopenharmony_ci 568c339a94Sopenharmony_ci partOfInterface(correctResult); 578c339a94Sopenharmony_ci 588c339a94Sopenharmony_ci partOfType(); 598c339a94Sopenharmony_ci 608c339a94Sopenharmony_ci partOfNamespace(correctResult); 618c339a94Sopenharmony_ci 628c339a94Sopenharmony_ci partOfParam(); 638c339a94Sopenharmony_ci 648c339a94Sopenharmony_ci it('test gen/analyze/return analyzeReturn', function () { 658c339a94Sopenharmony_ci let ret = analyzeReturn('string'); 668c339a94Sopenharmony_ci assert.strictEqual(ret[0], 'string'); 678c339a94Sopenharmony_ci assert.strictEqual(ret[1], false); 688c339a94Sopenharmony_ci let ret2 = analyzeReturn('boolean'); 698c339a94Sopenharmony_ci assert.strictEqual(ret2[0], 'boolean'); 708c339a94Sopenharmony_ci assert.strictEqual(ret2[1], false); 718c339a94Sopenharmony_ci }); 728c339a94Sopenharmony_ci 738c339a94Sopenharmony_ci it('test gen/analyze/return analyzeReturn', function () { 748c339a94Sopenharmony_ci let ret = analyzeReturn('Promise<string>'); 758c339a94Sopenharmony_ci assert.strictEqual(ret[0], 'Promise<string>'); 768c339a94Sopenharmony_ci assert.strictEqual(ret[1], true); 778c339a94Sopenharmony_ci let ret2 = analyzeReturn('Promise<boolean>'); 788c339a94Sopenharmony_ci assert.strictEqual(ret2[0], 'Promise<boolean>'); 798c339a94Sopenharmony_ci assert.strictEqual(ret2[1], true); 808c339a94Sopenharmony_ci }); 818c339a94Sopenharmony_ci}); 828c339a94Sopenharmony_ci 838c339a94Sopenharmony_cifunction partOfEnum() { 848c339a94Sopenharmony_ci it('test gen/analyze/enum analyzeStringEnum', function () { 858c339a94Sopenharmony_ci let data = '\nDENIED = "-1"'; 868c339a94Sopenharmony_ci let retJson = JSON.stringify(analyzeEnum(data)); 878c339a94Sopenharmony_ci let enumValueType = retJson.search('\'enumValueType\':1'); 888c339a94Sopenharmony_ci assert.strictEqual(enumValueType > 0, true); 898c339a94Sopenharmony_ci let element = retJson.search('\'name\':\'DENIED\',\'value\':\'-1\',\'type\':\'string\''); 908c339a94Sopenharmony_ci assert.strictEqual(element > 0, true); 918c339a94Sopenharmony_ci }); 928c339a94Sopenharmony_ci 938c339a94Sopenharmony_ci it('test gen/analyze/enum analyzeNumberEnum', function () { 948c339a94Sopenharmony_ci let data = '\nFAULT = 1,\nSTATISTIC = 2,\nSECURITY = 3,\nBEHAVIOR = 4,\n'; 958c339a94Sopenharmony_ci let retJson = JSON.stringify(analyzeEnum(data)); 968c339a94Sopenharmony_ci let enumValueType = retJson.search('\'enumValueType\':0'); 978c339a94Sopenharmony_ci assert.strictEqual(enumValueType > 0, true); 988c339a94Sopenharmony_ci let element = retJson.search('\'name\':\'FAULT\',\'value\':\'1\',\'type\':\'NUMBER_TYPE_'); 998c339a94Sopenharmony_ci assert.strictEqual(element > 0, true); 1008c339a94Sopenharmony_ci let retFunc = retJson.substring(retJson.search('function') - 1, retJson.search('function') + 12); 1018c339a94Sopenharmony_ci assert.strictEqual(retFunc, '\'function\':[]'); 1028c339a94Sopenharmony_ci }); 1038c339a94Sopenharmony_ci 1048c339a94Sopenharmony_ci it('test gen/analyze/enum analyzeEnumStringResult', function () { 1058c339a94Sopenharmony_ci let result = { 1068c339a94Sopenharmony_ci element: [{ name: 'STATUS0', value: '0', type: 'string' }], 1078c339a94Sopenharmony_ci function: [], 1088c339a94Sopenharmony_ci enumValueType: 0 1098c339a94Sopenharmony_ci }; 1108c339a94Sopenharmony_ci let retJson = JSON.stringify(analyzeEnumResult(result, 'STATUS0 = "1"', '0')); 1118c339a94Sopenharmony_ci let enumValueType = retJson.search('\'enumValueType\':1'); 1128c339a94Sopenharmony_ci assert.strictEqual(enumValueType > 0, true); 1138c339a94Sopenharmony_ci }); 1148c339a94Sopenharmony_ci 1158c339a94Sopenharmony_ci it('test gen/analyze/enum analyzeEnumNumberResult', function () { 1168c339a94Sopenharmony_ci let result = { 1178c339a94Sopenharmony_ci element: [{ name: 'STATUS1', value: '0', type: 'NUMBER_TYPE_1' }], 1188c339a94Sopenharmony_ci function: [], 1198c339a94Sopenharmony_ci enumValueType: 0 1208c339a94Sopenharmony_ci }; 1218c339a94Sopenharmony_ci let retJson = JSON.stringify(analyzeEnumResult(result, 'STATUS1 = 1', '0')); 1228c339a94Sopenharmony_ci let enumValueType = retJson.search('\'enumValueType\':0'); 1238c339a94Sopenharmony_ci assert.strictEqual(enumValueType > 0, true); 1248c339a94Sopenharmony_ci }); 1258c339a94Sopenharmony_ci} 1268c339a94Sopenharmony_ci 1278c339a94Sopenharmony_cifunction partOfFunction(correctResult) { 1288c339a94Sopenharmony_ci partOfFunctionOne(correctResult); 1298c339a94Sopenharmony_ci 1308c339a94Sopenharmony_ci it('test gen/analyze/function analyzeFuncNoNameInterface', function () { 1318c339a94Sopenharmony_ci let data = { 1328c339a94Sopenharmony_ci exports: [], 1338c339a94Sopenharmony_ci enum: [], 1348c339a94Sopenharmony_ci const: [], 1358c339a94Sopenharmony_ci type: [], 1368c339a94Sopenharmony_ci function: [], 1378c339a94Sopenharmony_ci interface: [], 1388c339a94Sopenharmony_ci class: [], 1398c339a94Sopenharmony_ci namespace: [], 1408c339a94Sopenharmony_ci }; 1418c339a94Sopenharmony_ci let values = 'fp3: {nm: string, isTrue: boolean}'; 1428c339a94Sopenharmony_ci let retJson = JSON.stringify(analyzeFuncNoNameInterface(data, values)); 1438c339a94Sopenharmony_ci retJson = re.replaceAll(retJson, 'AUTO_INTERFACE_[0-9]+', 'AUTO_INTERFACE'); 1448c339a94Sopenharmony_ci assert.strictEqual(retJson, '{\'interfaceName\':\'AUTO_INTERFACE\',\'values\':\'fp3:AUTO_INTERFACE\'}'); 1458c339a94Sopenharmony_ci }); 1468c339a94Sopenharmony_ci 1478c339a94Sopenharmony_ci it('test gen/analyze/function analyseSubReturn', function () { 1488c339a94Sopenharmony_ci let data = { 1498c339a94Sopenharmony_ci exports: [], 1508c339a94Sopenharmony_ci enum: [], 1518c339a94Sopenharmony_ci const: [], 1528c339a94Sopenharmony_ci type: [], 1538c339a94Sopenharmony_ci function: [], 1548c339a94Sopenharmony_ci interface: [], 1558c339a94Sopenharmony_ci class: [], 1568c339a94Sopenharmony_ci namespace: [], 1578c339a94Sopenharmony_ci }; 1588c339a94Sopenharmony_ci let ret = '{read:number;written:number}'; 1598c339a94Sopenharmony_ci let retJson = JSON.stringify(analyseSubReturn(ret, data)); 1608c339a94Sopenharmony_ci retJson = re.replaceAll(retJson, 'AUTO_INTERFACE_[0-9]+', 'AUTO_INTERFACE'); 1618c339a94Sopenharmony_ci assert.strictEqual(retJson, '\'AUTO_INTERFACE\''); 1628c339a94Sopenharmony_ci }); 1638c339a94Sopenharmony_ci 1648c339a94Sopenharmony_ci it('test gen/analyze/function getFuncParaType', function () { 1658c339a94Sopenharmony_ci let data = 'if_direct(v1: string, v2: boolean): string;'; 1668c339a94Sopenharmony_ci let v = { name: 'v1', type: 'string' }; 1678c339a94Sopenharmony_ci let retJson = JSON.stringify(getFuncParaType(v, '', data)); 1688c339a94Sopenharmony_ci assert.strictEqual(retJson, '{\'name\':\'v1\',\'type\':\'string\'}'); 1698c339a94Sopenharmony_ci }); 1708c339a94Sopenharmony_ci 1718c339a94Sopenharmony_ci partOfFunctionTwo(); 1728c339a94Sopenharmony_ci} 1738c339a94Sopenharmony_ci 1748c339a94Sopenharmony_cifunction partOfFunctionOne(correctResult) { 1758c339a94Sopenharmony_ci it('test gen/analyze/function analyzeSubInterface', function () { 1768c339a94Sopenharmony_ci let data = correctResult.ParamIn.analyzeSubInterface; 1778c339a94Sopenharmony_ci let retJson = JSON.stringify(analyzeSubInterface(data)); 1788c339a94Sopenharmony_ci let retNum = retJson.search('{\'name\':\'num1\',\'type\':\'NUMBER_TYPE_'); 1798c339a94Sopenharmony_ci assert.strictEqual(retNum > 0, true); 1808c339a94Sopenharmony_ci let retString = retJson.search('{\'name\':\'str1\',\'type\':\'string\'}'); 1818c339a94Sopenharmony_ci assert.strictEqual(retString > 0, true); 1828c339a94Sopenharmony_ci let retBoolean = retJson.search('{\'name\':\'bool1\',\'type\':\'boolean\'}'); 1838c339a94Sopenharmony_ci assert.strictEqual(retBoolean > 0, true); 1848c339a94Sopenharmony_ci let retArrayNum = retJson.search('{\'name\':\'nums\',\'type\':\'Array<NUMBER_TYPE_'); 1858c339a94Sopenharmony_ci assert.strictEqual(retArrayNum > 0, true); 1868c339a94Sopenharmony_ci let retArrayString = retJson.search('{\'name\':\'strs\',\'type\':\'Array<string>\'}'); 1878c339a94Sopenharmony_ci assert.strictEqual(retArrayString > 0, true); 1888c339a94Sopenharmony_ci let retArrayBoolean = retJson.search('{\'name\':\'bools\',\'type\':\'Array<boolean>\'}'); 1898c339a94Sopenharmony_ci assert.strictEqual(retArrayBoolean > 0, true); 1908c339a94Sopenharmony_ci let retMapNumber = retJson.search('{\'name\':\'mapNum\',\'type\':\'Map<string, NUMBER_TYPE_'); 1918c339a94Sopenharmony_ci assert.strictEqual(retMapNumber > 0, true); 1928c339a94Sopenharmony_ci let retMapString = retJson.search('{\'name\':\'mapStr\',\'type\':\'Map<string, string>\'}'); 1938c339a94Sopenharmony_ci assert.strictEqual(retMapString > 0, true); 1948c339a94Sopenharmony_ci let retMapBoolean = retJson.search('{\'name\':\'mapBool\',\'type\':\'Map<string, boolean>\'}'); 1958c339a94Sopenharmony_ci assert.strictEqual(retMapBoolean > 0, true); 1968c339a94Sopenharmony_ci let retMapNumber2 = retJson.indexOf('\'name\':\'mapNum2\',\'type\':\'{[key: string]: NUMBER_TYPE_'); 1978c339a94Sopenharmony_ci assert.strictEqual(retMapNumber2 > 0, true); 1988c339a94Sopenharmony_ci let strictEqual = retJson.indexOf('\'name\':\'mapStr2\',\'type\':\'{[key: string]: string}'); 1998c339a94Sopenharmony_ci assert.strictEqual(strictEqual > 0, true); 2008c339a94Sopenharmony_ci let retMapBoolean2 = retJson.indexOf('\'name\':\'mapBool2\',\'type\':\'{[key: string]: boolean}'); 2018c339a94Sopenharmony_ci assert.strictEqual(retMapBoolean2 > 0, true); 2028c339a94Sopenharmony_ci }); 2038c339a94Sopenharmony_ci} 2048c339a94Sopenharmony_ci 2058c339a94Sopenharmony_cifunction partOfFunctionTwo() { 2068c339a94Sopenharmony_ci it('test gen/analyze/function analyzeDirectFunction', function () { 2078c339a94Sopenharmony_ci let data = 'if_direct(v1: string, v2: boolean): string;'; 2088c339a94Sopenharmony_ci let ret = analyzeFunction(data, false, `if_direct`, 'v1: string, v2: boolean', 'asdfgh'); 2098c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 2108c339a94Sopenharmony_ci let str1 = '{\'name\':\'v1\',\'type\':\'string\',\'optional\':false,\'realType\':\'string\'},'; 2118c339a94Sopenharmony_ci let str2 = '{\'name\':\'v2\',\'type\':\'boolean\',\'optional\':false,\'realType\':\'boolean\'}'; 2128c339a94Sopenharmony_ci let retValue = retJson.search(str1 + str2) 2138c339a94Sopenharmony_ci assert.strictEqual(retValue > 0, true); 2148c339a94Sopenharmony_ci let retName = retJson.search('\'name\':\'if_direct\''); 2158c339a94Sopenharmony_ci assert.strictEqual(retName > 0, true); 2168c339a94Sopenharmony_ci let retType = retJson.search('\'type\':1'); 2178c339a94Sopenharmony_ci assert.strictEqual(retType > 0, true); 2188c339a94Sopenharmony_ci }); 2198c339a94Sopenharmony_ci 2208c339a94Sopenharmony_ci it('test gen/analyze/function analyzeAsyncFunction', function () { 2218c339a94Sopenharmony_ci let data = 'if_async(v1: string, cb: AsyncCallback<string>): string;'; 2228c339a94Sopenharmony_ci let ret = analyzeFunction(data, false, `if_async`, 'v1: string, cb: AsyncCallback<string>', 'qwerty'); 2238c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 2248c339a94Sopenharmony_ci let str1 = '{\'name\':\'v1\',\'type\':\'string\',\'optional\':false,\'realType\':\'string\'},'; 2258c339a94Sopenharmony_ci let str2 = '{\'name\':\'cb\',\'type\':\'AsyncCallback<string>\',\'optional\':false,\'realType\':\'AsyncCallback<string>\'}'; 2268c339a94Sopenharmony_ci let retValue = retJson.search(str1 + str2); 2278c339a94Sopenharmony_ci assert.strictEqual(retValue > 0, true); 2288c339a94Sopenharmony_ci let retName = retJson.search('\'name\':\'if_async\''); 2298c339a94Sopenharmony_ci assert.strictEqual(retName > 0, true); 2308c339a94Sopenharmony_ci let retType = retJson.search('\'type\':4'); 2318c339a94Sopenharmony_ci assert.strictEqual(retType > 0, true); 2328c339a94Sopenharmony_ci }); 2338c339a94Sopenharmony_ci 2348c339a94Sopenharmony_ci it('test gen/analyze/function analyzeSyncFunction', function () { 2358c339a94Sopenharmony_ci let data = 'if_callback(v1: string, cb: Callback<Array<string>>): string;'; 2368c339a94Sopenharmony_ci let ret = analyzeFunction(data, false, `if_callback`, 'v1: string, cb: Callback<Array<string>>', 'zxcvbn'); 2378c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 2388c339a94Sopenharmony_ci let retType = retJson.search('\'type\':2'); 2398c339a94Sopenharmony_ci assert.strictEqual(retType > 0, true); 2408c339a94Sopenharmony_ci }); 2418c339a94Sopenharmony_ci 2428c339a94Sopenharmony_ci it('test gen/analyze/function analyzePromiseFunction', function () { 2438c339a94Sopenharmony_ci let data = 'if_promise(v1: Array<number>): Promise<boolean>;'; 2448c339a94Sopenharmony_ci let ret = analyzeFunction(data, false, `if_promise`, 'v1: Array<number>', 'Promise<boolean>'); 2458c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 2468c339a94Sopenharmony_ci let retType = retJson.search('\'type\':4'); 2478c339a94Sopenharmony_ci assert.strictEqual(retType > 0, true); 2488c339a94Sopenharmony_ci let retReturn = retJson.search('\'ret\':\'void\''); 2498c339a94Sopenharmony_ci assert.strictEqual(retReturn > 0, true); 2508c339a94Sopenharmony_ci }); 2518c339a94Sopenharmony_ci} 2528c339a94Sopenharmony_ci 2538c339a94Sopenharmony_cifunction partOfInterface(correctResult) { 2548c339a94Sopenharmony_ci it('test gen/analyze/interface analyzeInterface', function () { 2558c339a94Sopenharmony_ci let data = correctResultParamIn.analyzeInterface; 2568c339a94Sopenharmony_ci let ret = analyzeInterface(data); 2578c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 2588c339a94Sopenharmony_ci let valueArray = retJson.substring(retJson.indexOf('\[') + 1, retJson.indexOf('\]')).split('}'); 2598c339a94Sopenharmony_ci let numContain = valueArray[0].indexOf('\'name\':\'num1\',\'type\':\'NUMBER_TYPE_'); 2608c339a94Sopenharmony_ci assert.strictEqual(numContain > 0, true); 2618c339a94Sopenharmony_ci assert.strictEqual(valueArray[1], ',{\'name\':\'str1\',\'type\':\'string\',\'realType\':\'string\',\'optional\':false'); 2628c339a94Sopenharmony_ci assert.strictEqual(valueArray[2], ',{\'name\':\'bool1\',\'type\':\'boolean\',\'realType\':\'boolean\',\'optional\':false'); 2638c339a94Sopenharmony_ci let numArrayCon = valueArray[3].indexOf('\'name\':\'nums\',\'type\':\'Array<NUMBER_TYPE_'); 2648c339a94Sopenharmony_ci assert.strictEqual(numArrayCon > 0, true); 2658c339a94Sopenharmony_ci assert.strictEqual(valueArray[4], ',{\'name\':\'strs\',\'type\':\'Array<string>\',\'realType\':\'Array<string>\',\'optional\':false'); 2668c339a94Sopenharmony_ci assert.strictEqual(valueArray[5], ',{\'name\':\'bools\',\'type\':\'Array<boolean>\',\'realType\':\'Array<boolean>\',\'optional\':false'); 2678c339a94Sopenharmony_ci let numMapCon = valueArray[6].indexOf('\'name\':\'mapNum\',\'type\':\'Map<string,NUMBER_TYPE_'); 2688c339a94Sopenharmony_ci assert.strictEqual(numMapCon > 0, true); 2698c339a94Sopenharmony_ci assert.strictEqual(valueArray[7], ',{\'name\':\'mapStr\',\'type\':\'Map<string,string>\',\'realType\':\'Map<string,string>\',\'optional\':false'); 2708c339a94Sopenharmony_ci let mapNumCon = retJson.indexOf('\'name\':\'mapNum2\',\'type\':\'{[key:string]:NUMBER_TYPE_'); 2718c339a94Sopenharmony_ci assert.strictEqual(mapNumCon > 0, true); 2728c339a94Sopenharmony_ci let mapStrCon = retJson.indexOf('\'name\':\'mapStr2\',\'type\':\'{[key:string]:string}'); 2738c339a94Sopenharmony_ci assert.strictEqual(mapStrCon > 0, true); 2748c339a94Sopenharmony_ci let mapBoolCon = retJson.indexOf('\'name\':\'mapBool2\',\'type\':\'{[key:string]:boolean}'); 2758c339a94Sopenharmony_ci assert.strictEqual(mapBoolCon > 0, true); 2768c339a94Sopenharmony_ci let asyncExit = retJson.search('\'name\':\'if_async\',\'type\':4'); 2778c339a94Sopenharmony_ci assert.strictEqual(asyncExit > 0, true); 2788c339a94Sopenharmony_ci let asyncArray = retJson.substring(retJson.lastIndexOf('\[') + 1, retJson.lastIndexOf('\]')).split('}'); 2798c339a94Sopenharmony_ci assert.strictEqual(asyncArray[0], '{\'name\':\'v1\',\'type\':\'string\',\'optional\':false,\'realType\':\'string\''); 2808c339a94Sopenharmony_ci assert.strictEqual(asyncArray[1], ',{\'name\':\'cb\',\'type\':\'AsyncCallback<string>\',\'optional\':false,\'realType\':\'AsyncCallback<string>\''); 2818c339a94Sopenharmony_ci assert.strictEqual(asyncArray[2], '],\'ret\':\'string\',\'isStatic\':false'); 2828c339a94Sopenharmony_ci }); 2838c339a94Sopenharmony_ci} 2848c339a94Sopenharmony_ci 2858c339a94Sopenharmony_cifunction partOfType() { 2868c339a94Sopenharmony_ci it('test gen/analyze/type analyzeType', function () { 2878c339a94Sopenharmony_ci let retJson = JSON.stringify(analyzeType('tomato: string;\ntomatoTag: boolean;')); 2888c339a94Sopenharmony_ci let value0 = retJson.search('\'name\':\'tomato\',\'type\':\'string\''); 2898c339a94Sopenharmony_ci assert.strictEqual(value0 > 0, true); 2908c339a94Sopenharmony_ci let value1 = retJson.search('\'name\':\'tomatoTag\',\'type\':\'boolean\''); 2918c339a94Sopenharmony_ci assert.strictEqual(value1 > 0, true); 2928c339a94Sopenharmony_ci }); 2938c339a94Sopenharmony_ci 2948c339a94Sopenharmony_ci it('test gen/analyze/type analyzeType2', function () { 2958c339a94Sopenharmony_ci let retJson = JSON.stringify(analyzeType2('aaa' | 'bbb' | 'ccc')); 2968c339a94Sopenharmony_ci let enumValueType = retJson.search('\'enumValueType\':1'); 2978c339a94Sopenharmony_ci assert.strictEqual(enumValueType > 0, true); 2988c339a94Sopenharmony_ci let element0 = retJson.search('\'name\':\'NAME_AAA\',\'value\':\'aaa\',\'type\':\'string\''); 2998c339a94Sopenharmony_ci assert.strictEqual(element0 > 0, true); 3008c339a94Sopenharmony_ci let element1 = retJson.search('\'name\':\'NAME_BBB\',\'value\':\'bbb\',\'type\':\'string\''); 3018c339a94Sopenharmony_ci assert.strictEqual(element1 > 0, true); 3028c339a94Sopenharmony_ci let element2 = retJson.search('\'name\':\'NAME_CCC\',\'value\':\'ccc\',\'type\':\'string\''); 3038c339a94Sopenharmony_ci assert.strictEqual(element2 > 0, true); 3048c339a94Sopenharmony_ci }); 3058c339a94Sopenharmony_ci} 3068c339a94Sopenharmony_ci 3078c339a94Sopenharmony_cifunction partOfNamespace(correctResult) { 3088c339a94Sopenharmony_ci it('test gen/analyze/namespace analyzeNamespace', function () { 3098c339a94Sopenharmony_ci let ret = analyzeNamespace(correctResult.ParamIn.analyzeNamespace); 3108c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 3118c339a94Sopenharmony_ci let nameResult = retJson.substring(retJson.search('namespace') - 1, retJson.length - 1); 3128c339a94Sopenharmony_ci let searchExport = nameResult.search('\'exports\''); 3138c339a94Sopenharmony_ci let exportResult = nameResult.substring(searchExport, nameResult.search('\'exports\'') + 20); 3148c339a94Sopenharmony_ci assert.strictEqual(exportResult, '\'exports\':[\'Entity\']'); 3158c339a94Sopenharmony_ci let enumResult = nameResult.substring(nameResult.search('\'enum\''), nameResult.indexOf('\'const\'') - 1); 3168c339a94Sopenharmony_ci assert.strictEqual(enumResult.search('\'name\':\'Entity\'') > 0, true); 3178c339a94Sopenharmony_ci assert.strictEqual(enumResult.search('\'enumValueType\':1') > 0, true); 3188c339a94Sopenharmony_ci let searchInte = nameResult.indexOf('\'interface\''); 3198c339a94Sopenharmony_ci let interResult = nameResult.substring(searchInte, nameResult.indexOf('\'class\'') - 1); 3208c339a94Sopenharmony_ci assert.strictEqual(interResult.search('{\'name\':\'animal\',\'type\':\'string\'}') > 0, false); 3218c339a94Sopenharmony_ci let qiePianStart = interResult.lastIndexOf('function') - 1; 3228c339a94Sopenharmony_ci let qiepianEnd = interResult.lastIndexOf('parentNameList') - 2; 3238c339a94Sopenharmony_ci let interFun = interResult.substring(qiePianStart, qiepianEnd); 3248c339a94Sopenharmony_ci let interValue = '\'value\':[{\'name\':\'v1\',\'type\':\'string\',\'optional\':false,\'realType\':\'string\'}],'; 3258c339a94Sopenharmony_ci let interRet = '\'ret\':\'string\','; 3268c339a94Sopenharmony_ci let interIsStatic = '\'isStatic\':false\}]'; 3278c339a94Sopenharmony_ci let funcResult = '\'function\':[{\'name\':\'fix\',\'type\':1,' + interValue + interRet + interIsStatic; 3288c339a94Sopenharmony_ci assert.strictEqual(interFun, funcResult); 3298c339a94Sopenharmony_ci }); 3308c339a94Sopenharmony_ci 3318c339a94Sopenharmony_ci it('test gen/analyze/namespace analyzeNamespaceClass', function () { 3328c339a94Sopenharmony_ci let ret = analyzeNamespace('\nnamespace Space3 {\nclass TestClass {\nstatic $fun1(v:string):boolean;\n}\n}\n'); 3338c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 3348c339a94Sopenharmony_ci let nameResult = retJson.substring(retJson.search('namespace'), retJson.length - 2); 3358c339a94Sopenharmony_ci let interResult = nameResult.substring(nameResult.search('\'interface\'') - 1, nameResult.length); 3368c339a94Sopenharmony_ci let classResult = interResult.substring(interResult.search('\'function\'') - 1, interResult.length); 3378c339a94Sopenharmony_ci assert.strictEqual(classResult.search('\'isStatic\':true') > 0, true); 3388c339a94Sopenharmony_ci }); 3398c339a94Sopenharmony_ci 3408c339a94Sopenharmony_ci it('test gen/analyze/namespace analyzeNamespaceFunction', function () { 3418c339a94Sopenharmony_ci let ret = analyzeNamespace('\nnamespace Space3 {\nfunction fun1(v: string): boolean;\n}\n'); 3428c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 3438c339a94Sopenharmony_ci let nameResult = retJson.substring(retJson.search('namespace'), retJson.length - 2); 3448c339a94Sopenharmony_ci let qiePianStart = nameResult.lastIndexOf('\'function\''); 3458c339a94Sopenharmony_ci let funcResult = nameResult.substring(qiePianStart, nameResult.lastIndexOf('\'interface\'') - 2); 3468c339a94Sopenharmony_ci assert.strictEqual(funcResult.search('\'name\':\'fun1\',\'type\':1') > 0, true); 3478c339a94Sopenharmony_ci assert.strictEqual(funcResult.search('{\'name\':\'v\',\'type\':\'string\',\'optional\':false,\'realType\':\'string\'}') > 0, true); 3488c339a94Sopenharmony_ci }); 3498c339a94Sopenharmony_ci 3508c339a94Sopenharmony_ci partOfNamespaceTwo(correctResult); 3518c339a94Sopenharmony_ci 3528c339a94Sopenharmony_ci partOfNamespaceThree(correctResult); 3538c339a94Sopenharmony_ci 3548c339a94Sopenharmony_ci partOfNamespaceFour(correctResult); 3558c339a94Sopenharmony_ci} 3568c339a94Sopenharmony_ci 3578c339a94Sopenharmony_cifunction partOfNamespaceTwo(correctResult) { 3588c339a94Sopenharmony_ci it('test gen/analyze/namespace parseNamespace', function () { 3598c339a94Sopenharmony_ci let data = correctResult.ParamIn.parseNamespace; 3608c339a94Sopenharmony_ci let matchs = re.match(' *\n*', data); 3618c339a94Sopenharmony_ci let result = { 3628c339a94Sopenharmony_ci exports: [], 3638c339a94Sopenharmony_ci enum: [], 3648c339a94Sopenharmony_ci const: [], 3658c339a94Sopenharmony_ci type: [], 3668c339a94Sopenharmony_ci function: [], 3678c339a94Sopenharmony_ci interface: [], 3688c339a94Sopenharmony_ci class: [], 3698c339a94Sopenharmony_ci namespace: [], 3708c339a94Sopenharmony_ci }; 3718c339a94Sopenharmony_ci let ret = parseNamespace(matchs, data, result); 3728c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 3738c339a94Sopenharmony_ci assert.strictEqual(retJson, '\'\\n\''); 3748c339a94Sopenharmony_ci }); 3758c339a94Sopenharmony_ci 3768c339a94Sopenharmony_ci it('test gen/analyze/namespace parseEnum', function () { 3778c339a94Sopenharmony_ci let data = correctResult.ParamIn.parseEnum; 3788c339a94Sopenharmony_ci let matchs = re.match(' *\n*', data); 3798c339a94Sopenharmony_ci let result = { 3808c339a94Sopenharmony_ci exports: [], 3818c339a94Sopenharmony_ci enum: [], 3828c339a94Sopenharmony_ci const: [], 3838c339a94Sopenharmony_ci type: [], 3848c339a94Sopenharmony_ci function: [], 3858c339a94Sopenharmony_ci interface: [], 3868c339a94Sopenharmony_ci class: [], 3878c339a94Sopenharmony_ci namespace: [], 3888c339a94Sopenharmony_ci }; 3898c339a94Sopenharmony_ci let ret = parseEnum(matchs, data, result); 3908c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 3918c339a94Sopenharmony_ci assert.strictEqual(retJson, '\'\\n\''); 3928c339a94Sopenharmony_ci }) 3938c339a94Sopenharmony_ci} 3948c339a94Sopenharmony_ci 3958c339a94Sopenharmony_cifunction partOfNamespaceThree(correctResult) { 3968c339a94Sopenharmony_ci it('test gen/analyze/namespace parseFunction', function () { 3978c339a94Sopenharmony_ci let data = 'function fun1(name: string, flags: number): boolean;\n'; 3988c339a94Sopenharmony_ci let matchs = re.match(' *\n*', data); 3998c339a94Sopenharmony_ci let result = { 4008c339a94Sopenharmony_ci exports: [], 4018c339a94Sopenharmony_ci enum: [], 4028c339a94Sopenharmony_ci const: [], 4038c339a94Sopenharmony_ci type: [], 4048c339a94Sopenharmony_ci function: [], 4058c339a94Sopenharmony_ci interface: [], 4068c339a94Sopenharmony_ci class: [], 4078c339a94Sopenharmony_ci namespace: [], 4088c339a94Sopenharmony_ci }; 4098c339a94Sopenharmony_ci let ret = parseFunction(matchs, data, result); 4108c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 4118c339a94Sopenharmony_ci assert.strictEqual(retJson, '\'\''); 4128c339a94Sopenharmony_ci }); 4138c339a94Sopenharmony_ci 4148c339a94Sopenharmony_ci it('test gen/analyze/namespace parseInterface', function () { 4158c339a94Sopenharmony_ci let data = correctResult.ParamIn.parseInterface; 4168c339a94Sopenharmony_ci let matchs = re.match(' *\n*', data) 4178c339a94Sopenharmony_ci let result = { 4188c339a94Sopenharmony_ci exports: [], 4198c339a94Sopenharmony_ci enum: [], 4208c339a94Sopenharmony_ci const: [], 4218c339a94Sopenharmony_ci type: [], 4228c339a94Sopenharmony_ci function: [], 4238c339a94Sopenharmony_ci interface: [], 4248c339a94Sopenharmony_ci class: [], 4258c339a94Sopenharmony_ci namespace: [], 4268c339a94Sopenharmony_ci }; 4278c339a94Sopenharmony_ci let ret = parseInterface(matchs, data, result); 4288c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 4298c339a94Sopenharmony_ci assert.strictEqual(retJson, '\'\\nfunction fun1(v: ConfigOption): void\\n\''); 4308c339a94Sopenharmony_ci }); 4318c339a94Sopenharmony_ci} 4328c339a94Sopenharmony_ci 4338c339a94Sopenharmony_cifunction partOfNamespaceFour(correctResult) { 4348c339a94Sopenharmony_ci it('test gen/analyze/namespace parseClass', function () { 4358c339a94Sopenharmony_ci let data = correctResult.ParamIn.parseClass; 4368c339a94Sopenharmony_ci let matchs = re.match(' *\n*', data) 4378c339a94Sopenharmony_ci let result = { 4388c339a94Sopenharmony_ci exports: [], 4398c339a94Sopenharmony_ci enum: [], 4408c339a94Sopenharmony_ci const: [], 4418c339a94Sopenharmony_ci type: [], 4428c339a94Sopenharmony_ci function: [], 4438c339a94Sopenharmony_ci interface: [], 4448c339a94Sopenharmony_ci class: [], 4458c339a94Sopenharmony_ci namespace: [], 4468c339a94Sopenharmony_ci }; 4478c339a94Sopenharmony_ci let ret = parseClass(matchs, data, result); 4488c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 4498c339a94Sopenharmony_ci assert.strictEqual(retJson, correctResult.ParamOut.parseClass); 4508c339a94Sopenharmony_ci }); 4518c339a94Sopenharmony_ci 4528c339a94Sopenharmony_ci it('test gen/analyze/namespace parseType', function () { 4538c339a94Sopenharmony_ci let data = correctResult.ParamIn.parseType; 4548c339a94Sopenharmony_ci let matchs = re.match(' *\n*', data) 4558c339a94Sopenharmony_ci let result = { 4568c339a94Sopenharmony_ci exports: [], 4578c339a94Sopenharmony_ci enum: [], 4588c339a94Sopenharmony_ci const: [], 4598c339a94Sopenharmony_ci type: [], 4608c339a94Sopenharmony_ci function: [], 4618c339a94Sopenharmony_ci interface: [], 4628c339a94Sopenharmony_ci class: [], 4638c339a94Sopenharmony_ci namespace: [], 4648c339a94Sopenharmony_ci }; 4658c339a94Sopenharmony_ci let ret = parseType(matchs, data, result); 4668c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 4678c339a94Sopenharmony_ci assert.strictEqual(retJson, correctResult.ParamOut.parseType); 4688c339a94Sopenharmony_ci }); 4698c339a94Sopenharmony_ci} 4708c339a94Sopenharmony_ci 4718c339a94Sopenharmony_cifunction partOfParam() { 4728c339a94Sopenharmony_ci it('test gen/analyze/params analyzeDirectParams', function () { 4738c339a94Sopenharmony_ci let ret = analyzeParams('', 'v1:string,v2:boolean'); 4748c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 4758c339a94Sopenharmony_ci let retJsonpian = retJson.substring(2, retJson.length - 4).split('}'); 4768c339a94Sopenharmony_ci assert.strictEqual(retJsonpian[0].indexOf('\'name\':\'v1\',\'type\':\'string\',\'optional\':false') > 0, true); 4778c339a94Sopenharmony_ci assert.strictEqual(retJsonpian[1].indexOf('\'name\':\'v2\',\'type\':\'boolean\',\'optional\':false') > 0, true); 4788c339a94Sopenharmony_ci assert.strictEqual(ret[1], 1); 4798c339a94Sopenharmony_ci }); 4808c339a94Sopenharmony_ci 4818c339a94Sopenharmony_ci it('test gen/analyze/params analyzeOptionalParams', function () { 4828c339a94Sopenharmony_ci let ret = analyzeParams('', 'v1:string,v2?:boolean'); 4838c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 4848c339a94Sopenharmony_ci let retJsonpian = retJson.substring(2, retJson.length - 4).split('}'); 4858c339a94Sopenharmony_ci assert.strictEqual(retJsonpian[0].indexOf('\'name\':\'v1\',\'type\':\'string\',\'optional\':false') > 0, true); 4868c339a94Sopenharmony_ci assert.strictEqual(retJsonpian[1].indexOf('\'name\':\'v2\',\'type\':\'boolean\',\'optional\':true') > 0, true); 4878c339a94Sopenharmony_ci assert.strictEqual(ret[1], 1); 4888c339a94Sopenharmony_ci }); 4898c339a94Sopenharmony_ci 4908c339a94Sopenharmony_ci 4918c339a94Sopenharmony_ci it('test gen/analyze/params analyzeAsynctParams', function () { 4928c339a94Sopenharmony_ci let ret = analyzeParams('', 'v2:string,cb:AsyncCallback<string>'); 4938c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 4948c339a94Sopenharmony_ci let retJsonpian = retJson.substring(2, retJson.length - 4).split('}'); 4958c339a94Sopenharmony_ci assert.strictEqual(retJsonpian[0].indexOf('\'name\':\'v2\',\'type\':\'string\',\'optional\':false') > 0, true); 4968c339a94Sopenharmony_ci let flag = retJsonpian[1].indexOf('\'name\':\'cb\',\'type\':\'AsyncCallback<string>\',\'optional\':false') > 0 4978c339a94Sopenharmony_ci assert.strictEqual(flag, true); 4988c339a94Sopenharmony_ci assert.strictEqual(ret[1], 4); 4998c339a94Sopenharmony_ci }); 5008c339a94Sopenharmony_ci 5018c339a94Sopenharmony_ci it('test gen/analyze/params analyzeSynctParams', function () { 5028c339a94Sopenharmony_ci let ret = analyzeParams('', 'v2:boolean,cb:Callback<boolean>'); 5038c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 5048c339a94Sopenharmony_ci let retJsonpian = retJson.substring(2, retJson.length - 4).split('}'); 5058c339a94Sopenharmony_ci assert.strictEqual(retJsonpian[0].indexOf('\'name\':\'v2\',\'type\':\'boolean\',\'optional\':false') > 0, true); 5068c339a94Sopenharmony_ci let flag = retJsonpian[1].indexOf('\'name\':\'cb\',\'type\':\'Callback<boolean>\',\'optional\':false') > 0 5078c339a94Sopenharmony_ci assert.strictEqual(flag, true); 5088c339a94Sopenharmony_ci assert.strictEqual(ret[1], 2); 5098c339a94Sopenharmony_ci }); 5108c339a94Sopenharmony_ci 5118c339a94Sopenharmony_ci it('test gen/analyze/params analyzeArrayParams', function () { 5128c339a94Sopenharmony_ci let ret = analyzeParams('', 'v1: Array<number>,v2:Map<string,boolean>'); 5138c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 5148c339a94Sopenharmony_ci let retJsonpian = retJson.substring(2, retJson.length - 4).split('}'); 5158c339a94Sopenharmony_ci let flagArray = retJsonpian[0].indexOf('\'name\':\'v1\',\'type\':\'Array<number>\',\'optional\':false') > 0 5168c339a94Sopenharmony_ci assert.strictEqual(flagArray, true); 5178c339a94Sopenharmony_ci let flag = retJsonpian[1].indexOf('\'name\':\'v2\',\'type\':\'Map<string,boolean>\',\'optional\':false') > 0 5188c339a94Sopenharmony_ci assert.strictEqual(flag, true); 5198c339a94Sopenharmony_ci }); 5208c339a94Sopenharmony_ci 5218c339a94Sopenharmony_ci partOfParamTwo(); 5228c339a94Sopenharmony_ci} 5238c339a94Sopenharmony_ci 5248c339a94Sopenharmony_cifunction partOfParamTwo() { 5258c339a94Sopenharmony_ci it('test gen/analyze/params analyzeMapParams', function () { 5268c339a94Sopenharmony_ci let ret = analyzeParams('', 'v1: string[],v2:{[key:string]:boolean}'); 5278c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 5288c339a94Sopenharmony_ci let retJsonpian = retJson.substring(2, retJson.length - 4); 5298c339a94Sopenharmony_ci assert.strictEqual(retJsonpian.indexOf('\'name\':\'v2\',\'type\':\'{\[key:string\]:boolean}\'') > 0, true); 5308c339a94Sopenharmony_ci assert.strictEqual(retJsonpian.indexOf('\'name\':\'v1\',\'type\':\'string[]\',\'optional\':false') > 0, true); 5318c339a94Sopenharmony_ci }); 5328c339a94Sopenharmony_ci 5338c339a94Sopenharmony_ci it('test gen/analyze/params analyzeInterfaceParams', function () { 5348c339a94Sopenharmony_ci let ret = analyzeParams('', 'v: Human'); 5358c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 5368c339a94Sopenharmony_ci let retJsonpian = retJson.substring(2, retJson.length - 4); 5378c339a94Sopenharmony_ci assert.strictEqual(retJsonpian.indexOf('\'name\':\'v\',\'type\':\'Human\'') > 0, true); 5388c339a94Sopenharmony_ci }); 5398c339a94Sopenharmony_ci 5408c339a94Sopenharmony_ci it('test gen/analyze/params analyzeInterfaceParams', function () { 5418c339a94Sopenharmony_ci let ret = analyzeParams('', 'v: any'); 5428c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 5438c339a94Sopenharmony_ci let retJsonpian = retJson.substring(2, retJson.length - 4); 5448c339a94Sopenharmony_ci assert.strictEqual(retJsonpian.indexOf('\'name\':\'v\',\'type\':\'any\'') > 0, true); 5458c339a94Sopenharmony_ci }); 5468c339a94Sopenharmony_ci 5478c339a94Sopenharmony_ci it('test gen/analyze/params analyzeInterfaceParams', function () { 5488c339a94Sopenharmony_ci let ret = analyzeParams('', 'v: string|number|boolean'); 5498c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 5508c339a94Sopenharmony_ci let retJsonpian = retJson.substring(2, retJson.length - 4); 5518c339a94Sopenharmony_ci assert.strictEqual(retJsonpian.indexOf('\'name\':\'v\',\'type\':\'string|number|boolean\'') > 0, true); 5528c339a94Sopenharmony_ci }); 5538c339a94Sopenharmony_ci}