13af6ab5fSopenharmony_ci/* 23af6ab5fSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 33af6ab5fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 43af6ab5fSopenharmony_ci * you may not use this file except in compliance with the License. 53af6ab5fSopenharmony_ci * You may obtain a copy of the License at 63af6ab5fSopenharmony_ci * 73af6ab5fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 83af6ab5fSopenharmony_ci * 93af6ab5fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 103af6ab5fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 113af6ab5fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 123af6ab5fSopenharmony_ci * See the License for the specific language governing permissions and 133af6ab5fSopenharmony_ci * limitations under the License. 143af6ab5fSopenharmony_ci */ 153af6ab5fSopenharmony_ci 163af6ab5fSopenharmony_ciimport { assert, expect } from 'chai'; 173af6ab5fSopenharmony_ciimport { before } from 'mocha'; 183af6ab5fSopenharmony_ciimport { 193af6ab5fSopenharmony_ci decodeSourcemap, 203af6ab5fSopenharmony_ci mergeSourceMap, 213af6ab5fSopenharmony_ci ExistingDecodedSourceMap, 223af6ab5fSopenharmony_ci Source, 233af6ab5fSopenharmony_ci SourceMapLink 243af6ab5fSopenharmony_ci} from '../../../src/utils/SourceMapMergingUtil'; 253af6ab5fSopenharmony_ciimport { RawSourceMap } from 'typescript'; 263af6ab5fSopenharmony_ci 273af6ab5fSopenharmony_cidescribe('test for SourceMapMergingUtil', function () { 283af6ab5fSopenharmony_ci it('test the sourcemap merging', function () { 293af6ab5fSopenharmony_ci /** 303af6ab5fSopenharmony_ci * // source ts code: 313af6ab5fSopenharmony_ci * function foo(){ 323af6ab5fSopenharmony_ci * console.log("hello world"); 333af6ab5fSopenharmony_ci * return 1; 343af6ab5fSopenharmony_ci * } 353af6ab5fSopenharmony_ci */ 363af6ab5fSopenharmony_ci const previousMap = { 373af6ab5fSopenharmony_ci "version": 3, 383af6ab5fSopenharmony_ci "file": "index.js", 393af6ab5fSopenharmony_ci "sources": [ 403af6ab5fSopenharmony_ci "index.ts" 413af6ab5fSopenharmony_ci ], 423af6ab5fSopenharmony_ci "names": [], 433af6ab5fSopenharmony_ci "mappings": "AAAA,SAAS,GAAG;IACV,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,OAAO,CAAC,CAAC;AACX,CAAC", 443af6ab5fSopenharmony_ci "sourceRoot": "", 453af6ab5fSopenharmony_ci } 463af6ab5fSopenharmony_ci /** 473af6ab5fSopenharmony_ci * // transformed ts code: 483af6ab5fSopenharmony_ci * function foo() { 493af6ab5fSopenharmony_ci * console.log("hello world"); 503af6ab5fSopenharmony_ci * return 1; 513af6ab5fSopenharmony_ci * } 523af6ab5fSopenharmony_ci */ 533af6ab5fSopenharmony_ci const currentMap = { 543af6ab5fSopenharmony_ci "version": 3, 553af6ab5fSopenharmony_ci "file": "index.js", 563af6ab5fSopenharmony_ci "sources": [ 573af6ab5fSopenharmony_ci "index.js" 583af6ab5fSopenharmony_ci ], 593af6ab5fSopenharmony_ci "names": [], 603af6ab5fSopenharmony_ci "mappings": "AAAA;IAEI,OAAO,CAAC,CAAC;CACZ", 613af6ab5fSopenharmony_ci "sourceRoot": "", 623af6ab5fSopenharmony_ci } 633af6ab5fSopenharmony_ci /** 643af6ab5fSopenharmony_ci * // obfuscated code: 653af6ab5fSopenharmony_ci * function a(){ 663af6ab5fSopenharmony_ci * return 1; 673af6ab5fSopenharmony_ci * } 683af6ab5fSopenharmony_ci */ 693af6ab5fSopenharmony_ci const actual = mergeSourceMap(previousMap as RawSourceMap, currentMap as RawSourceMap); 703af6ab5fSopenharmony_ci const expect = '{"version":3,"file":"index.js","sources":["index.ts"],"names":[],"mappings":"AAAA;IAEE,OAAO,CAAC,CAAC;CACV","sourceRoot":""}' 713af6ab5fSopenharmony_ci assert.isTrue(JSON.stringify(actual) === expect); 723af6ab5fSopenharmony_ci }); 733af6ab5fSopenharmony_ci 743af6ab5fSopenharmony_ci describe('test for SourceMapLink', function () { 753af6ab5fSopenharmony_ci let source: Source; 763af6ab5fSopenharmony_ci let mappings: ExistingDecodedSourceMap; 773af6ab5fSopenharmony_ci 783af6ab5fSopenharmony_ci before(() => { 793af6ab5fSopenharmony_ci source = new Source('example.js', 'console.log("Hello, World!");'); 803af6ab5fSopenharmony_ci mappings = { 813af6ab5fSopenharmony_ci version: 3, 823af6ab5fSopenharmony_ci file: 'out.js', 833af6ab5fSopenharmony_ci sources: ['example.js'], 843af6ab5fSopenharmony_ci names: ['console', 'log'], 853af6ab5fSopenharmony_ci mappings: [ 863af6ab5fSopenharmony_ci [[0, 0, 0, 0, 1]] 873af6ab5fSopenharmony_ci ], 883af6ab5fSopenharmony_ci sourcesContent: [], 893af6ab5fSopenharmony_ci }; 903af6ab5fSopenharmony_ci }); 913af6ab5fSopenharmony_ci 923af6ab5fSopenharmony_ci it('should trace mappings correctly', () => { 933af6ab5fSopenharmony_ci const sourceMapLink = new SourceMapLink(mappings, [source]); 943af6ab5fSopenharmony_ci const traced = sourceMapLink.traceMappings(); 953af6ab5fSopenharmony_ci 963af6ab5fSopenharmony_ci expect(traced.mappings).to.have.lengthOf(1); 973af6ab5fSopenharmony_ci expect(traced.names).to.include('log'); 983af6ab5fSopenharmony_ci expect(traced.sources).to.include('example.js'); 993af6ab5fSopenharmony_ci }); 1003af6ab5fSopenharmony_ci }); 1013af6ab5fSopenharmony_ci 1023af6ab5fSopenharmony_ci describe('test for decodeSourcemap', function () { 1033af6ab5fSopenharmony_ci it('should return null for null map', () => { 1043af6ab5fSopenharmony_ci const result = decodeSourcemap(null); 1053af6ab5fSopenharmony_ci expect(result).to.be.null; 1063af6ab5fSopenharmony_ci }); 1073af6ab5fSopenharmony_ci 1083af6ab5fSopenharmony_ci it('should return empty mappings for empty mappings string', () => { 1093af6ab5fSopenharmony_ci const map: RawSourceMap = { 1103af6ab5fSopenharmony_ci version: 3, 1113af6ab5fSopenharmony_ci file: 'out.js', 1123af6ab5fSopenharmony_ci sources: ['example.js'], 1133af6ab5fSopenharmony_ci names: [], 1143af6ab5fSopenharmony_ci mappings: '', // Empty mappings 1153af6ab5fSopenharmony_ci sourcesContent: ['Hello, World!'], 1163af6ab5fSopenharmony_ci }; 1173af6ab5fSopenharmony_ci 1183af6ab5fSopenharmony_ci const result = decodeSourcemap(map); 1193af6ab5fSopenharmony_ci expect(result).to.deep.equal({ 1203af6ab5fSopenharmony_ci names: [], 1213af6ab5fSopenharmony_ci mappings: [], 1223af6ab5fSopenharmony_ci sources: [], 1233af6ab5fSopenharmony_ci version: 3 1243af6ab5fSopenharmony_ci }); 1253af6ab5fSopenharmony_ci }); 1263af6ab5fSopenharmony_ci }); 1273af6ab5fSopenharmony_ci}); 128