• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use rollupObject 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 */
15
16
17import { expect } from 'chai';
18import mocha from 'mocha';
19import path from 'path';
20import sinon from 'sinon';
21import fs from 'fs';
22import childProcess from 'child_process';
23import cluster from 'cluster';
24import { EventEmitter } from 'events';
25
26import { toUnixPath } from '../../../lib/utils';
27import { SourceMapGenerator } from '../../../lib/fast_build/ark_compiler/generate_sourcemap';
28import { shouldETSOrTSFileTransformToJS } from '../../../lib/fast_build/ark_compiler/utils';
29import {
30  RELEASE,
31  DEBUG,
32  ES2ABC,
33  MODULES_ABC,
34  EXTNAME_TS,
35  EXTNAME_JS,
36  EXTNAME_ETS,
37  OH_MODULES,
38  GEN_ABC_PLUGIN_NAME,
39  TS2ABC
40} from '../../../lib/fast_build/ark_compiler/common/ark_define';
41import RollUpPluginMock from '../mock/rollup_mock/rollup_plugin_mock';
42import ModuleModeMock from '../mock/class_mock/module_mode_mock';
43import { ModuleHotreloadMode } from '../../../lib/fast_build/ark_compiler/module/module_hotreload_mode';
44import { ModuleMode } from '../../../lib/fast_build/ark_compiler/module/module_mode';
45import {
46  ENTRYABILITY_TS_PATH_DEFAULT,
47  ENTRYABILITY_JS_PATH_DEFAULT,
48  INDEX_ETS_PATH_DEFAULT,
49  INDEX_TS_PATH_DEFAULT,
50  INDEX_JS_PATH_DEFAULT,
51  ENTRYABILITY_TS_RECORDNAME,
52  ENTRYABILITY_JS_RECORDNAME,
53  INDEX_ETS_RECORDNAME,
54  ENTRYABILITY_TS_NORMALIZED_RECORDNAME,
55  ENTRYABILITY_JS_NORMALIZED_RECORDNAME,
56  INDEX_ETS_NORMALIZED_RECORDNAME,
57  PKG_MODULES,
58  ENTRY_MODULE_NAME_DEFAULT,
59  TEST,
60  NEWFILE,
61  ENTRY_MODULE_VERSION_DEFAULT
62} from '../mock/rollup_mock/common';
63import projectConfig from '../utils/processProjectConfig';
64import {
65  EXPECT_SOURCEMAP_JSON,
66  PKG_MODULES_OHPM_HYPIUM,
67  ES2ABC_PATH,
68  DEBUG_INFO,
69  BUILD_NPM,
70  BUILD_INFO,
71  PREVIEW_DEBUG_INFO,
72  PREVIEW_DEBUG_NPM,
73  DEFAULT_ETS,
74  PREVIEW_MODULES_ABC,
75  BUILD_CACHE,
76  PREVIEW_DEBUG_CACHE,
77  TEST_TS,
78  ENTRY_LIST,
79  OUTPUT,
80  FILE_THREADS,
81  MERGE_ABC,
82  CACHE_FILE,
83  TARGET_API_VERSION
84} from '../mock/rollup_mock/path_config';
85import {
86  scanFiles,
87  sleep,
88  cpus
89} from "../utils/utils";
90import { AOT_FULL } from '../../../lib/pre_define';
91import {
92  ArkObfuscator
93} from 'arkguard';
94import {
95  ArkTSErrorDescription,
96  ArkTSInternalErrorDescription,
97  ErrorCode
98} from '../../../lib/fast_build/ark_compiler/error_code';
99import {
100  CommonLogger,
101  LogData,
102  LogDataFactory
103} from '../../../lib/fast_build/ark_compiler/logger';
104
105function checkGenerateEs2AbcCmdExpect(cmdArgs: Array<object>, compatibleSdkVersion: string, byteCodeHar: boolean): void {
106  const fileThreads: number = cpus();
107
108  expect(cmdArgs[0].indexOf(ES2ABC_PATH) > 0).to.be.true;
109  if (!byteCodeHar) {
110    expect(cmdArgs[1] === OUTPUT).to.be.true;
111    expect(cmdArgs[2] === FILE_THREADS).to.be.true;
112    expect(cmdArgs[3] === `\"${fileThreads}\"`).to.be.true;
113    expect(cmdArgs[4] === MERGE_ABC).to.be.true;
114    expect(cmdArgs[5].indexOf(compatibleSdkVersion) > 0).to.be.true;
115  }
116  expect(cmdArgs[1] === ENTRY_LIST).to.be.true;
117  expect(cmdArgs[2] === OUTPUT).to.be.true;
118  expect(cmdArgs[3] === FILE_THREADS).to.be.true;
119  expect(cmdArgs[4] === `\"${fileThreads}\"`).to.be.true;
120  expect(cmdArgs[5] === MERGE_ABC).to.be.true;
121  expect(cmdArgs[6].indexOf(compatibleSdkVersion) > 0).to.be.true;
122}
123
124mocha.describe('test module_mode file api', function () {
125  mocha.before(function () {
126    this.rollup = new RollUpPluginMock();
127  });
128
129  mocha.after(() => {
130    delete this.rollup;
131  });
132
133  mocha.it('1-1: test collectModuleFileList under build debug', function () {
134    this.rollup.build();
135    SourceMapGenerator.initInstance(this.rollup);
136    const moduleMode = new ModuleModeMock(this.rollup);
137    const fileList = this.rollup.getModuleIds();
138    for (const filePath of fileList) {
139      if (filePath.endsWith(EXTNAME_JS) || filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS)) {
140        const moduleInfo = this.rollup.getModuleInfo(filePath);
141        moduleInfo.setIsNodeEntryFile(true);
142        moduleInfo.setIsLocalDependency(false);
143      }
144    }
145    moduleMode.projectConfig.packageDir = OH_MODULES;
146    moduleMode.collectModuleFileListMock(this.rollup);
147    moduleMode.moduleInfos.forEach(moduleInfo => {
148      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
149        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
150        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
151
152      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_RECORDNAME) > 0 ||
153        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_RECORDNAME) > 0 ||
154        moduleInfo.recordName.indexOf(INDEX_ETS_RECORDNAME) > 0).to.be.true;
155
156      expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
157        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
158        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
159        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
160    });
161    expect(moduleMode.pkgEntryInfos.size != 0).to.be.true;
162    SourceMapGenerator.cleanSourceMapObject();
163  });
164
165  mocha.it('1-2: test collectModuleFileList under build release', function () {
166    this.rollup.build(RELEASE);
167    SourceMapGenerator.initInstance(this.rollup);
168    const moduleMode = new ModuleModeMock(this.rollup);
169    const fileList = this.rollup.getModuleIds();
170    for (const filePath of fileList) {
171      if (filePath.endsWith(EXTNAME_JS) || filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS)) {
172        const moduleInfo = this.rollup.getModuleInfo(filePath);
173        moduleInfo.setIsNodeEntryFile(true);
174        moduleInfo.setIsLocalDependency(false);
175      }
176    }
177    moduleMode.projectConfig.packageDir = OH_MODULES;
178    moduleMode.collectModuleFileListMock(this.rollup);
179    moduleMode.moduleInfos.forEach(moduleInfo => {
180      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
181        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
182        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
183
184      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_RECORDNAME) > 0 ||
185        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_RECORDNAME) > 0 ||
186        moduleInfo.recordName.indexOf(INDEX_ETS_RECORDNAME) > 0).to.be.true;
187
188        expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
189        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
190        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
191        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
192    });
193    expect(moduleMode.pkgEntryInfos.size != 0).to.be.true;
194    SourceMapGenerator.cleanSourceMapObject();
195  });
196
197  mocha.it('1-3: test collectModuleFileList under preview debug', function () {
198    this.rollup.preview();
199    SourceMapGenerator.initInstance(this.rollup);
200    const moduleMode = new ModuleModeMock(this.rollup);
201    const fileList = this.rollup.getModuleIds();
202    for (const filePath of fileList) {
203      if (filePath.endsWith(EXTNAME_JS) || filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS)) {
204        const moduleInfo = this.rollup.getModuleInfo(filePath);
205        moduleInfo.setIsNodeEntryFile(true);
206        moduleInfo.setIsLocalDependency(false);
207      }
208    }
209    moduleMode.projectConfig.packageDir = OH_MODULES;
210    moduleMode.collectModuleFileListMock(this.rollup);
211    moduleMode.moduleInfos.forEach(moduleInfo => {
212      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
213        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
214        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
215
216      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_RECORDNAME) > 0 ||
217        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_RECORDNAME) > 0 ||
218        moduleInfo.recordName.indexOf(INDEX_ETS_RECORDNAME) > 0).to.be.true;
219
220      expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
221        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
222        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
223        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
224    });
225    expect(moduleMode.pkgEntryInfos.size != 0).to.be.true;
226    SourceMapGenerator.cleanSourceMapObject();
227  });
228
229  mocha.it('1-4: test collectModuleFileList under hot reload debug', function () {
230    this.rollup.hotReload();
231    SourceMapGenerator.initInstance(this.rollup);
232    const moduleMode = new ModuleModeMock(this.rollup);
233    const fileList = this.rollup.getModuleIds();
234    for (const filePath of fileList) {
235      if (filePath.endsWith(EXTNAME_JS) || filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS)) {
236        const moduleInfo = this.rollup.getModuleInfo(filePath);
237        moduleInfo.setIsNodeEntryFile(true);
238        moduleInfo.setIsLocalDependency(false);
239      }
240    }
241    moduleMode.projectConfig.packageDir = OH_MODULES;
242    moduleMode.collectModuleFileListMock(this.rollup);
243    moduleMode.moduleInfos.forEach(moduleInfo => {
244      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
245        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
246        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
247
248      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_RECORDNAME) > 0 ||
249        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_RECORDNAME) > 0 ||
250        moduleInfo.recordName.indexOf(INDEX_ETS_RECORDNAME) > 0).to.be.true;
251
252      expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
253        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
254        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
255        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
256    });
257    expect(moduleMode.pkgEntryInfos.size != 0).to.be.true;
258    SourceMapGenerator.cleanSourceMapObject();
259  });
260
261  mocha.it('1-5: test collectModuleFileList useNormalizedOHMUrl under build debug', function () {
262    this.rollup.build();
263    SourceMapGenerator.initInstance(this.rollup);
264    this.rollup.useNormalizedOHMUrl();
265    this.rollup.share.projectConfig.pkgContextInfo = {
266      'entry': {
267        'packageName': 'entry',
268        'bundleName': '',
269        'moduleName': '',
270        'version': '',
271        'entryPath': 'Index.ets',
272        'isSO': false
273      }
274    };
275    const moduleMode = new ModuleModeMock(this.rollup);
276    const fileList = this.rollup.getModuleIds();
277    for (const filePath of fileList) {
278      if (filePath.endsWith(EXTNAME_JS) || filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS)) {
279        const moduleInfo = this.rollup.getModuleInfo(filePath);
280        moduleInfo.setIsNodeEntryFile(true);
281        moduleInfo.setIsLocalDependency(false);
282        moduleInfo.meta.pkgName = 'entry';
283      }
284    }
285    moduleMode.projectConfig.packageDir = OH_MODULES;
286    moduleMode.collectModuleFileListMock(this.rollup);
287    moduleMode.moduleInfos.forEach(moduleInfo => {
288      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
289        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
290        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
291
292      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_NORMALIZED_RECORDNAME) > 0 ||
293        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_NORMALIZED_RECORDNAME) > 0 ||
294        moduleInfo.recordName.indexOf(INDEX_ETS_NORMALIZED_RECORDNAME) > 0).to.be.true;
295
296      expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
297        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
298        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
299        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
300    });
301    expect(moduleMode.pkgEntryInfos.size == 7).to.be.true;
302    SourceMapGenerator.cleanSourceMapObject();
303  });
304
305  mocha.it('1-6: test collectModuleFileList useNormalizedOHMUrl under build release', function () {
306    this.rollup.build(RELEASE);
307    SourceMapGenerator.initInstance(this.rollup);
308    this.rollup.useNormalizedOHMUrl();
309    this.rollup.share.projectConfig.pkgContextInfo = {
310      'entry': {
311        'packageName': 'entry',
312        'bundleName': '',
313        'moduleName': '',
314        'version': '',
315        'entryPath': 'Index.ets',
316        'isSO': false
317      }
318    };
319    const moduleMode = new ModuleModeMock(this.rollup);
320    const fileList = this.rollup.getModuleIds();
321    for (const filePath of fileList) {
322      if (filePath.endsWith(EXTNAME_JS) || filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS)) {
323        const moduleInfo = this.rollup.getModuleInfo(filePath);
324        moduleInfo.setIsNodeEntryFile(true);
325        moduleInfo.setIsLocalDependency(false);
326        moduleInfo.meta.pkgName = 'entry';
327      }
328    }
329    moduleMode.projectConfig.packageDir = OH_MODULES;
330    moduleMode.collectModuleFileListMock(this.rollup);
331    moduleMode.moduleInfos.forEach(moduleInfo => {
332      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
333        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
334        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
335
336      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_NORMALIZED_RECORDNAME) > 0 ||
337        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_NORMALIZED_RECORDNAME) > 0 ||
338        moduleInfo.recordName.indexOf(INDEX_ETS_NORMALIZED_RECORDNAME) > 0).to.be.true;
339
340      expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
341        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
342        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
343        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
344    });
345    expect(moduleMode.pkgEntryInfos.size == 7).to.be.true;
346    SourceMapGenerator.cleanSourceMapObject();
347  });
348
349  mocha.it('1-7: test collectModuleFileList useNormalizedOHMUrl under preview debug', function () {
350    this.rollup.preview();
351    SourceMapGenerator.initInstance(this.rollup);
352    this.rollup.useNormalizedOHMUrl();
353    this.rollup.share.projectConfig.pkgContextInfo = {
354      'entry': {
355        'packageName': 'entry',
356        'bundleName': '',
357        'moduleName': '',
358        'version': '',
359        'entryPath': 'Index.ets',
360        'isSO': false
361      }
362    };
363    const moduleMode = new ModuleModeMock(this.rollup);
364    const fileList = this.rollup.getModuleIds();
365    for (const filePath of fileList) {
366      if (filePath.endsWith(EXTNAME_JS) || filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS)) {
367        const moduleInfo = this.rollup.getModuleInfo(filePath);
368        moduleInfo.setIsNodeEntryFile(true);
369        moduleInfo.setIsLocalDependency(false);
370        moduleInfo.meta.pkgName = 'entry';
371      }
372    }
373    moduleMode.projectConfig.packageDir = OH_MODULES;
374    moduleMode.collectModuleFileListMock(this.rollup);
375    moduleMode.moduleInfos.forEach(moduleInfo => {
376      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
377        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
378        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
379
380      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_NORMALIZED_RECORDNAME) > 0 ||
381        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_NORMALIZED_RECORDNAME) > 0 ||
382        moduleInfo.recordName.indexOf(INDEX_ETS_NORMALIZED_RECORDNAME) > 0).to.be.true;
383
384      expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
385        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
386        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
387        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
388    });
389    expect(moduleMode.pkgEntryInfos.size == 7).to.be.true;
390    SourceMapGenerator.cleanSourceMapObject();
391  });
392
393  mocha.it('1-8: test collectModuleFileList useNormalizedOHMUrl under hot reload debug', function () {
394    this.rollup.hotReload();
395    SourceMapGenerator.initInstance(this.rollup);
396    this.rollup.useNormalizedOHMUrl();
397    this.rollup.share.projectConfig.pkgContextInfo = {
398      'entry': {
399        'packageName': 'entry',
400        'bundleName': '',
401        'moduleName': '',
402        'version': '',
403        'entryPath': 'Index.ets',
404        'isSO': false
405      }
406    };
407    const moduleMode = new ModuleModeMock(this.rollup);
408    const fileList = this.rollup.getModuleIds();
409    for (const filePath of fileList) {
410      if (filePath.endsWith(EXTNAME_JS) || filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS)) {
411        const moduleInfo = this.rollup.getModuleInfo(filePath);
412        moduleInfo.setIsNodeEntryFile(true);
413        moduleInfo.setIsLocalDependency(false);
414        moduleInfo.meta.pkgName = 'entry';
415      }
416    }
417    moduleMode.projectConfig.packageDir = OH_MODULES;
418    moduleMode.collectModuleFileListMock(this.rollup);
419    moduleMode.moduleInfos.forEach(moduleInfo => {
420      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
421        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
422        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
423
424      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_NORMALIZED_RECORDNAME) > 0 ||
425        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_NORMALIZED_RECORDNAME) > 0 ||
426        moduleInfo.recordName.indexOf(INDEX_ETS_NORMALIZED_RECORDNAME) > 0).to.be.true;
427
428      expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
429        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
430        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
431        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
432    });
433    expect(moduleMode.pkgEntryInfos.size == 7).to.be.true;
434    SourceMapGenerator.cleanSourceMapObject();
435  });
436
437  mocha.it('2-1-1: test addModuleInfoItem under build debug: isPackageModulesFile`s return is true', function () {
438    this.rollup.build();
439    SourceMapGenerator.initInstance(this.rollup);
440    this.rollup.share.projectConfig.modulePath = this.rollup.share.projectConfig.projectPath;
441    const moduleMode = new ModuleModeMock(this.rollup);
442    moduleMode.projectConfig.packageDir = ENTRY_MODULE_NAME_DEFAULT;
443    moduleMode.addModuleInfoItemMock(this.rollup);
444    moduleMode.moduleInfos.forEach(value => {
445      expect(value.packageName === PKG_MODULES).to.be.true;
446    });
447    SourceMapGenerator.cleanSourceMapObject();
448  });
449
450  mocha.it('2-1-2: test addModuleInfoItem under build debug: isPackageModulesFile`s return is false', function () {
451    this.rollup.build();
452    SourceMapGenerator.initInstance(this.rollup);
453    const moduleMode = new ModuleModeMock(this.rollup);
454    moduleMode.addModuleInfoItemMock(this.rollup);
455    moduleMode.moduleInfos.forEach(moduleInfo => {
456      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
457        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
458        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
459
460      expect(moduleInfo.cacheFilePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
461        moduleInfo.cacheFilePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
462        moduleInfo.cacheFilePath.indexOf(INDEX_TS_PATH_DEFAULT) > 0).to.be.true;
463
464      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_RECORDNAME) > 0 ||
465        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_RECORDNAME) > 0 ||
466        moduleInfo.recordName.indexOf(INDEX_ETS_RECORDNAME) > 0).to.be.true;
467
468      expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
469        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
470        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
471        moduleInfo.sourceFile.indexOf(INDEX_TS_PATH_DEFAULT.substring(1)) > 0 ||
472        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
473    });
474    SourceMapGenerator.cleanSourceMapObject();
475  });
476
477  mocha.it('2-2: test addModuleInfoItem under build release', function () {
478    this.rollup.build(RELEASE);
479    SourceMapGenerator.initInstance(this.rollup);
480    const moduleMode = new ModuleModeMock(this.rollup);
481    moduleMode.addModuleInfoItemMock(this.rollup);
482    moduleMode.moduleInfos.forEach(moduleInfo => {
483      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
484        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
485        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
486
487      expect(moduleInfo.cacheFilePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
488        moduleInfo.cacheFilePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
489        moduleInfo.cacheFilePath.indexOf(INDEX_TS_PATH_DEFAULT) > 0).to.be.true;
490
491      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_RECORDNAME) > 0 ||
492        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_RECORDNAME) > 0 ||
493        moduleInfo.recordName.indexOf(INDEX_ETS_RECORDNAME) > 0).to.be.true;
494
495      expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
496        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
497        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
498        moduleInfo.sourceFile.indexOf(INDEX_TS_PATH_DEFAULT.substring(1)) > 0 ||
499        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
500    });
501    SourceMapGenerator.cleanSourceMapObject();
502  });
503
504  mocha.it('2-3: test addModuleInfoItem under preview debug', function () {
505    this.rollup.preview();
506    SourceMapGenerator.initInstance(this.rollup);
507    const moduleMode = new ModuleModeMock(this.rollup);
508    moduleMode.addModuleInfoItemMock(this.rollup);
509    moduleMode.moduleInfos.forEach(moduleInfo => {
510      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
511        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
512        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
513
514      expect(moduleInfo.cacheFilePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
515        moduleInfo.cacheFilePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
516        moduleInfo.cacheFilePath.indexOf(INDEX_TS_PATH_DEFAULT) > 0).to.be.true;
517
518      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_RECORDNAME) > 0 ||
519        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_RECORDNAME) > 0 ||
520        moduleInfo.recordName.indexOf(INDEX_ETS_RECORDNAME) > 0).to.be.true;
521
522      expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
523        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
524        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
525        moduleInfo.sourceFile.indexOf(INDEX_TS_PATH_DEFAULT.substring(1)) > 0 ||
526        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
527    });
528    SourceMapGenerator.cleanSourceMapObject();
529  });
530
531  mocha.it('2-4: test addModuleInfoItem under hot reload debug', function () {
532    this.rollup.hotReload();
533    SourceMapGenerator.initInstance(this.rollup);
534    const moduleMode = new ModuleModeMock(this.rollup);
535    moduleMode.addModuleInfoItemMock(this.rollup);
536    moduleMode.moduleInfos.forEach(moduleInfo => {
537      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
538        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
539        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
540
541      expect(moduleInfo.cacheFilePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
542        moduleInfo.cacheFilePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
543        moduleInfo.cacheFilePath.indexOf(INDEX_TS_PATH_DEFAULT) > 0).to.be.true;
544
545      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_RECORDNAME) > 0 ||
546        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_RECORDNAME) > 0 ||
547        moduleInfo.recordName.indexOf(INDEX_ETS_RECORDNAME) > 0).to.be.true;
548
549      expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
550        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
551        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
552        moduleInfo.sourceFile.indexOf(INDEX_TS_PATH_DEFAULT.substring(1)) > 0 ||
553        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
554    });
555    SourceMapGenerator.cleanSourceMapObject();
556  });
557
558  mocha.it('2-5-1: test addModuleInfoItem under build debug: sourceFile equals sourcemap new key', function () {
559    this.rollup.build();
560    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
561    const moduleInfosAndSourceMap= ModuleModeMock.getModuleInfosAndSourceMapMock(this.rollup, sourceMapGenerator);
562    moduleInfosAndSourceMap.moduleInfos.forEach(value => {
563      expect(moduleInfosAndSourceMap.sourceMap[value.sourceFile]).to.exist;
564    });
565    SourceMapGenerator.cleanSourceMapObject();
566  });
567
568  mocha.it('2-5-2: test addModuleInfoItem under build release: sourceFile equals sourcemap new key', function () {
569    this.rollup.build(RELEASE);
570    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
571    const moduleInfosAndSourceMap= ModuleModeMock.getModuleInfosAndSourceMapMock(this.rollup, sourceMapGenerator);
572    moduleInfosAndSourceMap.moduleInfos.forEach(value => {
573      expect(moduleInfosAndSourceMap.sourceMap[value.sourceFile]).to.exist;
574    });
575    SourceMapGenerator.cleanSourceMapObject();
576  });
577
578  mocha.it('2-5-3: test addModuleInfoItem under preview debug: sourceFile equals sourcemap new key', function () {
579    this.rollup.preview();
580    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
581    const moduleInfosAndSourceMap= ModuleModeMock.getModuleInfosAndSourceMapMock(this.rollup, sourceMapGenerator);
582    moduleInfosAndSourceMap.moduleInfos.forEach(value => {
583      expect(moduleInfosAndSourceMap.sourceMap[value.sourceFile]).to.exist;
584    });
585    SourceMapGenerator.cleanSourceMapObject();
586  });
587
588  mocha.it('2-5-4: test addModuleInfoItem under hot reload debug: sourceFile equals sourcemap new key', function () {
589    this.rollup.hotReload();
590    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
591    const moduleInfosAndSourceMap = ModuleModeMock.getModuleInfosAndSourceMapMock(this.rollup, sourceMapGenerator);
592    moduleInfosAndSourceMap.moduleInfos.forEach(value => {
593      expect(moduleInfosAndSourceMap.sourceMap[value.sourceFile]).to.exist;
594    });
595    SourceMapGenerator.cleanSourceMapObject();
596  });
597
598  mocha.it('2-6-1: test addModuleInfoItem under build debug: sourceFile equals sourcemap old key', function () {
599    this.rollup.build();
600    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
601    sourceMapGenerator.setNewSoureMaps(false);
602    const moduleInfosAndSourceMap= ModuleModeMock.getModuleInfosAndSourceMapMock(this.rollup, sourceMapGenerator);
603    moduleInfosAndSourceMap.moduleInfos.forEach(value => {
604      expect(moduleInfosAndSourceMap.sourceMap[value.sourceFile]).to.exist;
605    });
606    SourceMapGenerator.cleanSourceMapObject();
607  });
608
609  mocha.it('2-6-2: test addModuleInfoItem under build release: sourceFile equals sourcemap old key', function () {
610    this.rollup.build(RELEASE);
611    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
612    sourceMapGenerator.setNewSoureMaps(false);
613    const moduleInfosAndSourceMap= ModuleModeMock.getModuleInfosAndSourceMapMock(this.rollup, sourceMapGenerator);
614    moduleInfosAndSourceMap.moduleInfos.forEach(value => {
615      expect(moduleInfosAndSourceMap.sourceMap[value.sourceFile]).to.exist;
616    });
617    SourceMapGenerator.cleanSourceMapObject();
618  });
619
620  mocha.it('2-6-3: test addModuleInfoItem under preview debug: sourceFile equals sourcemap old key', function () {
621    this.rollup.preview();
622    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
623    sourceMapGenerator.setNewSoureMaps(false);
624    const moduleInfosAndSourceMap= ModuleModeMock.getModuleInfosAndSourceMapMock(this.rollup, sourceMapGenerator);
625    moduleInfosAndSourceMap.moduleInfos.forEach(value => {
626      expect(moduleInfosAndSourceMap.sourceMap[value.sourceFile]).to.exist;
627    });
628    SourceMapGenerator.cleanSourceMapObject();
629  });
630
631  mocha.it('2-6-4: test addModuleInfoItem under hot reload debug: sourceFile equals sourcemap old key', function () {
632    this.rollup.hotReload();
633    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
634    sourceMapGenerator.setNewSoureMaps(false);
635    const moduleInfosAndSourceMap= ModuleModeMock.getModuleInfosAndSourceMapMock(this.rollup, sourceMapGenerator);
636    moduleInfosAndSourceMap.moduleInfos.forEach(value => {
637      expect(moduleInfosAndSourceMap.sourceMap[value.sourceFile]).to.exist;
638    });
639    SourceMapGenerator.cleanSourceMapObject();
640  });
641
642  mocha.it('2-7-1: test addModuleInfoItem under build release with obfuscatedEnabled and isPackageModulesFile`s return is true', function () {
643    this.rollup.build(RELEASE);
644    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
645    sourceMapGenerator.setNewSoureMaps(true);
646
647    this.rollup.share.projectConfig = {
648      buildMode: 'Release'
649    }
650    this.rollup.share.projectConfig.obfuscationMergedObConfig = {
651      options: {
652        enableFileNameObfuscation: true
653      }
654    };
655    this.rollup.share.projectConfig.modulePath = this.rollup.share.projectConfig.projectPath;
656
657    const moduleMode = new ModuleModeMock(this.rollup);
658    moduleMode.projectConfig.packageDir = ENTRY_MODULE_NAME_DEFAULT;
659    moduleMode.addModuleInfoItemMock(this.rollup);
660
661    let index = 0;
662    moduleMode.moduleInfos.forEach(moduleInfo => {
663      if (index === 1) {
664        expect(moduleInfo.sourceFile == 'entry|entry|1.0.0|src/main/entryability/EntryAbility.ts').to.be.true;
665        expect(moduleInfo.recordName == 'pkg_modules/src/main/pkg_modulesability/EntryAbility').to.be.true;
666        expect(moduleInfo.packageName === PKG_MODULES).to.be.true;
667        expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0).to.be.true;
668        expect(moduleInfo.cacheFilePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0).to.be.true;
669      }
670      if (index === 2) {
671        expect(moduleInfo.sourceFile == 'entry|entry|1.0.0|src/main/pages/Index.ts').to.be.true;
672        expect(moduleInfo.recordName == 'pkg_modules/src/main/pages/Index').to.be.true;
673        expect(moduleInfo.packageName === PKG_MODULES).to.be.true;
674        expect(moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
675        expect(moduleInfo.cacheFilePath.indexOf(INDEX_TS_PATH_DEFAULT) > 0).to.be.true;
676      }
677      index++;
678    });
679    SourceMapGenerator.cleanSourceMapObject();
680  });
681
682  mocha.it('2-7-2: test addModuleInfoItem under build release with obfuscatedEnabled and isPackageModulesFile`s return is true and old key', function () {
683    this.rollup.build(RELEASE);
684    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
685    sourceMapGenerator.setNewSoureMaps(false);
686
687    this.rollup.share.projectConfig = {
688      buildMode: 'Release'
689    }
690    this.rollup.share.projectConfig.obfuscationMergedObConfig = {
691      options: {
692        enableFileNameObfuscation: true
693      }
694    };
695    this.rollup.share.projectConfig.modulePath = this.rollup.share.projectConfig.projectPath;
696
697    const moduleMode = new ModuleModeMock(this.rollup);
698    moduleMode.projectConfig.packageDir = ENTRY_MODULE_NAME_DEFAULT;
699    moduleMode.addModuleInfoItemMock(this.rollup);
700
701    let index = 0;
702    moduleMode.moduleInfos.forEach(moduleInfo => {
703      if (index === 1) {
704        expect(moduleInfo.sourceFile == 'entry/build/entry/src/main/entryability/EntryAbility.ts').to.be.true;
705        expect(moduleInfo.recordName == 'pkg_modules/src/main/pkg_modulesability/EntryAbility').to.be.true;
706        expect(moduleInfo.packageName === PKG_MODULES).to.be.true;
707        expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0).to.be.true;
708        expect(moduleInfo.cacheFilePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0).to.be.true;
709      }
710      if (index === 2) {
711        expect(moduleInfo.sourceFile == 'entry/build/entry/src/main/pages/Index.ts').to.be.true;
712        expect(moduleInfo.recordName == 'pkg_modules/src/main/pages/Index').to.be.true;
713        expect(moduleInfo.packageName === PKG_MODULES).to.be.true;
714        expect(moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
715        expect(moduleInfo.cacheFilePath.indexOf(INDEX_TS_PATH_DEFAULT) > 0).to.be.true;
716      }
717      index++;
718    });
719    SourceMapGenerator.cleanSourceMapObject();
720  });
721
722  mocha.it('2-7-3: test addModuleInfoItem under build release with obfuscatedEnabled and isPackageModulesFile`s return is false', function () {
723    this.rollup.build(RELEASE);
724    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
725    sourceMapGenerator.setNewSoureMaps(true);
726
727    this.rollup.share.projectConfig = {
728      buildMode: 'Release'
729    }
730    this.rollup.share.projectConfig.obfuscationMergedObConfig = {
731      options: {
732        enableFileNameObfuscation: true
733      }
734    };
735
736    const arkguardConfig = {
737      mRenameFileName: {
738        mEnable: true,
739        mNameGeneratorType: 1,
740        mReservedFileNames: [
741          "entry",
742          "src",
743          "main"
744        ]
745      },
746      mPerformancePrinter: []
747    }
748
749    let arkObfuscator: ArkObfuscator = new ArkObfuscator();
750    arkObfuscator.init(arkguardConfig);
751
752    const moduleMode = new ModuleModeMock(this.rollup);
753    moduleMode.addModuleInfoItemMock(this.rollup);
754
755    moduleMode.moduleInfos.forEach(moduleInfo => {
756      expect(moduleInfo.packageName === 'entry').to.be.true;
757      expect(/.*entry\|entry\|1\.0\.0\|src\/main\/[a-z]\/[a-z]\.(js|ts|ets).*/.test(moduleInfo.sourceFile)).to.be.true;
758      expect(/.*\/entry\/src\/main\/[a-z]\/[a-z].*/.test(moduleInfo.recordName)).to.be.true;
759      expect(/.*\/src\/main\/[a-z]\/[a-z]\.(js|ts|ets).*/.test(moduleInfo.filePath)).to.be.true;
760      expect(/.*\/src\/main\/[a-z]\/[a-z]\.(js|ts|ets).*/.test(moduleInfo.cacheFilePath)).to.be.true;
761    });
762    SourceMapGenerator.cleanSourceMapObject();
763  });
764
765  mocha.it('2-7-4: test addModuleInfoItem under build release with obfuscatedEnabled and isPackageModulesFile`s return is false and old key', function () {
766    this.rollup.build(RELEASE);
767    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
768    sourceMapGenerator.setNewSoureMaps(false);
769
770    this.rollup.share.projectConfig = {
771      buildMode: 'Release'
772    }
773    this.rollup.share.projectConfig.obfuscationMergedObConfig = {
774      options: {
775        enableFileNameObfuscation: true
776      }
777    };
778
779    const moduleMode = new ModuleModeMock(this.rollup);
780    moduleMode.addModuleInfoItemMock(this.rollup);
781
782    moduleMode.moduleInfos.forEach(moduleInfo => {
783      expect(moduleInfo.packageName === 'entry').to.be.true;
784      expect(/.*\/src\/main\/[a-z]\/[a-z]\.(js|ts|ets).*/.test(moduleInfo.sourceFile)).to.be.true;
785      expect(/.*\/entry\/src\/main\/[a-z]\/[a-z].*/.test(moduleInfo.recordName)).to.be.true;
786      expect(/.*\/src\/main\/[a-z]\/[a-z]\.(js|ts|ets).*/.test(moduleInfo.filePath)).to.be.true;
787      expect(/.*\/src\/main\/[a-z]\/[a-z]\.(js|ts|ets).*/.test(moduleInfo.cacheFilePath)).to.be.true;
788    });
789    SourceMapGenerator.cleanSourceMapObject();
790  });
791
792  mocha.it('3-1-1: test updateCachedSourceMaps under build debug: cacheSourceMapPath not exist', function () {
793    this.rollup.build();
794    const moduleMode = new ModuleModeMock(this.rollup);
795    moduleMode.cacheSourceMapPath = '';
796
797    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
798    sourceMapGenerator.updateSourceMap(path.join(this.rollup.share.projectConfig.modulePath, ENTRYABILITY_TS_PATH_DEFAULT), {});
799    sourceMapGenerator.updateSourceMap(path.join(this.rollup.share.projectConfig.modulePath, INDEX_ETS_PATH_DEFAULT), {});
800
801    let cacheSourceMapObject = sourceMapGenerator.updateCachedSourceMaps();
802    sourceMapGenerator.setNewSoureMaps(false);
803    for (const key in cacheSourceMapObject) {
804      expect(sourceMapGenerator.getSourceMap(key) === cacheSourceMapObject[key]).to.be.true;
805    }
806
807    let newSourceMaps = sourceMapGenerator.getSourceMaps();
808    for (const key of Object.keys(newSourceMaps)) {
809      delete newSourceMaps[key];
810    }
811    SourceMapGenerator.cleanSourceMapObject();
812  });
813
814  mocha.it('3-1-2: test updateCachedSourceMaps under build debug: compileFileList has not sourceFileAbsolutePath', function () {
815    this.rollup.build();
816    const moduleMode = new ModuleModeMock(this.rollup);
817    moduleMode.cacheSourceMapPath = EXPECT_SOURCEMAP_JSON;
818
819    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
820    sourceMapGenerator.updateSourceMap(path.join(this.rollup.share.projectConfig.modulePath, ENTRYABILITY_TS_PATH_DEFAULT), { FILE: '' });
821    sourceMapGenerator.updateSourceMap(path.join(this.rollup.share.projectConfig.modulePath, INDEX_ETS_PATH_DEFAULT), { FILE: '' });
822
823    let cacheSourceMapObject = sourceMapGenerator.updateCachedSourceMaps();
824    sourceMapGenerator.setNewSoureMaps(false);
825    for (const key in cacheSourceMapObject) {
826      expect(sourceMapGenerator.getSourceMap(key) === cacheSourceMapObject[key]).to.be.true;
827    }
828
829    sourceMapGenerator.updateSourceMap(path.join(this.rollup.share.projectConfig.modulePath, ENTRYABILITY_TS_PATH_DEFAULT), { FILE: TEST });
830    cacheSourceMapObject = sourceMapGenerator.updateCachedSourceMaps();
831    sourceMapGenerator.setNewSoureMaps(false);
832    for (const key in cacheSourceMapObject) {
833      expect(sourceMapGenerator.getSourceMap(key) === cacheSourceMapObject[key]).to.be.true;
834    }
835
836    sourceMapGenerator.updateSourceMap(path.join(this.rollup.share.projectConfig.modulePath, ENTRYABILITY_TS_PATH_DEFAULT), { FILE: TEST, NEWFILE: NEWFILE });
837    cacheSourceMapObject = sourceMapGenerator.updateCachedSourceMaps();
838    sourceMapGenerator.setNewSoureMaps(false);
839    for (const key in cacheSourceMapObject) {
840      expect(sourceMapGenerator.getSourceMap(key) === cacheSourceMapObject[key]).to.be.true;
841    }
842
843    let newSourceMaps = sourceMapGenerator.getSourceMaps();
844    for (const key of Object.keys(newSourceMaps)) {
845      delete newSourceMaps[key];
846    }
847    SourceMapGenerator.cleanSourceMapObject();
848  });
849
850  mocha.it('3-2: test updateCachedSourceMaps under build release', function () {
851    this.rollup.build(RELEASE);
852    const moduleMode = new ModuleModeMock(this.rollup);
853    moduleMode.cacheSourceMapPath = '';
854
855    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
856    sourceMapGenerator.updateSourceMap(path.join(this.rollup.share.projectConfig.modulePath, ENTRYABILITY_TS_PATH_DEFAULT), {});
857    sourceMapGenerator.updateSourceMap(path.join(this.rollup.share.projectConfig.modulePath, INDEX_ETS_PATH_DEFAULT), {});
858
859    let cacheSourceMapObject = sourceMapGenerator.updateCachedSourceMaps();
860    sourceMapGenerator.setNewSoureMaps(false);
861    for (const key in cacheSourceMapObject) {
862      expect(sourceMapGenerator.getSourceMap(key) === cacheSourceMapObject[key]).to.be.true;
863    }
864
865    let newSourceMaps = sourceMapGenerator.getSourceMaps();
866    for (const key of Object.keys(newSourceMaps)) {
867      delete newSourceMaps[key];
868    }
869    SourceMapGenerator.cleanSourceMapObject();
870  });
871
872  mocha.it('3-3: test updateCachedSourceMaps under preview debug', function () {
873    this.rollup.preview();
874    const moduleMode = new ModuleModeMock(this.rollup);
875    moduleMode.cacheSourceMapPath = '';
876
877    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
878    sourceMapGenerator.updateSourceMap(path.join(this.rollup.share.projectConfig.modulePath, ENTRYABILITY_TS_PATH_DEFAULT), {});
879    sourceMapGenerator.updateSourceMap(path.join(this.rollup.share.projectConfig.modulePath, INDEX_ETS_PATH_DEFAULT), {});
880
881    let cacheSourceMapObject = sourceMapGenerator.updateCachedSourceMaps();
882    sourceMapGenerator.setNewSoureMaps(false);
883    for (const key in cacheSourceMapObject) {
884      expect(sourceMapGenerator.getSourceMap(key) === cacheSourceMapObject[key]).to.be.true;
885    }
886
887    let newSourceMaps = sourceMapGenerator.getSourceMaps();
888    for (const key of Object.keys(newSourceMaps)) {
889      delete newSourceMaps[key];
890    }
891    SourceMapGenerator.cleanSourceMapObject();
892  });
893
894  mocha.it('3-4: test updateCachedSourceMaps under hot reload debug', function () {
895    this.rollup.hotReload();
896    const moduleMode = new ModuleModeMock(this.rollup);
897    moduleMode.cacheSourceMapPath = '';
898    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
899    sourceMapGenerator.updateSourceMap(path.join(this.rollup.share.projectConfig.modulePath, INDEX_ETS_PATH_DEFAULT), {});
900    sourceMapGenerator.updateSourceMap(path.join(this.rollup.share.projectConfig.modulePath, ENTRYABILITY_TS_PATH_DEFAULT), {});
901
902    let cacheSourceMapObject = sourceMapGenerator.updateCachedSourceMaps();
903    sourceMapGenerator.setNewSoureMaps(false);
904    for (const key in cacheSourceMapObject) {
905      expect(sourceMapGenerator.getSourceMap(key) === cacheSourceMapObject[key]).to.be.true;
906    }
907
908    let newSourceMaps = sourceMapGenerator.getSourceMaps();
909    for (const key of Object.keys(newSourceMaps)) {
910      delete newSourceMaps[key];
911    }
912    SourceMapGenerator.cleanSourceMapObject();
913  });
914
915  mocha.it('3-5: test updateCachedSourceMaps when ets(ts) file is transformed to js file', function () {
916    this.rollup.build();
917    this.rollup.share.arkProjectConfig.processTs = false;
918    const moduleMode = new ModuleModeMock(this.rollup);
919    moduleMode.cacheSourceMapPath = '';
920
921    let prefix = `${ENTRY_MODULE_NAME_DEFAULT}|${ENTRY_MODULE_NAME_DEFAULT}|${ENTRY_MODULE_VERSION_DEFAULT}|`;
922    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
923    let moduleId: string = path.join(this.rollup.share.projectConfig.modulePath, INDEX_ETS_PATH_DEFAULT);
924    sourceMapGenerator.updateSourceMap(moduleId, {});
925
926    let cacheSourceMapObject = sourceMapGenerator.updateCachedSourceMaps();
927    if (shouldETSOrTSFileTransformToJS(moduleId, moduleMode.projectConfig)) {
928      expect(prefix + INDEX_JS_PATH_DEFAULT.substring(1) in cacheSourceMapObject).to.be.true;
929    } else {
930      expect(prefix + INDEX_ETS_PATH_DEFAULT.substring(1) in cacheSourceMapObject).to.be.true;
931    }
932
933    moduleId = path.join(this.rollup.share.projectConfig.modulePath, ENTRYABILITY_TS_PATH_DEFAULT);
934    sourceMapGenerator.updateSourceMap(moduleId, {});
935    cacheSourceMapObject = sourceMapGenerator.updateCachedSourceMaps();
936    if (shouldETSOrTSFileTransformToJS(moduleId, moduleMode.projectConfig)) {
937      expect(prefix + ENTRYABILITY_JS_PATH_DEFAULT.substring(1) in cacheSourceMapObject).to.be.true;
938    } else {
939      expect(prefix + ENTRYABILITY_JS_PATH_DEFAULT.substring(1) in cacheSourceMapObject).to.be.true;
940    }
941
942    let newSourceMaps = sourceMapGenerator.getSourceMaps();
943    for (const key of Object.keys(newSourceMaps)) {
944      delete newSourceMaps[key];
945    }
946    SourceMapGenerator.cleanSourceMapObject();
947    this.rollup.share.arkProjectConfig.processTs = true;
948  })
949
950  mocha.it('4-1: test generateCompileFilesInfo under build debug', function () {
951    this.rollup.build();
952    SourceMapGenerator.initInstance(this.rollup);
953    const moduleMode = new ModuleModeMock(this.rollup);
954    moduleMode.addModuleInfoItemMock(this.rollup);
955    moduleMode.generateCompileFilesInfoMock(false);
956    expect(moduleMode.checkGenerateCompileFilesInfo(false) === true).to.be.true;
957    SourceMapGenerator.cleanSourceMapObject();
958  });
959
960  mocha.it('4-2: test generateCompileFilesInfo under build release', function () {
961    this.rollup.build(RELEASE);
962    SourceMapGenerator.initInstance(this.rollup);
963    const moduleMode = new ModuleModeMock(this.rollup);
964    moduleMode.addModuleInfoItemMock(this.rollup);
965    moduleMode.generateCompileFilesInfoMock(false);
966    expect(moduleMode.checkGenerateCompileFilesInfo(false) === true).to.be.true;
967    SourceMapGenerator.cleanSourceMapObject();
968  });
969
970  mocha.it('4-3: test generateCompileFilesInfo under preview debug', function () {
971    this.rollup.preview();
972    SourceMapGenerator.initInstance(this.rollup);
973    const moduleMode = new ModuleModeMock(this.rollup);
974    moduleMode.addModuleInfoItemMock(this.rollup);
975    moduleMode.generateCompileFilesInfoMock(false);
976    expect(moduleMode.checkGenerateCompileFilesInfo(false) === true).to.be.true;
977    SourceMapGenerator.cleanSourceMapObject();
978  });
979
980  mocha.it('4-4: test generateCompileFilesInfo under hot reload debug', function () {
981    this.rollup.hotReload();
982    SourceMapGenerator.initInstance(this.rollup);
983    const moduleMode = new ModuleModeMock(this.rollup);
984    moduleMode.addModuleInfoItemMock(this.rollup);
985    moduleMode.generateCompileFilesInfoMock(false);
986    expect(moduleMode.checkGenerateCompileFilesInfo(false) === true).to.be.true;
987    SourceMapGenerator.cleanSourceMapObject();
988  });
989
990  mocha.it('4-5: test generateCompileFilesInfo under exist abcPaths', function () {
991    this.rollup.hotReload();
992    SourceMapGenerator.initInstance(this.rollup);
993    this.rollup.share.projectConfig.byteCodeHarInfo = {
994      'har': {
995        'abcPath': 'module.abc'
996      }
997    };
998    const moduleMode = new ModuleModeMock(this.rollup);
999    moduleMode.addModuleInfoItemMock(this.rollup);
1000    moduleMode.generateCompileFilesInfoMock(true);
1001    expect(moduleMode.checkGenerateCompileFilesInfo(true) === true).to.be.true;
1002    SourceMapGenerator.cleanSourceMapObject();
1003  });
1004
1005  mocha.it('4-6: test generateCompileFilesInfo under hot reload debug incremental', function () {
1006    this.rollup.hotReload();
1007    SourceMapGenerator.initInstance(this.rollup);
1008    this.rollup.share.projectConfig.byteCodeHarInfo = {
1009      'har': {
1010        'abcPath': 'module.abc'
1011      }
1012    };
1013    const moduleMode = new ModuleModeMock(this.rollup);
1014    moduleMode.addModuleInfoItemMock(this.rollup);
1015    moduleMode.generateCompileFilesInfoMock(false);
1016    expect(moduleMode.checkGenerateCompileFilesInfo(false) === true).to.be.true;
1017    SourceMapGenerator.cleanSourceMapObject();
1018  });
1019
1020  mocha.it('4-7: test source language in filesInfo', function () {
1021    const jsonFilePath = path.join(this.rollup.share.projectConfig.projectPath, '/main/entryability/JsonTest.json');
1022    fs.writeFileSync(jsonFilePath, '{}', 'utf-8');
1023    this.rollup.build();
1024    SourceMapGenerator.initInstance(this.rollup);
1025    const moduleMode = new ModuleMode(this.rollup);
1026    moduleMode.collectModuleFileList(this.rollup, this.rollup.getModuleIds());
1027    this.rollup.share.allFiles.add(jsonFilePath);
1028    moduleMode.generateCompileFilesInfo(false);
1029
1030    const filesInfo = fs.readFileSync(moduleMode.filesInfoPath, 'utf-8');
1031    const filesInfoLines = filesInfo.split('\n');
1032    expect(filesInfoLines[0].endsWith('js')).to.be.true;
1033    expect(filesInfoLines[1].endsWith('ts')).to.be.true;
1034    expect(filesInfoLines[2].endsWith(';')).to.be.true;
1035    expect(filesInfoLines[3].endsWith('ets')).to.be.true;
1036
1037    SourceMapGenerator.cleanSourceMapObject();
1038    this.rollup.share.allFiles.delete(jsonFilePath);
1039    fs.unlinkSync(jsonFilePath);
1040  });
1041
1042  mocha.it('4-8: test the error message of generateCompileFilesInfo ', function () {
1043    const entryAbilityEtsPath = path.join(this.rollup.share.projectConfig.projectPath, '/main/entryability/EntryAbility.ets');
1044    fs.writeFileSync(entryAbilityEtsPath, 'console.log("ets")', 'utf-8');
1045    this.rollup.build();
1046    SourceMapGenerator.initInstance(this.rollup);
1047    const moduleMode = new ModuleModeMock(this.rollup);
1048    const errInfo: LogData = LogDataFactory.newInstance(
1049      ErrorCode.ETS2BUNDLE_EXTERNAL_DUPLICATE_FILE_NAMES_ERROR,
1050      ArkTSErrorDescription,
1051      sinon.match.any
1052    );
1053    const stub = sinon.stub(moduleMode.logger.getLoggerFromErrorCode(errInfo.code), 'printError');
1054    moduleMode.addModuleInfoItemMock(this.rollup);
1055    moduleMode.generateCompileFilesInfoMock(false);
1056    expect(stub.calledWith(errInfo)).to.be.true;
1057    SourceMapGenerator.cleanSourceMapObject();
1058    stub.restore();
1059    fs.unlinkSync(entryAbilityEtsPath);
1060  });
1061
1062  mocha.it('5-1: test generateNpmEntriesInfo under build debug', function () {
1063    this.rollup.build();
1064    SourceMapGenerator.initInstance(this.rollup);
1065    const moduleMode = new ModuleModeMock(this.rollup);
1066    moduleMode.addModuleInfoItemMock(this.rollup);
1067    moduleMode.generateNpmEntriesInfoMock();
1068    expect(moduleMode.checkGenerateNpmEntriesInfo() === true).to.be.true;
1069    SourceMapGenerator.cleanSourceMapObject();
1070  });
1071
1072  mocha.it('5-2: test generateNpmEntriesInfo under build release', function () {
1073    this.rollup.build(RELEASE);
1074    SourceMapGenerator.initInstance(this.rollup);
1075    const moduleMode = new ModuleModeMock(this.rollup);
1076    moduleMode.addModuleInfoItemMock(this.rollup);
1077    moduleMode.generateNpmEntriesInfoMock();
1078    expect(moduleMode.checkGenerateNpmEntriesInfo() === true).to.be.true;
1079    SourceMapGenerator.cleanSourceMapObject();
1080  });
1081
1082  mocha.it('5-3: test generateNpmEntriesInfo under preview debug', function () {
1083    this.rollup.preview();
1084    SourceMapGenerator.initInstance(this.rollup);
1085    const moduleMode = new ModuleModeMock(this.rollup);
1086    moduleMode.addModuleInfoItemMock(this.rollup);
1087    moduleMode.generateNpmEntriesInfoMock();
1088    expect(moduleMode.checkGenerateNpmEntriesInfo() === true).to.be.true;
1089    SourceMapGenerator.cleanSourceMapObject();
1090  });
1091
1092  mocha.it('5-4: test generateNpmEntriesInfo under hot reload debug', function () {
1093    this.rollup.hotReload();
1094    SourceMapGenerator.initInstance(this.rollup);
1095    const moduleMode = new ModuleModeMock(this.rollup);
1096    moduleMode.addModuleInfoItemMock(this.rollup);
1097    moduleMode.generateNpmEntriesInfoMock();
1098    expect(moduleMode.checkGenerateNpmEntriesInfo() === true).to.be.true;
1099    SourceMapGenerator.cleanSourceMapObject();
1100  });
1101
1102  mocha.it('6-1: test generateAbcCacheFilesInfo under build debug', function () {
1103    this.rollup.build();
1104    SourceMapGenerator.initInstance(this.rollup);
1105    const moduleMode = new ModuleModeMock(this.rollup);
1106    moduleMode.addModuleInfoItemMock(this.rollup);
1107    moduleMode.generateAbcCacheFilesInfoMock();
1108    expect(moduleMode.checkGenerateAbcCacheFilesInfo() === true).to.be.true;
1109    SourceMapGenerator.cleanSourceMapObject();
1110  });
1111
1112  mocha.it('6-2: test generateAbcCacheFilesInfo under build release', function () {
1113    this.rollup.build(RELEASE);
1114    SourceMapGenerator.initInstance(this.rollup);
1115    const moduleMode = new ModuleModeMock(this.rollup);
1116    moduleMode.addModuleInfoItemMock(this.rollup);
1117    moduleMode.generateAbcCacheFilesInfoMock();
1118    expect(moduleMode.checkGenerateAbcCacheFilesInfo() === true).to.be.true;
1119    SourceMapGenerator.cleanSourceMapObject();
1120  });
1121
1122  mocha.it('6-3: test generateAbcCacheFilesInfo under preview debug', function () {
1123    this.rollup.preview();
1124    SourceMapGenerator.initInstance(this.rollup);
1125    const moduleMode = new ModuleModeMock(this.rollup);
1126    moduleMode.addModuleInfoItemMock(this.rollup);
1127    moduleMode.generateAbcCacheFilesInfoMock();
1128    expect(moduleMode.checkGenerateAbcCacheFilesInfo() === true).to.be.true;
1129    SourceMapGenerator.cleanSourceMapObject();
1130  });
1131
1132  mocha.it('6-4: test generateAbcCacheFilesInfo under hot reload debug', function () {
1133    this.rollup.hotReload();
1134    SourceMapGenerator.initInstance(this.rollup);
1135    const moduleMode = new ModuleModeMock(this.rollup);
1136    moduleMode.addModuleInfoItemMock(this.rollup);
1137    moduleMode.generateAbcCacheFilesInfoMock();
1138    expect(moduleMode.checkGenerateAbcCacheFilesInfo() === true).to.be.true;
1139    SourceMapGenerator.cleanSourceMapObject();
1140  });
1141
1142  mocha.it('6-5: test generateAbcCacheFilesInfo add bchar under build debug', function () {
1143    this.rollup.build();
1144    SourceMapGenerator.initInstance(this.rollup);
1145    const moduleMode = new ModuleModeMock(this.rollup);
1146    moduleMode.projectConfig.cacheBytecodeHar = true;
1147    moduleMode.projectConfig.projectTopDir = "D:/project";
1148    moduleMode.projectConfig.cachePath = "D:/project/cache"
1149    moduleMode.abcPaths = [
1150      "D:/project/oh_modules/bchar1/modules.abc",
1151      "D:/project/oh_modules/bchar2/modules.abc",
1152    ];
1153    moduleMode.generateAbcCacheFilesInfoMock();
1154    const cacheInfo = fs.readFileSync(moduleMode.cacheFilePath, 'utf-8');
1155    // delete default npmEntries line
1156    const lines = cacheInfo.split('\n');
1157    lines.shift();
1158    const res = lines.join('\n');
1159    const expectRes = 'D:/project/oh_modules/bchar1/modules.abc;D:/project/cache/oh_modules/bchar1/modules.protoBin\n' +
1160                      'D:/project/oh_modules/bchar2/modules.abc;D:/project/cache/oh_modules/bchar2/modules.protoBin\n';
1161    expect(res === expectRes).to.be.true;
1162    SourceMapGenerator.cleanSourceMapObject();
1163  });
1164
1165  mocha.it('7-1: test getPackageEntryInfo under build debug', function () {
1166    this.rollup.build();
1167    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1168    const moduleMode = new ModuleModeMock(this.rollup);
1169    moduleMode.checkGetPackageEntryInfo(this.rollup);
1170    expect(moduleMode.pkgEntryInfos.size !== 0).to.be.true;
1171  });
1172
1173  mocha.it('7-2: test getPackageEntryInfo under build release', function () {
1174    this.rollup.build(RELEASE);
1175    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1176    const moduleMode = new ModuleModeMock(this.rollup);
1177    moduleMode.checkGetPackageEntryInfo(this.rollup);
1178    expect(moduleMode.pkgEntryInfos.size !== 0).to.be.true;
1179  });
1180
1181  mocha.it('7-3: test getPackageEntryInfo under preview debug', function () {
1182    this.rollup.preview();
1183    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1184    const moduleMode = new ModuleModeMock(this.rollup);
1185    moduleMode.checkGetPackageEntryInfo(this.rollup);
1186    expect(moduleMode.pkgEntryInfos.size !== 0).to.be.true;
1187  });
1188
1189  mocha.it('7-4: test getPackageEntryInfo under hot reload debug', function () {
1190    this.rollup.hotReload();
1191    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1192    const moduleMode = new ModuleModeMock(this.rollup);
1193    moduleMode.checkGetPackageEntryInfo(this.rollup);
1194    expect(moduleMode.pkgEntryInfos.size !== 0).to.be.true;
1195  });
1196
1197  mocha.it('7-5: test the error message of getPackageEntryInfo under build debug', function () {
1198    this.rollup.build();
1199    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1200    const errInfo: LogData = LogDataFactory.newInstance(
1201      ErrorCode.ETS2BUNDLE_INTERNAL_UNABLE_TO_GET_MODULE_INFO_META_PKG_PATH,
1202      ArkTSInternalErrorDescription,
1203      sinon.match.any
1204    );
1205    const moduleMode = new ModuleModeMock(this.rollup);
1206    const stub = sinon.stub(moduleMode.logger.getLoggerFromErrorCode(errInfo.code), 'printErrorAndExit');
1207    const isTestErrorLog = true;
1208    try {
1209      moduleMode.checkGetPackageEntryInfo(this.rollup, isTestErrorLog);
1210    } catch (e) {
1211    }
1212    expect(stub.calledWith(errInfo)).to.be.true;
1213    stub.restore();
1214  });
1215
1216  mocha.it('7-5-1: test the error message of getPackageEntryInfo under build debug ' +
1217    'without getHvigorConsoleLogger', function () {
1218    this.rollup.build();
1219    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1220    const errInfo: LogData = LogDataFactory.newInstance(
1221      ErrorCode.ETS2BUNDLE_INTERNAL_UNABLE_TO_GET_MODULE_INFO_META_PKG_PATH,
1222      ArkTSInternalErrorDescription
1223    );
1224    CommonLogger.destroyInstance();
1225    const getHvigorConsoleLogger = this.rollup.share.getHvigorConsoleLogger;
1226    this.rollup.share.getHvigorConsoleLogger = undefined;
1227    const moduleMode = new ModuleModeMock(this.rollup);
1228    const stub = sinon.stub(moduleMode.logger, 'throwArkTsCompilerError');
1229    const isTestErrorLog = true;
1230    try {
1231      moduleMode.checkGetPackageEntryInfo(this.rollup, isTestErrorLog);
1232    } catch (e) {
1233    }
1234    expect(stub.calledWithMatch(errInfo.toString())).to.be.true;
1235    CommonLogger.destroyInstance();
1236    this.rollup.share.getHvigorConsoleLogger = getHvigorConsoleLogger;
1237    stub.restore();
1238  });
1239
1240  mocha.it('7-6: test the error message of getPackageEntryInfo under build release', function () {
1241    this.rollup.build(RELEASE);
1242    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1243    const errInfo: LogData = LogDataFactory.newInstance(
1244      ErrorCode.ETS2BUNDLE_INTERNAL_UNABLE_TO_GET_MODULE_INFO_META_PKG_PATH,
1245      ArkTSInternalErrorDescription,
1246      sinon.match.any
1247    );
1248    const moduleMode = new ModuleModeMock(this.rollup);
1249    const stub = sinon.stub(moduleMode.logger.getLoggerFromErrorCode(errInfo.code), 'printErrorAndExit');
1250    const isTestErrorLog = true;
1251    try {
1252      moduleMode.checkGetPackageEntryInfo(this.rollup, isTestErrorLog);
1253    } catch (e) {
1254    }
1255    expect(stub.calledWith(errInfo)).to.be.true;
1256    stub.restore();
1257  });
1258
1259  mocha.it('7-6-1: test the error message of getPackageEntryInfo under build release ' +
1260    'without getHvigorConsoleLogger', function () {
1261    this.rollup.build(RELEASE);
1262    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1263    const errInfo: LogData = LogDataFactory.newInstance(
1264      ErrorCode.ETS2BUNDLE_INTERNAL_UNABLE_TO_GET_MODULE_INFO_META_PKG_PATH,
1265      ArkTSInternalErrorDescription
1266    );
1267    CommonLogger.destroyInstance();
1268    const getHvigorConsoleLogger = this.rollup.share.getHvigorConsoleLogger;
1269    this.rollup.share.getHvigorConsoleLogger = undefined;
1270    const moduleMode = new ModuleModeMock(this.rollup);
1271    const stub = sinon.stub(moduleMode.logger, 'throwArkTsCompilerError');
1272    const isTestErrorLog = true;
1273    try {
1274      moduleMode.checkGetPackageEntryInfo(this.rollup, isTestErrorLog);
1275    } catch (e) {
1276    }
1277    expect(stub.calledWithMatch(errInfo.toString())).to.be.true;
1278    CommonLogger.destroyInstance();
1279    this.rollup.share.getHvigorConsoleLogger = getHvigorConsoleLogger;
1280    stub.restore();
1281  });
1282
1283  mocha.it('7-7: test the error message of getPackageEntryInfo under preview debug', function () {
1284    this.rollup.preview();
1285    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1286    const errInfo: LogData = LogDataFactory.newInstance(
1287      ErrorCode.ETS2BUNDLE_INTERNAL_UNABLE_TO_GET_MODULE_INFO_META_PKG_PATH,
1288      ArkTSInternalErrorDescription,
1289      sinon.match.any
1290    );
1291    const moduleMode = new ModuleModeMock(this.rollup);
1292    const stub = sinon.stub(moduleMode.logger.getLoggerFromErrorCode(errInfo.code), 'printErrorAndExit');
1293    const isTestErrorLog = true;
1294    try {
1295      moduleMode.checkGetPackageEntryInfo(this.rollup, isTestErrorLog);
1296    } catch (e) {
1297    }
1298    expect(stub.calledWith(errInfo)).to.be.true;
1299    stub.restore();
1300  });
1301
1302  mocha.it('7-7-1: test the error message of getPackageEntryInfo under preview debug ' +
1303    'without getHvigorConsoleLogger', function () {
1304    this.rollup.preview();
1305    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1306    const errInfo: LogData = LogDataFactory.newInstance(
1307      ErrorCode.ETS2BUNDLE_INTERNAL_UNABLE_TO_GET_MODULE_INFO_META_PKG_PATH,
1308      ArkTSInternalErrorDescription
1309    );
1310    CommonLogger.destroyInstance();
1311    const getHvigorConsoleLogger = this.rollup.share.getHvigorConsoleLogger;
1312    this.rollup.share.getHvigorConsoleLogger = undefined;
1313    const moduleMode = new ModuleModeMock(this.rollup);
1314    const stub = sinon.stub(moduleMode.logger, 'throwArkTsCompilerError');
1315    const isTestErrorLog = true;
1316    try {
1317      moduleMode.checkGetPackageEntryInfo(this.rollup, isTestErrorLog);
1318    } catch (e) {
1319    }
1320    expect(stub.calledWithMatch(errInfo.toString())).to.be.true;
1321    CommonLogger.destroyInstance();
1322    this.rollup.share.getHvigorConsoleLogger = getHvigorConsoleLogger;
1323    stub.restore();
1324  });
1325
1326  mocha.it('7-8: test the error message of getPackageEntryInfo under hot reload debug', function () {
1327    this.rollup.hotReload();
1328    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1329    const errInfo: LogData = LogDataFactory.newInstance(
1330      ErrorCode.ETS2BUNDLE_INTERNAL_UNABLE_TO_GET_MODULE_INFO_META_PKG_PATH,
1331      ArkTSInternalErrorDescription,
1332      sinon.match.any
1333    );
1334    const moduleMode = new ModuleModeMock(this.rollup);
1335    const stub = sinon.stub(moduleMode.logger.getLoggerFromErrorCode(errInfo.code), 'printErrorAndExit');
1336    const isTestErrorLog = true;
1337    try {
1338      moduleMode.checkGetPackageEntryInfo(this.rollup, isTestErrorLog);
1339    } catch (e) {
1340    }
1341    expect(stub.calledWith(errInfo)).to.be.true;
1342    stub.restore();
1343  });
1344
1345  mocha.it('7-8-1: test the error message of getPackageEntryInfo under hot reload debug ' +
1346    'without getHvigorConsoleLogger', function () {
1347    this.rollup.hotReload();
1348    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1349    const errInfo: LogData = LogDataFactory.newInstance(
1350      ErrorCode.ETS2BUNDLE_INTERNAL_UNABLE_TO_GET_MODULE_INFO_META_PKG_PATH,
1351      ArkTSInternalErrorDescription
1352    );
1353    CommonLogger.destroyInstance();
1354    const getHvigorConsoleLogger = this.rollup.share.getHvigorConsoleLogger;
1355    this.rollup.share.getHvigorConsoleLogger = undefined;
1356    const moduleMode = new ModuleModeMock(this.rollup);
1357    const stub = sinon.stub(moduleMode.logger, 'throwArkTsCompilerError');
1358    const isTestErrorLog = true;
1359    try {
1360      moduleMode.checkGetPackageEntryInfo(this.rollup, isTestErrorLog);
1361    } catch (e) {
1362    }
1363    expect(stub.calledWithMatch(errInfo.toString())).to.be.true;
1364    CommonLogger.destroyInstance();
1365    this.rollup.share.getHvigorConsoleLogger = getHvigorConsoleLogger;
1366    stub.restore();
1367  });
1368
1369  mocha.it('8-1: test buildModuleSourceMapInfo under build debug', async function () {
1370    this.rollup.build();
1371    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
1372    const moduleMode = new ModuleModeMock(this.rollup);
1373    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
1374    await sleep(1000);
1375    expect(moduleMode.checkModuleSourceMapInfoMock() === true).to.be.true;
1376    SourceMapGenerator.cleanSourceMapObject();
1377  });
1378
1379  mocha.it('8-2: test buildModuleSourceMapInfo under build release', async function () {
1380    this.rollup.build(RELEASE);
1381    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
1382    const moduleMode = new ModuleModeMock(this.rollup);
1383    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
1384    await sleep(1000);
1385    expect(moduleMode.checkModuleSourceMapInfoMock() === true).to.be.true;
1386    SourceMapGenerator.cleanSourceMapObject();
1387  });
1388
1389  mocha.it('8-3: test buildModuleSourceMapInfo under preview debug', async function () {
1390    this.rollup.preview();
1391    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
1392    const moduleMode = new ModuleModeMock(this.rollup);
1393    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
1394    await sleep(1000);
1395    expect(moduleMode.checkModuleSourceMapInfoMock() === true).to.be.true;
1396    SourceMapGenerator.cleanSourceMapObject();
1397  });
1398
1399  mocha.it('8-4: test buildModuleSourceMapInfo under hot reload debug', async function () {
1400    this.rollup.hotReload();
1401    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
1402    const moduleMode = new ModuleModeMock(this.rollup);
1403    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
1404    await sleep(1000);
1405    expect(moduleMode.checkModuleSourceMapInfoMock() === true).to.be.true;
1406    SourceMapGenerator.cleanSourceMapObject();
1407  });
1408
1409  mocha.it('8-5: test the error message of buildModuleSourceMapInfo under build debug', async function () {
1410    this.rollup.build();
1411    const errInfo: LogData = LogDataFactory.newInstance(
1412      ErrorCode.ETS2BUNDLE_INTERNAL_WRITE_SOURCE_MAP_FAILED,
1413      ArkTSInternalErrorDescription,
1414      "Failed to write sourceMaps. ENOENT: no such file or directory, open ''"
1415    );
1416    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
1417    const moduleMode = new ModuleModeMock(this.rollup);
1418    const stub = sinon.stub(sourceMapGenerator.logger.getLoggerFromErrorCode(errInfo.code), 'printErrorAndExit');
1419    const copyFileSyncStub = sinon.stub(fs, 'copyFileSync').returns(undefined);
1420    sourceMapGenerator.setNewSoureMaps(false);
1421    sourceMapGenerator.setSourceMapPath('');
1422    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
1423    await sleep(100);
1424    expect(stub.calledWith(errInfo)).to.be.true;
1425    stub.restore();
1426    copyFileSyncStub.restore();
1427    SourceMapGenerator.cleanSourceMapObject();
1428  });
1429
1430  mocha.it('8-5-1: test the error message of buildModuleSourceMapInfo under build debug ' +
1431    'without getHvigorConsoleLogger', async function () {
1432    this.rollup.build();
1433    const errInfo: LogData = LogDataFactory.newInstance(
1434      ErrorCode.ETS2BUNDLE_INTERNAL_WRITE_SOURCE_MAP_FAILED,
1435      ArkTSInternalErrorDescription,
1436      "Failed to write sourceMaps. ENOENT: no such file or directory, open ''"
1437    );
1438    CommonLogger.destroyInstance();
1439    const getHvigorConsoleLogger = this.rollup.share.getHvigorConsoleLogger;
1440    this.rollup.share.getHvigorConsoleLogger = undefined;
1441    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
1442    const moduleMode = new ModuleModeMock(this.rollup);
1443    const stub = sinon.stub(sourceMapGenerator.logger, 'throwArkTsCompilerError');
1444    const copyFileSyncStub = sinon.stub(fs, 'copyFileSync').returns(undefined);
1445    sourceMapGenerator.setNewSoureMaps(false);
1446    sourceMapGenerator.setSourceMapPath('');
1447    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
1448    await sleep(100);
1449    expect(stub.calledWith(errInfo.toString())).to.be.true;
1450    CommonLogger.destroyInstance();
1451    this.rollup.share.getHvigorConsoleLogger = getHvigorConsoleLogger;
1452    stub.restore();
1453    copyFileSyncStub.restore();
1454    SourceMapGenerator.cleanSourceMapObject();
1455  });
1456
1457  mocha.it('8-6: test the error message of buildModuleSourceMapInfo under build release', async function () {
1458    this.rollup.build(RELEASE);
1459    const errInfo: LogData = LogDataFactory.newInstance(
1460      ErrorCode.ETS2BUNDLE_INTERNAL_WRITE_SOURCE_MAP_FAILED,
1461      ArkTSInternalErrorDescription,
1462      "Failed to write sourceMaps. ENOENT: no such file or directory, open ''"
1463    );
1464    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
1465    const moduleMode = new ModuleModeMock(this.rollup);
1466    const stub = sinon.stub(sourceMapGenerator.logger.getLoggerFromErrorCode(errInfo.code), 'printErrorAndExit');
1467    const copyFileSyncStub = sinon.stub(fs, 'copyFileSync').returns(undefined);
1468    sourceMapGenerator.setNewSoureMaps(false);
1469    sourceMapGenerator.setSourceMapPath('');
1470    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
1471    await sleep(100);
1472    expect(stub.calledWith(errInfo)).to.be.true;
1473    stub.restore();
1474    copyFileSyncStub.restore();
1475    SourceMapGenerator.cleanSourceMapObject();
1476  });
1477
1478  mocha.it('8-6-1: test the error message of buildModuleSourceMapInfo under build release ' +
1479    'without getHvigorConsoleLogger', async function () {
1480    this.rollup.build(RELEASE);
1481    const errInfo: LogData = LogDataFactory.newInstance(
1482      ErrorCode.ETS2BUNDLE_INTERNAL_WRITE_SOURCE_MAP_FAILED,
1483      ArkTSInternalErrorDescription,
1484      "Failed to write sourceMaps. ENOENT: no such file or directory, open ''"
1485    );
1486    CommonLogger.destroyInstance();
1487    const getHvigorConsoleLogger = this.rollup.share.getHvigorConsoleLogger;
1488    this.rollup.share.getHvigorConsoleLogger = undefined;
1489    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
1490    const moduleMode = new ModuleModeMock(this.rollup);
1491    const stub = sinon.stub(sourceMapGenerator.logger, 'throwArkTsCompilerError');
1492    const copyFileSyncStub = sinon.stub(fs, 'copyFileSync').returns(undefined);
1493    sourceMapGenerator.setNewSoureMaps(false);
1494    sourceMapGenerator.setSourceMapPath('');
1495    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
1496    await sleep(100);
1497    expect(stub.calledWith(errInfo.toString())).to.be.true;
1498    CommonLogger.destroyInstance();
1499    this.rollup.share.getHvigorConsoleLogger = getHvigorConsoleLogger;
1500    stub.restore();
1501    copyFileSyncStub.restore();
1502    SourceMapGenerator.cleanSourceMapObject();
1503  });
1504
1505  mocha.it('8-7: test the error message of buildModuleSourceMapInfo under preview debug', async function () {
1506    this.rollup.preview();
1507    const errInfo: LogData = LogDataFactory.newInstance(
1508      ErrorCode.ETS2BUNDLE_INTERNAL_WRITE_SOURCE_MAP_FAILED,
1509      ArkTSInternalErrorDescription,
1510      "Failed to write sourceMaps. ENOENT: no such file or directory, open ''"
1511    );
1512    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
1513    const moduleMode = new ModuleModeMock(this.rollup);
1514    const stub = sinon.stub(sourceMapGenerator.logger.getLoggerFromErrorCode(errInfo.code), 'printErrorAndExit');
1515    const copyFileSyncStub = sinon.stub(fs, 'copyFileSync').returns(undefined);
1516    sourceMapGenerator.setNewSoureMaps(false);
1517    sourceMapGenerator.setSourceMapPath('');
1518    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
1519    await sleep(100);
1520    expect(stub.calledWith(errInfo)).to.be.true;
1521    stub.restore();
1522    copyFileSyncStub.restore();
1523    SourceMapGenerator.cleanSourceMapObject();
1524  });
1525
1526  mocha.it('8-7-1: test the error message of buildModuleSourceMapInfo under preview debug ' +
1527    'without getHvigorConsoleLogger', async function () {
1528    this.rollup.preview();
1529    const errInfo: LogData = LogDataFactory.newInstance(
1530      ErrorCode.ETS2BUNDLE_INTERNAL_WRITE_SOURCE_MAP_FAILED,
1531      ArkTSInternalErrorDescription,
1532      "Failed to write sourceMaps. ENOENT: no such file or directory, open ''"
1533    );
1534    CommonLogger.destroyInstance();
1535    const getHvigorConsoleLogger = this.rollup.share.getHvigorConsoleLogger;
1536    this.rollup.share.getHvigorConsoleLogger = undefined;
1537    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
1538    const moduleMode = new ModuleModeMock(this.rollup);
1539    const stub = sinon.stub(sourceMapGenerator.logger, 'throwArkTsCompilerError');
1540    const copyFileSyncStub = sinon.stub(fs, 'copyFileSync').returns(undefined);
1541    sourceMapGenerator.setNewSoureMaps(false);
1542    sourceMapGenerator.setSourceMapPath('');
1543    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
1544    await sleep(100);
1545    expect(stub.calledWith(errInfo.toString())).to.be.true;
1546    CommonLogger.destroyInstance();
1547    this.rollup.share.getHvigorConsoleLogger = getHvigorConsoleLogger;
1548    stub.restore();
1549    copyFileSyncStub.restore();
1550    SourceMapGenerator.cleanSourceMapObject();
1551  });
1552
1553  mocha.it('8-8: test the error message of buildModuleSourceMapInfo under hot reload debug', async function () {
1554    this.rollup.hotReload();
1555    const errInfo: LogData = LogDataFactory.newInstance(
1556      ErrorCode.ETS2BUNDLE_INTERNAL_WRITE_SOURCE_MAP_FAILED,
1557      ArkTSInternalErrorDescription,
1558      "Failed to write sourceMaps. ENOENT: no such file or directory, open ''"
1559    );
1560    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
1561    const moduleMode = new ModuleModeMock(this.rollup);
1562    const stub = sinon.stub(sourceMapGenerator.logger.getLoggerFromErrorCode(errInfo.code), 'printErrorAndExit');
1563    const copyFileSyncStub = sinon.stub(fs, 'copyFileSync').returns(undefined);
1564    sourceMapGenerator.setNewSoureMaps(false);
1565    sourceMapGenerator.setSourceMapPath('');
1566    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
1567    await sleep(100);
1568    expect(stub.calledWith(errInfo)).to.be.true;
1569    stub.restore();
1570    copyFileSyncStub.restore();
1571    SourceMapGenerator.cleanSourceMapObject();
1572  });
1573
1574  mocha.it('8-8-1: test the error message of buildModuleSourceMapInfo under hot reload debug ' +
1575    'without getHvigorConsoleLogger', async function () {
1576    this.rollup.hotReload();
1577    const errInfo: LogData = LogDataFactory.newInstance(
1578      ErrorCode.ETS2BUNDLE_INTERNAL_WRITE_SOURCE_MAP_FAILED,
1579      ArkTSInternalErrorDescription,
1580      "Failed to write sourceMaps. ENOENT: no such file or directory, open ''"
1581    );
1582    CommonLogger.destroyInstance();
1583    const getHvigorConsoleLogger = this.rollup.share.getHvigorConsoleLogger;
1584    this.rollup.share.getHvigorConsoleLogger = undefined;
1585    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
1586    const moduleMode = new ModuleModeMock(this.rollup);
1587    const stub = sinon.stub(sourceMapGenerator.logger, 'throwArkTsCompilerError');
1588    const copyFileSyncStub = sinon.stub(fs, 'copyFileSync').returns(undefined);
1589    sourceMapGenerator.setNewSoureMaps(false);
1590    sourceMapGenerator.setSourceMapPath('');
1591    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
1592    await sleep(100);
1593    expect(stub.calledWith(errInfo.toString())).to.be.true;
1594    expect(stub.calledWith(errInfo.toString())).to.be.true;
1595    CommonLogger.destroyInstance();
1596    stub.restore();
1597    copyFileSyncStub.restore();
1598    SourceMapGenerator.cleanSourceMapObject();
1599  });
1600
1601  mocha.it('8-9: test merge bytecode source map of buildModuleSourceMapInfo under build debug', async function () {
1602    this.rollup.build();
1603    this.rollup.share.projectConfig.mockBytecodeHarInfo();
1604    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
1605    const moduleMode = new ModuleModeMock(this.rollup);
1606    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
1607    await sleep(1000);
1608    expect(moduleMode.checkModuleSourceMapInfoMock() === true).to.be.true;
1609    SourceMapGenerator.cleanSourceMapObject();
1610  });
1611
1612  mocha.it('9-1: test getPkgModulesFilePkgName under build debug', function () {
1613    this.rollup.build();
1614    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1615    const moduleMode = new ModuleModeMock(this.rollup);
1616    const keys = Object.keys(moduleMode.symlinkMap);
1617    for (const key of keys) {
1618      const pkgname = moduleMode.getPkgModulesFilePkgName(key).toString();
1619      expect(pkgname === PKG_MODULES_OHPM_HYPIUM).to.be.true;
1620    }
1621  });
1622
1623  mocha.it('9-2: test getPkgModulesFilePkgName under build release', function () {
1624    this.rollup.build(RELEASE);
1625    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1626    const moduleMode = new ModuleModeMock(this.rollup);
1627    const keys = Object.keys(moduleMode.symlinkMap);
1628    for (const key of keys) {
1629      const pkgname = moduleMode.getPkgModulesFilePkgName(key).toString();
1630      expect(pkgname === PKG_MODULES_OHPM_HYPIUM).to.be.true;
1631    }
1632  });
1633
1634  mocha.it('9-3: test getPkgModulesFilePkgName under preview debug', function () {
1635    this.rollup.preview();
1636    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1637    const moduleMode = new ModuleModeMock(this.rollup);
1638    const keys = Object.keys(moduleMode.symlinkMap);
1639    for (const key of keys) {
1640      const pkgname = moduleMode.getPkgModulesFilePkgName(key).toString();
1641      expect(pkgname === PKG_MODULES_OHPM_HYPIUM).to.be.true;
1642    }
1643  });
1644
1645  mocha.it('9-4: test getPkgModulesFilePkgName under hot reload debug', function () {
1646    this.rollup.hotReload();
1647    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1648    const moduleMode = new ModuleModeMock(this.rollup);
1649    const keys = Object.keys(moduleMode.symlinkMap);
1650    for (const key of keys) {
1651      const pkgname = moduleMode.getPkgModulesFilePkgName(key).toString();
1652      expect(pkgname === PKG_MODULES_OHPM_HYPIUM).to.be.true;
1653    }
1654  });
1655
1656  mocha.it('10-1: test generateEs2AbcCmd under build debug', function () {
1657    this.rollup.build();
1658    this.rollup.share.projectConfig.oldMapFilePath = DEFAULT_ETS;
1659    const moduleMode = new ModuleHotreloadMode(this.rollup);
1660    const compatibleSdkVersion = `${TARGET_API_VERSION}${this.rollup.share.projectConfig.compatibleSdkVersion}`;
1661    moduleMode.projectConfig.anBuildMode = AOT_FULL;
1662    moduleMode.generateEs2AbcCmd();
1663    moduleMode.byteCodeHar = true;
1664
1665    expect(moduleMode.cmdArgs[1] === DEBUG_INFO).to.be.true;
1666    moduleMode.cmdArgs.splice(1, 1);
1667    expect(moduleMode.cmdArgs[1].indexOf(BUILD_INFO) > 0).to.be.true;
1668    moduleMode.cmdArgs.splice(1, 1);
1669    expect(moduleMode.cmdArgs[2].indexOf(BUILD_NPM) > 0).to.be.true;
1670    moduleMode.cmdArgs.splice(2, 1);
1671    expect(moduleMode.cmdArgs[3].indexOf(MODULES_ABC) > 0).to.be.true;
1672    moduleMode.cmdArgs.splice(3, 1);
1673    checkGenerateEs2AbcCmdExpect(moduleMode.cmdArgs, compatibleSdkVersion, moduleMode.byteCodeHar);
1674  });
1675
1676  mocha.it('10-2: test generateEs2AbcCmd under build release', function () {
1677    this.rollup.build(RELEASE);
1678    this.rollup.share.projectConfig.oldMapFilePath = DEFAULT_ETS;
1679    const moduleMode = new ModuleHotreloadMode(this.rollup);
1680    const compatibleSdkVersion = `${TARGET_API_VERSION}${this.rollup.share.projectConfig.compatibleSdkVersion}`;
1681    moduleMode.generateEs2AbcCmd();
1682    moduleMode.byteCodeHar = true;
1683
1684    expect(moduleMode.cmdArgs[1] === DEBUG_INFO).to.be.false;
1685    expect(moduleMode.cmdArgs[1].indexOf(BUILD_INFO) > 0).to.be.true;
1686    moduleMode.cmdArgs.splice(1, 1);
1687    expect(moduleMode.cmdArgs[2].indexOf(BUILD_NPM) > 0).to.be.true;
1688    moduleMode.cmdArgs.splice(2, 1);
1689    expect(moduleMode.cmdArgs[3].indexOf(MODULES_ABC) > 0).to.be.true;
1690    moduleMode.cmdArgs.splice(3, 1);
1691    checkGenerateEs2AbcCmdExpect(moduleMode.cmdArgs, compatibleSdkVersion, moduleMode.byteCodeHar);
1692  });
1693
1694  mocha.it('10-3: test generateEs2AbcCmd under preview debug', function () {
1695    this.rollup.preview();
1696    this.rollup.share.projectConfig.oldMapFilePath = DEFAULT_ETS;
1697    const moduleMode = new ModuleHotreloadMode(this.rollup);
1698    const compatibleSdkVersion = `${TARGET_API_VERSION}${this.rollup.share.projectConfig.compatibleSdkVersion}`;
1699    moduleMode.generateEs2AbcCmd();
1700    moduleMode.byteCodeHar = true;
1701
1702    expect(moduleMode.cmdArgs[1] === DEBUG_INFO).to.be.true;
1703    moduleMode.cmdArgs.splice(1, 1);
1704    expect(moduleMode.cmdArgs[1].indexOf(PREVIEW_DEBUG_INFO) > 0).to.be.true;
1705    moduleMode.cmdArgs.splice(1, 1);
1706    expect(moduleMode.cmdArgs[2].indexOf(PREVIEW_DEBUG_NPM) > 0).to.be.true;
1707    moduleMode.cmdArgs.splice(2, 1);
1708    expect(moduleMode.cmdArgs[3].indexOf(PREVIEW_MODULES_ABC) > 0).to.be.true;
1709    moduleMode.cmdArgs.splice(3, 1);
1710    checkGenerateEs2AbcCmdExpect(moduleMode.cmdArgs, compatibleSdkVersion, moduleMode.byteCodeHar);
1711  });
1712  mocha.it('10-4: test generateEs2AbcCmd with enable column', function () {
1713    this.rollup.build();
1714    this.rollup.share.projectConfig.enableColumnNum = true;
1715    const moduleMode = new ModuleHotreloadMode(this.rollup);
1716    moduleMode.generateEs2AbcCmd();
1717
1718    expect(moduleMode.cmdArgs.includes('--enable-release-column')).to.be.true;
1719  });
1720
1721  mocha.it('11-1: test addCacheFileArgs under build debug', function () {
1722    this.rollup.build();
1723    this.rollup.share.projectConfig.oldMapFilePath = DEFAULT_ETS;
1724    const moduleMode = new ModuleHotreloadMode(this.rollup);
1725    moduleMode.addCacheFileArgs();
1726
1727    expect(moduleMode.cmdArgs[0].indexOf(ES2ABC_PATH) > 0).to.be.true;
1728    expect(moduleMode.cmdArgs[1] === DEBUG_INFO).to.be.true;
1729    expect(moduleMode.cmdArgs[2] === CACHE_FILE).to.be.true;
1730    expect(moduleMode.cmdArgs[3].indexOf(BUILD_CACHE) > 0).to.be.true;
1731  });
1732
1733  mocha.it('11-2: test addCacheFileArgs under build release', function () {
1734    this.rollup.build(RELEASE);
1735    this.rollup.share.projectConfig.oldMapFilePath = DEFAULT_ETS;
1736    const moduleMode = new ModuleHotreloadMode(this.rollup);
1737    moduleMode.addCacheFileArgs();
1738
1739    expect(moduleMode.cmdArgs[0].indexOf(ES2ABC_PATH) > 0).to.be.true;
1740    expect(moduleMode.cmdArgs[1] === DEBUG_INFO).to.be.false;
1741    expect(moduleMode.cmdArgs[1] === CACHE_FILE).to.be.true;
1742    expect(moduleMode.cmdArgs[2].indexOf(BUILD_CACHE) > 0).to.be.true;
1743  });
1744
1745  mocha.it('11-3: test addCacheFileArgs under preview debug', function () {
1746    this.rollup.preview();
1747    this.rollup.share.projectConfig.oldMapFilePath = DEFAULT_ETS;
1748    const moduleMode = new ModuleHotreloadMode(this.rollup);
1749    moduleMode.addCacheFileArgs();
1750
1751    expect(moduleMode.cmdArgs[0].indexOf(ES2ABC_PATH) > 0).to.be.true;
1752    expect(moduleMode.cmdArgs[1] === DEBUG_INFO).to.be.true;
1753    expect(moduleMode.cmdArgs[2] === CACHE_FILE).to.be.true;
1754    expect(moduleMode.cmdArgs[3].indexOf(PREVIEW_DEBUG_CACHE) > 0).to.be.true;
1755  });
1756
1757  mocha.it('11-4: test addCacheFileArgs under hot reload debug', function () {
1758    this.rollup.hotReload();
1759    this.rollup.share.projectConfig.oldMapFilePath = DEFAULT_ETS;
1760    const moduleMode = new ModuleHotreloadMode(this.rollup);
1761    moduleMode.addCacheFileArgs();
1762
1763    expect(moduleMode.cmdArgs[0].indexOf(ES2ABC_PATH) > 0).to.be.true;
1764    expect(moduleMode.cmdArgs[1] === DEBUG_INFO).to.be.true;
1765    expect(moduleMode.cmdArgs[2] === CACHE_FILE).to.be.true;
1766    expect(moduleMode.cmdArgs[3].indexOf(BUILD_CACHE) > 0).to.be.true;
1767  });
1768
1769  mocha.it('12-1: test genFileCachePath under build debug', function () {
1770    this.rollup.build();
1771    const moduleMode = new ModuleModeMock(this.rollup);
1772    const allFiles = new Set<string>();
1773    scanFiles(this.rollup.share.projectConfig.modulePath, allFiles);
1774    this.mockfileList = allFiles.values();
1775    for (const filePath of this.mockfileList) {
1776      if (filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS) || filePath.endsWith(EXTNAME_JS)) {
1777        const sufStr =
1778          toUnixPath(filePath).replace(toUnixPath(this.rollup.share.projectConfig.projectRootPath), '');
1779        const returnInfo =
1780          moduleMode.genFileCachePath(filePath, this.rollup.share.projectConfig.projectRootPath,
1781            this.rollup.share.projectConfig.cachePath);
1782        expect(returnInfo === path.join(this.rollup.share.projectConfig.cachePath, sufStr)).to.be.true;
1783      }
1784    }
1785  });
1786
1787  mocha.it('12-2: test genFileCachePath under build release', function () {
1788    this.rollup.build(RELEASE);
1789    const moduleMode = new ModuleModeMock(this.rollup);
1790    const allFiles = new Set<string>();
1791    scanFiles(this.rollup.share.projectConfig.modulePath, allFiles);
1792    this.mockfileList = allFiles.values();
1793    for (const filePath of this.mockfileList) {
1794      if (filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS) || filePath.endsWith(EXTNAME_JS)) {
1795        const sufStr =
1796          toUnixPath(filePath).replace(toUnixPath(this.rollup.share.projectConfig.projectRootPath), '');
1797        const returnInfo =
1798          moduleMode.genFileCachePath(filePath, this.rollup.share.projectConfig.projectRootPath,
1799            this.rollup.share.projectConfig.cachePath);
1800        expect(returnInfo === path.join(this.rollup.share.projectConfig.cachePath, sufStr)).to.be.true;
1801      }
1802    }
1803  });
1804
1805  mocha.it('12-3: test genFileCachePath under preview debug', function () {
1806    this.rollup.preview();
1807    const moduleMode = new ModuleModeMock(this.rollup);
1808    const allFiles = new Set<string>();
1809    scanFiles(this.rollup.share.projectConfig.modulePath, allFiles);
1810    this.mockfileList = allFiles.values();
1811    for (const filePath of this.mockfileList) {
1812      if (filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS) || filePath.endsWith(EXTNAME_JS)) {
1813        const sufStr =
1814          toUnixPath(filePath).replace(toUnixPath(this.rollup.share.projectConfig.projectRootPath), '');
1815        const returnInfo =
1816          moduleMode.genFileCachePath(filePath, this.rollup.share.projectConfig.projectRootPath,
1817            this.rollup.share.projectConfig.cachePath);
1818        expect(returnInfo === path.join(this.rollup.share.projectConfig.cachePath, sufStr)).to.be.true;
1819      }
1820    }
1821  });
1822
1823  mocha.it('12-4: test genFileCachePath under hot reload debug', function () {
1824    this.rollup.hotReload();
1825    const moduleMode = new ModuleModeMock(this.rollup);
1826    this.mockfileList = this.rollup.getModuleIds();
1827    for (const filePath of this.mockfileList) {
1828      if (filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS) || filePath.endsWith(EXTNAME_JS)) {
1829        const sufStr =
1830          toUnixPath(filePath).replace(toUnixPath(this.rollup.share.projectConfig.projectRootPath), '');
1831        const returnInfo =
1832          moduleMode.genFileCachePath(filePath, this.rollup.share.projectConfig.projectRootPath,
1833            this.rollup.share.projectConfig.cachePath);
1834        expect(returnInfo === path.join(this.rollup.share.projectConfig.cachePath, sufStr)).to.be.true;
1835      }
1836    }
1837  });
1838
1839  mocha.it('12-5: test genFileCachePath under hot fix debug', function () {
1840    this.rollup.build();
1841    this.rollup.share.projectConfig.oldMapFilePath = DEFAULT_ETS;
1842    const cachePath = projectConfig.cachePath + DEBUG;
1843    const moduleMode = new ModuleModeMock(this.rollup);
1844    const filePath = `${projectConfig.projectRootPath}/${TEST_TS}`;
1845    const sufStr = toUnixPath(filePath).replace(toUnixPath(projectConfig.projectRootPath), '');
1846    const returnInfo = moduleMode.genFileCachePath(filePath, projectConfig.projectRootPath, cachePath);
1847    expect(returnInfo === path.join(cachePath, sufStr)).to.be.true;
1848  });
1849
1850  mocha.it('12-6: test genFileCachePath under hot fix release', function () {
1851    this.rollup.build(RELEASE);
1852    this.rollup.share.projectConfig.oldMapFilePath = DEFAULT_ETS;
1853    const cachePath = projectConfig.cachePath + RELEASE;
1854    const moduleMode = new ModuleModeMock(this.rollup);
1855    const filePath = `${projectConfig.projectRootPath}/${TEST_TS}`;
1856    const sufStr = toUnixPath(filePath).replace(toUnixPath(projectConfig.projectRootPath), '');
1857    const returnInfo = moduleMode.genFileCachePath(filePath, projectConfig.projectRootPath, cachePath);
1858    expect(returnInfo === path.join(cachePath, sufStr)).to.be.true;
1859  });
1860
1861  mocha.it('13-1: test the error message of generateMergedAbcOfEs2Abc throw error on failed code', async function () {
1862    this.rollup.build();
1863    const errInfo: LogData = LogDataFactory.newInstance(
1864      ErrorCode.ETS2BUNDLE_EXTERNAL_ES2ABC_EXECUTION_FAILED,
1865      ArkTSErrorDescription,
1866      'Failed to execute es2abc.',
1867      '',
1868      ["Please refer to es2abc's error codes."]
1869    );
1870    const moduleMode = new ModuleModeMock(this.rollup);
1871    const child = childProcess.exec('false', { windowsHide: true });
1872    const triggerAsyncStub = sinon.stub(moduleMode, 'triggerAsync').returns(child);
1873    const stub = sinon.stub(moduleMode.logger.getLoggerFromErrorCode(errInfo.code), 'printErrorAndExit');
1874    let parentEvent = undefined;
1875    moduleMode.generateMergedAbcOfEs2AbcMock(parentEvent);
1876    await sleep(1000);
1877    expect(stub.calledWith(errInfo)).to.be.true;
1878    triggerAsyncStub.restore();
1879    stub.restore();
1880  });
1881
1882  mocha.it('13-2: test the error message of generateMergedAbcOfEs2Abc throw error(Failed to startup es2abc)', async function () {
1883    this.rollup.build();
1884    const errInfo: LogData = LogDataFactory.newInstance(
1885      ErrorCode.ETS2BUNDLE_INTERNAL_ES2ABC_SUBPROCESS_START_FAILED,
1886      ArkTSInternalErrorDescription,
1887      'Failed to initialize or launch the es2abc process. Error: test error'
1888    );
1889    const moduleMode = new ModuleModeMock(this.rollup);
1890    const child = {
1891      on: sinon.stub(),
1892      stderr: {
1893        on: sinon.stub(),
1894      },
1895    };
1896    const triggerAsyncStub = sinon.stub(moduleMode, 'triggerAsync').callsFake((callback) => {
1897      callback();
1898      return child;
1899    });
1900    const stub = sinon.stub(moduleMode.logger.getLoggerFromErrorCode(errInfo.code), 'printErrorAndExit');
1901    let errorEventCallback;
1902    child.on.callsFake((event, callback) => {
1903      if (event === 'error') {
1904        errorEventCallback = callback;
1905      }
1906    });
1907    let parentEvent = undefined;
1908    moduleMode.generateMergedAbcOfEs2AbcMock(parentEvent);
1909    if (errorEventCallback) {
1910      errorEventCallback(new Error('test error'));
1911    }
1912    await sleep(100);
1913    expect(stub.calledWith(errInfo)).to.be.true;
1914    triggerAsyncStub.restore();
1915    stub.restore();
1916  });
1917
1918  mocha.it('13-3: test the error message of generateMergedAbcOfEs2Abc handle error', function () {
1919    this.rollup.build();
1920    const errInfo: LogData = LogDataFactory.newInstance(
1921      ErrorCode.ETS2BUNDLE_INTERNAL_EXECUTE_ES2ABC_WITH_ASYNC_HANDLER_FAILED,
1922      ArkTSInternalErrorDescription,
1923      'Failed to execute es2abc with async handler. Error: Execution failed'
1924    );
1925    const moduleMode = new ModuleModeMock(this.rollup);
1926    const triggerAsyncStub = sinon.stub(moduleMode, 'triggerAsync').throws(new Error('Execution failed'));
1927    const stub = sinon.stub(moduleMode.logger.getLoggerFromErrorCode(errInfo.code), 'printErrorAndExit');
1928    try {
1929      let parentEvent = undefined;
1930      moduleMode.generateMergedAbcOfEs2AbcMock(parentEvent);
1931    } catch (e) {
1932    }
1933    expect(stub.calledWith(errInfo)).to.be.true;
1934    triggerAsyncStub.restore();
1935    stub.restore();
1936  });
1937
1938  mocha.it('13-4: test the error message of generateMergedAbcOfEs2Abc throw error on failed code ' +
1939    'without getHvigorConsoleLogger', async function () {
1940    this.rollup.build();
1941    const errInfo: LogData = LogDataFactory.newInstance(
1942      ErrorCode.ETS2BUNDLE_EXTERNAL_ES2ABC_EXECUTION_FAILED,
1943      ArkTSErrorDescription,
1944      'Failed to execute es2abc.',
1945      '',
1946      ["Please refer to es2abc's error codes."]
1947    );
1948    CommonLogger.destroyInstance();
1949    const getHvigorConsoleLogger = this.rollup.share.getHvigorConsoleLogger;
1950    this.rollup.share.getHvigorConsoleLogger = undefined;
1951    const moduleMode = new ModuleModeMock(this.rollup);
1952    const child = childProcess.exec('false', { windowsHide: true });
1953    const triggerAsyncStub = sinon.stub(moduleMode, 'triggerAsync').returns(child);
1954    const stub = sinon.stub(moduleMode.logger, 'throwArkTsCompilerError');
1955    let parentEvent = undefined;
1956    moduleMode.generateMergedAbcOfEs2AbcMock(parentEvent);
1957    await sleep(1000);
1958    expect(stub.calledWith(errInfo.toString())).to.be.true;
1959    CommonLogger.destroyInstance();
1960    this.rollup.share.getHvigorConsoleLogger = getHvigorConsoleLogger;
1961    triggerAsyncStub.restore();
1962    stub.restore();
1963  });
1964
1965  mocha.it('13-5: test the error message of generateMergedAbcOfEs2Abc throw error(Failed to startup es2abc)' +
1966    'without getHvigorConsoleLogger', async function () {
1967    this.rollup.build();
1968    const errInfo: LogData = LogDataFactory.newInstance(
1969      ErrorCode.ETS2BUNDLE_INTERNAL_ES2ABC_SUBPROCESS_START_FAILED,
1970      ArkTSInternalErrorDescription,
1971      'Failed to initialize or launch the es2abc process. Error: test error'
1972    );
1973    CommonLogger.destroyInstance();
1974    const getHvigorConsoleLogger = this.rollup.share.getHvigorConsoleLogger;
1975    this.rollup.share.getHvigorConsoleLogger = undefined;
1976    const moduleMode = new ModuleModeMock(this.rollup);
1977    const child = {
1978      on: sinon.stub(),
1979      stderr: {
1980        on: sinon.stub(),
1981      },
1982    };
1983    const triggerAsyncStub = sinon.stub(moduleMode, 'triggerAsync').callsFake((callback) => {
1984      callback();
1985      return child;
1986    });
1987    const stub = sinon.stub(moduleMode.logger, 'throwArkTsCompilerError');
1988    let errorEventCallback;
1989    child.on.callsFake((event, callback) => {
1990      if (event === 'error') {
1991        errorEventCallback = callback;
1992      }
1993    });
1994    let parentEvent = undefined;
1995    moduleMode.generateMergedAbcOfEs2AbcMock(parentEvent);
1996    if (errorEventCallback) {
1997      errorEventCallback(new Error('test error'));
1998    }
1999    await sleep(100);
2000    expect(stub.calledWith(errInfo.toString())).to.be.true;
2001    CommonLogger.destroyInstance();
2002    this.rollup.share.getHvigorConsoleLogger = getHvigorConsoleLogger;
2003    triggerAsyncStub.restore();
2004    stub.restore();
2005  });
2006
2007  mocha.it('13-6: test the error message of generateMergedAbcOfEs2Abc handle error ' +
2008    'without getHvigorConsoleLogger', function () {
2009    this.rollup.build();
2010    const errInfo: LogData = LogDataFactory.newInstance(
2011      ErrorCode.ETS2BUNDLE_INTERNAL_EXECUTE_ES2ABC_WITH_ASYNC_HANDLER_FAILED,
2012      ArkTSInternalErrorDescription,
2013      'Failed to execute es2abc with async handler. Error: Execution failed'
2014    );
2015    CommonLogger.destroyInstance();
2016    const getHvigorConsoleLogger = this.rollup.share.getHvigorConsoleLogger;
2017    this.rollup.share.getHvigorConsoleLogger = undefined;
2018    const moduleMode = new ModuleModeMock(this.rollup);
2019    const triggerAsyncStub = sinon.stub(moduleMode, 'triggerAsync').throws(new Error('Execution failed'));
2020    const stub = sinon.stub(moduleMode.logger, 'throwArkTsCompilerError');
2021    try {
2022      let parentEvent = undefined;
2023      moduleMode.generateMergedAbcOfEs2AbcMock(parentEvent);
2024    } catch (e) {
2025    }
2026    expect(stub.calledWith(errInfo.toString())).to.be.true;
2027    CommonLogger.destroyInstance();
2028    this.rollup.share.getHvigorConsoleLogger = getHvigorConsoleLogger;
2029    triggerAsyncStub.restore();
2030    stub.restore();
2031  });
2032
2033  mocha.it('14-1: test the error message of filterModulesByHashJson', function () {
2034    this.rollup.build();
2035    const moduleMode = new ModuleModeMock(this.rollup);
2036    let existsSyncStub = sinon.stub(fs, 'existsSync');
2037    let readFileSyncStub = sinon.stub(fs, 'readFileSync');
2038    let stub = sinon.stub(moduleMode.logger, 'throwArkTsCompilerError');
2039    moduleMode.moduleInfos = new Map([
2040      ['moduleKey', { cacheFilePath: 'test' }]
2041    ]);
2042    existsSyncStub.callsFake((path) => {
2043      if (path === moduleMode.hashJsonFilePath) {
2044        return true;
2045      }
2046      return false;
2047    });
2048    readFileSyncStub.withArgs(moduleMode.hashJsonFilePath).returns(JSON.stringify({}));
2049    try {
2050      moduleMode.filterModulesByHashJsonMock();
2051    } catch (e) {
2052    }
2053    expect(stub.calledWithMatch(
2054      `ArkTS:INTERNAL ERROR: Failed to get module cache abc from test in incremental build.` +
2055      `Please try to rebuild the project.`)).to.be.true;
2056    existsSyncStub.restore();
2057    readFileSyncStub.restore();
2058    stub.restore();
2059  });
2060
2061  mocha.it('15-1: test the error message of mergeProtoToAbc', function () {
2062    this.rollup.build();
2063    const moduleMode = new ModuleMode(this.rollup);
2064    const execSyncStub = sinon.stub(childProcess, 'execSync').throws(new Error('Execution failed'));
2065    const stub = sinon.stub(moduleMode.logger, 'throwArkTsCompilerError');
2066    moduleMode.mergeProtoToAbc();
2067    expect(stub.calledWithMatch('ArkTS:INTERNAL ERROR: Failed to merge proto file to abc.')).to.be.true;
2068    execSyncStub.restore();
2069    stub.restore();
2070  });
2071
2072  mocha.it('16-1: test the error message of invokeTs2AbcWorkersToGenProto', function () {
2073    this.rollup.build();
2074    const moduleMode = new ModuleMode(this.rollup);
2075    const stub = sinon.stub(moduleMode.logger, 'throwArkTsCompilerError');
2076    const clusterStub = sinon.stub(cluster, 'fork');
2077    const fakeWorker = {
2078      on: sinon.stub()
2079    };
2080    clusterStub.returns(fakeWorker);
2081    const splittedModules = [{
2082      'test': ''
2083    }]
2084    try {
2085      fakeWorker.on.withArgs('message').callsFake((event, callback) => {
2086        callback({ data: 'error' });
2087      });
2088      moduleMode.invokeTs2AbcWorkersToGenProto(splittedModules)
2089    } catch (e) {
2090    }
2091    expect(stub.calledWith('ArkTS:ERROR Failed to execute ts2abc.')).to.be.true;
2092    clusterStub.restore();
2093    stub.restore();
2094  });
2095
2096  mocha.it('17-1: test the error message of processTs2abcWorkersToGenAbc', function () {
2097    this.rollup.build();
2098    const moduleMode = new ModuleMode(this.rollup);
2099    const stub = sinon.stub(moduleMode.logger, 'throwArkTsCompilerError');
2100    const clusterStub = sinon.stub(cluster, 'on');
2101    const fakeWorker = {
2102      on: sinon.stub()
2103    };
2104    clusterStub.returns(fakeWorker);
2105    try {
2106      clusterStub.withArgs('exit').callsFake((event, callback) => {
2107        callback(fakeWorker, 1, null);
2108      });
2109      moduleMode.processTs2abcWorkersToGenAbc()
2110    } catch (e) {
2111    }
2112    expect(stub.calledWith('ArkTS:ERROR Failed to execute ts2abc')).to.be.true;
2113    clusterStub.restore();
2114    stub.restore();
2115  });
2116
2117  mocha.it('18-1: test generateCompileContext under build debug', function () {
2118    this.rollup.build();
2119    SourceMapGenerator.initInstance(this.rollup);
2120    this.rollup.mockCompileContextInfo();
2121    const moduleMode = new ModuleModeMock(this.rollup);
2122    moduleMode.generateCompileContextInfoMock(this.rollup);
2123    expect(moduleMode.checkGenerateCompileContextInfo(this.rollup) === true).to.be.true;
2124    SourceMapGenerator.cleanSourceMapObject();
2125  });
2126
2127  mocha.it('18-2: test generateCompileContext under build release', function () {
2128    this.rollup.build(RELEASE);
2129    SourceMapGenerator.initInstance(this.rollup);
2130    this.rollup.mockCompileContextInfo();
2131    const moduleMode = new ModuleModeMock(this.rollup);
2132    moduleMode.generateCompileContextInfoMock(this.rollup);
2133    expect(moduleMode.checkGenerateCompileContextInfo(this.rollup) === true).to.be.true;
2134    SourceMapGenerator.cleanSourceMapObject();
2135  });
2136
2137  mocha.it('18-3: test generateCompileContext under build preview', function () {
2138    this.rollup.preview();
2139    SourceMapGenerator.initInstance(this.rollup);
2140    this.rollup.mockCompileContextInfo();
2141    const moduleMode = new ModuleModeMock(this.rollup);
2142    moduleMode.generateCompileContextInfoMock(this.rollup);
2143    expect(moduleMode.checkGenerateCompileContextInfo(this.rollup) === true).to.be.true;
2144    SourceMapGenerator.cleanSourceMapObject();
2145  });
2146
2147  mocha.it('18-4: test generateCompileContext under build hotReload', function () {
2148    this.rollup.hotReload();
2149    SourceMapGenerator.initInstance(this.rollup);
2150    this.rollup.mockCompileContextInfo();
2151    const moduleMode = new ModuleModeMock(this.rollup);
2152    moduleMode.generateCompileContextInfoMock(this.rollup);
2153    expect(moduleMode.checkGenerateCompileContextInfo(this.rollup) === true).to.be.true;
2154    SourceMapGenerator.cleanSourceMapObject();
2155  });
2156  mocha.it('18-5: test generateCompileContext widget compile under build debug', function () {
2157    this.rollup.build();
2158    this.rollup.share.projectConfig.widgetCompile = true;
2159    SourceMapGenerator.initInstance(this.rollup);
2160    this.rollup.mockCompileContextInfo();
2161    const moduleMode = new ModuleModeMock(this.rollup);
2162    moduleMode.generateCompileContextInfoMock(this.rollup);
2163    expect(moduleMode.checkGenerateCompileContextInfo(this.rollup) === true).to.be.true;
2164    SourceMapGenerator.cleanSourceMapObject();
2165  });
2166
2167  mocha.it('18-6: test generateCompileContext widget compile under build release', function () {
2168    this.rollup.build(RELEASE);
2169    this.rollup.share.projectConfig.widgetCompile = true;
2170    SourceMapGenerator.initInstance(this.rollup);
2171    this.rollup.mockCompileContextInfo();
2172    const moduleMode = new ModuleModeMock(this.rollup);
2173    moduleMode.generateCompileContextInfoMock(this.rollup);
2174    expect(moduleMode.checkGenerateCompileContextInfo(this.rollup) === true).to.be.true;
2175    SourceMapGenerator.cleanSourceMapObject();
2176  });
2177
2178  mocha.it('18-7: test generateCompileContext widget compile under build preview', function () {
2179    this.rollup.preview();
2180    this.rollup.share.projectConfig.widgetCompile = true;
2181    SourceMapGenerator.initInstance(this.rollup);
2182    this.rollup.mockCompileContextInfo();
2183    const moduleMode = new ModuleModeMock(this.rollup);
2184    moduleMode.generateCompileContextInfoMock(this.rollup);
2185    expect(moduleMode.checkGenerateCompileContextInfo(this.rollup) === true).to.be.true;
2186    SourceMapGenerator.cleanSourceMapObject();
2187  });
2188
2189  mocha.it('18-8: test generateCompileContext widget compile under build hotReload', function () {
2190    this.rollup.hotReload();
2191    this.rollup.share.projectConfig.widgetCompile = true;
2192    SourceMapGenerator.initInstance(this.rollup);
2193    this.rollup.mockCompileContextInfo();
2194    const moduleMode = new ModuleModeMock(this.rollup);
2195    moduleMode.generateCompileContextInfoMock(this.rollup);
2196    expect(moduleMode.checkGenerateCompileContextInfo(this.rollup) === true).to.be.true;
2197    SourceMapGenerator.cleanSourceMapObject();
2198  });
2199
2200  mocha.it('18-9: test generateCompileContext has router map entries', function () {
2201    this.rollup.build();
2202    SourceMapGenerator.initInstance(this.rollup);
2203    this.rollup.mockCompileContextInfo();
2204    this.rollup.share.projectConfig.arkRouterMap = [
2205      {
2206        'ohmurl': '@normalized:N&&&har/src/main/ets/calc&'
2207      },
2208      {
2209        'ohmurl': '@normalized:N&&com.har.test&har/src/main/ets/test&1.0.0'
2210      }
2211    ];
2212    const moduleMode = new ModuleModeMock(this.rollup);
2213    moduleMode.generateCompileContextInfoMock(this.rollup);
2214    expect(moduleMode.checkGenerateCompileContextInfo(this.rollup) === true).to.be.true;
2215    SourceMapGenerator.cleanSourceMapObject();
2216  });
2217
2218  mocha.it('18-10: test generateCompileContext has declaration entries', function () {
2219    this.rollup.build();
2220    SourceMapGenerator.initInstance(this.rollup);
2221    this.rollup.mockCompileContextInfo();
2222    this.rollup.share.projectConfig.declarationEntry = [
2223        '@normalized:N&&&har/src/main/ets/MyWorker&',
2224        '@normalized:N&&com.har.test&har/src/main/ets/test&1.0.0'
2225    ];
2226    const moduleMode = new ModuleModeMock(this.rollup);
2227    moduleMode.generateCompileContextInfoMock(this.rollup);
2228    expect(moduleMode.checkGenerateCompileContextInfo(this.rollup) === true).to.be.true;
2229    SourceMapGenerator.cleanSourceMapObject();
2230  });
2231
2232  mocha.it('18-11: test generateCompileContext has not exist moduleId', function () {
2233    this.rollup.build();
2234    const errInfo: LogData = LogDataFactory.newInstance(
2235      ErrorCode.ETS2BUNDLE_INTERNAL_MODULE_INFO_NOT_FOUND,
2236      ArkTSInternalErrorDescription,
2237      'Failed to find module info. ' +
2238      "Failed to find module info with 'd:/test.ets' from the context information."
2239    );
2240    SourceMapGenerator.initInstance(this.rollup);
2241    this.rollup.mockCompileContextInfo();
2242    const moduleMode = new ModuleModeMock(this.rollup);
2243    const stub = sinon.stub(moduleMode.logger.getLoggerFromErrorCode(errInfo.code), 'printErrorAndExit');
2244    const entryObjName:string = 'test';
2245    const moduleId:string = 'd:/test.ets';
2246    try {
2247      moduleMode.projectConfig.entryObj[entryObjName]=moduleId;
2248      moduleMode.projectConfig.cardEntryObj[entryObjName]=moduleId;
2249      moduleMode.generateCompileContextInfoMock(this.rollup);
2250    } catch (e) {
2251    }
2252    expect(stub.calledWith(errInfo)).to.be.true;
2253    stub.restore();
2254    SourceMapGenerator.cleanSourceMapObject();
2255  });
2256
2257  mocha.it('18-11-1: test generateCompileContext has not exist moduleId' +
2258    'without getHvigorConsoleLogger', function () {
2259    this.rollup.build();
2260    const errInfo: LogData = LogDataFactory.newInstance(
2261      ErrorCode.ETS2BUNDLE_INTERNAL_MODULE_INFO_NOT_FOUND,
2262      ArkTSInternalErrorDescription,
2263      'Failed to find module info. ' +
2264      "Failed to find module info with 'd:/test.ets' from the context information."
2265    );
2266    CommonLogger.destroyInstance();
2267    const getHvigorConsoleLogger = this.rollup.share.getHvigorConsoleLogger;
2268    this.rollup.share.getHvigorConsoleLogger = undefined;
2269    SourceMapGenerator.initInstance(this.rollup);
2270    this.rollup.mockCompileContextInfo();
2271    const moduleMode = new ModuleModeMock(this.rollup);
2272    const stub = sinon.stub(moduleMode.logger, 'throwArkTsCompilerError');
2273    const entryObjName:string = 'test';
2274    const moduleId:string = 'd:/test.ets';
2275    try {
2276      moduleMode.projectConfig.entryObj[entryObjName]=moduleId;
2277      moduleMode.projectConfig.cardEntryObj[entryObjName]=moduleId;
2278      moduleMode.generateCompileContextInfoMock(this.rollup);
2279    } catch (e) {
2280    }
2281    expect(stub.calledWith(errInfo.toString())).to.be.true;
2282    CommonLogger.destroyInstance();
2283    this.rollup.share.getHvigorConsoleLogger = getHvigorConsoleLogger;
2284    stub.restore();
2285    SourceMapGenerator.cleanSourceMapObject();
2286  });
2287
2288  mocha.it('18-12: test generateCompileContext accurate update version', function () {
2289    this.rollup.build();
2290    SourceMapGenerator.initInstance(this.rollup);
2291    this.rollup.mockCompileContextInfo();
2292    this.rollup.share.projectConfig.declarationEntry = [
2293        '@normalized:N&&&har/src/main/ets/MyWorker&',
2294        '@normalized:N&&com.har.test&har/src/main/ets/test&1.0.0'
2295    ];
2296    this.rollup.share.projectConfig.updateVersionInfo = {
2297      "bytecodeHar": {
2298        "har1": "1.0.1",
2299        "har2": "2.0.0"
2300      }
2301    };
2302    const moduleMode: ModuleModeMock = new ModuleModeMock(this.rollup);
2303    moduleMode.generateCompileContextInfoMock(this.rollup);
2304    expect(moduleMode.checkGenerateCompileContextInfo(this.rollup) === true).to.be.true;
2305    SourceMapGenerator.cleanSourceMapObject();
2306  });
2307
2308  mocha.it('18-13: test generateCompileContext has not exist meta info', function () {
2309    this.rollup.build();
2310    this.rollup.mockCompileContextInfo();
2311    const errInfo: LogData = LogDataFactory.newInstance(
2312      ErrorCode.ETS2BUNDLE_INTERNAL_META_INFO_NOT_FOUND,
2313      ArkTSInternalErrorDescription,
2314      'Failed to find meta info. ' +
2315      "Failed to find meta info with 'd:/test.ets' from the module info."
2316    );
2317    const moduleMode = new ModuleModeMock(this.rollup);
2318    const stub = sinon.stub(moduleMode.logger.getLoggerFromErrorCode(errInfo.code), 'printErrorAndExit');
2319    const entryObjName:string = 'noMetaInfo';
2320    const moduleId:string = 'd:/test.ets';
2321    moduleMode.projectConfig.entryObj[entryObjName]=moduleId;
2322    moduleMode.projectConfig.cardEntryObj[entryObjName]=moduleId;
2323    const moduleInfo = {
2324      id: moduleId,
2325      meta: null
2326    }
2327    this.rollup.moduleInfos.push(moduleInfo);
2328    try {
2329      moduleMode.generateCompileContextInfoMock(this.rollup);
2330    } catch (e) {
2331    }
2332    expect(stub.calledWithMatch(errInfo)).to.be.true;
2333    stub.restore();
2334  });
2335
2336  mocha.it('18-13-1: test generateCompileContext has not exist meta info without getHvigorConsoleLogger', function () {
2337    this.rollup.build();
2338    this.rollup.mockCompileContextInfo();
2339    const errInfo: LogData = LogDataFactory.newInstance(
2340      ErrorCode.ETS2BUNDLE_INTERNAL_META_INFO_NOT_FOUND,
2341      ArkTSInternalErrorDescription,
2342      'Failed to find meta info. ' +
2343      "Failed to find meta info with 'd:/test.ets' from the module info."
2344    );
2345    CommonLogger.destroyInstance();
2346    const getHvigorConsoleLogger = this.rollup.share.getHvigorConsoleLogger;
2347    this.rollup.share.getHvigorConsoleLogger = undefined;
2348    const moduleMode = new ModuleModeMock(this.rollup);
2349    const stub = sinon.stub(moduleMode.logger, 'throwArkTsCompilerError');
2350    const entryObjName:string = 'noMetaInfo';
2351    const moduleId:string = 'd:/test.ets';
2352    moduleMode.projectConfig.entryObj[entryObjName]=moduleId;
2353    moduleMode.projectConfig.cardEntryObj[entryObjName]=moduleId;
2354    const moduleInfo = {
2355      id: moduleId,
2356      meta: null
2357    }
2358    this.rollup.moduleInfos.push(moduleInfo);
2359    try {
2360      moduleMode.generateCompileContextInfoMock(this.rollup);
2361    } catch (e) {
2362    }
2363    expect(stub.calledWithMatch(errInfo.toString())).to.be.true;
2364    CommonLogger.destroyInstance();
2365    this.rollup.share.getHvigorConsoleLogger = getHvigorConsoleLogger;
2366    stub.restore();
2367  });
2368
2369  mocha.it('18-14: test generateCompileContext inter—app hsp deps bytecode har', function () {
2370    this.rollup.build();
2371    SourceMapGenerator.initInstance(this.rollup);
2372    this.rollup.mockCompileContextInfo();
2373    this.rollup.share.projectConfig.bundleType = 'shared';
2374    this.rollup.share.projectConfig.bundleName = 'com.inter-app.hsp';
2375    const moduleMode: ModuleModeMock = new ModuleModeMock(this.rollup);
2376    moduleMode.generateCompileContextInfoMock(this.rollup);
2377    expect(moduleMode.checkGenerateCompileContextInfo(this.rollup) === true).to.be.true;
2378    SourceMapGenerator.cleanSourceMapObject();
2379  });
2380
2381  mocha.it('19-1: test the error message of removeCompilationCache', function () {
2382    this.rollup.build();
2383    const errInfo: LogData = LogDataFactory.newInstance(
2384      ErrorCode.ETS2BUNDLE_INTERNAL_INVALID_COMPILE_MODE,
2385      ArkTSInternalErrorDescription,
2386      'Invalid compilation mode. ' +
2387      `ProjectConfig.pandaMode should be either ${TS2ABC} or ${ES2ABC}.`
2388    );
2389    const moduleMode = new ModuleMode(this.rollup);
2390    moduleMode.projectConfig.pandaMode = 'js2abc';
2391    const stub = sinon.stub(moduleMode.logger.getLoggerFromErrorCode(errInfo.code), 'printErrorAndExit');
2392    moduleMode.removeCompilationCache(this.rollup);
2393    expect(stub.calledWith(errInfo)).to.be.true;
2394    stub.restore();
2395  });
2396
2397  mocha.it('19-2: test the error message of removeCompilationCache without getHvigorConsoleLogger', function () {
2398    this.rollup.build();
2399    const errInfo: LogData = LogDataFactory.newInstance(
2400      ErrorCode.ETS2BUNDLE_INTERNAL_INVALID_COMPILE_MODE,
2401      ArkTSInternalErrorDescription,
2402      'Invalid compilation mode. ' +
2403      `ProjectConfig.pandaMode should be either ${TS2ABC} or ${ES2ABC}.`
2404    );
2405    CommonLogger.destroyInstance();
2406    const getHvigorConsoleLogger = this.rollup.share.getHvigorConsoleLogger;
2407    this.rollup.share.getHvigorConsoleLogger = undefined;
2408    const moduleMode = new ModuleMode(this.rollup);
2409    moduleMode.projectConfig.pandaMode = 'js2abc';
2410    const stub = sinon.stub(moduleMode.logger, 'throwArkTsCompilerError');
2411    moduleMode.removeCompilationCache(this.rollup);
2412    expect(stub.calledWith(errInfo.toString())).to.be.true;
2413    CommonLogger.destroyInstance();
2414    this.rollup.share.getHvigorConsoleLogger = getHvigorConsoleLogger;
2415    stub.restore();
2416  });
2417
2418  mocha.it('20-1: test checkSourceMapFormat when no file', async function () {
2419    this.rollup.build(RELEASE);
2420    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
2421    const moduleMode = new ModuleModeMock(this.rollup);
2422    const errInfo: LogData = LogDataFactory.newInstance(
2423      ErrorCode.ETS2BUNDLE_INTERNAL_CHECK_SOURCEMAP_FORMAT_FAILED,
2424      ArkTSInternalErrorDescription,
2425      `SourceMap file not exist, path: ${moduleMode.sourceMapPath}`
2426    );
2427    const stub = sinon.stub(sourceMapGenerator.logger.getLoggerFromErrorCode(errInfo.code), 'printErrorAndExit');
2428    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
2429    await sleep(1000);
2430    // remove file to mock no file
2431    const content: string = fs.readFileSync(toUnixPath(moduleMode.sourceMapPath)).toString();
2432    fs.unlinkSync(moduleMode.sourceMapPath);
2433
2434    sourceMapGenerator.checkSourceMapFormat();
2435    expect(stub.calledWith(errInfo)).to.be.true;
2436    stub.restore();
2437    fs.appendFileSync(moduleMode.sourceMapPath, content, 'utf8');
2438
2439    SourceMapGenerator.cleanSourceMapObject();
2440  });
2441
2442  mocha.it('20-2: test checkSourceMapFormat when error format', async function () {
2443    this.rollup.build(RELEASE);
2444    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
2445    const moduleMode = new ModuleModeMock(this.rollup);
2446    const errInfo: LogData = LogDataFactory.newInstance(
2447      ErrorCode.ETS2BUNDLE_INTERNAL_CHECK_SOURCEMAP_FORMAT_FAILED,
2448      ArkTSInternalErrorDescription,
2449      `SourceMap content format error, path: ${moduleMode.sourceMapPath}`
2450    );
2451    const stub = sinon.stub(sourceMapGenerator.logger.getLoggerFromErrorCode(errInfo.code), 'printErrorAndExit');
2452    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
2453    await sleep(1000);
2454    // add a char '}' to make the format error
2455    const content: string = fs.readFileSync(toUnixPath(moduleMode.sourceMapPath)).toString();
2456    fs.appendFileSync(moduleMode.sourceMapPath, '}', 'utf8');
2457
2458    sourceMapGenerator.checkSourceMapFormat();
2459    expect(stub.calledWith(errInfo)).to.be.true;
2460    stub.restore();
2461    fs.unlinkSync(moduleMode.sourceMapPath);
2462    fs.appendFileSync(moduleMode.sourceMapPath, content, 'utf8');
2463
2464    SourceMapGenerator.cleanSourceMapObject();
2465  });
2466});
2467