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 { readFile, writeFile } = require(genDir + 'tools/FileRW'); 178c339a94Sopenharmony_ciconst { getArrayType, getArrayTypeTwo } = require(genDir + 'tools/common'); 188c339a94Sopenharmony_ciconst { isEnum, enumIndex, getMapType, checkFileError } = require(genDir + 'tools/common'); 198c339a94Sopenharmony_ciconst { search, match, removeReg, getReg } = require(genDir + 'tools/re'); 208c339a94Sopenharmony_ciconst { replaceAll, all } = require(genDir + 'tools/re'); 218c339a94Sopenharmony_ciconst { checkOutBody, removeExplains, replaceTab } = require(genDir + 'tools/tool'); 228c339a94Sopenharmony_ciconst { removeEmptyLine, print, getLicense, removeEmptyLine2 } = require(genDir + 'tools/tool'); 238c339a94Sopenharmony_ciconst assert = require('assert'); 248c339a94Sopenharmony_ciconst rewire = require('rewire'); 258c339a94Sopenharmony_ciconst { json } = require('stream/consumers'); 268c339a94Sopenharmony_ci 278c339a94Sopenharmony_civar correctResult; 288c339a94Sopenharmony_ci 298c339a94Sopenharmony_cifunction before() { 308c339a94Sopenharmony_ci let data = readFile('test/unittest/result.json'); 318c339a94Sopenharmony_ci if (data) { 328c339a94Sopenharmony_ci correctResult = JSON.parse(data); 338c339a94Sopenharmony_ci } 348c339a94Sopenharmony_ci} 358c339a94Sopenharmony_cidescribe('Tools', function () { 368c339a94Sopenharmony_ci 378c339a94Sopenharmony_ci before(function () { 388c339a94Sopenharmony_ci before(); 398c339a94Sopenharmony_ci }); 408c339a94Sopenharmony_ci 418c339a94Sopenharmony_ci it('test gen/tools/re search', function () { 428c339a94Sopenharmony_ci let ret = search('@ohos([.a-z_A-Z0-9]+).d.ts', '@ohos.input_sample.d.ts'); 438c339a94Sopenharmony_ci assert.strictEqual(JSON.stringify(ret), `{'regs':[[0,23],[5,18]]}`); 448c339a94Sopenharmony_ci }); 458c339a94Sopenharmony_ci 468c339a94Sopenharmony_ci it('test gen/tools/re match', function () { 478c339a94Sopenharmony_ci let ret = match('@ohos([.a-z_A-Z0-9]+).d.ts', '@ohos.input_sample.d.ts'); 488c339a94Sopenharmony_ci assert.strictEqual(JSON.stringify(ret), `{'regs':[[0,23],[5,18]]}`); 498c339a94Sopenharmony_ci }); 508c339a94Sopenharmony_ci 518c339a94Sopenharmony_ci partOfReTest(); 528c339a94Sopenharmony_ci 538c339a94Sopenharmony_ci partOfCommonTest(); 548c339a94Sopenharmony_ci 558c339a94Sopenharmony_ci partOfToolsTest(correctResult); 568c339a94Sopenharmony_ci 578c339a94Sopenharmony_ci it('test gen/tools/tool removeExplains', function () { 588c339a94Sopenharmony_ci let param = correctResult.ParamIn.removeExplains; 598c339a94Sopenharmony_ci let ret = removeExplains(param); 608c339a94Sopenharmony_ci let result = correctResult.tools.removeExplains; 618c339a94Sopenharmony_ci assert.strictEqual(JSON.stringify(ret), JSON.stringify(result)); 628c339a94Sopenharmony_ci }); 638c339a94Sopenharmony_ci 648c339a94Sopenharmony_ci it('test gen/tools/FileRW readFile', function () { 658c339a94Sopenharmony_ci let aaa = Math.random() * 10000; 668c339a94Sopenharmony_ci let content = '时间 = %^(^*%*&^*' + aaa; 678c339a94Sopenharmony_ci writeFile('test/unittest/testrw.txt', content); 688c339a94Sopenharmony_ci let ret = readFile('test/unittest/testrw.txt'); 698c339a94Sopenharmony_ci assert.strictEqual(ret, content); 708c339a94Sopenharmony_ci }); 718c339a94Sopenharmony_ci 728c339a94Sopenharmony_ci}); 738c339a94Sopenharmony_ci 748c339a94Sopenharmony_cifunction partOfReTest() { 758c339a94Sopenharmony_ci it('test gen/tools/re removeReg', function () { 768c339a94Sopenharmony_ci let ret = removeReg('export default napitest;', [4, 22]); 778c339a94Sopenharmony_ci 788c339a94Sopenharmony_ci assert.strictEqual(JSON.stringify(ret), `'expot;'`); 798c339a94Sopenharmony_ci }); 808c339a94Sopenharmony_ci 818c339a94Sopenharmony_ci it('test gen/tools/re getReg', function () { 828c339a94Sopenharmony_ci let data = 'declare namespace napitest {function fun6(v2: string): void;}export default napitest;'; 838c339a94Sopenharmony_ci assert.strictEqual(JSON.stringify(getReg(data, [0, 10])), `'declare na'`); 848c339a94Sopenharmony_ci }); 858c339a94Sopenharmony_ci 868c339a94Sopenharmony_ci it('test gen/tools/re replaceAll', function () { 878c339a94Sopenharmony_ci let ret = replaceAll('\n *//([a-zA-Z .]+)\n', '\\.', '\\.'); 888c339a94Sopenharmony_ci let retJson = JSON.stringify(ret); 898c339a94Sopenharmony_ci assert.strictEqual(retJson, `'\\n *//([a-zA-Z \\\\.]+)\\n'`); 908c339a94Sopenharmony_ci }); 918c339a94Sopenharmony_ci 928c339a94Sopenharmony_ci it('test gen/tools/re all', function () { 938c339a94Sopenharmony_ci assert.strictEqual(JSON.stringify(all('\\.')), '{}'); 948c339a94Sopenharmony_ci }); 958c339a94Sopenharmony_ci} 968c339a94Sopenharmony_ci 978c339a94Sopenharmony_cifunction partOfCommonTest() { 988c339a94Sopenharmony_ci it('test gen/tools/common getArrayType', function () { 998c339a94Sopenharmony_ci let ret = getArrayType('Array<number>'); 1008c339a94Sopenharmony_ci assert.strictEqual(ret, 'number'); 1018c339a94Sopenharmony_ci }); 1028c339a94Sopenharmony_ci 1038c339a94Sopenharmony_ci it('test gen/tools/common getArrayTypeTwo', function () { 1048c339a94Sopenharmony_ci let ret = getArrayTypeTwo('string[]'); 1058c339a94Sopenharmony_ci assert.strictEqual(ret, 'string'); 1068c339a94Sopenharmony_ci }); 1078c339a94Sopenharmony_ci 1088c339a94Sopenharmony_ci it('test gen/tools/common isEnum', function () { 1098c339a94Sopenharmony_ci let enumElement = [{ name: 'STATUS0', value: '0', type: 'NUMBER_TYPE_1' }]; 1108c339a94Sopenharmony_ci let data = { 1118c339a94Sopenharmony_ci class: [], 1128c339a94Sopenharmony_ci const: [], 1138c339a94Sopenharmony_ci enum: [{ name: 'HttpStatus', body: { element: enumElement, function: [], enumValueType: 0 } }], 1148c339a94Sopenharmony_ci exports: ['HttpStatus'], 1158c339a94Sopenharmony_ci function: [], 1168c339a94Sopenharmony_ci interface: [], 1178c339a94Sopenharmony_ci namespace: [], 1188c339a94Sopenharmony_ci }; 1198c339a94Sopenharmony_ci let ret = isEnum('HttpStatus', data); 1208c339a94Sopenharmony_ci assert.strictEqual(ret, true); 1218c339a94Sopenharmony_ci }); 1228c339a94Sopenharmony_ci 1238c339a94Sopenharmony_ci it('test gen/tools/common enumIndex', function () { 1248c339a94Sopenharmony_ci let enumElement = [{ name: 'STATUS0', value: '0', type: 'NUMBER_TYPE_1' }]; 1258c339a94Sopenharmony_ci let data = { 1268c339a94Sopenharmony_ci class: [], 1278c339a94Sopenharmony_ci const: [], 1288c339a94Sopenharmony_ci enum: [{ name: 'HttpStatus', body: { element: enumElement, function: [], enumValueType: 0 } }], 1298c339a94Sopenharmony_ci exports: ['HttpStatus'], 1308c339a94Sopenharmony_ci function: [], 1318c339a94Sopenharmony_ci interface: [], 1328c339a94Sopenharmony_ci namespace: [], 1338c339a94Sopenharmony_ci }; 1348c339a94Sopenharmony_ci let ret = enumIndex('HttpStatus', data); 1358c339a94Sopenharmony_ci assert.strictEqual(ret, '0'); 1368c339a94Sopenharmony_ci }); 1378c339a94Sopenharmony_ci 1388c339a94Sopenharmony_ci partOfCommonTwo(); 1398c339a94Sopenharmony_ci} 1408c339a94Sopenharmony_ci 1418c339a94Sopenharmony_cifunction partOfCommonTwo() { 1428c339a94Sopenharmony_ci it('test gen/tools/common getMapType', function () { 1438c339a94Sopenharmony_ci let result = ['string', 'NUMBER_TYPE_1', undefined, undefined]; 1448c339a94Sopenharmony_ci let ret = getMapType('{[key:string]:NUMBER_TYPE_1}'); 1458c339a94Sopenharmony_ci assert.strictEqual(JSON.stringify(ret), JSON.stringify(result)); 1468c339a94Sopenharmony_ci }); 1478c339a94Sopenharmony_ci 1488c339a94Sopenharmony_ci it('test gen/tools/common checkFileError', function () { 1498c339a94Sopenharmony_ci let result = [ 1508c339a94Sopenharmony_ci false, 1518c339a94Sopenharmony_ci "File 'napi_generator-master/test/unittest/@ohos.input_sample.d.ts' not found.\n" + 1528c339a94Sopenharmony_ci ' The file is in the program because:\n' + 1538c339a94Sopenharmony_ci ' Root file specified for compilation\n' 1548c339a94Sopenharmony_ci ]; 1558c339a94Sopenharmony_ci let ret = checkFileError('napi_generator-master\\test\\unittest\\@ohos.input_sample.d.ts'); 1568c339a94Sopenharmony_ci this.timeout(5000); 1578c339a94Sopenharmony_ci assert.strictEqual(JSON.stringify(ret), JSON.stringify(result)); 1588c339a94Sopenharmony_ci }); 1598c339a94Sopenharmony_ci} 1608c339a94Sopenharmony_ci 1618c339a94Sopenharmony_cifunction partOfToolsTest(correctResult) { 1628c339a94Sopenharmony_ci it('test gen/tools/tool print', function () { 1638c339a94Sopenharmony_ci let lib = rewire(genDir + 'tools/tool.js'); 1648c339a94Sopenharmony_ci let print = lib.__get__('print'); 1658c339a94Sopenharmony_ci print('tool test print'); 1668c339a94Sopenharmony_ci }); 1678c339a94Sopenharmony_ci 1688c339a94Sopenharmony_ci it('test gen/tools/tool checkOutBody', function () { 1698c339a94Sopenharmony_ci let body = correctResult.ParamIn.checkOutBody; 1708c339a94Sopenharmony_ci let ret = checkOutBody(body, 27, null, true); 1718c339a94Sopenharmony_ci let result = 'function fun1(v1: { [key: string]: Array<string> }):void;'; 1728c339a94Sopenharmony_ci assert.strictEqual(JSON.stringify(ret), JSON.stringify(result)); 1738c339a94Sopenharmony_ci }); 1748c339a94Sopenharmony_ci 1758c339a94Sopenharmony_ci it('test gen/tools/tool removeEmptyLine', function () { 1768c339a94Sopenharmony_ci param = correctResult.ParamIn.removeEmptyLine; 1778c339a94Sopenharmony_ci let retJson = JSON.stringify(removeEmptyLine(param)); 1788c339a94Sopenharmony_ci let result = 'declare namespace napitest {\nfunction fun1(v1: string):void;\n}\nexport default napitest;\n'; 1798c339a94Sopenharmony_ci assert.strictEqual(retJson, JSON.stringify(result)); 1808c339a94Sopenharmony_ci }); 1818c339a94Sopenharmony_ci 1828c339a94Sopenharmony_ci it('test gen/tools/tool getLicense', function () { 1838c339a94Sopenharmony_ci param = correctResult.ParamIn.getLicense; 1848c339a94Sopenharmony_ci let retJson = JSON.stringify(getLicense(param)); 1858c339a94Sopenharmony_ci let result = '/*\n* Copyright (c) 2022 Shenzhen Kaihong Digital Industry Development Co., Ltd. \n*/'; 1868c339a94Sopenharmony_ci assert.strictEqual(retJson, JSON.stringify(result)); 1878c339a94Sopenharmony_ci }); 1888c339a94Sopenharmony_ci 1898c339a94Sopenharmony_ci it('test gen/tools/tool replaceTab', function () { 1908c339a94Sopenharmony_ci param = 'declare namespace napitest {\tfunction fun1():void;}export default napitest;'; 1918c339a94Sopenharmony_ci let retJson = JSON.stringify(replaceTab(param)); 1928c339a94Sopenharmony_ci let result = 'declare namespace napitest { function fun1():void;}export default napitest;'; 1938c339a94Sopenharmony_ci assert.strictEqual(retJson, JSON.stringify(result)); 1948c339a94Sopenharmony_ci }); 1958c339a94Sopenharmony_ci 1968c339a94Sopenharmony_ci it('test gen/tools/tool replaceAll', function () { 1978c339a94Sopenharmony_ci param = correctResult.toolsParam.replaceAll; 1988c339a94Sopenharmony_ci let ret = replaceAll(JSON.stringify(param), '[funcName]', 'if_direct'); 1998c339a94Sopenharmony_ci assert.strictEqual(JSON.stringify(ret), correctResult.tools.replaceAll); 2008c339a94Sopenharmony_ci }); 2018c339a94Sopenharmony_ci}