1/* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this 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 16import { ApiExtractor } from '../../../src/common/ApiExtractor'; 17import {assert} from 'chai'; 18import { readProjectPropertiesByCollectedPaths } from '../../../src/common/ApiReader'; 19import { NameGeneratorType } from '../../../src/generator/NameFactory'; 20 21function collectApi(apiPath: string): void { 22 clearAll(); 23 ApiExtractor.traverseApiFiles(apiPath, ApiExtractor.ApiType.API); 24} 25 26function clearAll(): void { 27 ApiExtractor.mPropertySet.clear(); 28 ApiExtractor.mSystemExportSet.clear(); 29} 30 31describe('test for ApiExtractor', function () { 32 describe('test for visitExport', function () { 33 it('export {ExportDeclarationClass1, ExportDeclarationClass2}', function () { 34 let exportDeclarationAst: string = 'test/ut/utils/apiTest_visitExport/exportDeclarationAst.d.ts'; 35 collectApi(exportDeclarationAst); 36 assert.strictEqual(ApiExtractor.mSystemExportSet.has('ExportDeclarationClass1'), true); 37 assert.strictEqual(ApiExtractor.mSystemExportSet.has('ExportDeclarationClass2'), true); 38 clearAll(); 39 }); 40 41 it('export {ExportDeclarationClass1 as class1, ExportDeclarationClass2} from `./exportDeclarationFrom`', 42 function () { 43 let exportDeclarationFromAst: string = 'test/ut/utils/apiTest_visitExport/exportDeclarationFrom.d.ts'; 44 collectApi(exportDeclarationFromAst); 45 assert.strictEqual(ApiExtractor.mSystemExportSet.has('ExportDeclarationClass1'), false); 46 assert.strictEqual(ApiExtractor.mSystemExportSet.has('class1'), true); 47 assert.strictEqual(ApiExtractor.mSystemExportSet.has('ExportDeclarationClass2'), true); 48 clearAll(); 49 }); 50 51 it('export {default as name1, ExportDeclarationClass2, exportName} from `./exportDefaultDeclarationAst`', 52 function () { 53 let exportDeclarationDefault: string = 'test/ut/utils/apiTest_visitExport/exportDeclarationDefault.d.ts'; 54 collectApi(exportDeclarationDefault); 55 assert.strictEqual(ApiExtractor.mSystemExportSet.has('default'), false); 56 assert.strictEqual(ApiExtractor.mSystemExportSet.has('name1'), true); 57 assert.strictEqual(ApiExtractor.mSystemExportSet.has('ExportDeclarationClass2'), true); 58 assert.strictEqual(ApiExtractor.mSystemExportSet.has('exportName'), true); 59 clearAll(); 60 }); 61 62 it('export {ExportDeclarationClass1 as exportName, ExportDeclarationClass2, ExportDeclarationClass3 as default}', 63 function () { 64 let exportDefaultDeclarationAst: string = 'test/ut/utils/apiTest_visitExport/exportDefaultDeclarationAst.d.ts'; 65 collectApi(exportDefaultDeclarationAst); 66 assert.strictEqual(ApiExtractor.mSystemExportSet.has('ExportDeclarationClass1'), false); 67 assert.strictEqual(ApiExtractor.mSystemExportSet.has('exportName'), true); 68 assert.strictEqual(ApiExtractor.mSystemExportSet.has('ExportDeclarationClass2'), true); 69 assert.strictEqual(ApiExtractor.mSystemExportSet.has('ExportDeclarationClass3'), false); 70 assert.strictEqual(ApiExtractor.mSystemExportSet.has('default'), true); 71 clearAll(); 72 }); 73 74 it('export * as name1', function () { 75 let exportAllAst: string = 'test/ut/utils/apiTest_visitExport/exportAll.d.ts'; 76 collectApi(exportAllAst); 77 assert.strictEqual(ApiExtractor.mSystemExportSet.has('name1'), true); 78 clearAll(); 79 }); 80 81 it('export * from `export*.ts`', function () { 82 let exportFile: string = 'test/ut/utils/apiTest_visitExport/export.d.ts'; 83 collectApi(exportFile); 84 assert.strictEqual(ApiExtractor.mSystemExportSet.size === 0, true); 85 assert.strictEqual(ApiExtractor.mPropertySet.size === 0, true); 86 clearAll(); 87 }); 88 89 it('doubleUnderscoreTest', function () { 90 let doubleUnderscoreTestAst: string = 'test/ut/utils/apiTest_visitExport/doubleUnderscoreTest.d.ts'; 91 collectApi(doubleUnderscoreTestAst); 92 assert.strictEqual(ApiExtractor.mPropertySet.has('__Admin'), true); 93 assert.strictEqual(ApiExtractor.mPropertySet.has('___Admin'), false); 94 assert.strictEqual(ApiExtractor.mPropertySet.has('__Moderator'), true); 95 assert.strictEqual(ApiExtractor.mPropertySet.has('___Moderator'), false); 96 assert.strictEqual(ApiExtractor.mPropertySet.has('__User'), true); 97 assert.strictEqual(ApiExtractor.mPropertySet.has('___User'), false); 98 assert.strictEqual(ApiExtractor.mPropertySet.has('__name'), true); 99 assert.strictEqual(ApiExtractor.mPropertySet.has('___name'), false); 100 assert.strictEqual(ApiExtractor.mPropertySet.has('__Admin'), true); 101 assert.strictEqual(ApiExtractor.mPropertySet.has('___Admin'), false); 102 assert.strictEqual(ApiExtractor.mPropertySet.has('__age'), true); 103 assert.strictEqual(ApiExtractor.mPropertySet.has('___age'), false); 104 assert.strictEqual(ApiExtractor.mPropertySet.has('__greet'), true); 105 assert.strictEqual(ApiExtractor.mPropertySet.has('___greet'), false); 106 assert.strictEqual(ApiExtractor.mPropertySet.has('__typeProp1'), true); 107 assert.strictEqual(ApiExtractor.mPropertySet.has('___typeProp1'), false); 108 assert.strictEqual(ApiExtractor.mPropertySet.has('__typeProp2'), true); 109 assert.strictEqual(ApiExtractor.mPropertySet.has('___typeProp2'), false); 110 assert.strictEqual(ApiExtractor.mPropertySet.has('__speak'), true); 111 assert.strictEqual(ApiExtractor.mPropertySet.has('___speak'), false); 112 assert.strictEqual(ApiExtractor.mPropertySet.has('__appName'), true); 113 assert.strictEqual(ApiExtractor.mPropertySet.has('___appName'), false); 114 assert.strictEqual(ApiExtractor.mPropertySet.has('__version'), true); 115 assert.strictEqual(ApiExtractor.mPropertySet.has('___version'), false); 116 assert.strictEqual(ApiExtractor.mPropertySet.has('__logDetails'), true); 117 assert.strictEqual(ApiExtractor.mPropertySet.has('___logDetails'), false); 118 clearAll(); 119 }); 120 }); 121 122 describe('test for visitPropertyAndName', function () { 123 it('Class Test', function () { 124 let filePath: string = 'test/ut/utils/apiTest_visitPropertyAndName/classTest.d.ts'; 125 collectApi(filePath); 126 assert.strictEqual(ApiExtractor.mSystemExportSet.has('TestClass1'), true); 127 assert.strictEqual(ApiExtractor.mSystemExportSet.has('TestClass2'), false); 128 assert.strictEqual(ApiExtractor.mSystemExportSet.has('AbstractClass'), false); 129 assert.strictEqual(ApiExtractor.mPropertySet.has('prop1'), true); 130 assert.strictEqual(ApiExtractor.mPropertySet.has('prop2'), true); 131 assert.strictEqual(ApiExtractor.mPropertySet.has('abstractProp'), true); 132 assert.strictEqual(ApiExtractor.mPropertySet.has('foo1'), true); 133 assert.strictEqual(ApiExtractor.mPropertySet.has('foo2'), true); 134 assert.strictEqual(ApiExtractor.mPropertySet.has('param1'), true); 135 assert.strictEqual(ApiExtractor.mPropertySet.has('param2'), false); 136 clearAll(); 137 }); 138 139 it('Interface Test', function () { 140 let filePath: string = 'test/ut/utils/apiTest_visitPropertyAndName/interfaceTest.d.ts'; 141 collectApi(filePath); 142 assert.strictEqual(ApiExtractor.mSystemExportSet.has('TestInterface1'), true); 143 assert.strictEqual(ApiExtractor.mSystemExportSet.has('TestInterface2'), false); 144 assert.strictEqual(ApiExtractor.mPropertySet.has('prop1'), true); 145 assert.strictEqual(ApiExtractor.mPropertySet.has('prop2'), true); 146 assert.strictEqual(ApiExtractor.mPropertySet.has('foo1'), true); 147 assert.strictEqual(ApiExtractor.mPropertySet.has('foo2'), true); 148 assert.strictEqual(ApiExtractor.mPropertySet.has('param1'), true); 149 assert.strictEqual(ApiExtractor.mPropertySet.has('param2'), false); 150 clearAll(); 151 }); 152 153 it('TypeLiteral Test', function () { 154 let filePath: string = 'test/ut/utils/apiTest_visitPropertyAndName/typeLiteralTest.d.ts'; 155 collectApi(filePath); 156 assert.strictEqual(ApiExtractor.mSystemExportSet.has('TestType1'), true); 157 assert.strictEqual(ApiExtractor.mSystemExportSet.has('TestType2'), false); 158 assert.strictEqual(ApiExtractor.mPropertySet.has('collectProp1'), true); 159 assert.strictEqual(ApiExtractor.mPropertySet.has('collectProp2'), true); 160 assert.strictEqual(ApiExtractor.mPropertySet.has('testFunc1'), true); 161 assert.strictEqual(ApiExtractor.mPropertySet.has('testFunc2'), true); 162 assert.strictEqual(ApiExtractor.mPropertySet.has('message1'), true); 163 assert.strictEqual(ApiExtractor.mPropertySet.has('message2'), false); 164 clearAll(); 165 }); 166 167 it('Enum Test', function () { 168 let filePath: string = 'test/ut/utils/apiTest_visitPropertyAndName/enumTest.d.ts'; 169 collectApi(filePath); 170 assert.strictEqual(ApiExtractor.mSystemExportSet.has('TestEnum1'), true); 171 assert.strictEqual(ApiExtractor.mSystemExportSet.has('TestEnum2'), false); 172 assert.strictEqual(ApiExtractor.mPropertySet.has('PARAM1'), true); 173 assert.strictEqual(ApiExtractor.mPropertySet.has('PARAM2'), true); 174 clearAll(); 175 }); 176 177 it('ObjectLiteral Test', function () { 178 let filePath: string = 'test/ut/utils/apiTest_visitPropertyAndName/objectLiteral.d.ts'; 179 collectApi(filePath); 180 assert.strictEqual(ApiExtractor.mSystemExportSet.has('obj1'), true); 181 assert.strictEqual(ApiExtractor.mSystemExportSet.has('obj2'), false); 182 assert.strictEqual(ApiExtractor.mPropertySet.has('prop1'), true); 183 assert.strictEqual(ApiExtractor.mPropertySet.has('prop2'), true); 184 assert.strictEqual(ApiExtractor.mPropertySet.has('prop3'), true); 185 assert.strictEqual(ApiExtractor.mPropertySet.has('prop4'), true); 186 assert.strictEqual(ApiExtractor.mPropertySet.has('innerProp1'), true); 187 assert.strictEqual(ApiExtractor.mPropertySet.has('innerProp2'), true); 188 assert.strictEqual(ApiExtractor.mPropertySet.has('innerProp3'), true); 189 assert.strictEqual(ApiExtractor.mPropertySet.has('innerProp4'), true); 190 clearAll(); 191 }); 192 193 it('Module Test', function () { 194 let filePath: string = 'test/ut/utils/apiTest_visitPropertyAndName/moduleTest.d.ts'; 195 collectApi(filePath); 196 assert.strictEqual(ApiExtractor.mSystemExportSet.has('ns1'), true); 197 assert.strictEqual(ApiExtractor.mSystemExportSet.has('ns2'), false); 198 assert.strictEqual(ApiExtractor.mPropertySet.has('TestClass1'), true); 199 assert.strictEqual(ApiExtractor.mPropertySet.has('TestInterface1'), true); 200 assert.strictEqual(ApiExtractor.mPropertySet.has('prop1'), true); 201 assert.strictEqual(ApiExtractor.mPropertySet.has('prop2'), true); 202 assert.strictEqual(ApiExtractor.mPropertySet.has('prop3'), true); 203 assert.strictEqual(ApiExtractor.mPropertySet.has('TestClass2'), false); 204 assert.strictEqual(ApiExtractor.mPropertySet.has('TestInterface2'), false); 205 assert.strictEqual(ApiExtractor.mPropertySet.has('prop4'), true); 206 assert.strictEqual(ApiExtractor.mPropertySet.has('prop5'), true); 207 clearAll(); 208 }); 209 }); 210 211 describe('test for visitProjectExport', function () { 212 const fileList: Set<string> = new Set([ 213 "test/ut/utils/module_exports_test/exportFile1.js", 214 "test/ut/utils/oh_modules/exportFile.js" 215 ]); 216 it('test for module.exports(property)', function () { 217 let projectAndLibs = readProjectPropertiesByCollectedPaths(fileList, 218 { 219 mNameObfuscation: { 220 mEnable: true, 221 mReservedProperties: [], 222 mRenameProperties: true, 223 mKeepStringProperty: false, 224 mNameGeneratorType: NameGeneratorType.ORDERED, 225 mReservedNames: [], 226 mReservedToplevelNames: [] 227 }, 228 mExportObfuscation: false, 229 mKeepFileSourceCode: { 230 mKeepSourceOfPaths: new Set(), 231 mkeepFilesAndDependencies: new Set(), 232 } 233 }, true); 234 let reservedProperties = projectAndLibs.exportNameAndPropSet == undefined? new Set<string> : projectAndLibs.exportNameAndPropSet; 235 let reservedExportNames = projectAndLibs.exportNameSet == undefined? new Set<string> : projectAndLibs.exportNameSet; 236 assert.strictEqual(reservedProperties.has('projectPropertyAssignment1'), true); 237 assert.strictEqual(reservedProperties.has('projectPropertyAssignment2'), true); 238 assert.strictEqual(reservedProperties.has('projectPropertyAssignment3'), true); 239 assert.strictEqual(reservedProperties.has('projectPropertyAssignment4'), true); 240 assert.strictEqual(reservedProperties.has('projectIndirectObj'), false); 241 assert.strictEqual(reservedProperties.has('indirectProp1'), true); 242 assert.strictEqual(reservedProperties.has('projectShorthand'), true); 243 assert.strictEqual(reservedProperties.has('projectShorthandProp'), true); 244 assert.strictEqual(reservedProperties.has('projectMethod1'), true); 245 assert.strictEqual(reservedProperties.has('projectMethod2'), true); 246 assert.strictEqual(reservedProperties.has('projectMethod3'), true); 247 assert.strictEqual(reservedProperties.has('projectGetProp1'), true); 248 assert.strictEqual(reservedProperties.has('projectGetProp2'), true); 249 assert.strictEqual(reservedProperties.has('projectGetProp3'), true); 250 assert.strictEqual(reservedProperties.has('projectSetProp1'), true); 251 assert.strictEqual(reservedProperties.has('projectSetProp2'), true); 252 assert.strictEqual(reservedProperties.has('projectSetProp3'), true); 253 assert.strictEqual(reservedProperties.has('projectExportElement1'), true); 254 assert.strictEqual(reservedProperties.has('projectExportElement2'), true); 255 assert.strictEqual(reservedProperties.has('indirectClass1'), false); 256 assert.strictEqual(reservedProperties.has('indirectProp2'), true); 257 assert.strictEqual(reservedProperties.has('projectExportElement3'), true); 258 assert.strictEqual(reservedProperties.has('indirectClass2'), false); 259 assert.strictEqual(reservedProperties.has('indirectProp3'), true); 260 assert.strictEqual(reservedProperties.has('projectExportElement4'), true); 261 assert.strictEqual(reservedProperties.has('indirectProp4'), true); 262 assert.strictEqual(reservedProperties.has('projectExportElement5'), true); 263 assert.strictEqual(reservedProperties.has('projectExportElement6'), true); 264 assert.strictEqual(reservedProperties.has('projectExportElement7'), true); 265 assert.strictEqual(reservedProperties.has('indirectClass3'), false); 266 assert.strictEqual(reservedProperties.has('indirectProp5'), true); 267 assert.strictEqual(reservedProperties.has('projectExportElement8'), true); 268 assert.strictEqual(reservedProperties.has('indirectClass4'), false); 269 assert.strictEqual(reservedProperties.has('indirectProp6'), true); 270 assert.strictEqual(reservedProperties.has('projectExportElement9'), true); 271 assert.strictEqual(reservedProperties.has('indirectProp7'), true); 272 assert.strictEqual(reservedProperties.has('ohPropertyAssignment1'), true); 273 assert.strictEqual(reservedProperties.has('ohPropertyAssignment2'), true); 274 assert.strictEqual(reservedProperties.has('ohPropertyAssignment3'), true); 275 assert.strictEqual(reservedProperties.has('ohPropertyAssignment4'), true); 276 assert.strictEqual(reservedProperties.has('ohIndirectObj'), false); 277 assert.strictEqual(reservedProperties.has('ohIndirectProp1'), true); 278 assert.strictEqual(reservedProperties.has('ohShorthand'), true); 279 assert.strictEqual(reservedProperties.has('ohShorthandProp'), true); 280 assert.strictEqual(reservedProperties.has('ohMethod1'), true); 281 assert.strictEqual(reservedProperties.has('ohMethod2'), true); 282 assert.strictEqual(reservedProperties.has('ohMethod3'), true); 283 assert.strictEqual(reservedProperties.has('ohGetProp1'), true); 284 assert.strictEqual(reservedProperties.has('ohGetProp2'), true); 285 assert.strictEqual(reservedProperties.has('ohGetProp3'), true); 286 assert.strictEqual(reservedProperties.has('ohSetProp1'), true); 287 assert.strictEqual(reservedProperties.has('ohSetProp2'), true); 288 assert.strictEqual(reservedProperties.has('ohSetProp3'), true); 289 assert.strictEqual(reservedProperties.has('ohExportElement1'), true); 290 assert.strictEqual(reservedProperties.has('ohExportElement2'), true); 291 assert.strictEqual(reservedProperties.has('ohIndirectClass1'), false); 292 assert.strictEqual(reservedProperties.has('ohIndirectProp2'), true); 293 assert.strictEqual(reservedProperties.has('ohExportElement3'), true); 294 assert.strictEqual(reservedProperties.has('ohIndirectClass2'), false); 295 assert.strictEqual(reservedProperties.has('ohIndirectProp3'), true); 296 assert.strictEqual(reservedProperties.has('ohExportElement4'), true); 297 assert.strictEqual(reservedProperties.has('ohIndirectProp4'), true); 298 assert.strictEqual(reservedProperties.has('ohExportElement5'), true); 299 assert.strictEqual(reservedProperties.has('ohExportElement6'), true); 300 assert.strictEqual(reservedProperties.has('ohExportElement7'), true); 301 assert.strictEqual(reservedProperties.has('ohIndirectClass3'), false); 302 assert.strictEqual(reservedProperties.has('ohIndirectProp5'), true); 303 assert.strictEqual(reservedProperties.has('ohExportElement8'), true); 304 assert.strictEqual(reservedProperties.has('ohIndirectClass4'), false); 305 assert.strictEqual(reservedProperties.has('ohIndirectProp6'), true); 306 assert.strictEqual(reservedExportNames.size === 0, true); 307 }); 308 309 it('test for module.exports(export)', function () { 310 let projectAndLibs = readProjectPropertiesByCollectedPaths(fileList, 311 { 312 mNameObfuscation: { 313 mEnable: true, 314 mReservedProperties: [], 315 mRenameProperties: false, 316 mKeepStringProperty: false, 317 mNameGeneratorType: NameGeneratorType.ORDERED, 318 mReservedNames: [], 319 mReservedToplevelNames: [] 320 }, 321 mExportObfuscation: true, 322 mKeepFileSourceCode: { 323 mKeepSourceOfPaths: new Set(), 324 mkeepFilesAndDependencies: new Set(["test/ut/utils/module_exports_test/exportFile3.js"]), 325 } 326 }, true); 327 let reservedProperties = projectAndLibs.exportNameAndPropSet == undefined? new Set<string> : projectAndLibs.exportNameAndPropSet; 328 let reservedExportNames = projectAndLibs.exportNameSet == undefined? new Set<string> : projectAndLibs.exportNameSet; 329 assert.strictEqual(reservedExportNames.has('projectPropertyAssignment1'), false); 330 assert.strictEqual(reservedExportNames.has('projectPropertyAssignment2'), false); 331 assert.strictEqual(reservedExportNames.has('projectPropertyAssignment3'), false); 332 assert.strictEqual(reservedExportNames.has('projectPropertyAssignment4'), false); 333 assert.strictEqual(reservedExportNames.has('projectIndirectObj'), false); 334 assert.strictEqual(reservedExportNames.has('indirectProp1'), false); 335 assert.strictEqual(reservedExportNames.has('projectShorthand'), false); 336 assert.strictEqual(reservedExportNames.has('projectShorthandProp'), false); 337 assert.strictEqual(reservedExportNames.has('projectMethod1'), false); 338 assert.strictEqual(reservedExportNames.has('projectMethod2'), false); 339 assert.strictEqual(reservedExportNames.has('projectMethod3'), false); 340 assert.strictEqual(reservedExportNames.has('projectGetProp1'), false); 341 assert.strictEqual(reservedExportNames.has('projectGetProp2'), false); 342 assert.strictEqual(reservedExportNames.has('projectGetProp3'), false); 343 assert.strictEqual(reservedExportNames.has('projectSetProp1'), false); 344 assert.strictEqual(reservedExportNames.has('projectSetProp2'), false); 345 assert.strictEqual(reservedExportNames.has('projectSetProp3'), false); 346 assert.strictEqual(reservedExportNames.has('projectExportElement1'), false); 347 assert.strictEqual(reservedExportNames.has('projectExportElement2'), false); 348 assert.strictEqual(reservedExportNames.has('indirectClass1'), false); 349 assert.strictEqual(reservedExportNames.has('indirectProp2'), false); 350 assert.strictEqual(reservedExportNames.has('projectExportElement3'), false); 351 assert.strictEqual(reservedExportNames.has('indirectClass2'), false); 352 assert.strictEqual(reservedExportNames.has('indirectProp3'), false); 353 assert.strictEqual(reservedExportNames.has('projectExportElement4'), false); 354 assert.strictEqual(reservedExportNames.has('indirectProp4'), false); 355 assert.strictEqual(reservedExportNames.has('projectExportElement5'), false); 356 assert.strictEqual(reservedExportNames.has('projectExportElement6'), false); 357 assert.strictEqual(reservedExportNames.has('projectExportElement7'), false); 358 assert.strictEqual(reservedExportNames.has('indirectClass3'), false); 359 assert.strictEqual(reservedExportNames.has('indirectProp5'), false); 360 assert.strictEqual(reservedExportNames.has('projectExportElement8'), false); 361 assert.strictEqual(reservedExportNames.has('indirectClass4'), false); 362 assert.strictEqual(reservedExportNames.has('indirectProp6'), false); 363 assert.strictEqual(reservedExportNames.has('projectExportElement9'), false); 364 assert.strictEqual(reservedExportNames.has('indirectProp7'), false); 365 assert.strictEqual(reservedExportNames.has('ohPropertyAssignment1'), true); 366 assert.strictEqual(reservedExportNames.has('ohPropertyAssignment2'), true); 367 assert.strictEqual(reservedExportNames.has('ohPropertyAssignment3'), true); 368 assert.strictEqual(reservedExportNames.has('ohPropertyAssignment4'), true); 369 assert.strictEqual(reservedExportNames.has('ohIndirectObj'), false); 370 assert.strictEqual(reservedExportNames.has('ohIndirectProp1'), false); 371 assert.strictEqual(reservedExportNames.has('ohShorthand'), true); 372 assert.strictEqual(reservedExportNames.has('ohShorthandProp'), false); 373 assert.strictEqual(reservedExportNames.has('ohMethod1'), true); 374 assert.strictEqual(reservedExportNames.has('ohMethod2'), true); 375 assert.strictEqual(reservedExportNames.has('ohMethod3'), true); 376 assert.strictEqual(reservedExportNames.has('ohGetProp1'), true); 377 assert.strictEqual(reservedExportNames.has('ohGetProp2'), true); 378 assert.strictEqual(reservedExportNames.has('ohGetProp3'), true); 379 assert.strictEqual(reservedExportNames.has('ohSetProp1'), true); 380 assert.strictEqual(reservedExportNames.has('ohSetProp2'), true); 381 assert.strictEqual(reservedExportNames.has('ohSetProp3'), true); 382 assert.strictEqual(reservedExportNames.has('ohExportElement1'), true); 383 assert.strictEqual(reservedExportNames.has('ohExportElement2'), true); 384 assert.strictEqual(reservedExportNames.has('ohIndirectClass1'), true); 385 assert.strictEqual(reservedExportNames.has('ohIndirectProp2'), false); 386 assert.strictEqual(reservedExportNames.has('ohExportElement3'), true); 387 assert.strictEqual(reservedExportNames.has('ohIndirectClass2'), false); 388 assert.strictEqual(reservedExportNames.has('ohIndirectProp3'), false); 389 assert.strictEqual(reservedExportNames.has('ohExportElement4'), true); 390 assert.strictEqual(reservedExportNames.has('ohIndirectProp4'), false); 391 assert.strictEqual(reservedExportNames.has('ohExportElement5'), true); 392 assert.strictEqual(reservedExportNames.has('ohExportElement6'), true); 393 assert.strictEqual(reservedExportNames.has('ohExportElement7'), true); 394 assert.strictEqual(reservedExportNames.has('ohIndirectClass3'), true); 395 assert.strictEqual(reservedExportNames.has('ohIndirectProp5'), false); 396 assert.strictEqual(reservedExportNames.has('ohExportElement8'), true); 397 assert.strictEqual(reservedExportNames.has('ohIndirectClass4'), false); 398 assert.strictEqual(reservedExportNames.has('ohIndirectProp6'), false); 399 assert.strictEqual(reservedExportNames.has('ohExportElement9'), true); 400 assert.strictEqual(reservedExportNames.has('ohIndirectProp7'), false); 401 assert.strictEqual(reservedProperties.size === 0, true); 402 }); 403 404 it('test for module.exports(property + export)', function () { 405 let projectAndLibs = readProjectPropertiesByCollectedPaths(fileList, 406 { 407 mNameObfuscation: { 408 mEnable: true, 409 mReservedProperties: [], 410 mRenameProperties: true, 411 mKeepStringProperty: false, 412 mNameGeneratorType: NameGeneratorType.ORDERED, 413 mReservedNames: [], 414 mReservedToplevelNames: [] 415 }, 416 mExportObfuscation: true, 417 mKeepFileSourceCode: { 418 mKeepSourceOfPaths: new Set(), 419 mkeepFilesAndDependencies: new Set(["test/ut/utils/module_exports_test/exportFile3.js"]), 420 } 421 }, true); 422 let reservedProperties = projectAndLibs.exportNameAndPropSet == undefined? new Set<string> : projectAndLibs.exportNameAndPropSet; 423 let reservedExportNames = projectAndLibs.exportNameSet == undefined? new Set<string> : projectAndLibs.exportNameSet; 424 assert.strictEqual(reservedProperties.has('projectPropertyAssignment1'), false); 425 assert.strictEqual(reservedProperties.has('projectPropertyAssignment2'), false); 426 assert.strictEqual(reservedProperties.has('projectPropertyAssignment3'), false); 427 assert.strictEqual(reservedProperties.has('projectPropertyAssignment4'), false); 428 assert.strictEqual(reservedProperties.has('projectIndirectObj'), false); 429 assert.strictEqual(reservedProperties.has('indirectProp1'), false); 430 assert.strictEqual(reservedProperties.has('projectShorthand'), false); 431 assert.strictEqual(reservedProperties.has('projectShorthandProp'), false); 432 assert.strictEqual(reservedProperties.has('projectMethod1'), false); 433 assert.strictEqual(reservedProperties.has('projectMethod2'), false); 434 assert.strictEqual(reservedProperties.has('projectMethod3'), false); 435 assert.strictEqual(reservedProperties.has('projectGetProp1'), false); 436 assert.strictEqual(reservedProperties.has('projectGetProp2'), false); 437 assert.strictEqual(reservedProperties.has('projectGetProp3'), false); 438 assert.strictEqual(reservedProperties.has('projectSetProp1'), false); 439 assert.strictEqual(reservedProperties.has('projectSetProp2'), false); 440 assert.strictEqual(reservedProperties.has('projectSetProp3'), false); 441 assert.strictEqual(reservedProperties.has('projectExportElement1'), false); 442 assert.strictEqual(reservedProperties.has('projectExportElement2'), false); 443 assert.strictEqual(reservedProperties.has('indirectClass1'), false); 444 assert.strictEqual(reservedProperties.has('indirectProp2'), false); 445 assert.strictEqual(reservedProperties.has('projectExportElement3'), false); 446 assert.strictEqual(reservedProperties.has('indirectClass2'), false); 447 assert.strictEqual(reservedProperties.has('indirectProp3'), false); 448 assert.strictEqual(reservedProperties.has('projectExportElement4'), false); 449 assert.strictEqual(reservedProperties.has('indirectProp4'), false); 450 assert.strictEqual(reservedProperties.has('projectExportElement5'), false); 451 assert.strictEqual(reservedProperties.has('projectExportElement6'), false); 452 assert.strictEqual(reservedProperties.has('projectExportElement7'), false); 453 assert.strictEqual(reservedProperties.has('indirectClass3'), false); 454 assert.strictEqual(reservedProperties.has('indirectProp5'), false); 455 assert.strictEqual(reservedProperties.has('projectExportElement8'), false); 456 assert.strictEqual(reservedProperties.has('indirectClass4'), false); 457 assert.strictEqual(reservedProperties.has('indirectProp6'), false); 458 assert.strictEqual(reservedProperties.has('projectExportElement9'), false); 459 assert.strictEqual(reservedProperties.has('indirectProp7'), false); 460 assert.strictEqual(reservedProperties.has('ohPropertyAssignment1'), true); 461 assert.strictEqual(reservedProperties.has('ohPropertyAssignment2'), true); 462 assert.strictEqual(reservedProperties.has('ohPropertyAssignment3'), true); 463 assert.strictEqual(reservedProperties.has('ohPropertyAssignment4'), true); 464 assert.strictEqual(reservedProperties.has('ohIndirectObj'), false); 465 assert.strictEqual(reservedProperties.has('ohIndirectProp1'), true); 466 assert.strictEqual(reservedProperties.has('ohShorthand'), true); 467 assert.strictEqual(reservedProperties.has('ohShorthandProp'), true); 468 assert.strictEqual(reservedProperties.has('ohMethod1'), true); 469 assert.strictEqual(reservedProperties.has('ohMethod2'), true); 470 assert.strictEqual(reservedProperties.has('ohMethod3'), true); 471 assert.strictEqual(reservedProperties.has('ohGetProp1'), true); 472 assert.strictEqual(reservedProperties.has('ohGetProp2'), true); 473 assert.strictEqual(reservedProperties.has('ohGetProp3'), true); 474 assert.strictEqual(reservedProperties.has('ohSetProp1'), true); 475 assert.strictEqual(reservedProperties.has('ohSetProp2'), true); 476 assert.strictEqual(reservedProperties.has('ohSetProp3'), true); 477 assert.strictEqual(reservedProperties.has('ohExportElement1'), true); 478 assert.strictEqual(reservedProperties.has('ohExportElement2'), true); 479 assert.strictEqual(reservedProperties.has('ohIndirectClass1'), false); 480 assert.strictEqual(reservedProperties.has('ohIndirectProp2'), true); 481 assert.strictEqual(reservedProperties.has('ohExportElement3'), true); 482 assert.strictEqual(reservedProperties.has('ohIndirectClass2'), false); 483 assert.strictEqual(reservedProperties.has('ohIndirectProp3'), true); 484 assert.strictEqual(reservedProperties.has('ohExportElement4'), true); 485 assert.strictEqual(reservedProperties.has('ohIndirectProp4'), true); 486 assert.strictEqual(reservedProperties.has('ohExportElement5'), true); 487 assert.strictEqual(reservedProperties.has('ohExportElement6'), true); 488 assert.strictEqual(reservedProperties.has('ohExportElement7'), true); 489 assert.strictEqual(reservedProperties.has('ohIndirectClass3'), false); 490 assert.strictEqual(reservedProperties.has('ohIndirectProp5'), true); 491 assert.strictEqual(reservedProperties.has('ohExportElement8'), true); 492 assert.strictEqual(reservedProperties.has('ohIndirectClass4'), false); 493 assert.strictEqual(reservedProperties.has('ohIndirectProp6'), true); 494 assert.strictEqual(reservedExportNames.has('projectPropertyAssignment1'), false); 495 assert.strictEqual(reservedExportNames.has('projectPropertyAssignment2'), false); 496 assert.strictEqual(reservedExportNames.has('projectPropertyAssignment3'), false); 497 assert.strictEqual(reservedExportNames.has('projectPropertyAssignment4'), false); 498 assert.strictEqual(reservedExportNames.has('projectIndirectObj'), false); 499 assert.strictEqual(reservedExportNames.has('indirectProp1'), false); 500 assert.strictEqual(reservedExportNames.has('projectShorthand'), false); 501 assert.strictEqual(reservedExportNames.has('projectShorthandProp'), false); 502 assert.strictEqual(reservedExportNames.has('projectMethod1'), false); 503 assert.strictEqual(reservedExportNames.has('projectMethod2'), false); 504 assert.strictEqual(reservedExportNames.has('projectMethod3'), false); 505 assert.strictEqual(reservedExportNames.has('projectGetProp1'), false); 506 assert.strictEqual(reservedExportNames.has('projectGetProp2'), false); 507 assert.strictEqual(reservedExportNames.has('projectGetProp3'), false); 508 assert.strictEqual(reservedExportNames.has('projectSetProp1'), false); 509 assert.strictEqual(reservedExportNames.has('projectSetProp2'), false); 510 assert.strictEqual(reservedExportNames.has('projectSetProp3'), false); 511 assert.strictEqual(reservedExportNames.has('projectExportElement1'), false); 512 assert.strictEqual(reservedExportNames.has('projectExportElement2'), false); 513 assert.strictEqual(reservedExportNames.has('indirectClass1'), false); 514 assert.strictEqual(reservedExportNames.has('indirectProp2'), false); 515 assert.strictEqual(reservedExportNames.has('projectExportElement3'), false); 516 assert.strictEqual(reservedExportNames.has('indirectClass2'), false); 517 assert.strictEqual(reservedExportNames.has('indirectProp3'), false); 518 assert.strictEqual(reservedExportNames.has('projectExportElement4'), false); 519 assert.strictEqual(reservedExportNames.has('indirectProp4'), false); 520 assert.strictEqual(reservedExportNames.has('projectExportElement5'), false); 521 assert.strictEqual(reservedExportNames.has('projectExportElement6'), false); 522 assert.strictEqual(reservedExportNames.has('projectExportElement7'), false); 523 assert.strictEqual(reservedExportNames.has('indirectClass3'), false); 524 assert.strictEqual(reservedExportNames.has('indirectProp5'), false); 525 assert.strictEqual(reservedExportNames.has('projectExportElement8'), false); 526 assert.strictEqual(reservedExportNames.has('indirectClass4'), false); 527 assert.strictEqual(reservedExportNames.has('indirectProp6'), false); 528 assert.strictEqual(reservedExportNames.has('projectExportElement9'), false); 529 assert.strictEqual(reservedExportNames.has('indirectProp7'), false); 530 assert.strictEqual(reservedExportNames.has('ohPropertyAssignment1'), true); 531 assert.strictEqual(reservedExportNames.has('ohPropertyAssignment2'), true); 532 assert.strictEqual(reservedExportNames.has('ohPropertyAssignment3'), true); 533 assert.strictEqual(reservedExportNames.has('ohPropertyAssignment4'), true); 534 assert.strictEqual(reservedExportNames.has('ohIndirectObj'), false); 535 assert.strictEqual(reservedExportNames.has('ohIndirectProp1'), false); 536 assert.strictEqual(reservedExportNames.has('ohShorthand'), true); 537 assert.strictEqual(reservedExportNames.has('ohShorthandProp'), false); 538 assert.strictEqual(reservedExportNames.has('ohMethod1'), true); 539 assert.strictEqual(reservedExportNames.has('ohMethod2'), true); 540 assert.strictEqual(reservedExportNames.has('ohMethod3'), true); 541 assert.strictEqual(reservedExportNames.has('ohGetProp1'), true); 542 assert.strictEqual(reservedExportNames.has('ohGetProp2'), true); 543 assert.strictEqual(reservedExportNames.has('ohGetProp3'), true); 544 assert.strictEqual(reservedExportNames.has('ohSetProp1'), true); 545 assert.strictEqual(reservedExportNames.has('ohSetProp2'), true); 546 assert.strictEqual(reservedExportNames.has('ohSetProp3'), true); 547 assert.strictEqual(reservedExportNames.has('ohExportElement1'), true); 548 assert.strictEqual(reservedExportNames.has('ohExportElement2'), true); 549 assert.strictEqual(reservedExportNames.has('ohIndirectClass1'), true); 550 assert.strictEqual(reservedExportNames.has('ohIndirectProp2'), false); 551 assert.strictEqual(reservedExportNames.has('ohExportElement3'), true); 552 assert.strictEqual(reservedExportNames.has('ohIndirectClass2'), false); 553 assert.strictEqual(reservedExportNames.has('ohIndirectProp3'), false); 554 assert.strictEqual(reservedExportNames.has('ohExportElement4'), true); 555 assert.strictEqual(reservedExportNames.has('ohIndirectProp4'), false); 556 assert.strictEqual(reservedExportNames.has('ohExportElement5'), true); 557 assert.strictEqual(reservedExportNames.has('ohExportElement6'), true); 558 assert.strictEqual(reservedExportNames.has('ohExportElement7'), true); 559 assert.strictEqual(reservedExportNames.has('ohIndirectClass3'), true); 560 assert.strictEqual(reservedExportNames.has('ohIndirectProp5'), false); 561 assert.strictEqual(reservedExportNames.has('ohExportElement8'), true); 562 assert.strictEqual(reservedExportNames.has('ohIndirectClass4'), false); 563 assert.strictEqual(reservedExportNames.has('ohIndirectProp6'), false); 564 assert.strictEqual(reservedExportNames.has('ohExportElement9'), true); 565 assert.strictEqual(reservedExportNames.has('ohIndirectProp7'), false); 566 }); 567 }); 568});