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}