/* * Copyright (c) 2022 Shenzhen Kaihong Digital Industry Development Co., Ltd. * 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, * 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 { 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 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); } } 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'); 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]]}`); }); partOfReTest(); partOfCommonTest(); partOfToolsTest(correctResult); it('test gen/tools/tool removeExplains', function () { let param = correctResult['ParamIn']['removeExplains']; let ret = removeExplains(param); 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") assert.strictEqual(ret, content); }); }); function partOfReTest(){ it('test gen/tools/re removeReg', function () { 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"`); }); it('test gen/tools/re replaceAll', function () { 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']); }); }