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}