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