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