• 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';
24
25import { toUnixPath } from '../../../lib/utils';
26import { SourceMapGenerator } from '../../../lib/fast_build/ark_compiler/generate_sourcemap';
27import { shouldETSOrTSFileTransformToJS } from '../../../lib/fast_build/ark_compiler/utils';
28import {
29  RELEASE,
30  DEBUG,
31  MODULES_ABC,
32  EXTNAME_TS,
33  EXTNAME_JS,
34  EXTNAME_ETS,
35  OH_MODULES,
36  GEN_ABC_PLUGIN_NAME
37} from '../../../lib/fast_build/ark_compiler/common/ark_define';
38import RollUpPluginMock from '../mock/rollup_mock/rollup_plugin_mock';
39import ModuleModeMock from '../mock/class_mock/module_mode_mock';
40import { ModuleHotreloadMode } from '../../../lib/fast_build/ark_compiler/module/module_hotreload_mode';
41import { ModuleMode } from '../../../lib/fast_build/ark_compiler/module/module_mode';
42import {
43  ENTRYABILITY_TS_PATH_DEFAULT,
44  ENTRYABILITY_JS_PATH_DEFAULT,
45  INDEX_ETS_PATH_DEFAULT,
46  INDEX_JS_PATH_DEFAULT,
47  ENTRYABILITY_TS_RECORDNAME,
48  ENTRYABILITY_JS_RECORDNAME,
49  INDEX_ETS_RECORDNAME,
50  ENTRYABILITY_TS_NORMALIZED_RECORDNAME,
51  ENTRYABILITY_JS_NORMALIZED_RECORDNAME,
52  INDEX_ETS_NORMALIZED_RECORDNAME,
53  PKG_MODULES,
54  ENTRY_MODULE_NAME_DEFAULT,
55  TEST,
56  NEWFILE,
57  ENTRY_MODULE_VERSION_DEFAULT
58} from '../mock/rollup_mock/common';
59import projectConfig from '../utils/processProjectConfig';
60import {
61  EXPECT_SOURCEMAP_JSON,
62  PKG_MODULES_OHPM_HYPIUM,
63  ES2ABC_PATH,
64  DEBUG_INFO,
65  BUILD_NPM,
66  BUILD_INFO,
67  PREVIEW_DEBUG_INFO,
68  PREVIEW_DEBUG_NPM,
69  DEFAULT_ETS,
70  PREVIEW_MODULES_ABC,
71  BUILD_CACHE,
72  PREVIEW_DEBUG_CACHE,
73  TEST_TS,
74  ENTRY_LIST,
75  OUTPUT,
76  FILE_THREADS,
77  MERGE_ABC,
78  CACHE_FILE,
79  TARGET_API_VERSION
80} from '../mock/rollup_mock/path_config';
81import {
82  scanFiles,
83  sleep,
84  cpus
85} from "../utils/utils";
86import { AOT_FULL } from '../../../lib/pre_define';
87import {
88  ArkObfuscator
89} from 'arkguard';
90
91function checkGenerateEs2AbcCmdExpect(cmdArgs: Array<object>, compatibleSdkVersion: string, byteCodeHar: boolean): void {
92  const fileThreads: number = cpus();
93
94  expect(cmdArgs[0].indexOf(ES2ABC_PATH) > 0).to.be.true;
95  if (!byteCodeHar) {
96    expect(cmdArgs[1] === OUTPUT).to.be.true;
97    expect(cmdArgs[2] === FILE_THREADS).to.be.true;
98    expect(cmdArgs[3] === `\"${fileThreads}\"`).to.be.true;
99    expect(cmdArgs[4] === MERGE_ABC).to.be.true;
100    expect(cmdArgs[5].indexOf(compatibleSdkVersion) > 0).to.be.true;
101  }
102  expect(cmdArgs[1] === ENTRY_LIST).to.be.true;
103  expect(cmdArgs[2] === OUTPUT).to.be.true;
104  expect(cmdArgs[3] === FILE_THREADS).to.be.true;
105  expect(cmdArgs[4] === `\"${fileThreads}\"`).to.be.true;
106  expect(cmdArgs[5] === MERGE_ABC).to.be.true;
107  expect(cmdArgs[6].indexOf(compatibleSdkVersion) > 0).to.be.true;
108}
109
110mocha.describe('test module_mode file api', function () {
111  mocha.before(function () {
112    this.rollup = new RollUpPluginMock();
113  });
114
115  mocha.after(() => {
116    delete this.rollup;
117  });
118
119  mocha.it('1-1: test collectModuleFileList under build debug', function () {
120    this.rollup.build();
121    SourceMapGenerator.initInstance(this.rollup);
122    const moduleMode = new ModuleModeMock(this.rollup);
123    const fileList = this.rollup.getModuleIds();
124    for (const filePath of fileList) {
125      if (filePath.endsWith(EXTNAME_JS) || filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS)) {
126        const moduleInfo = this.rollup.getModuleInfo(filePath);
127        moduleInfo.setIsNodeEntryFile(true);
128        moduleInfo.setIsLocalDependency(false);
129      }
130    }
131    moduleMode.projectConfig.packageDir = OH_MODULES;
132    moduleMode.collectModuleFileListMock(this.rollup);
133    moduleMode.moduleInfos.forEach(moduleInfo => {
134      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
135        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
136        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
137
138      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_RECORDNAME) > 0 ||
139        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_RECORDNAME) > 0 ||
140        moduleInfo.recordName.indexOf(INDEX_ETS_RECORDNAME) > 0).to.be.true;
141
142      expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
143        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
144        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
145        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
146    });
147    expect(moduleMode.pkgEntryInfos.size != 0).to.be.true;
148    SourceMapGenerator.cleanSourceMapObject();
149  });
150
151  mocha.it('1-2: test collectModuleFileList under build release', function () {
152    this.rollup.build(RELEASE);
153    SourceMapGenerator.initInstance(this.rollup);
154    const moduleMode = new ModuleModeMock(this.rollup);
155    const fileList = this.rollup.getModuleIds();
156    for (const filePath of fileList) {
157      if (filePath.endsWith(EXTNAME_JS) || filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS)) {
158        const moduleInfo = this.rollup.getModuleInfo(filePath);
159        moduleInfo.setIsNodeEntryFile(true);
160        moduleInfo.setIsLocalDependency(false);
161      }
162    }
163    moduleMode.projectConfig.packageDir = OH_MODULES;
164    moduleMode.collectModuleFileListMock(this.rollup);
165    moduleMode.moduleInfos.forEach(moduleInfo => {
166      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
167        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
168        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
169
170      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_RECORDNAME) > 0 ||
171        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_RECORDNAME) > 0 ||
172        moduleInfo.recordName.indexOf(INDEX_ETS_RECORDNAME) > 0).to.be.true;
173
174        expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
175        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
176        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
177        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
178    });
179    expect(moduleMode.pkgEntryInfos.size != 0).to.be.true;
180    SourceMapGenerator.cleanSourceMapObject();
181  });
182
183  mocha.it('1-3: test collectModuleFileList under preview debug', function () {
184    this.rollup.preview();
185    SourceMapGenerator.initInstance(this.rollup);
186    const moduleMode = new ModuleModeMock(this.rollup);
187    const fileList = this.rollup.getModuleIds();
188    for (const filePath of fileList) {
189      if (filePath.endsWith(EXTNAME_JS) || filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS)) {
190        const moduleInfo = this.rollup.getModuleInfo(filePath);
191        moduleInfo.setIsNodeEntryFile(true);
192        moduleInfo.setIsLocalDependency(false);
193      }
194    }
195    moduleMode.projectConfig.packageDir = OH_MODULES;
196    moduleMode.collectModuleFileListMock(this.rollup);
197    moduleMode.moduleInfos.forEach(moduleInfo => {
198      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
199        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
200        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
201
202      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_RECORDNAME) > 0 ||
203        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_RECORDNAME) > 0 ||
204        moduleInfo.recordName.indexOf(INDEX_ETS_RECORDNAME) > 0).to.be.true;
205
206      expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
207        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
208        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
209        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
210    });
211    expect(moduleMode.pkgEntryInfos.size != 0).to.be.true;
212    SourceMapGenerator.cleanSourceMapObject();
213  });
214
215  mocha.it('1-4: test collectModuleFileList under hot reload debug', function () {
216    this.rollup.hotReload();
217    SourceMapGenerator.initInstance(this.rollup);
218    const moduleMode = new ModuleModeMock(this.rollup);
219    const fileList = this.rollup.getModuleIds();
220    for (const filePath of fileList) {
221      if (filePath.endsWith(EXTNAME_JS) || filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS)) {
222        const moduleInfo = this.rollup.getModuleInfo(filePath);
223        moduleInfo.setIsNodeEntryFile(true);
224        moduleInfo.setIsLocalDependency(false);
225      }
226    }
227    moduleMode.projectConfig.packageDir = OH_MODULES;
228    moduleMode.collectModuleFileListMock(this.rollup);
229    moduleMode.moduleInfos.forEach(moduleInfo => {
230      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
231        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
232        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
233
234      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_RECORDNAME) > 0 ||
235        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_RECORDNAME) > 0 ||
236        moduleInfo.recordName.indexOf(INDEX_ETS_RECORDNAME) > 0).to.be.true;
237
238      expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
239        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
240        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
241        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
242    });
243    expect(moduleMode.pkgEntryInfos.size != 0).to.be.true;
244    SourceMapGenerator.cleanSourceMapObject();
245  });
246
247  mocha.it('1-5: test collectModuleFileList useNormalizedOHMUrl under build debug', function () {
248    this.rollup.build();
249    SourceMapGenerator.initInstance(this.rollup);
250    this.rollup.useNormalizedOHMUrl();
251    this.rollup.share.projectConfig.pkgContextInfo = {
252      'entry': {
253        'packageName': 'entry',
254        'bundleName': '',
255        'moduleName': '',
256        'version': '',
257        'entryPath': 'Index.ets',
258        'isSO': false
259      }
260    };
261    const moduleMode = new ModuleModeMock(this.rollup);
262    const fileList = this.rollup.getModuleIds();
263    for (const filePath of fileList) {
264      if (filePath.endsWith(EXTNAME_JS) || filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS)) {
265        const moduleInfo = this.rollup.getModuleInfo(filePath);
266        moduleInfo.setIsNodeEntryFile(true);
267        moduleInfo.setIsLocalDependency(false);
268        moduleInfo.meta.pkgName = 'entry';
269      }
270    }
271    moduleMode.projectConfig.packageDir = OH_MODULES;
272    moduleMode.collectModuleFileListMock(this.rollup);
273    moduleMode.moduleInfos.forEach(moduleInfo => {
274      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
275        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
276        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
277
278      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_NORMALIZED_RECORDNAME) > 0 ||
279        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_NORMALIZED_RECORDNAME) > 0 ||
280        moduleInfo.recordName.indexOf(INDEX_ETS_NORMALIZED_RECORDNAME) > 0).to.be.true;
281
282      expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
283        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
284        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
285        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
286    });
287    expect(moduleMode.pkgEntryInfos.size == 7).to.be.true;
288    SourceMapGenerator.cleanSourceMapObject();
289  });
290
291  mocha.it('1-6: test collectModuleFileList useNormalizedOHMUrl under build release', function () {
292    this.rollup.build(RELEASE);
293    SourceMapGenerator.initInstance(this.rollup);
294    this.rollup.useNormalizedOHMUrl();
295    this.rollup.share.projectConfig.pkgContextInfo = {
296      'entry': {
297        'packageName': 'entry',
298        'bundleName': '',
299        'moduleName': '',
300        'version': '',
301        'entryPath': 'Index.ets',
302        'isSO': false
303      }
304    };
305    const moduleMode = new ModuleModeMock(this.rollup);
306    const fileList = this.rollup.getModuleIds();
307    for (const filePath of fileList) {
308      if (filePath.endsWith(EXTNAME_JS) || filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS)) {
309        const moduleInfo = this.rollup.getModuleInfo(filePath);
310        moduleInfo.setIsNodeEntryFile(true);
311        moduleInfo.setIsLocalDependency(false);
312        moduleInfo.meta.pkgName = 'entry';
313      }
314    }
315    moduleMode.projectConfig.packageDir = OH_MODULES;
316    moduleMode.collectModuleFileListMock(this.rollup);
317    moduleMode.moduleInfos.forEach(moduleInfo => {
318      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
319        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
320        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
321
322      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_NORMALIZED_RECORDNAME) > 0 ||
323        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_NORMALIZED_RECORDNAME) > 0 ||
324        moduleInfo.recordName.indexOf(INDEX_ETS_NORMALIZED_RECORDNAME) > 0).to.be.true;
325
326      expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
327        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
328        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
329        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
330    });
331    expect(moduleMode.pkgEntryInfos.size == 7).to.be.true;
332    SourceMapGenerator.cleanSourceMapObject();
333  });
334
335  mocha.it('1-7: test collectModuleFileList useNormalizedOHMUrl under preview debug', function () {
336    this.rollup.preview();
337    SourceMapGenerator.initInstance(this.rollup);
338    this.rollup.useNormalizedOHMUrl();
339    this.rollup.share.projectConfig.pkgContextInfo = {
340      'entry': {
341        'packageName': 'entry',
342        'bundleName': '',
343        'moduleName': '',
344        'version': '',
345        'entryPath': 'Index.ets',
346        'isSO': false
347      }
348    };
349    const moduleMode = new ModuleModeMock(this.rollup);
350    const fileList = this.rollup.getModuleIds();
351    for (const filePath of fileList) {
352      if (filePath.endsWith(EXTNAME_JS) || filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS)) {
353        const moduleInfo = this.rollup.getModuleInfo(filePath);
354        moduleInfo.setIsNodeEntryFile(true);
355        moduleInfo.setIsLocalDependency(false);
356        moduleInfo.meta.pkgName = 'entry';
357      }
358    }
359    moduleMode.projectConfig.packageDir = OH_MODULES;
360    moduleMode.collectModuleFileListMock(this.rollup);
361    moduleMode.moduleInfos.forEach(moduleInfo => {
362      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
363        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
364        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
365
366      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_NORMALIZED_RECORDNAME) > 0 ||
367        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_NORMALIZED_RECORDNAME) > 0 ||
368        moduleInfo.recordName.indexOf(INDEX_ETS_NORMALIZED_RECORDNAME) > 0).to.be.true;
369
370      expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
371        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
372        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
373        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
374    });
375    expect(moduleMode.pkgEntryInfos.size == 7).to.be.true;
376    SourceMapGenerator.cleanSourceMapObject();
377  });
378
379  mocha.it('1-8: test collectModuleFileList useNormalizedOHMUrl under hot reload debug', function () {
380    this.rollup.hotReload();
381    SourceMapGenerator.initInstance(this.rollup);
382    this.rollup.useNormalizedOHMUrl();
383    this.rollup.share.projectConfig.pkgContextInfo = {
384      'entry': {
385        'packageName': 'entry',
386        'bundleName': '',
387        'moduleName': '',
388        'version': '',
389        'entryPath': 'Index.ets',
390        'isSO': false
391      }
392    };
393    const moduleMode = new ModuleModeMock(this.rollup);
394    const fileList = this.rollup.getModuleIds();
395    for (const filePath of fileList) {
396      if (filePath.endsWith(EXTNAME_JS) || filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS)) {
397        const moduleInfo = this.rollup.getModuleInfo(filePath);
398        moduleInfo.setIsNodeEntryFile(true);
399        moduleInfo.setIsLocalDependency(false);
400        moduleInfo.meta.pkgName = 'entry';
401      }
402    }
403    moduleMode.projectConfig.packageDir = OH_MODULES;
404    moduleMode.collectModuleFileListMock(this.rollup);
405    moduleMode.moduleInfos.forEach(moduleInfo => {
406      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
407        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
408        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
409
410      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_NORMALIZED_RECORDNAME) > 0 ||
411        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_NORMALIZED_RECORDNAME) > 0 ||
412        moduleInfo.recordName.indexOf(INDEX_ETS_NORMALIZED_RECORDNAME) > 0).to.be.true;
413
414      expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
415        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
416        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
417        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
418    });
419    expect(moduleMode.pkgEntryInfos.size == 7).to.be.true;
420    SourceMapGenerator.cleanSourceMapObject();
421  });
422
423  mocha.it('2-1-1: test addModuleInfoItem under build debug: isPackageModulesFile`s return is true', function () {
424    this.rollup.build();
425    SourceMapGenerator.initInstance(this.rollup);
426    this.rollup.share.projectConfig.modulePath = this.rollup.share.projectConfig.projectPath;
427    const moduleMode = new ModuleModeMock(this.rollup);
428    moduleMode.projectConfig.packageDir = ENTRY_MODULE_NAME_DEFAULT;
429    moduleMode.addModuleInfoItemMock(this.rollup, false, '');
430    moduleMode.moduleInfos.forEach(value => {
431      expect(value.packageName === PKG_MODULES).to.be.true;
432    });
433    SourceMapGenerator.cleanSourceMapObject();
434  });
435
436  mocha.it('2-1-2: test addModuleInfoItem under build debug: isPackageModulesFile`s return is false', function () {
437    this.rollup.build();
438    SourceMapGenerator.initInstance(this.rollup);
439    const moduleMode = new ModuleModeMock(this.rollup);
440    moduleMode.addModuleInfoItemMock(this.rollup, false, '');
441    moduleMode.moduleInfos.forEach(moduleInfo => {
442      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
443        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
444        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
445
446      expect(moduleInfo.cacheFilePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
447        moduleInfo.cacheFilePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
448        moduleInfo.cacheFilePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
449
450      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_RECORDNAME) > 0 ||
451        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_RECORDNAME) > 0 ||
452        moduleInfo.recordName.indexOf(INDEX_ETS_RECORDNAME) > 0).to.be.true;
453
454        expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
455        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
456        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
457        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
458    });
459    SourceMapGenerator.cleanSourceMapObject();
460  });
461
462  mocha.it('2-1-3: test addModuleInfoItem under build debug: extName is not null', function () {
463    this.rollup.build();
464    SourceMapGenerator.initInstance(this.rollup);
465    const moduleMode = new ModuleModeMock(this.rollup);
466    moduleMode.addModuleInfoItemMock(this.rollup, false, EXTNAME_TS);
467    moduleMode.moduleInfos.forEach(value => {
468      expect(value.cacheFilePath.endsWith(EXTNAME_TS)).to.be.true;
469    });
470    SourceMapGenerator.cleanSourceMapObject();
471  });
472
473  mocha.it('2-2: test addModuleInfoItem under build release', function () {
474    this.rollup.build(RELEASE);
475    SourceMapGenerator.initInstance(this.rollup);
476    const moduleMode = new ModuleModeMock(this.rollup);
477    moduleMode.addModuleInfoItemMock(this.rollup, false, '');
478    moduleMode.moduleInfos.forEach(moduleInfo => {
479      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
480        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
481        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
482
483      expect(moduleInfo.cacheFilePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
484        moduleInfo.cacheFilePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
485        moduleInfo.cacheFilePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
486
487      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_RECORDNAME) > 0 ||
488        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_RECORDNAME) > 0 ||
489        moduleInfo.recordName.indexOf(INDEX_ETS_RECORDNAME) > 0).to.be.true;
490
491      expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
492        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
493        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
494        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
495    });
496    SourceMapGenerator.cleanSourceMapObject();
497  });
498
499  mocha.it('2-3: test addModuleInfoItem under preview debug', function () {
500    this.rollup.preview();
501    SourceMapGenerator.initInstance(this.rollup);
502    const moduleMode = new ModuleModeMock(this.rollup);
503    moduleMode.addModuleInfoItemMock(this.rollup, false, '');
504    moduleMode.moduleInfos.forEach(moduleInfo => {
505      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
506        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
507        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
508
509      expect(moduleInfo.cacheFilePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
510        moduleInfo.cacheFilePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
511        moduleInfo.cacheFilePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
512
513      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_RECORDNAME) > 0 ||
514        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_RECORDNAME) > 0 ||
515        moduleInfo.recordName.indexOf(INDEX_ETS_RECORDNAME) > 0).to.be.true;
516
517        expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
518        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
519        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
520        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
521    });
522    SourceMapGenerator.cleanSourceMapObject();
523  });
524
525  mocha.it('2-4: test addModuleInfoItem under hot reload debug', function () {
526    this.rollup.hotReload();
527    SourceMapGenerator.initInstance(this.rollup);
528    const moduleMode = new ModuleModeMock(this.rollup);
529    moduleMode.addModuleInfoItemMock(this.rollup, false, '');
530    moduleMode.moduleInfos.forEach(moduleInfo => {
531      expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
532        moduleInfo.filePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
533        moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
534
535      expect(moduleInfo.cacheFilePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0 ||
536        moduleInfo.cacheFilePath.indexOf(ENTRYABILITY_JS_PATH_DEFAULT) > 0 ||
537        moduleInfo.cacheFilePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
538
539      expect(moduleInfo.recordName.indexOf(ENTRYABILITY_TS_RECORDNAME) > 0 ||
540        moduleInfo.recordName.indexOf(ENTRYABILITY_JS_RECORDNAME) > 0 ||
541        moduleInfo.recordName.indexOf(INDEX_ETS_RECORDNAME) > 0).to.be.true;
542
543        expect(moduleInfo.sourceFile.indexOf(ENTRYABILITY_TS_PATH_DEFAULT.substring(1)) > 0 ||
544        moduleInfo.sourceFile.indexOf(ENTRYABILITY_JS_PATH_DEFAULT.substring(1)) > 0 ||
545        moduleInfo.sourceFile.indexOf(INDEX_JS_PATH_DEFAULT.substring(1)) > 0 ||
546        moduleInfo.sourceFile.indexOf(INDEX_ETS_PATH_DEFAULT.substring(1)) > 0).to.be.true;
547    });
548    SourceMapGenerator.cleanSourceMapObject();
549  });
550
551  mocha.it('2-5-1: test addModuleInfoItem under build debug: sourceFile equals sourcemap new key', function () {
552    this.rollup.build();
553    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
554    const moduleInfosAndSourceMap= ModuleModeMock.getModuleInfosAndSourceMapMock(this.rollup, sourceMapGenerator);
555    moduleInfosAndSourceMap.moduleInfos.forEach(value => {
556      expect(moduleInfosAndSourceMap.sourceMap[value.sourceFile]).to.exist;
557    });
558    SourceMapGenerator.cleanSourceMapObject();
559  });
560
561  mocha.it('2-5-2: test addModuleInfoItem under build release: sourceFile equals sourcemap new key', function () {
562    this.rollup.build(RELEASE);
563    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
564    const moduleInfosAndSourceMap= ModuleModeMock.getModuleInfosAndSourceMapMock(this.rollup, sourceMapGenerator);
565    moduleInfosAndSourceMap.moduleInfos.forEach(value => {
566      expect(moduleInfosAndSourceMap.sourceMap[value.sourceFile]).to.exist;
567    });
568    SourceMapGenerator.cleanSourceMapObject();
569  });
570
571  mocha.it('2-5-3: test addModuleInfoItem under preview debug: sourceFile equals sourcemap new key', function () {
572    this.rollup.preview();
573    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
574    const moduleInfosAndSourceMap= ModuleModeMock.getModuleInfosAndSourceMapMock(this.rollup, sourceMapGenerator);
575    moduleInfosAndSourceMap.moduleInfos.forEach(value => {
576      expect(moduleInfosAndSourceMap.sourceMap[value.sourceFile]).to.exist;
577    });
578    SourceMapGenerator.cleanSourceMapObject();
579  });
580
581  mocha.it('2-5-4: test addModuleInfoItem under hot reload debug: sourceFile equals sourcemap new key', function () {
582    this.rollup.hotReload();
583    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
584    const moduleInfosAndSourceMap = ModuleModeMock.getModuleInfosAndSourceMapMock(this.rollup, sourceMapGenerator);
585    moduleInfosAndSourceMap.moduleInfos.forEach(value => {
586      expect(moduleInfosAndSourceMap.sourceMap[value.sourceFile]).to.exist;
587    });
588    SourceMapGenerator.cleanSourceMapObject();
589  });
590
591  mocha.it('2-6-1: test addModuleInfoItem under build debug: sourceFile equals sourcemap old key', function () {
592    this.rollup.build();
593    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
594    sourceMapGenerator.setNewSoureMaps(false);
595    const moduleInfosAndSourceMap= ModuleModeMock.getModuleInfosAndSourceMapMock(this.rollup, sourceMapGenerator);
596    moduleInfosAndSourceMap.moduleInfos.forEach(value => {
597      expect(moduleInfosAndSourceMap.sourceMap[value.sourceFile]).to.exist;
598    });
599    SourceMapGenerator.cleanSourceMapObject();
600  });
601
602  mocha.it('2-6-2: test addModuleInfoItem under build release: sourceFile equals sourcemap old key', function () {
603    this.rollup.build(RELEASE);
604    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
605    sourceMapGenerator.setNewSoureMaps(false);
606    const moduleInfosAndSourceMap= ModuleModeMock.getModuleInfosAndSourceMapMock(this.rollup, sourceMapGenerator);
607    moduleInfosAndSourceMap.moduleInfos.forEach(value => {
608      expect(moduleInfosAndSourceMap.sourceMap[value.sourceFile]).to.exist;
609    });
610    SourceMapGenerator.cleanSourceMapObject();
611  });
612
613  mocha.it('2-6-3: test addModuleInfoItem under preview debug: sourceFile equals sourcemap old key', function () {
614    this.rollup.preview();
615    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
616    sourceMapGenerator.setNewSoureMaps(false);
617    const moduleInfosAndSourceMap= ModuleModeMock.getModuleInfosAndSourceMapMock(this.rollup, sourceMapGenerator);
618    moduleInfosAndSourceMap.moduleInfos.forEach(value => {
619      expect(moduleInfosAndSourceMap.sourceMap[value.sourceFile]).to.exist;
620    });
621    SourceMapGenerator.cleanSourceMapObject();
622  });
623
624  mocha.it('2-6-4: test addModuleInfoItem under hot reload debug: sourceFile equals sourcemap old key', function () {
625    this.rollup.hotReload();
626    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
627    sourceMapGenerator.setNewSoureMaps(false);
628    const moduleInfosAndSourceMap= ModuleModeMock.getModuleInfosAndSourceMapMock(this.rollup, sourceMapGenerator);
629    moduleInfosAndSourceMap.moduleInfos.forEach(value => {
630      expect(moduleInfosAndSourceMap.sourceMap[value.sourceFile]).to.exist;
631    });
632    SourceMapGenerator.cleanSourceMapObject();
633  });
634
635  mocha.it('2-7-1: test addModuleInfoItem under build release with obfuscatedEnabled and isPackageModulesFile`s return is true', function () {
636    this.rollup.build(RELEASE);
637    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
638    sourceMapGenerator.setNewSoureMaps(true);
639
640    this.rollup.share.projectConfig = {
641      buildMode: 'Release'
642    }
643    this.rollup.share.projectConfig.obfuscationMergedObConfig = {
644      options: {
645        enableFileNameObfuscation: true
646      }
647    };
648    this.rollup.share.projectConfig.modulePath = this.rollup.share.projectConfig.projectPath;
649
650    const moduleMode = new ModuleModeMock(this.rollup);
651    moduleMode.projectConfig.packageDir = ENTRY_MODULE_NAME_DEFAULT;
652    moduleMode.addModuleInfoItemMock(this.rollup, false, '');
653
654    let index = 0;
655    moduleMode.moduleInfos.forEach(moduleInfo => {
656      if (index === 1) {
657        expect(moduleInfo.sourceFile == 'entry|entry|1.0.0|src/main/entryability/EntryAbility.js').to.be.true;
658        expect(moduleInfo.recordName == 'pkg_modules/src/main/pkg_modulesability/EntryAbility').to.be.true;
659        expect(moduleInfo.packageName === PKG_MODULES).to.be.true;
660        expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0).to.be.true;
661        expect(moduleInfo.cacheFilePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0).to.be.true;
662      }
663      if (index === 2) {
664        expect(moduleInfo.sourceFile == 'entry|entry|1.0.0|src/main/pages/Index.js').to.be.true;
665        expect(moduleInfo.recordName == 'pkg_modules/src/main/pages/Index').to.be.true;
666        expect(moduleInfo.packageName === PKG_MODULES).to.be.true;
667        expect(moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
668        expect(moduleInfo.cacheFilePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
669      }
670      index++;
671    });
672    SourceMapGenerator.cleanSourceMapObject();
673  });
674
675  mocha.it('2-7-2: test addModuleInfoItem under build release with obfuscatedEnabled and isPackageModulesFile`s return is true and old key', function () {
676    this.rollup.build(RELEASE);
677    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
678    sourceMapGenerator.setNewSoureMaps(false);
679
680    this.rollup.share.projectConfig = {
681      buildMode: 'Release'
682    }
683    this.rollup.share.projectConfig.obfuscationMergedObConfig = {
684      options: {
685        enableFileNameObfuscation: true
686      }
687    };
688    this.rollup.share.projectConfig.modulePath = this.rollup.share.projectConfig.projectPath;
689
690    const moduleMode = new ModuleModeMock(this.rollup);
691    moduleMode.projectConfig.packageDir = ENTRY_MODULE_NAME_DEFAULT;
692    moduleMode.addModuleInfoItemMock(this.rollup, false, '');
693
694    let index = 0;
695    moduleMode.moduleInfos.forEach(moduleInfo => {
696      if (index === 1) {
697        expect(moduleInfo.sourceFile == 'entry/build/entry/src/main/entryability/EntryAbility.ts').to.be.true;
698        expect(moduleInfo.recordName == 'pkg_modules/src/main/pkg_modulesability/EntryAbility').to.be.true;
699        expect(moduleInfo.packageName === PKG_MODULES).to.be.true;
700        expect(moduleInfo.filePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0).to.be.true;
701        expect(moduleInfo.cacheFilePath.indexOf(ENTRYABILITY_TS_PATH_DEFAULT) > 0).to.be.true;
702      }
703      if (index === 2) {
704        expect(moduleInfo.sourceFile == 'entry/build/entry/src/main/pages/Index.ets').to.be.true;
705        expect(moduleInfo.recordName == 'pkg_modules/src/main/pages/Index').to.be.true;
706        expect(moduleInfo.packageName === PKG_MODULES).to.be.true;
707        expect(moduleInfo.filePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
708        expect(moduleInfo.cacheFilePath.indexOf(INDEX_ETS_PATH_DEFAULT) > 0).to.be.true;
709      }
710      index++;
711    });
712    SourceMapGenerator.cleanSourceMapObject();
713  });
714
715  mocha.it('2-7-3: test addModuleInfoItem under build release with obfuscatedEnabled and isPackageModulesFile`s return is false', function () {
716    this.rollup.build(RELEASE);
717    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
718    sourceMapGenerator.setNewSoureMaps(true);
719
720    this.rollup.share.projectConfig = {
721      buildMode: 'Release'
722    }
723    this.rollup.share.projectConfig.obfuscationMergedObConfig = {
724      options: {
725        enableFileNameObfuscation: true
726      }
727    };
728
729    const arkguardConfig = {
730      mRenameFileName: {
731        mEnable: true,
732        mNameGeneratorType: 1,
733        mReservedFileNames: [
734          "entry",
735          "src",
736          "main"
737        ]
738      },
739      mPerformancePrinter: []
740    }
741
742    let arkObfuscator: ArkObfuscator = new ArkObfuscator();
743    arkObfuscator.init(arkguardConfig);
744
745    const moduleMode = new ModuleModeMock(this.rollup);
746    moduleMode.addModuleInfoItemMock(this.rollup, false, '');
747
748    moduleMode.moduleInfos.forEach(moduleInfo => {
749      expect(moduleInfo.packageName === 'entry').to.be.true;
750      expect(/.*entry\|entry\|1\.0\.0\|src\/main\/[a-z]\/[a-z]\.(js|ts|ets).*/.test(moduleInfo.sourceFile)).to.be.true;
751      expect(/.*\/entry\/src\/main\/[a-z]\/[a-z].*/.test(moduleInfo.recordName)).to.be.true;
752      expect(/.*\/src\/main\/[a-z]\/[a-z]\.(js|ts|ets).*/.test(moduleInfo.filePath)).to.be.true;
753      expect(/.*\/src\/main\/[a-z]\/[a-z]\.(js|ts|ets).*/.test(moduleInfo.cacheFilePath)).to.be.true;
754    });
755    SourceMapGenerator.cleanSourceMapObject();
756  });
757
758  mocha.it('2-7-4: test addModuleInfoItem under build release with obfuscatedEnabled and isPackageModulesFile`s return is false and old key', function () {
759    this.rollup.build(RELEASE);
760    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
761    sourceMapGenerator.setNewSoureMaps(false);
762
763    this.rollup.share.projectConfig = {
764      buildMode: 'Release'
765    }
766    this.rollup.share.projectConfig.obfuscationMergedObConfig = {
767      options: {
768        enableFileNameObfuscation: true
769      }
770    };
771
772    const moduleMode = new ModuleModeMock(this.rollup);
773    moduleMode.addModuleInfoItemMock(this.rollup, false, '');
774
775    moduleMode.moduleInfos.forEach(moduleInfo => {
776      expect(moduleInfo.packageName === 'entry').to.be.true;
777      expect(/.*\/src\/main\/[a-z]\/[a-z]\.(js|ts|ets).*/.test(moduleInfo.sourceFile)).to.be.true;
778      expect(/.*\/entry\/src\/main\/[a-z]\/[a-z].*/.test(moduleInfo.recordName)).to.be.true;
779      expect(/.*\/src\/main\/[a-z]\/[a-z]\.(js|ts|ets).*/.test(moduleInfo.filePath)).to.be.true;
780      expect(/.*\/src\/main\/[a-z]\/[a-z]\.(js|ts|ets).*/.test(moduleInfo.cacheFilePath)).to.be.true;
781    });
782    SourceMapGenerator.cleanSourceMapObject();
783  });
784
785  mocha.it('3-1-1: test updateCachedSourceMaps under build debug: cacheSourceMapPath not exist', function () {
786    this.rollup.build();
787    const moduleMode = new ModuleModeMock(this.rollup);
788    moduleMode.cacheSourceMapPath = '';
789
790    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
791    sourceMapGenerator.updateSourceMap(path.join(this.rollup.share.projectConfig.modulePath, ENTRYABILITY_TS_PATH_DEFAULT), {});
792    sourceMapGenerator.updateSourceMap(path.join(this.rollup.share.projectConfig.modulePath, INDEX_ETS_PATH_DEFAULT), {});
793
794    let cacheSourceMapObject = sourceMapGenerator.updateCachedSourceMaps();
795    sourceMapGenerator.setNewSoureMaps(false);
796    for (const key in cacheSourceMapObject) {
797      expect(sourceMapGenerator.getSourceMap(key) === cacheSourceMapObject[key]).to.be.true;
798    }
799
800    let newSourceMaps = sourceMapGenerator.getSourceMaps();
801    for (const key of Object.keys(newSourceMaps)) {
802      delete newSourceMaps[key];
803    }
804    SourceMapGenerator.cleanSourceMapObject();
805  });
806
807  mocha.it('3-1-2: test updateCachedSourceMaps under build debug: compileFileList has not sourceFileAbsolutePath', function () {
808    this.rollup.build();
809    const moduleMode = new ModuleModeMock(this.rollup);
810    moduleMode.cacheSourceMapPath = EXPECT_SOURCEMAP_JSON;
811
812    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
813    sourceMapGenerator.updateSourceMap(path.join(this.rollup.share.projectConfig.modulePath, ENTRYABILITY_TS_PATH_DEFAULT), { FILE: '' });
814    sourceMapGenerator.updateSourceMap(path.join(this.rollup.share.projectConfig.modulePath, INDEX_ETS_PATH_DEFAULT), { FILE: '' });
815
816    let cacheSourceMapObject = sourceMapGenerator.updateCachedSourceMaps();
817    sourceMapGenerator.setNewSoureMaps(false);
818    for (const key in cacheSourceMapObject) {
819      expect(sourceMapGenerator.getSourceMap(key) === cacheSourceMapObject[key]).to.be.true;
820    }
821
822    sourceMapGenerator.updateSourceMap(path.join(this.rollup.share.projectConfig.modulePath, ENTRYABILITY_TS_PATH_DEFAULT), { FILE: TEST });
823    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, NEWFILE: NEWFILE });
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    let newSourceMaps = sourceMapGenerator.getSourceMaps();
837    for (const key of Object.keys(newSourceMaps)) {
838      delete newSourceMaps[key];
839    }
840    SourceMapGenerator.cleanSourceMapObject();
841  });
842
843  mocha.it('3-2: test updateCachedSourceMaps under build release', function () {
844    this.rollup.build(RELEASE);
845    const moduleMode = new ModuleModeMock(this.rollup);
846    moduleMode.cacheSourceMapPath = '';
847
848    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
849    sourceMapGenerator.updateSourceMap(path.join(this.rollup.share.projectConfig.modulePath, ENTRYABILITY_TS_PATH_DEFAULT), {});
850    sourceMapGenerator.updateSourceMap(path.join(this.rollup.share.projectConfig.modulePath, INDEX_ETS_PATH_DEFAULT), {});
851
852    let cacheSourceMapObject = sourceMapGenerator.updateCachedSourceMaps();
853    sourceMapGenerator.setNewSoureMaps(false);
854    for (const key in cacheSourceMapObject) {
855      expect(sourceMapGenerator.getSourceMap(key) === cacheSourceMapObject[key]).to.be.true;
856    }
857
858    let newSourceMaps = sourceMapGenerator.getSourceMaps();
859    for (const key of Object.keys(newSourceMaps)) {
860      delete newSourceMaps[key];
861    }
862    SourceMapGenerator.cleanSourceMapObject();
863  });
864
865  mocha.it('3-3: test updateCachedSourceMaps under preview debug', function () {
866    this.rollup.preview();
867    const moduleMode = new ModuleModeMock(this.rollup);
868    moduleMode.cacheSourceMapPath = '';
869
870    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
871    sourceMapGenerator.updateSourceMap(path.join(this.rollup.share.projectConfig.modulePath, ENTRYABILITY_TS_PATH_DEFAULT), {});
872    sourceMapGenerator.updateSourceMap(path.join(this.rollup.share.projectConfig.modulePath, INDEX_ETS_PATH_DEFAULT), {});
873
874    let cacheSourceMapObject = sourceMapGenerator.updateCachedSourceMaps();
875    sourceMapGenerator.setNewSoureMaps(false);
876    for (const key in cacheSourceMapObject) {
877      expect(sourceMapGenerator.getSourceMap(key) === cacheSourceMapObject[key]).to.be.true;
878    }
879
880    let newSourceMaps = sourceMapGenerator.getSourceMaps();
881    for (const key of Object.keys(newSourceMaps)) {
882      delete newSourceMaps[key];
883    }
884    SourceMapGenerator.cleanSourceMapObject();
885  });
886
887  mocha.it('3-4: test updateCachedSourceMaps under hot reload debug', function () {
888    this.rollup.hotReload();
889    const moduleMode = new ModuleModeMock(this.rollup);
890    moduleMode.cacheSourceMapPath = '';
891    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
892    sourceMapGenerator.updateSourceMap(path.join(this.rollup.share.projectConfig.modulePath, INDEX_ETS_PATH_DEFAULT), {});
893    sourceMapGenerator.updateSourceMap(path.join(this.rollup.share.projectConfig.modulePath, ENTRYABILITY_TS_PATH_DEFAULT), {});
894
895    let cacheSourceMapObject = sourceMapGenerator.updateCachedSourceMaps();
896    sourceMapGenerator.setNewSoureMaps(false);
897    for (const key in cacheSourceMapObject) {
898      expect(sourceMapGenerator.getSourceMap(key) === cacheSourceMapObject[key]).to.be.true;
899    }
900
901    let newSourceMaps = sourceMapGenerator.getSourceMaps();
902    for (const key of Object.keys(newSourceMaps)) {
903      delete newSourceMaps[key];
904    }
905    SourceMapGenerator.cleanSourceMapObject();
906  });
907
908  mocha.it('3-5: test updateCachedSourceMaps when ets(ts) file is transformed to js file', function () {
909    this.rollup.build();
910    const moduleMode = new ModuleModeMock(this.rollup);
911    moduleMode.cacheSourceMapPath = '';
912
913    let prefix = `${ENTRY_MODULE_NAME_DEFAULT}|${ENTRY_MODULE_NAME_DEFAULT}|${ENTRY_MODULE_VERSION_DEFAULT}|`;
914    const sourceMapGenerator: SourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
915    let moduleId: string = path.join(this.rollup.share.projectConfig.modulePath, INDEX_ETS_PATH_DEFAULT);
916    sourceMapGenerator.updateSourceMap(moduleId, {});
917
918    let cacheSourceMapObject = sourceMapGenerator.updateCachedSourceMaps();
919    if (shouldETSOrTSFileTransformToJS(moduleId, moduleMode.projectConfig)) {
920      expect(prefix + INDEX_JS_PATH_DEFAULT.substring(1) in cacheSourceMapObject).to.be.true;
921    } else {
922      expect(prefix + INDEX_ETS_PATH_DEFAULT.substring(1) in cacheSourceMapObject).to.be.true;
923    }
924
925    moduleId = path.join(this.rollup.share.projectConfig.modulePath, ENTRYABILITY_TS_PATH_DEFAULT);
926    sourceMapGenerator.updateSourceMap(moduleId, {});
927    cacheSourceMapObject = sourceMapGenerator.updateCachedSourceMaps();
928    if (shouldETSOrTSFileTransformToJS(moduleId, moduleMode.projectConfig)) {
929      expect(prefix + ENTRYABILITY_JS_PATH_DEFAULT.substring(1) in cacheSourceMapObject).to.be.true;
930    } else {
931      expect(prefix + ENTRYABILITY_JS_PATH_DEFAULT.substring(1) in cacheSourceMapObject).to.be.true;
932    }
933
934    let newSourceMaps = sourceMapGenerator.getSourceMaps();
935    for (const key of Object.keys(newSourceMaps)) {
936      delete newSourceMaps[key];
937    }
938    SourceMapGenerator.cleanSourceMapObject();
939  })
940
941  mocha.it('4-1: test generateCompileFilesInfo under build debug', function () {
942    this.rollup.build();
943    SourceMapGenerator.initInstance(this.rollup);
944    const moduleMode = new ModuleModeMock(this.rollup);
945    moduleMode.addModuleInfoItemMock(this.rollup, false, '');
946    moduleMode.generateCompileFilesInfoMock(false);
947    expect(moduleMode.checkGenerateCompileFilesInfo(false) === true).to.be.true;
948    SourceMapGenerator.cleanSourceMapObject();
949  });
950
951  mocha.it('4-2: test generateCompileFilesInfo under build release', function () {
952    this.rollup.build(RELEASE);
953    SourceMapGenerator.initInstance(this.rollup);
954    const moduleMode = new ModuleModeMock(this.rollup);
955    moduleMode.addModuleInfoItemMock(this.rollup, false, '');
956    moduleMode.generateCompileFilesInfoMock(false);
957    expect(moduleMode.checkGenerateCompileFilesInfo(false) === true).to.be.true;
958    SourceMapGenerator.cleanSourceMapObject();
959  });
960
961  mocha.it('4-3: test generateCompileFilesInfo under preview debug', function () {
962    this.rollup.preview();
963    SourceMapGenerator.initInstance(this.rollup);
964    const moduleMode = new ModuleModeMock(this.rollup);
965    moduleMode.addModuleInfoItemMock(this.rollup, false, '');
966    moduleMode.generateCompileFilesInfoMock(false);
967    expect(moduleMode.checkGenerateCompileFilesInfo(false) === true).to.be.true;
968    SourceMapGenerator.cleanSourceMapObject();
969  });
970
971  mocha.it('4-4: test generateCompileFilesInfo under hot reload debug', function () {
972    this.rollup.hotReload();
973    SourceMapGenerator.initInstance(this.rollup);
974    const moduleMode = new ModuleModeMock(this.rollup);
975    moduleMode.addModuleInfoItemMock(this.rollup, false, '');
976    moduleMode.generateCompileFilesInfoMock(false);
977    expect(moduleMode.checkGenerateCompileFilesInfo(false) === true).to.be.true;
978    SourceMapGenerator.cleanSourceMapObject();
979  });
980
981  mocha.it('4-5: test generateCompileFilesInfo under exist abcPaths', function () {
982    this.rollup.hotReload();
983    SourceMapGenerator.initInstance(this.rollup);
984    this.rollup.share.projectConfig.byteCodeHarInfo = {
985      'har': {
986        'abcPath': 'module.abc'
987      }
988    };
989    const moduleMode = new ModuleModeMock(this.rollup);
990    moduleMode.addModuleInfoItemMock(this.rollup, false, '');
991    moduleMode.generateCompileFilesInfoMock(true);
992    expect(moduleMode.checkGenerateCompileFilesInfo(true) === true).to.be.true;
993    SourceMapGenerator.cleanSourceMapObject();
994  });
995
996  mocha.it('4-6: test generateCompileFilesInfo under hot reload debug incremental', function () {
997    this.rollup.hotReload();
998    SourceMapGenerator.initInstance(this.rollup);
999    this.rollup.share.projectConfig.byteCodeHarInfo = {
1000      'har': {
1001        'abcPath': 'module.abc'
1002      }
1003    };
1004    const moduleMode = new ModuleModeMock(this.rollup);
1005    moduleMode.addModuleInfoItemMock(this.rollup, false, '');
1006    moduleMode.generateCompileFilesInfoMock(false);
1007    expect(moduleMode.checkGenerateCompileFilesInfo(false) === true).to.be.true;
1008    SourceMapGenerator.cleanSourceMapObject();
1009  });
1010
1011  mocha.it('5-1: test generateNpmEntriesInfo under build debug', function () {
1012    this.rollup.build();
1013    SourceMapGenerator.initInstance(this.rollup);
1014    const moduleMode = new ModuleModeMock(this.rollup);
1015    moduleMode.addModuleInfoItemMock(this.rollup, false, '');
1016    moduleMode.generateNpmEntriesInfoMock();
1017    expect(moduleMode.checkGenerateNpmEntriesInfo() === true).to.be.true;
1018    SourceMapGenerator.cleanSourceMapObject();
1019  });
1020
1021  mocha.it('5-2: test generateNpmEntriesInfo under build release', function () {
1022    this.rollup.build(RELEASE);
1023    SourceMapGenerator.initInstance(this.rollup);
1024    const moduleMode = new ModuleModeMock(this.rollup);
1025    moduleMode.addModuleInfoItemMock(this.rollup, false, '');
1026    moduleMode.generateNpmEntriesInfoMock();
1027    expect(moduleMode.checkGenerateNpmEntriesInfo() === true).to.be.true;
1028    SourceMapGenerator.cleanSourceMapObject();
1029  });
1030
1031  mocha.it('5-3: test generateNpmEntriesInfo under preview debug', function () {
1032    this.rollup.preview();
1033    SourceMapGenerator.initInstance(this.rollup);
1034    const moduleMode = new ModuleModeMock(this.rollup);
1035    moduleMode.addModuleInfoItemMock(this.rollup, false, '');
1036    moduleMode.generateNpmEntriesInfoMock();
1037    expect(moduleMode.checkGenerateNpmEntriesInfo() === true).to.be.true;
1038    SourceMapGenerator.cleanSourceMapObject();
1039  });
1040
1041  mocha.it('5-4: test generateNpmEntriesInfo under hot reload debug', function () {
1042    this.rollup.hotReload();
1043    SourceMapGenerator.initInstance(this.rollup);
1044    const moduleMode = new ModuleModeMock(this.rollup);
1045    moduleMode.addModuleInfoItemMock(this.rollup, false, '');
1046    moduleMode.generateNpmEntriesInfoMock();
1047    expect(moduleMode.checkGenerateNpmEntriesInfo() === true).to.be.true;
1048    SourceMapGenerator.cleanSourceMapObject();
1049  });
1050
1051  mocha.it('6-1: test generateAbcCacheFilesInfo under build debug', function () {
1052    this.rollup.build();
1053    SourceMapGenerator.initInstance(this.rollup);
1054    const moduleMode = new ModuleModeMock(this.rollup);
1055    moduleMode.addModuleInfoItemMock(this.rollup, false, '');
1056    moduleMode.generateAbcCacheFilesInfoMock();
1057    expect(moduleMode.checkGenerateAbcCacheFilesInfo() === true).to.be.true;
1058    SourceMapGenerator.cleanSourceMapObject();
1059  });
1060
1061  mocha.it('6-2: test generateAbcCacheFilesInfo under build release', function () {
1062    this.rollup.build(RELEASE);
1063    SourceMapGenerator.initInstance(this.rollup);
1064    const moduleMode = new ModuleModeMock(this.rollup);
1065    moduleMode.addModuleInfoItemMock(this.rollup, false, '');
1066    moduleMode.generateAbcCacheFilesInfoMock();
1067    expect(moduleMode.checkGenerateAbcCacheFilesInfo() === true).to.be.true;
1068    SourceMapGenerator.cleanSourceMapObject();
1069  });
1070
1071  mocha.it('6-3: test generateAbcCacheFilesInfo under preview debug', function () {
1072    this.rollup.preview();
1073    SourceMapGenerator.initInstance(this.rollup);
1074    const moduleMode = new ModuleModeMock(this.rollup);
1075    moduleMode.addModuleInfoItemMock(this.rollup, false, '');
1076    moduleMode.generateAbcCacheFilesInfoMock();
1077    expect(moduleMode.checkGenerateAbcCacheFilesInfo() === true).to.be.true;
1078    SourceMapGenerator.cleanSourceMapObject();
1079  });
1080
1081  mocha.it('6-4: test generateAbcCacheFilesInfo under hot reload debug', function () {
1082    this.rollup.hotReload();
1083    SourceMapGenerator.initInstance(this.rollup);
1084    const moduleMode = new ModuleModeMock(this.rollup);
1085    moduleMode.addModuleInfoItemMock(this.rollup, false, '');
1086    moduleMode.generateAbcCacheFilesInfoMock();
1087    expect(moduleMode.checkGenerateAbcCacheFilesInfo() === true).to.be.true;
1088    SourceMapGenerator.cleanSourceMapObject();
1089 });
1090
1091  mocha.it('7-1: test getPackageEntryInfo under build debug', function () {
1092    this.rollup.build();
1093    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1094    const moduleMode = new ModuleModeMock(this.rollup);
1095    moduleMode.checkGetPackageEntryInfo(this.rollup);
1096    expect(moduleMode.pkgEntryInfos.size !== 0).to.be.true;
1097  });
1098
1099  mocha.it('7-2: test getPackageEntryInfo under build release', function () {
1100    this.rollup.build(RELEASE);
1101    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1102    const moduleMode = new ModuleModeMock(this.rollup);
1103    moduleMode.checkGetPackageEntryInfo(this.rollup);
1104    expect(moduleMode.pkgEntryInfos.size !== 0).to.be.true;
1105  });
1106
1107  mocha.it('7-3: test getPackageEntryInfo under preview debug', function () {
1108    this.rollup.preview();
1109    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1110    const moduleMode = new ModuleModeMock(this.rollup);
1111    moduleMode.checkGetPackageEntryInfo(this.rollup);
1112    expect(moduleMode.pkgEntryInfos.size !== 0).to.be.true;
1113  });
1114
1115  mocha.it('7-4: test getPackageEntryInfo under hot reload debug', function () {
1116    this.rollup.hotReload();
1117    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1118    const moduleMode = new ModuleModeMock(this.rollup);
1119    moduleMode.checkGetPackageEntryInfo(this.rollup);
1120    expect(moduleMode.pkgEntryInfos.size !== 0).to.be.true;
1121  });
1122
1123  mocha.it('7-5: test the error message of getPackageEntryInfo under build debug', function () {
1124    this.rollup.build();
1125    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1126    const moduleMode = new ModuleModeMock(this.rollup);
1127    const stub = sinon.stub(this.rollup.share.getLogger(GEN_ABC_PLUGIN_NAME), 'debug');
1128    const isTestErrorLog = true;
1129    try {
1130      moduleMode.checkGetPackageEntryInfo(this.rollup, isTestErrorLog);
1131    } catch (e) {
1132    }
1133    expect(stub.calledWith("ArkTS:INTERNAL ERROR: Failed to get 'pkgPath' from metaInfo. File: ")).to.be.true;
1134    stub.restore();
1135  });
1136
1137  mocha.it('7-6: test the error message of getPackageEntryInfo under build release', function () {
1138    this.rollup.build(RELEASE);
1139    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1140    const moduleMode = new ModuleModeMock(this.rollup);
1141    const stub = sinon.stub(this.rollup.share.getLogger(GEN_ABC_PLUGIN_NAME), 'debug');
1142    const isTestErrorLog = true;
1143    try {
1144      moduleMode.checkGetPackageEntryInfo(this.rollup, isTestErrorLog);
1145    } catch (e) {
1146    }
1147    expect(stub.calledWith("ArkTS:INTERNAL ERROR: Failed to get 'pkgPath' from metaInfo. File: ")).to.be.true;
1148    stub.restore();
1149  });
1150
1151  mocha.it('7-7: test the error message of getPackageEntryInfo under preview debug', function () {
1152    this.rollup.preview();
1153    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1154    const moduleMode = new ModuleModeMock(this.rollup);
1155    const stub = sinon.stub(this.rollup.share.getLogger(GEN_ABC_PLUGIN_NAME), 'debug');
1156    const isTestErrorLog = true;
1157    try {
1158      moduleMode.checkGetPackageEntryInfo(this.rollup, isTestErrorLog);
1159    } catch (e) {
1160    }
1161    expect(stub.calledWith("ArkTS:INTERNAL ERROR: Failed to get 'pkgPath' from metaInfo. File: ")).to.be.true;
1162    stub.restore();
1163  });
1164
1165  mocha.it('7-8: test the error message of getPackageEntryInfo under hot reload debug', function () {
1166    this.rollup.hotReload();
1167    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1168    const moduleMode = new ModuleModeMock(this.rollup);
1169    const stub = sinon.stub(this.rollup.share.getLogger(GEN_ABC_PLUGIN_NAME), 'debug');
1170    const isTestErrorLog = true;
1171    try {
1172      moduleMode.checkGetPackageEntryInfo(this.rollup, isTestErrorLog);
1173    } catch (e) {
1174    }
1175    expect(stub.calledWith("ArkTS:INTERNAL ERROR: Failed to get 'pkgPath' from metaInfo. File: ")).to.be.true;
1176    stub.restore();
1177  });
1178
1179  mocha.it('8-1: test buildModuleSourceMapInfo under build debug', async function () {
1180    this.rollup.build();
1181    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
1182    const moduleMode = new ModuleModeMock(this.rollup);
1183    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
1184    await sleep(1000);
1185    expect(moduleMode.checkModuleSourceMapInfoMock() === true).to.be.true;
1186    SourceMapGenerator.cleanSourceMapObject();
1187  });
1188
1189  mocha.it('8-2: test buildModuleSourceMapInfo under build release', async function () {
1190    this.rollup.build(RELEASE);
1191    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
1192    const moduleMode = new ModuleModeMock(this.rollup);
1193    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
1194    await sleep(1000);
1195    expect(moduleMode.checkModuleSourceMapInfoMock() === true).to.be.true;
1196    SourceMapGenerator.cleanSourceMapObject();
1197  });
1198
1199  mocha.it('8-3: test buildModuleSourceMapInfo under preview debug', async function () {
1200    this.rollup.preview();
1201    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
1202    const moduleMode = new ModuleModeMock(this.rollup);
1203    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
1204    await sleep(1000);
1205    expect(moduleMode.checkModuleSourceMapInfoMock() === true).to.be.true;
1206    SourceMapGenerator.cleanSourceMapObject();
1207  });
1208
1209  mocha.it('8-4: test buildModuleSourceMapInfo under hot reload debug', async function () {
1210    this.rollup.hotReload();
1211    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
1212    const moduleMode = new ModuleModeMock(this.rollup);
1213    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
1214    await sleep(1000);
1215    expect(moduleMode.checkModuleSourceMapInfoMock() === true).to.be.true;
1216    SourceMapGenerator.cleanSourceMapObject();
1217  });
1218
1219  mocha.it('8-5: test the error message of buildModuleSourceMapInfo under build debug', async function () {
1220    this.rollup.build();
1221    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
1222    const moduleMode = new ModuleModeMock(this.rollup);
1223    const stub = sinon.stub(sourceMapGenerator, 'throwArkTsCompilerError');
1224    const copyFileSyncStub = sinon.stub(fs, 'copyFileSync').returns(undefined);
1225    sourceMapGenerator.setSourceMapPath('');
1226    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
1227    await sleep(100);
1228    expect(stub.calledWithMatch('ArkTS:INTERNAL ERROR: Failed to write sourceMaps.')).to.be.true;
1229    stub.restore();
1230    copyFileSyncStub.restore();
1231    SourceMapGenerator.cleanSourceMapObject();
1232  });
1233
1234  mocha.it('8-6: test the error message of buildModuleSourceMapInfo under build release', async function () {
1235    this.rollup.build(RELEASE);
1236    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
1237    const moduleMode = new ModuleModeMock(this.rollup);
1238    const stub = sinon.stub(sourceMapGenerator, 'throwArkTsCompilerError');
1239    const copyFileSyncStub = sinon.stub(fs, 'copyFileSync').returns(undefined);
1240    sourceMapGenerator.setSourceMapPath('');
1241    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
1242    await sleep(100);
1243    expect(stub.calledWithMatch('ArkTS:INTERNAL ERROR: Failed to write sourceMaps.')).to.be.true;
1244    stub.restore();
1245    copyFileSyncStub.restore();
1246    SourceMapGenerator.cleanSourceMapObject();
1247  });
1248
1249  mocha.it('8-7: test the error message of buildModuleSourceMapInfo under preview debug', async function () {
1250    this.rollup.preview();
1251    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
1252    const moduleMode = new ModuleModeMock(this.rollup);
1253    const stub = sinon.stub(sourceMapGenerator, 'throwArkTsCompilerError');
1254    const copyFileSyncStub = sinon.stub(fs, 'copyFileSync').returns(undefined);
1255    sourceMapGenerator.setSourceMapPath('');
1256    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
1257    await sleep(100);
1258    expect(stub.calledWithMatch('ArkTS:INTERNAL ERROR: Failed to write sourceMaps.')).to.be.true;
1259    stub.restore();
1260    copyFileSyncStub.restore();
1261    SourceMapGenerator.cleanSourceMapObject();
1262  });
1263
1264  mocha.it('8-8: test the error message of buildModuleSourceMapInfo under hot reload debug', async function () {
1265    this.rollup.hotReload();
1266    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
1267    const moduleMode = new ModuleModeMock(this.rollup);
1268    const stub = sinon.stub(sourceMapGenerator, 'throwArkTsCompilerError');
1269    const copyFileSyncStub = sinon.stub(fs, 'copyFileSync').returns(undefined);
1270    sourceMapGenerator.setSourceMapPath('');
1271    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
1272    await sleep(100);
1273    expect(stub.calledWithMatch('ArkTS:INTERNAL ERROR: Failed to write sourceMaps.')).to.be.true;
1274    stub.restore();
1275    copyFileSyncStub.restore();
1276    SourceMapGenerator.cleanSourceMapObject();
1277  });
1278
1279  mocha.it('8-9: test merge bytecode source map of buildModuleSourceMapInfo under build debug', async function () {
1280    this.rollup.build();
1281    this.rollup.share.projectConfig.mockBytecodeHarInfo();
1282    const sourceMapGenerator = SourceMapGenerator.initInstance(this.rollup);
1283    const moduleMode = new ModuleModeMock(this.rollup);
1284    moduleMode.buildModuleSourceMapInfoMock(sourceMapGenerator);
1285    await sleep(1000);
1286    expect(moduleMode.checkModuleSourceMapInfoMock() === true).to.be.true;
1287    SourceMapGenerator.cleanSourceMapObject();
1288  });
1289
1290  mocha.it('9-1: test getPkgModulesFilePkgName under build debug', function () {
1291    this.rollup.build();
1292    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1293    const moduleMode = new ModuleModeMock(this.rollup);
1294    const keys = Object.keys(moduleMode.symlinkMap);
1295    for (const key of keys) {
1296      const pkgname = moduleMode.getPkgModulesFilePkgName(key).toString();
1297      expect(pkgname === PKG_MODULES_OHPM_HYPIUM).to.be.true;
1298    }
1299  });
1300
1301  mocha.it('9-2: test getPkgModulesFilePkgName under build release', function () {
1302    this.rollup.build(RELEASE);
1303    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1304    const moduleMode = new ModuleModeMock(this.rollup);
1305    const keys = Object.keys(moduleMode.symlinkMap);
1306    for (const key of keys) {
1307      const pkgname = moduleMode.getPkgModulesFilePkgName(key).toString();
1308      expect(pkgname === PKG_MODULES_OHPM_HYPIUM).to.be.true;
1309    }
1310  });
1311
1312  mocha.it('9-3: test getPkgModulesFilePkgName under preview debug', function () {
1313    this.rollup.preview();
1314    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1315    const moduleMode = new ModuleModeMock(this.rollup);
1316    const keys = Object.keys(moduleMode.symlinkMap);
1317    for (const key of keys) {
1318      const pkgname = moduleMode.getPkgModulesFilePkgName(key).toString();
1319      expect(pkgname === PKG_MODULES_OHPM_HYPIUM).to.be.true;
1320    }
1321  });
1322
1323  mocha.it('9-4: test getPkgModulesFilePkgName under hot reload debug', function () {
1324    this.rollup.hotReload();
1325    this.rollup.share.projectConfig.packageDir = OH_MODULES;
1326    const moduleMode = new ModuleModeMock(this.rollup);
1327    const keys = Object.keys(moduleMode.symlinkMap);
1328    for (const key of keys) {
1329      const pkgname = moduleMode.getPkgModulesFilePkgName(key).toString();
1330      expect(pkgname === PKG_MODULES_OHPM_HYPIUM).to.be.true;
1331    }
1332  });
1333
1334  mocha.it('10-1: test generateEs2AbcCmd under build debug', function () {
1335    this.rollup.build();
1336    this.rollup.share.projectConfig.oldMapFilePath = DEFAULT_ETS;
1337    const moduleMode = new ModuleHotreloadMode(this.rollup);
1338    const compatibleSdkVersion = `${TARGET_API_VERSION}${this.rollup.share.projectConfig.compatibleSdkVersion}`;
1339    moduleMode.projectConfig.anBuildMode = AOT_FULL;
1340    moduleMode.generateEs2AbcCmd();
1341    moduleMode.byteCodeHar = true;
1342
1343    expect(moduleMode.cmdArgs[1] === DEBUG_INFO).to.be.true;
1344    moduleMode.cmdArgs.splice(1, 1);
1345    expect(moduleMode.cmdArgs[1].indexOf(BUILD_INFO) > 0).to.be.true;
1346    moduleMode.cmdArgs.splice(1, 1);
1347    expect(moduleMode.cmdArgs[2].indexOf(BUILD_NPM) > 0).to.be.true;
1348    moduleMode.cmdArgs.splice(2, 1);
1349    expect(moduleMode.cmdArgs[3].indexOf(MODULES_ABC) > 0).to.be.true;
1350    moduleMode.cmdArgs.splice(3, 1);
1351    checkGenerateEs2AbcCmdExpect(moduleMode.cmdArgs, compatibleSdkVersion, moduleMode.byteCodeHar);
1352  });
1353
1354  mocha.it('10-2: test generateEs2AbcCmd under build release', function () {
1355    this.rollup.build(RELEASE);
1356    this.rollup.share.projectConfig.oldMapFilePath = DEFAULT_ETS;
1357    const moduleMode = new ModuleHotreloadMode(this.rollup);
1358    const compatibleSdkVersion = `${TARGET_API_VERSION}${this.rollup.share.projectConfig.compatibleSdkVersion}`;
1359    moduleMode.generateEs2AbcCmd();
1360    moduleMode.byteCodeHar = true;
1361
1362    expect(moduleMode.cmdArgs[1] === DEBUG_INFO).to.be.false;
1363    expect(moduleMode.cmdArgs[1].indexOf(BUILD_INFO) > 0).to.be.true;
1364    moduleMode.cmdArgs.splice(1, 1);
1365    expect(moduleMode.cmdArgs[2].indexOf(BUILD_NPM) > 0).to.be.true;
1366    moduleMode.cmdArgs.splice(2, 1);
1367    expect(moduleMode.cmdArgs[3].indexOf(MODULES_ABC) > 0).to.be.true;
1368    moduleMode.cmdArgs.splice(3, 1);
1369    checkGenerateEs2AbcCmdExpect(moduleMode.cmdArgs, compatibleSdkVersion, moduleMode.byteCodeHar);
1370  });
1371
1372  mocha.it('10-3: test generateEs2AbcCmd under preview debug', function () {
1373    this.rollup.preview();
1374    this.rollup.share.projectConfig.oldMapFilePath = DEFAULT_ETS;
1375    const moduleMode = new ModuleHotreloadMode(this.rollup);
1376    const compatibleSdkVersion = `${TARGET_API_VERSION}${this.rollup.share.projectConfig.compatibleSdkVersion}`;
1377    moduleMode.generateEs2AbcCmd();
1378    moduleMode.byteCodeHar = true;
1379
1380    expect(moduleMode.cmdArgs[1] === DEBUG_INFO).to.be.true;
1381    moduleMode.cmdArgs.splice(1, 1);
1382    expect(moduleMode.cmdArgs[1].indexOf(PREVIEW_DEBUG_INFO) > 0).to.be.true;
1383    moduleMode.cmdArgs.splice(1, 1);
1384    expect(moduleMode.cmdArgs[2].indexOf(PREVIEW_DEBUG_NPM) > 0).to.be.true;
1385    moduleMode.cmdArgs.splice(2, 1);
1386    expect(moduleMode.cmdArgs[3].indexOf(PREVIEW_MODULES_ABC) > 0).to.be.true;
1387    moduleMode.cmdArgs.splice(3, 1);
1388    checkGenerateEs2AbcCmdExpect(moduleMode.cmdArgs, compatibleSdkVersion, moduleMode.byteCodeHar);
1389  });
1390
1391  mocha.it('11-1: test addCacheFileArgs under build debug', function () {
1392    this.rollup.build();
1393    this.rollup.share.projectConfig.oldMapFilePath = DEFAULT_ETS;
1394    const moduleMode = new ModuleHotreloadMode(this.rollup);
1395    moduleMode.addCacheFileArgs();
1396
1397    expect(moduleMode.cmdArgs[0].indexOf(ES2ABC_PATH) > 0).to.be.true;
1398    expect(moduleMode.cmdArgs[1] === DEBUG_INFO).to.be.true;
1399    expect(moduleMode.cmdArgs[2] === CACHE_FILE).to.be.true;
1400    expect(moduleMode.cmdArgs[3].indexOf(BUILD_CACHE) > 0).to.be.true;
1401  });
1402
1403  mocha.it('11-2: test addCacheFileArgs under build release', function () {
1404    this.rollup.build(RELEASE);
1405    this.rollup.share.projectConfig.oldMapFilePath = DEFAULT_ETS;
1406    const moduleMode = new ModuleHotreloadMode(this.rollup);
1407    moduleMode.addCacheFileArgs();
1408
1409    expect(moduleMode.cmdArgs[0].indexOf(ES2ABC_PATH) > 0).to.be.true;
1410    expect(moduleMode.cmdArgs[1] === DEBUG_INFO).to.be.false;
1411    expect(moduleMode.cmdArgs[1] === CACHE_FILE).to.be.true;
1412    expect(moduleMode.cmdArgs[2].indexOf(BUILD_CACHE) > 0).to.be.true;
1413  });
1414
1415  mocha.it('11-3: test addCacheFileArgs under preview debug', function () {
1416    this.rollup.preview();
1417    this.rollup.share.projectConfig.oldMapFilePath = DEFAULT_ETS;
1418    const moduleMode = new ModuleHotreloadMode(this.rollup);
1419    moduleMode.addCacheFileArgs();
1420
1421    expect(moduleMode.cmdArgs[0].indexOf(ES2ABC_PATH) > 0).to.be.true;
1422    expect(moduleMode.cmdArgs[1] === DEBUG_INFO).to.be.true;
1423    expect(moduleMode.cmdArgs[2] === CACHE_FILE).to.be.true;
1424    expect(moduleMode.cmdArgs[3].indexOf(PREVIEW_DEBUG_CACHE) > 0).to.be.true;
1425  });
1426
1427  mocha.it('11-4: test addCacheFileArgs under hot reload debug', function () {
1428    this.rollup.hotReload();
1429    this.rollup.share.projectConfig.oldMapFilePath = DEFAULT_ETS;
1430    const moduleMode = new ModuleHotreloadMode(this.rollup);
1431    moduleMode.addCacheFileArgs();
1432
1433    expect(moduleMode.cmdArgs[0].indexOf(ES2ABC_PATH) > 0).to.be.true;
1434    expect(moduleMode.cmdArgs[1] === DEBUG_INFO).to.be.true;
1435    expect(moduleMode.cmdArgs[2] === CACHE_FILE).to.be.true;
1436    expect(moduleMode.cmdArgs[3].indexOf(BUILD_CACHE) > 0).to.be.true;
1437  });
1438
1439  mocha.it('12-1: test genFileCachePath under build debug', function () {
1440    this.rollup.build();
1441    const moduleMode = new ModuleModeMock(this.rollup);
1442    const allFiles = new Set<string>();
1443    scanFiles(this.rollup.share.projectConfig.modulePath, allFiles);
1444    this.mockfileList = allFiles.values();
1445    for (const filePath of this.mockfileList) {
1446      if (filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS) || filePath.endsWith(EXTNAME_JS)) {
1447        const sufStr =
1448          toUnixPath(filePath).replace(toUnixPath(this.rollup.share.projectConfig.projectRootPath), '');
1449        const returnInfo =
1450          moduleMode.genFileCachePath(filePath, this.rollup.share.projectConfig.projectRootPath,
1451            this.rollup.share.projectConfig.cachePath);
1452        expect(returnInfo === path.join(this.rollup.share.projectConfig.cachePath, sufStr)).to.be.true;
1453      }
1454    }
1455  });
1456
1457  mocha.it('12-2: test genFileCachePath under build release', function () {
1458    this.rollup.build(RELEASE);
1459    const moduleMode = new ModuleModeMock(this.rollup);
1460    const allFiles = new Set<string>();
1461    scanFiles(this.rollup.share.projectConfig.modulePath, allFiles);
1462    this.mockfileList = allFiles.values();
1463    for (const filePath of this.mockfileList) {
1464      if (filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS) || filePath.endsWith(EXTNAME_JS)) {
1465        const sufStr =
1466          toUnixPath(filePath).replace(toUnixPath(this.rollup.share.projectConfig.projectRootPath), '');
1467        const returnInfo =
1468          moduleMode.genFileCachePath(filePath, this.rollup.share.projectConfig.projectRootPath,
1469            this.rollup.share.projectConfig.cachePath);
1470        expect(returnInfo === path.join(this.rollup.share.projectConfig.cachePath, sufStr)).to.be.true;
1471      }
1472    }
1473  });
1474
1475  mocha.it('12-3: test genFileCachePath under preview debug', function () {
1476    this.rollup.preview();
1477    const moduleMode = new ModuleModeMock(this.rollup);
1478    const allFiles = new Set<string>();
1479    scanFiles(this.rollup.share.projectConfig.modulePath, allFiles);
1480    this.mockfileList = allFiles.values();
1481    for (const filePath of this.mockfileList) {
1482      if (filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS) || filePath.endsWith(EXTNAME_JS)) {
1483        const sufStr =
1484          toUnixPath(filePath).replace(toUnixPath(this.rollup.share.projectConfig.projectRootPath), '');
1485        const returnInfo =
1486          moduleMode.genFileCachePath(filePath, this.rollup.share.projectConfig.projectRootPath,
1487            this.rollup.share.projectConfig.cachePath);
1488        expect(returnInfo === path.join(this.rollup.share.projectConfig.cachePath, sufStr)).to.be.true;
1489      }
1490    }
1491  });
1492
1493  mocha.it('12-4: test genFileCachePath under hot reload debug', function () {
1494    this.rollup.hotReload();
1495    const moduleMode = new ModuleModeMock(this.rollup);
1496    this.mockfileList = this.rollup.getModuleIds();
1497    for (const filePath of this.mockfileList) {
1498      if (filePath.endsWith(EXTNAME_TS) || filePath.endsWith(EXTNAME_ETS) || filePath.endsWith(EXTNAME_JS)) {
1499        const sufStr =
1500          toUnixPath(filePath).replace(toUnixPath(this.rollup.share.projectConfig.projectRootPath), '');
1501        const returnInfo =
1502          moduleMode.genFileCachePath(filePath, this.rollup.share.projectConfig.projectRootPath,
1503            this.rollup.share.projectConfig.cachePath);
1504        expect(returnInfo === path.join(this.rollup.share.projectConfig.cachePath, sufStr)).to.be.true;
1505      }
1506    }
1507  });
1508
1509  mocha.it('12-5: test genFileCachePath under hot fix debug', function () {
1510    this.rollup.build();
1511    this.rollup.share.projectConfig.oldMapFilePath = DEFAULT_ETS;
1512    const cachePath = projectConfig.cachePath + DEBUG;
1513    const moduleMode = new ModuleModeMock(this.rollup);
1514    const filePath = `${projectConfig.projectRootPath}/${TEST_TS}`;
1515    const sufStr = toUnixPath(filePath).replace(toUnixPath(projectConfig.projectRootPath), '');
1516    const returnInfo = moduleMode.genFileCachePath(filePath, projectConfig.projectRootPath, cachePath);
1517    expect(returnInfo === path.join(cachePath, sufStr)).to.be.true;
1518  });
1519
1520  mocha.it('12-6: test genFileCachePath under hot fix release', function () {
1521    this.rollup.build(RELEASE);
1522    this.rollup.share.projectConfig.oldMapFilePath = DEFAULT_ETS;
1523    const cachePath = projectConfig.cachePath + RELEASE;
1524    const moduleMode = new ModuleModeMock(this.rollup);
1525    const filePath = `${projectConfig.projectRootPath}/${TEST_TS}`;
1526    const sufStr = toUnixPath(filePath).replace(toUnixPath(projectConfig.projectRootPath), '');
1527    const returnInfo = moduleMode.genFileCachePath(filePath, projectConfig.projectRootPath, cachePath);
1528    expect(returnInfo === path.join(cachePath, sufStr)).to.be.true;
1529  });
1530
1531  mocha.it('13-1: test the error message of generateMergedAbcOfEs2Abc throw error on failed code', async function () {
1532    this.rollup.build();
1533    const moduleMode = new ModuleModeMock(this.rollup);
1534    const child = childProcess.exec('false', { windowsHide: true });
1535    const triggerAsyncStub = sinon.stub(moduleMode, 'triggerAsync').returns(child);
1536    const stub = sinon.stub(moduleMode, 'throwArkTsCompilerError');
1537    let parentEvent = undefined;
1538    moduleMode.generateMergedAbcOfEs2AbcMock(parentEvent);
1539    await sleep(1000);
1540    expect(stub.calledWithMatch('ArkTS:ERROR Failed to execute es2abc.\nError Message: ')).to.be.true;
1541    triggerAsyncStub.restore();
1542    stub.restore();
1543  });
1544
1545  mocha.it('13-2: test the error message of generateMergedAbcOfEs2Abc throw error(Failed to startup es2abc)', async function () {
1546    this.rollup.build();
1547    const moduleMode = new ModuleModeMock(this.rollup);
1548    const child = {
1549      on: sinon.stub(),
1550      stderr: {
1551        on: sinon.stub(),
1552      },
1553    };
1554    const triggerAsyncStub = sinon.stub(moduleMode, 'triggerAsync').callsFake((callback) => {
1555      callback();
1556      return child;
1557    });
1558    const stub = sinon.stub(moduleMode, 'throwArkTsCompilerError');
1559    let errorEventCallback;
1560    child.on.callsFake((event, callback) => {
1561      if (event === 'error') {
1562        errorEventCallback = callback;
1563      }
1564    });
1565    let parentEvent = undefined;
1566    moduleMode.generateMergedAbcOfEs2AbcMock(parentEvent);
1567    if (errorEventCallback) {
1568      errorEventCallback(new Error('test error'));
1569    }
1570    await sleep(100);
1571    expect(stub.calledWith('Error: test error')).to.be.true;
1572    triggerAsyncStub.restore();
1573    stub.restore();
1574  });
1575
1576  mocha.it('13-3: test the error message of generateMergedAbcOfEs2Abc handle error', function () {
1577    this.rollup.build();
1578    const moduleMode = new ModuleModeMock(this.rollup);
1579    const triggerAsyncStub = sinon.stub(moduleMode, 'triggerAsync').throws(new Error('Execution failed'));
1580    const stub = sinon.stub(moduleMode, 'throwArkTsCompilerError');
1581    try {
1582      let parentEvent = undefined;
1583      moduleMode.generateMergedAbcOfEs2AbcMock(parentEvent);
1584    } catch (e) {
1585    }
1586    expect(stub.calledWith('ArkTS:ERROR Failed to execute es2abc.\nError message: Error: Execution failed\n')).to.be.true;
1587    triggerAsyncStub.restore();
1588    stub.restore();
1589  });
1590
1591  mocha.it('14-1: test the error message of filterModulesByHashJson', function () {
1592    this.rollup.build();
1593    const moduleMode = new ModuleModeMock(this.rollup);
1594    let existsSyncStub = sinon.stub(fs, 'existsSync');
1595    let readFileSyncStub = sinon.stub(fs, 'readFileSync');
1596    let stub = sinon.stub(moduleMode, 'throwArkTsCompilerError');
1597    moduleMode.moduleInfos = new Map([
1598      ['moduleKey', { cacheFilePath: 'test' }]
1599    ]);
1600    existsSyncStub.callsFake((path) => {
1601      if (path === moduleMode.hashJsonFilePath) {
1602        return true;
1603      }
1604      return false;
1605    });
1606    readFileSyncStub.withArgs(moduleMode.hashJsonFilePath).returns(JSON.stringify({}));
1607    try {
1608      moduleMode.filterModulesByHashJsonMock();
1609    } catch (e) {
1610    }
1611    expect(stub.calledWithMatch(
1612      `ArkTS:INTERNAL ERROR: Failed to get module cache abc from test in incremental build.` +
1613      `Please try to rebuild the project.`)).to.be.true;
1614    existsSyncStub.restore();
1615    readFileSyncStub.restore();
1616    stub.restore();
1617  });
1618
1619  mocha.it('15-1: test the error message of mergeProtoToAbc', function () {
1620    this.rollup.build();
1621    const moduleMode = new ModuleMode(this.rollup);
1622    const execSyncStub = sinon.stub(childProcess, 'execSync').throws(new Error('Execution failed'));
1623    const stub = sinon.stub(moduleMode, 'throwArkTsCompilerError');
1624    moduleMode.mergeProtoToAbc();
1625    expect(stub.calledWithMatch('ArkTS:INTERNAL ERROR: Failed to merge proto file to abc.')).to.be.true;
1626    execSyncStub.restore();
1627    stub.restore();
1628  });
1629
1630  mocha.it('16-1: test the error message of invokeTs2AbcWorkersToGenProto', function () {
1631    this.rollup.build();
1632    const moduleMode = new ModuleMode(this.rollup);
1633    const stub = sinon.stub(moduleMode, 'throwArkTsCompilerError');
1634    const clusterStub = sinon.stub(cluster, 'fork');
1635    const fakeWorker = {
1636      on: sinon.stub()
1637    };
1638    clusterStub.returns(fakeWorker);
1639    const splittedModules = [{
1640      'test': ''
1641    }]
1642    try {
1643      fakeWorker.on.withArgs('message').callsFake((event, callback) => {
1644        callback({ data: 'error' });
1645      });
1646      moduleMode.invokeTs2AbcWorkersToGenProto(splittedModules)
1647    } catch (e) {
1648    }
1649    expect(stub.calledWith('ArkTS:ERROR Failed to execute ts2abc.')).to.be.true;
1650    clusterStub.restore();
1651    stub.restore();
1652  });
1653
1654  mocha.it('17-1: test the error message of processTs2abcWorkersToGenAbc', function () {
1655    this.rollup.build();
1656    const moduleMode = new ModuleMode(this.rollup);
1657    const stub = sinon.stub(moduleMode, 'throwArkTsCompilerError');
1658    const clusterStub = sinon.stub(cluster, 'on');
1659    const fakeWorker = {
1660      on: sinon.stub()
1661    };
1662    clusterStub.returns(fakeWorker);
1663    try {
1664      clusterStub.withArgs('exit').callsFake((event, callback) => {
1665        callback(fakeWorker, 1, null);
1666      });
1667      moduleMode.processTs2abcWorkersToGenAbc()
1668    } catch (e) {
1669    }
1670    expect(stub.calledWith('ArkTS:ERROR Failed to execute ts2abc')).to.be.true;
1671    clusterStub.restore();
1672    stub.restore();
1673  });
1674
1675  mocha.it('18-1: test generateCompileContext under build debug', function () {
1676    this.rollup.build();
1677    SourceMapGenerator.initInstance(this.rollup);
1678    this.rollup.mockCompileContextInfo();
1679    const moduleMode = new ModuleModeMock(this.rollup);
1680    moduleMode.generateCompileContextInfoMock(this.rollup);
1681    expect(moduleMode.checkGenerateCompileContextInfo(this.rollup) === true).to.be.true;
1682    SourceMapGenerator.cleanSourceMapObject();
1683  });
1684
1685  mocha.it('18-2: test generateCompileContext under build release', function () {
1686    this.rollup.build(RELEASE);
1687    SourceMapGenerator.initInstance(this.rollup);
1688    this.rollup.mockCompileContextInfo();
1689    const moduleMode = new ModuleModeMock(this.rollup);
1690    moduleMode.generateCompileContextInfoMock(this.rollup);
1691    expect(moduleMode.checkGenerateCompileContextInfo(this.rollup) === true).to.be.true;
1692    SourceMapGenerator.cleanSourceMapObject();
1693  });
1694
1695  mocha.it('18-3: test generateCompileContext under build preview', function () {
1696    this.rollup.preview();
1697    SourceMapGenerator.initInstance(this.rollup);
1698    this.rollup.mockCompileContextInfo();
1699    const moduleMode = new ModuleModeMock(this.rollup);
1700    moduleMode.generateCompileContextInfoMock(this.rollup);
1701    expect(moduleMode.checkGenerateCompileContextInfo(this.rollup) === true).to.be.true;
1702    SourceMapGenerator.cleanSourceMapObject();
1703  });
1704
1705  mocha.it('18-4: test generateCompileContext under build hotReload', function () {
1706    this.rollup.hotReload();
1707    SourceMapGenerator.initInstance(this.rollup);
1708    this.rollup.mockCompileContextInfo();
1709    const moduleMode = new ModuleModeMock(this.rollup);
1710    moduleMode.generateCompileContextInfoMock(this.rollup);
1711    expect(moduleMode.checkGenerateCompileContextInfo(this.rollup) === true).to.be.true;
1712    SourceMapGenerator.cleanSourceMapObject();
1713  });
1714  mocha.it('18-5: test generateCompileContext widget compile under build debug', function () {
1715    this.rollup.build();
1716    this.rollup.share.projectConfig.widgetCompile = true;
1717    SourceMapGenerator.initInstance(this.rollup);
1718    this.rollup.mockCompileContextInfo();
1719    const moduleMode = new ModuleModeMock(this.rollup);
1720    moduleMode.generateCompileContextInfoMock(this.rollup);
1721    expect(moduleMode.checkGenerateCompileContextInfo(this.rollup) === true).to.be.true;
1722    SourceMapGenerator.cleanSourceMapObject();
1723  });
1724
1725  mocha.it('18-6: test generateCompileContext widget compile under build release', function () {
1726    this.rollup.build(RELEASE);
1727    this.rollup.share.projectConfig.widgetCompile = true;
1728    SourceMapGenerator.initInstance(this.rollup);
1729    this.rollup.mockCompileContextInfo();
1730    const moduleMode = new ModuleModeMock(this.rollup);
1731    moduleMode.generateCompileContextInfoMock(this.rollup);
1732    expect(moduleMode.checkGenerateCompileContextInfo(this.rollup) === true).to.be.true;
1733    SourceMapGenerator.cleanSourceMapObject();
1734  });
1735
1736  mocha.it('18-7: test generateCompileContext widget compile under build preview', function () {
1737    this.rollup.preview();
1738    this.rollup.share.projectConfig.widgetCompile = true;
1739    SourceMapGenerator.initInstance(this.rollup);
1740    this.rollup.mockCompileContextInfo();
1741    const moduleMode = new ModuleModeMock(this.rollup);
1742    moduleMode.generateCompileContextInfoMock(this.rollup);
1743    expect(moduleMode.checkGenerateCompileContextInfo(this.rollup) === true).to.be.true;
1744    SourceMapGenerator.cleanSourceMapObject();
1745  });
1746
1747  mocha.it('18-8: test generateCompileContext widget compile under build hotReload', function () {
1748    this.rollup.hotReload();
1749    this.rollup.share.projectConfig.widgetCompile = true;
1750    SourceMapGenerator.initInstance(this.rollup);
1751    this.rollup.mockCompileContextInfo();
1752    const moduleMode = new ModuleModeMock(this.rollup);
1753    moduleMode.generateCompileContextInfoMock(this.rollup);
1754    expect(moduleMode.checkGenerateCompileContextInfo(this.rollup) === true).to.be.true;
1755    SourceMapGenerator.cleanSourceMapObject();
1756  });
1757
1758  mocha.it('18-9: test generateCompileContext has router map entries', function () {
1759    this.rollup.build();
1760    SourceMapGenerator.initInstance(this.rollup);
1761    this.rollup.mockCompileContextInfo();
1762    this.rollup.share.projectConfig.arkRouterMap = [
1763      {
1764        'ohmurl': '@normalized:N&&&har/src/main/ets/calc&'
1765      },
1766      {
1767        'ohmurl': '@normalized:N&&com.har.test&har/src/main/ets/test&1.0.0'
1768      }
1769    ];
1770    const moduleMode = new ModuleModeMock(this.rollup);
1771    moduleMode.generateCompileContextInfoMock(this.rollup);
1772    expect(moduleMode.checkGenerateCompileContextInfo(this.rollup) === true).to.be.true;
1773    SourceMapGenerator.cleanSourceMapObject();
1774  });
1775
1776  mocha.it('18-10: test generateCompileContext has declaration entries', function () {
1777    this.rollup.build();
1778    SourceMapGenerator.initInstance(this.rollup);
1779    this.rollup.mockCompileContextInfo();
1780    this.rollup.share.projectConfig.declarationEntry = [
1781        '@normalized:N&&&har/src/main/ets/MyWorker&',
1782        '@normalized:N&&com.har.test&har/src/main/ets/test&1.0.0'
1783    ];
1784    const moduleMode = new ModuleModeMock(this.rollup);
1785    moduleMode.generateCompileContextInfoMock(this.rollup);
1786    expect(moduleMode.checkGenerateCompileContextInfo(this.rollup) === true).to.be.true;
1787    SourceMapGenerator.cleanSourceMapObject();
1788  });
1789
1790  mocha.it('18-12: test generateCompileContext accurate update version', function () {
1791    this.rollup.build();
1792    SourceMapGenerator.initInstance(this.rollup);
1793    this.rollup.mockCompileContextInfo();
1794    this.rollup.share.projectConfig.declarationEntry = [
1795        '@normalized:N&&&har/src/main/ets/MyWorker&',
1796        '@normalized:N&&com.har.test&har/src/main/ets/test&1.0.0'
1797    ];
1798    this.rollup.share.projectConfig.updateVersionInfo = {
1799      "bytecodeHar": {
1800        "har1": "1.0.1",
1801        "har2": "2.0.0"
1802      }
1803    };
1804    const moduleMode: ModuleModeMock = new ModuleModeMock(this.rollup);
1805    moduleMode.generateCompileContextInfoMock(this.rollup);
1806    expect(moduleMode.checkGenerateCompileContextInfo(this.rollup) === true).to.be.true;
1807    SourceMapGenerator.cleanSourceMapObject();
1808  });
1809
1810  mocha.it('18-11: test generateCompileContext has not exist moduleId', function () {
1811    this.rollup.build();
1812    SourceMapGenerator.initInstance(this.rollup);
1813    this.rollup.mockCompileContextInfo();
1814    const moduleMode = new ModuleModeMock(this.rollup);
1815
1816    const logger = moduleMode.logger;
1817    const loggerStub = sinon.stub(logger, 'error');
1818    const red: string = '\u001b[31m';
1819    const reset: string = '\u001b[39m';
1820    const entryObjName:string = 'test';
1821    const moduleId:string = 'd:/test.ets';
1822    try {
1823      moduleMode.projectConfig.entryObj[entryObjName]=moduleId;
1824      moduleMode.projectConfig.cardEntryObj[entryObjName]=moduleId;
1825      moduleMode.generateCompileContextInfoMock(this.rollup);
1826    } catch (e) {
1827    }
1828
1829    expect(loggerStub.getCall(0).calledWith(red, `ArkTS:INTERNAL ERROR: Failed to find module info.\n` +
1830          `Error Message: Failed to find module info with '${moduleId}' from the context information.`, reset)).to.be.true;
1831
1832    loggerStub.restore();
1833    SourceMapGenerator.cleanSourceMapObject();
1834  });
1835});
1836