1/* 2* Copyright (c) 2022 Shenzhen Kaihong Digital Industry Development Co., Ltd. 3* Licensed under the Apache License, Version 2.0 (the "License"); 4* you may not use this file except in compliance with the License. 5* You may obtain a copy of the License at 6* 7* http://www.apache.org/licenses/LICENSE-2.0 8* 9* Unless required by applicable law or agreed to in writing, software 10* distributed under the License is distributed on an "AS IS" BASIS, 11* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12* See the License for the specific language governing permissions and 13* limitations under the License. 14*/ 15let genDir = '../../src/gen/'; 16const { readFile, writeFile } = require(genDir + 'tools/FileRW'); 17const { getArrayType, getArrayTypeTwo } = require(genDir + 'tools/common'); 18const { isEnum, enumIndex, getMapType, checkFileError } = require(genDir + 'tools/common'); 19const { search, match, removeReg, getReg } = require(genDir + 'tools/re'); 20const { replaceAll, all } = require(genDir + 'tools/re'); 21const { checkOutBody, removeExplains, replaceTab } = require(genDir + 'tools/tool'); 22const { removeEmptyLine, print, getLicense, removeEmptyLine2 } = require(genDir + 'tools/tool'); 23const assert = require('assert'); 24const rewire = require('rewire'); 25const { json } = require('stream/consumers'); 26 27var correctResult; 28 29function before() { 30 let data = readFile('test/unittest/result.json'); 31 if (data) { 32 correctResult = JSON.parse(data); 33 } 34} 35describe('Tools', function () { 36 37 before(function () { 38 before(); 39 }); 40 41 it('test gen/tools/re search', function () { 42 let ret = search('@ohos([.a-z_A-Z0-9]+).d.ts', '@ohos.input_sample.d.ts'); 43 assert.strictEqual(JSON.stringify(ret), `{'regs':[[0,23],[5,18]]}`); 44 }); 45 46 it('test gen/tools/re match', function () { 47 let ret = match('@ohos([.a-z_A-Z0-9]+).d.ts', '@ohos.input_sample.d.ts'); 48 assert.strictEqual(JSON.stringify(ret), `{'regs':[[0,23],[5,18]]}`); 49 }); 50 51 partOfReTest(); 52 53 partOfCommonTest(); 54 55 partOfToolsTest(correctResult); 56 57 it('test gen/tools/tool removeExplains', function () { 58 let param = correctResult.ParamIn.removeExplains; 59 let ret = removeExplains(param); 60 let result = correctResult.tools.removeExplains; 61 assert.strictEqual(JSON.stringify(ret), JSON.stringify(result)); 62 }); 63 64 it('test gen/tools/FileRW readFile', function () { 65 let aaa = Math.random() * 10000; 66 let content = '时间 = %^(^*%*&^*' + aaa; 67 writeFile('test/unittest/testrw.txt', content); 68 let ret = readFile('test/unittest/testrw.txt'); 69 assert.strictEqual(ret, content); 70 }); 71 72}); 73 74function partOfReTest() { 75 it('test gen/tools/re removeReg', function () { 76 let ret = removeReg('export default napitest;', [4, 22]); 77 78 assert.strictEqual(JSON.stringify(ret), `'expot;'`); 79 }); 80 81 it('test gen/tools/re getReg', function () { 82 let data = 'declare namespace napitest {function fun6(v2: string): void;}export default napitest;'; 83 assert.strictEqual(JSON.stringify(getReg(data, [0, 10])), `'declare na'`); 84 }); 85 86 it('test gen/tools/re replaceAll', function () { 87 let ret = replaceAll('\n *//([a-zA-Z .]+)\n', '\\.', '\\.'); 88 let retJson = JSON.stringify(ret); 89 assert.strictEqual(retJson, `'\\n *//([a-zA-Z \\\\.]+)\\n'`); 90 }); 91 92 it('test gen/tools/re all', function () { 93 assert.strictEqual(JSON.stringify(all('\\.')), '{}'); 94 }); 95} 96 97function partOfCommonTest() { 98 it('test gen/tools/common getArrayType', function () { 99 let ret = getArrayType('Array<number>'); 100 assert.strictEqual(ret, 'number'); 101 }); 102 103 it('test gen/tools/common getArrayTypeTwo', function () { 104 let ret = getArrayTypeTwo('string[]'); 105 assert.strictEqual(ret, 'string'); 106 }); 107 108 it('test gen/tools/common isEnum', function () { 109 let enumElement = [{ name: 'STATUS0', value: '0', type: 'NUMBER_TYPE_1' }]; 110 let data = { 111 class: [], 112 const: [], 113 enum: [{ name: 'HttpStatus', body: { element: enumElement, function: [], enumValueType: 0 } }], 114 exports: ['HttpStatus'], 115 function: [], 116 interface: [], 117 namespace: [], 118 }; 119 let ret = isEnum('HttpStatus', data); 120 assert.strictEqual(ret, true); 121 }); 122 123 it('test gen/tools/common enumIndex', function () { 124 let enumElement = [{ name: 'STATUS0', value: '0', type: 'NUMBER_TYPE_1' }]; 125 let data = { 126 class: [], 127 const: [], 128 enum: [{ name: 'HttpStatus', body: { element: enumElement, function: [], enumValueType: 0 } }], 129 exports: ['HttpStatus'], 130 function: [], 131 interface: [], 132 namespace: [], 133 }; 134 let ret = enumIndex('HttpStatus', data); 135 assert.strictEqual(ret, '0'); 136 }); 137 138 partOfCommonTwo(); 139} 140 141function partOfCommonTwo() { 142 it('test gen/tools/common getMapType', function () { 143 let result = ['string', 'NUMBER_TYPE_1', undefined, undefined]; 144 let ret = getMapType('{[key:string]:NUMBER_TYPE_1}'); 145 assert.strictEqual(JSON.stringify(ret), JSON.stringify(result)); 146 }); 147 148 it('test gen/tools/common checkFileError', function () { 149 let result = [ 150 false, 151 "File 'napi_generator-master/test/unittest/@ohos.input_sample.d.ts' not found.\n" + 152 ' The file is in the program because:\n' + 153 ' Root file specified for compilation\n' 154 ]; 155 let ret = checkFileError('napi_generator-master\\test\\unittest\\@ohos.input_sample.d.ts'); 156 this.timeout(5000); 157 assert.strictEqual(JSON.stringify(ret), JSON.stringify(result)); 158 }); 159} 160 161function partOfToolsTest(correctResult) { 162 it('test gen/tools/tool print', function () { 163 let lib = rewire(genDir + 'tools/tool.js'); 164 let print = lib.__get__('print'); 165 print('tool test print'); 166 }); 167 168 it('test gen/tools/tool checkOutBody', function () { 169 let body = correctResult.ParamIn.checkOutBody; 170 let ret = checkOutBody(body, 27, null, true); 171 let result = 'function fun1(v1: { [key: string]: Array<string> }):void;'; 172 assert.strictEqual(JSON.stringify(ret), JSON.stringify(result)); 173 }); 174 175 it('test gen/tools/tool removeEmptyLine', function () { 176 param = correctResult.ParamIn.removeEmptyLine; 177 let retJson = JSON.stringify(removeEmptyLine(param)); 178 let result = 'declare namespace napitest {\nfunction fun1(v1: string):void;\n}\nexport default napitest;\n'; 179 assert.strictEqual(retJson, JSON.stringify(result)); 180 }); 181 182 it('test gen/tools/tool getLicense', function () { 183 param = correctResult.ParamIn.getLicense; 184 let retJson = JSON.stringify(getLicense(param)); 185 let result = '/*\n* Copyright (c) 2022 Shenzhen Kaihong Digital Industry Development Co., Ltd. \n*/'; 186 assert.strictEqual(retJson, JSON.stringify(result)); 187 }); 188 189 it('test gen/tools/tool replaceTab', function () { 190 param = 'declare namespace napitest {\tfunction fun1():void;}export default napitest;'; 191 let retJson = JSON.stringify(replaceTab(param)); 192 let result = 'declare namespace napitest { function fun1():void;}export default napitest;'; 193 assert.strictEqual(retJson, JSON.stringify(result)); 194 }); 195 196 it('test gen/tools/tool replaceAll', function () { 197 param = correctResult.toolsParam.replaceAll; 198 let ret = replaceAll(JSON.stringify(param), '[funcName]', 'if_direct'); 199 assert.strictEqual(JSON.stringify(ret), correctResult.tools.replaceAll); 200 }); 201}