• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 { readProjectPropertiesByCollectedPaths } from '../../../src/common/ApiReader';
17import { assert } from 'chai';
18import { NameGeneratorType } from '../../../src/generator/NameFactory';
19
20describe('test for ApiReader', function () {
21  describe('test for readProjectPropertiesByCollectedPaths', function () {
22    const fileList: Set<string> = new Set([
23      "test/ut/utils/apiTest_readProjectPropertiesByCollectedPaths/block_enum_test.ts",
24      "test/ut/utils/apiTest_readProjectPropertiesByCollectedPaths/enum_test.ts",
25      "test/ut/utils/apiTest_readProjectPropertiesByCollectedPaths/export_enum_test.ts",
26      "test/ut/utils/apiTest_readProjectPropertiesByCollectedPaths/namespace_enum_test.ts"
27    ]);
28
29    it('-enable-export-obfuscation + -enable-property-obfuscation', function () {
30      let projectAndLibs: {projectAndLibsReservedProperties: string[]; libExportNames: string[]};
31      projectAndLibs = readProjectPropertiesByCollectedPaths(fileList,
32        {
33          mNameObfuscation: {
34            mEnable: true,
35            mReservedProperties: [],
36            mRenameProperties: true,
37            mKeepStringProperty: false,
38            mNameGeneratorType: NameGeneratorType.ORDERED,
39            mReservedNames: [],
40            mReservedToplevelNames: []
41          },
42          mExportObfuscation: true,
43          mKeepFileSourceCode: {
44            mKeepSourceOfPaths: new Set(),
45            mkeepFilesAndDependencies: new Set(),
46          }
47        }, true);
48      let reservedProperties = projectAndLibs.projectAndLibsReservedProperties;
49      assert.strictEqual(reservedProperties.includes('BLOCK_PARAM1'), true);
50      assert.strictEqual(reservedProperties.includes('BLOCK_PARAM2'), true);
51      assert.strictEqual(reservedProperties.includes('ENUM_PARAM1'), true);
52      assert.strictEqual(reservedProperties.includes('ENUM_PARAM2'), true);
53      assert.strictEqual(reservedProperties.includes('NS_PARAM1'), true);
54      assert.strictEqual(reservedProperties.includes('NS_PARAM2'), true);
55      assert.strictEqual(reservedProperties.includes('EXPORT_PARAM1'), true);
56      assert.strictEqual(reservedProperties.includes('EXPORT_PARAM2'), true);
57    });
58
59    it('-enable-property-obfuscation', function () {
60      let projectAndLibs: {projectAndLibsReservedProperties: string[]; libExportNames: string[]};
61      projectAndLibs = readProjectPropertiesByCollectedPaths(fileList,
62        {
63          mNameObfuscation: {
64            mEnable: true,
65            mReservedProperties: [],
66            mRenameProperties: true,
67            mKeepStringProperty: false,
68            mNameGeneratorType: NameGeneratorType.ORDERED,
69            mReservedNames: [],
70            mReservedToplevelNames: []
71          },
72          mExportObfuscation: false,
73          mKeepFileSourceCode: {
74            mKeepSourceOfPaths: new Set(),
75            mkeepFilesAndDependencies: new Set(),
76          }
77        }, true);
78      let reservedProperties = projectAndLibs.projectAndLibsReservedProperties;
79      assert.strictEqual(reservedProperties.includes('BLOCK_PARAM1'), true);
80      assert.strictEqual(reservedProperties.includes('BLOCK_PARAM2'), true);
81      assert.strictEqual(reservedProperties.includes('ENUM_PARAM1'), true);
82      assert.strictEqual(reservedProperties.includes('ENUM_PARAM2'), true);
83      assert.strictEqual(reservedProperties.includes('NS_PARAM1'), true);
84      assert.strictEqual(reservedProperties.includes('NS_PARAM2'), true);
85      assert.strictEqual(reservedProperties.includes('EXPORT_PARAM1'), true);
86      assert.strictEqual(reservedProperties.includes('EXPORT_PARAM2'), true);
87    });
88
89    it('-enable-export-obfuscation', function () {
90      let projectAndLibs: {projectAndLibsReservedProperties: string[]; libExportNames: string[]};
91      projectAndLibs = readProjectPropertiesByCollectedPaths(fileList,
92        {
93          mNameObfuscation: {
94            mEnable: true,
95            mReservedProperties: [],
96            mRenameProperties: false,
97            mKeepStringProperty: false,
98            mNameGeneratorType: NameGeneratorType.ORDERED,
99            mReservedNames: [],
100            mReservedToplevelNames: []
101          },
102          mExportObfuscation: true,
103          mKeepFileSourceCode: {
104            mKeepSourceOfPaths: new Set(),
105            mkeepFilesAndDependencies: new Set(),
106          }
107        }, true);
108      let reservedProperties = projectAndLibs.projectAndLibsReservedProperties;
109      assert.strictEqual(reservedProperties.includes('BLOCK_PARAM1'), false);
110      assert.strictEqual(reservedProperties.includes('BLOCK_PARAM2'), false);
111      assert.strictEqual(reservedProperties.includes('ENUM_PARAM1'), false);
112      assert.strictEqual(reservedProperties.includes('ENUM_PARAM2'), false);
113      assert.strictEqual(reservedProperties.includes('NS_PARAM1'), false);
114      assert.strictEqual(reservedProperties.includes('NS_PARAM2'), false);
115      assert.strictEqual(reservedProperties.includes('EXPORT_PARAM1'), false);
116      assert.strictEqual(reservedProperties.includes('EXPORT_PARAM2'), false);
117    });
118  });
119
120  describe('test for -keep and export obfuscation', function () {
121    const fileList: Set<string> = new Set([
122      "test/ut/utils/keep_export/exportFile1.ts"
123    ]);
124
125    it('-enable-export-obfuscation', function () {
126      let projectAndLibs: {projectAndLibsReservedProperties: string[]; libExportNames: string[]};
127      projectAndLibs = readProjectPropertiesByCollectedPaths(fileList,
128        {
129          mNameObfuscation: {
130            mEnable: true,
131            mReservedProperties: [],
132            mRenameProperties: false,
133            mKeepStringProperty: false,
134            mNameGeneratorType: NameGeneratorType.ORDERED,
135            mReservedNames: [],
136            mReservedToplevelNames: []
137          },
138          mExportObfuscation: true,
139          mKeepFileSourceCode: {
140            mKeepSourceOfPaths: new Set(),
141            mkeepFilesAndDependencies: new Set([
142              "test/ut/utils/keep_export/exportFile1.ts"
143            ]),
144          }
145        }, true);
146      let reservedNames = projectAndLibs.libExportNames;
147      let reservedProperties = projectAndLibs.projectAndLibsReservedProperties;
148      assert.strictEqual(reservedNames.includes('TestClass'), true);
149      assert.strictEqual(reservedNames.includes('prop1'), false);
150      assert.strictEqual(reservedNames.includes('prop2'), false);
151      assert.strictEqual(reservedNames.includes('objProp'), false);
152      assert.strictEqual(reservedNames.includes('innerProp2'), false);
153      assert.strictEqual(reservedNames.includes('var1'), true);
154      assert.strictEqual(reservedNames.includes('var2'), false);
155      assert.strictEqual(reservedNames.includes('foo'), true);
156      assert.strictEqual(reservedNames.includes('ns'), false);
157      assert.strictEqual(reservedNames.includes('var3'), true);
158      assert.strictEqual(reservedNames.includes('nsFunction'), true);
159      assert.strictEqual(reservedNames.includes('TestInterface'), true);
160      assert.strictEqual(reservedNames.includes('feature1'), false);
161      assert.strictEqual(reservedNames.includes('feature2'), false);
162      assert.strictEqual(reservedNames.includes('TestClass2'), false);
163      assert.strictEqual(reservedNames.includes('prop4'), false);
164      assert.strictEqual(reservedNames.includes('propObj'), false);
165      assert.strictEqual(reservedNames.includes('innerProp'), false);
166      assert.strictEqual(reservedNames.includes('TestClass3'), false);
167      assert.strictEqual(reservedNames.includes('exportProp1'), false);
168      assert.strictEqual(reservedNames.includes('exportPropObj'), false);
169      assert.strictEqual(reservedNames.includes('exportInnerProp'), false);
170      assert.strictEqual(reservedNames.includes('v2'), true);
171      assert.strictEqual(reservedNames.includes('default'), true);
172      assert.strictEqual(reservedNames.includes('t3'), true);
173      assert.strictEqual(reservedNames.includes('outterElement1'), true);
174      assert.strictEqual(reservedNames.includes('outterElement2'), true);
175      assert.strictEqual(reservedNames.includes('o2'), true);
176      assert.strictEqual(reservedProperties.length == 0, true);
177    });
178
179    it('-enable-property-obfuscation', function () {
180      let projectAndLibs: {projectAndLibsReservedProperties: string[]; libExportNames: string[]};
181      projectAndLibs = readProjectPropertiesByCollectedPaths(fileList,
182        {
183          mNameObfuscation: {
184            mEnable: true,
185            mReservedProperties: [],
186            mRenameProperties: true,
187            mKeepStringProperty: false,
188            mNameGeneratorType: NameGeneratorType.ORDERED,
189            mReservedNames: [],
190            mReservedToplevelNames: []
191          },
192          mExportObfuscation: false,
193          mKeepFileSourceCode: {
194            mKeepSourceOfPaths: new Set(),
195            mkeepFilesAndDependencies: new Set([
196              "test/ut/utils/keep_export/exportFile1.ts"
197            ]),
198          }
199        }, true);
200      let reservedNames = projectAndLibs.libExportNames;
201      let reservedProperties = projectAndLibs.projectAndLibsReservedProperties;
202      assert.strictEqual(reservedProperties.includes('TestClass'), true);
203      assert.strictEqual(reservedProperties.includes('prop1'), true);
204      assert.strictEqual(reservedProperties.includes('prop2'), true);
205      assert.strictEqual(reservedProperties.includes('objProp'), true);
206      assert.strictEqual(reservedProperties.includes('innerProp2'), true);
207      assert.strictEqual(reservedProperties.includes('var1'), true);
208      assert.strictEqual(reservedProperties.includes('var2'), false);
209      assert.strictEqual(reservedProperties.includes('foo'), true);
210      assert.strictEqual(reservedProperties.includes('ns'), false);
211      assert.strictEqual(reservedProperties.includes('var3'), true);
212      assert.strictEqual(reservedProperties.includes('nsFunction'), true);
213      assert.strictEqual(reservedProperties.includes('TestInterface'), true);
214      assert.strictEqual(reservedProperties.includes('feature1'), true);
215      assert.strictEqual(reservedProperties.includes('feature2'), true);
216      assert.strictEqual(reservedProperties.includes('TestClass2'), false);
217      assert.strictEqual(reservedProperties.includes('prop4'), false);
218      assert.strictEqual(reservedProperties.includes('propObj'), false);
219      assert.strictEqual(reservedProperties.includes('innerProp'), false);
220      assert.strictEqual(reservedProperties.includes('TestClass3'), false);
221      assert.strictEqual(reservedProperties.includes('exportProp1'), true);
222      assert.strictEqual(reservedProperties.includes('exportPropObj'), true);
223      assert.strictEqual(reservedProperties.includes('exportInnerProp'), true);
224      assert.strictEqual(reservedProperties.includes('v2'), true);
225      assert.strictEqual(reservedProperties.includes('default'), true);
226      assert.strictEqual(reservedProperties.includes('t3'), true);
227      assert.strictEqual(reservedProperties.includes('outterElement1'), true);
228      assert.strictEqual(reservedProperties.includes('outterElement2'), false);
229      assert.strictEqual(reservedProperties.includes('o2'), true);
230      assert.strictEqual(reservedNames.length == 0, true);
231    });
232
233    it('-enable-toplevel-obfuscation', function () {
234      let projectAndLibs: {projectAndLibsReservedProperties: string[]; libExportNames: string[]};
235      projectAndLibs = readProjectPropertiesByCollectedPaths(fileList,
236        {
237          mNameObfuscation: {
238            mEnable: true,
239            mReservedProperties: [],
240            mRenameProperties: false,
241            mKeepStringProperty: false,
242            mTopLevel: true,
243            mNameGeneratorType: NameGeneratorType.ORDERED,
244            mReservedNames: [],
245            mReservedToplevelNames: []
246          },
247          mExportObfuscation: false,
248          mKeepFileSourceCode: {
249            mKeepSourceOfPaths: new Set(),
250            mkeepFilesAndDependencies: new Set([
251              "test/ut/utils/keep_export/exportFile1.ts"
252            ]),
253          }
254        }, true);
255      let reservedNames = projectAndLibs.libExportNames;
256      let reservedProperties = projectAndLibs.projectAndLibsReservedProperties;
257      assert.strictEqual(reservedProperties.length == 0, true);
258      assert.strictEqual(reservedNames.length == 0, true);
259    });
260
261    it('-enable-toplevel-obfuscation -enable-export-obfuscation', function () {
262      let projectAndLibs: {projectAndLibsReservedProperties: string[]; libExportNames: string[]};
263      projectAndLibs = readProjectPropertiesByCollectedPaths(fileList,
264        {
265          mNameObfuscation: {
266            mEnable: true,
267            mReservedProperties: [],
268            mRenameProperties: false,
269            mKeepStringProperty: false,
270            mTopLevel: true,
271            mNameGeneratorType: NameGeneratorType.ORDERED,
272            mReservedNames: [],
273            mReservedToplevelNames: []
274          },
275          mExportObfuscation: true,
276          mKeepFileSourceCode: {
277            mKeepSourceOfPaths: new Set(),
278            mkeepFilesAndDependencies: new Set([
279              "test/ut/utils/keep_export/exportFile1.ts"
280            ]),
281          }
282        }, true);
283      let reservedNames = projectAndLibs.libExportNames;
284      let reservedProperties = projectAndLibs.projectAndLibsReservedProperties;
285      assert.strictEqual(reservedNames.includes('TestClass'), true);
286      assert.strictEqual(reservedNames.includes('prop1'), false);
287      assert.strictEqual(reservedNames.includes('prop2'), false);
288      assert.strictEqual(reservedNames.includes('objProp'), false);
289      assert.strictEqual(reservedNames.includes('innerProp2'), false);
290      assert.strictEqual(reservedNames.includes('var1'), true);
291      assert.strictEqual(reservedNames.includes('var2'), false);
292      assert.strictEqual(reservedNames.includes('foo'), true);
293      assert.strictEqual(reservedNames.includes('ns'), false);
294      assert.strictEqual(reservedNames.includes('var3'), true);
295      assert.strictEqual(reservedNames.includes('nsFunction'), true);
296      assert.strictEqual(reservedNames.includes('TestInterface'), true);
297      assert.strictEqual(reservedNames.includes('feature1'), false);
298      assert.strictEqual(reservedNames.includes('feature2'), false);
299      assert.strictEqual(reservedNames.includes('TestClass2'), false);
300      assert.strictEqual(reservedNames.includes('prop4'), false);
301      assert.strictEqual(reservedNames.includes('propObj'), false);
302      assert.strictEqual(reservedNames.includes('innerProp'), false);
303      assert.strictEqual(reservedNames.includes('TestClass3'), false);
304      assert.strictEqual(reservedNames.includes('exportProp1'), false);
305      assert.strictEqual(reservedNames.includes('exportPropObj'), false);
306      assert.strictEqual(reservedNames.includes('exportInnerProp'), false);
307      assert.strictEqual(reservedNames.includes('v2'), true);
308      assert.strictEqual(reservedNames.includes('default'), true);
309      assert.strictEqual(reservedNames.includes('t3'), true);
310      assert.strictEqual(reservedNames.includes('outterElement1'), true);
311      assert.strictEqual(reservedNames.includes('outterElement2'), true);
312      assert.strictEqual(reservedNames.includes('o2'), true);
313      assert.strictEqual(reservedProperties.length == 0, true);
314    });
315
316    it('-enable-property-obfuscation -enable-export-obfuscation', function () {
317      let projectAndLibs: {projectAndLibsReservedProperties: string[]; libExportNames: string[]};
318      projectAndLibs = readProjectPropertiesByCollectedPaths(fileList,
319        {
320          mNameObfuscation: {
321            mEnable: true,
322            mReservedProperties: [],
323            mRenameProperties: true,
324            mKeepStringProperty: false,
325            mTopLevel: false,
326            mNameGeneratorType: NameGeneratorType.ORDERED,
327            mReservedNames: [],
328            mReservedToplevelNames: []
329          },
330          mExportObfuscation: true,
331          mKeepFileSourceCode: {
332            mKeepSourceOfPaths: new Set(),
333            mkeepFilesAndDependencies: new Set([
334              "test/ut/utils/keep_export/exportFile1.ts"
335            ]),
336          }
337        }, true);
338      let reservedNames = projectAndLibs.libExportNames;
339      let reservedProperties = projectAndLibs.projectAndLibsReservedProperties;
340      assert.strictEqual(reservedNames.includes('TestClass'), true);
341      assert.strictEqual(reservedNames.includes('prop1'), false);
342      assert.strictEqual(reservedNames.includes('prop2'), false);
343      assert.strictEqual(reservedNames.includes('objProp'), false);
344      assert.strictEqual(reservedNames.includes('innerProp2'), false);
345      assert.strictEqual(reservedNames.includes('var1'), true);
346      assert.strictEqual(reservedNames.includes('var2'), false);
347      assert.strictEqual(reservedNames.includes('foo'), true);
348      assert.strictEqual(reservedNames.includes('ns'), false);
349      assert.strictEqual(reservedNames.includes('var3'), true);
350      assert.strictEqual(reservedNames.includes('nsFunction'), true);
351      assert.strictEqual(reservedNames.includes('TestInterface'), true);
352      assert.strictEqual(reservedNames.includes('feature1'), false);
353      assert.strictEqual(reservedNames.includes('feature2'), false);
354      assert.strictEqual(reservedNames.includes('TestClass2'), false);
355      assert.strictEqual(reservedNames.includes('prop4'), false);
356      assert.strictEqual(reservedNames.includes('propObj'), false);
357      assert.strictEqual(reservedNames.includes('innerProp'), false);
358      assert.strictEqual(reservedNames.includes('TestClass3'), false);
359      assert.strictEqual(reservedNames.includes('exportProp1'), false);
360      assert.strictEqual(reservedNames.includes('exportPropObj'), false);
361      assert.strictEqual(reservedNames.includes('exportInnerProp'), false);
362      assert.strictEqual(reservedNames.includes('v2'), true);
363      assert.strictEqual(reservedNames.includes('default'), true);
364      assert.strictEqual(reservedNames.includes('t3'), true);
365      assert.strictEqual(reservedNames.includes('outterElement1'), true);
366      assert.strictEqual(reservedNames.includes('outterElement2'), true);
367      assert.strictEqual(reservedNames.includes('o2'), true);
368      assert.strictEqual(reservedProperties.includes('TestClass'), true);
369      assert.strictEqual(reservedProperties.includes('prop1'), true);
370      assert.strictEqual(reservedProperties.includes('prop2'), true);
371      assert.strictEqual(reservedProperties.includes('objProp'), true);
372      assert.strictEqual(reservedProperties.includes('innerProp2'), true);
373      assert.strictEqual(reservedProperties.includes('var1'), true);
374      assert.strictEqual(reservedProperties.includes('var2'), false);
375      assert.strictEqual(reservedProperties.includes('foo'), true);
376      assert.strictEqual(reservedProperties.includes('ns'), false);
377      assert.strictEqual(reservedProperties.includes('var3'), true);
378      assert.strictEqual(reservedProperties.includes('nsFunction'), true);
379      assert.strictEqual(reservedProperties.includes('TestInterface'), true);
380      assert.strictEqual(reservedProperties.includes('feature1'), true);
381      assert.strictEqual(reservedProperties.includes('feature2'), true);
382      assert.strictEqual(reservedProperties.includes('TestClass2'), false);
383      assert.strictEqual(reservedProperties.includes('prop4'), false);
384      assert.strictEqual(reservedProperties.includes('propObj'), false);
385      assert.strictEqual(reservedProperties.includes('innerProp'), false);
386      assert.strictEqual(reservedProperties.includes('TestClass3'), false);
387      assert.strictEqual(reservedProperties.includes('exportProp1'), true);
388      assert.strictEqual(reservedProperties.includes('exportPropObj'), true);
389      assert.strictEqual(reservedProperties.includes('exportInnerProp'), true);
390      assert.strictEqual(reservedProperties.includes('v2'), true);
391      assert.strictEqual(reservedProperties.includes('default'), true);
392      assert.strictEqual(reservedProperties.includes('t3'), true);
393      assert.strictEqual(reservedProperties.includes('outterElement1'), true);
394      assert.strictEqual(reservedProperties.includes('outterElement2'), false);
395      assert.strictEqual(reservedProperties.includes('o2'), true);
396    });
397
398    it('-enable-property-obfuscation -enable-export-obfuscation -enable-toplevel-obfuscation', function () {
399      let projectAndLibs: {projectAndLibsReservedProperties: string[]; libExportNames: string[]};
400      projectAndLibs = readProjectPropertiesByCollectedPaths(fileList,
401        {
402          mNameObfuscation: {
403            mEnable: true,
404            mReservedProperties: [],
405            mRenameProperties: true,
406            mKeepStringProperty: false,
407            mTopLevel: true,
408            mNameGeneratorType: NameGeneratorType.ORDERED,
409            mReservedNames: [],
410            mReservedToplevelNames: []
411          },
412          mExportObfuscation: true,
413          mKeepFileSourceCode: {
414            mKeepSourceOfPaths: new Set(),
415            mkeepFilesAndDependencies: new Set([
416              "test/ut/utils/keep_export/exportFile1.ts"
417            ]),
418          }
419        }, true);
420      let reservedNames = projectAndLibs.libExportNames;
421      let reservedProperties = projectAndLibs.projectAndLibsReservedProperties;
422      assert.strictEqual(reservedNames.includes('TestClass'), true);
423      assert.strictEqual(reservedNames.includes('prop1'), false);
424      assert.strictEqual(reservedNames.includes('prop2'), false);
425      assert.strictEqual(reservedNames.includes('objProp'), false);
426      assert.strictEqual(reservedNames.includes('innerProp2'), false);
427      assert.strictEqual(reservedNames.includes('var1'), true);
428      assert.strictEqual(reservedNames.includes('var2'), false);
429      assert.strictEqual(reservedNames.includes('foo'), true);
430      assert.strictEqual(reservedNames.includes('ns'), false);
431      assert.strictEqual(reservedNames.includes('var3'), true);
432      assert.strictEqual(reservedNames.includes('nsFunction'), true);
433      assert.strictEqual(reservedNames.includes('TestInterface'), true);
434      assert.strictEqual(reservedNames.includes('feature1'), false);
435      assert.strictEqual(reservedNames.includes('feature2'), false);
436      assert.strictEqual(reservedNames.includes('TestClass2'), false);
437      assert.strictEqual(reservedNames.includes('prop4'), false);
438      assert.strictEqual(reservedNames.includes('propObj'), false);
439      assert.strictEqual(reservedNames.includes('innerProp'), false);
440      assert.strictEqual(reservedNames.includes('TestClass3'), false);
441      assert.strictEqual(reservedNames.includes('exportProp1'), false);
442      assert.strictEqual(reservedNames.includes('exportPropObj'), false);
443      assert.strictEqual(reservedNames.includes('exportInnerProp'), false);
444      assert.strictEqual(reservedNames.includes('v2'), true);
445      assert.strictEqual(reservedNames.includes('default'), true);
446      assert.strictEqual(reservedNames.includes('t3'), true);
447      assert.strictEqual(reservedNames.includes('outterElement1'), true);
448      assert.strictEqual(reservedNames.includes('outterElement2'), true);
449      assert.strictEqual(reservedNames.includes('o2'), true);
450      assert.strictEqual(reservedProperties.includes('TestClass'), true);
451      assert.strictEqual(reservedProperties.includes('prop1'), true);
452      assert.strictEqual(reservedProperties.includes('prop2'), true);
453      assert.strictEqual(reservedProperties.includes('objProp'), true);
454      assert.strictEqual(reservedProperties.includes('innerProp2'), true);
455      assert.strictEqual(reservedProperties.includes('var1'), true);
456      assert.strictEqual(reservedProperties.includes('var2'), false);
457      assert.strictEqual(reservedProperties.includes('foo'), true);
458      assert.strictEqual(reservedProperties.includes('ns'), false);
459      assert.strictEqual(reservedProperties.includes('var3'), true);
460      assert.strictEqual(reservedProperties.includes('nsFunction'), true);
461      assert.strictEqual(reservedProperties.includes('TestInterface'), true);
462      assert.strictEqual(reservedProperties.includes('feature1'), true);
463      assert.strictEqual(reservedProperties.includes('feature2'), true);
464      assert.strictEqual(reservedProperties.includes('TestClass2'), false);
465      assert.strictEqual(reservedProperties.includes('prop4'), false);
466      assert.strictEqual(reservedProperties.includes('propObj'), false);
467      assert.strictEqual(reservedProperties.includes('innerProp'), false);
468      assert.strictEqual(reservedProperties.includes('TestClass3'), false);
469      assert.strictEqual(reservedProperties.includes('exportProp1'), true);
470      assert.strictEqual(reservedProperties.includes('exportPropObj'), true);
471      assert.strictEqual(reservedProperties.includes('exportInnerProp'), true);
472      assert.strictEqual(reservedProperties.includes('v2'), true);
473      assert.strictEqual(reservedProperties.includes('default'), true);
474      assert.strictEqual(reservedProperties.includes('t3'), true);
475      assert.strictEqual(reservedProperties.includes('outterElement1'), true);
476      assert.strictEqual(reservedProperties.includes('outterElement2'), false);
477      assert.strictEqual(reservedProperties.includes('o2'), true);
478    });
479
480    it('oh_modules test', function () {
481      const ohModulesFileList: Set<string> = new Set([
482        "test/ut/utils/oh_modules/exportFile1.ts"
483      ]);
484      let projectAndLibs: {projectAndLibsReservedProperties: string[]; libExportNames: string[]};
485      projectAndLibs = readProjectPropertiesByCollectedPaths(ohModulesFileList,
486        {
487          mNameObfuscation: {
488            mEnable: true,
489            mReservedProperties: [],
490            mRenameProperties: true,
491            mKeepStringProperty: false,
492            mTopLevel: true,
493            mNameGeneratorType: NameGeneratorType.ORDERED,
494            mReservedNames: [],
495            mReservedToplevelNames: []
496          },
497          mExportObfuscation: true,
498          mKeepFileSourceCode: {
499            mKeepSourceOfPaths: new Set(),
500            mkeepFilesAndDependencies: new Set(),
501          }
502        }, true);
503      let reservedNames = projectAndLibs.libExportNames;
504      let reservedProperties = projectAndLibs.projectAndLibsReservedProperties;
505      assert.strictEqual(reservedNames.includes('ModuleNs'), true);
506      assert.strictEqual(reservedNames.includes('nsProp1'), true);
507      assert.strictEqual(reservedNames.includes('nsFunc'), true);
508      assert.strictEqual(reservedNames.includes('ModuleClass'), true);
509      assert.strictEqual(reservedNames.includes('classProp1'), false);
510      assert.strictEqual(reservedNames.includes('objProp'), false);
511      assert.strictEqual(reservedNames.includes('innerProp'), false);
512      assert.strictEqual(reservedNames.includes('TestClass'), false);
513      assert.strictEqual(reservedNames.includes('prop4'), false);
514      assert.strictEqual(reservedNames.includes('propObj'), false);
515      assert.strictEqual(reservedNames.includes('innerProp1'), false);
516      assert.strictEqual(reservedNames.includes('TestClass2'), true);
517      assert.strictEqual(reservedNames.includes('prop1'), false);
518      assert.strictEqual(reservedNames.includes('objProp1'), false);
519      assert.strictEqual(reservedNames.includes('innerProp2'), false);
520      assert.strictEqual(reservedNames.includes('default'), true);
521      assert.strictEqual(reservedNames.includes('mc'), true);
522      assert.strictEqual(reservedNames.includes('otherElement1'), true);
523      assert.strictEqual(reservedNames.includes('otherElement2'), true);
524      assert.strictEqual(reservedNames.includes('o2'), true);
525      assert.strictEqual(reservedProperties.includes('ModuleNs'), false);
526      assert.strictEqual(reservedProperties.includes('nsProp1'), true);
527      assert.strictEqual(reservedProperties.includes('nsFunc'), true);
528      assert.strictEqual(reservedProperties.includes('ModuleClass'), false);
529      assert.strictEqual(reservedProperties.includes('classProp1'), true);
530      assert.strictEqual(reservedProperties.includes('objProp'), true);
531      assert.strictEqual(reservedProperties.includes('innerProp'), true);
532      assert.strictEqual(reservedProperties.includes('TestClass'), false);
533      assert.strictEqual(reservedProperties.includes('prop4'), false);
534      assert.strictEqual(reservedProperties.includes('propObj'), false);
535      assert.strictEqual(reservedProperties.includes('innerProp1'), false);
536      assert.strictEqual(reservedProperties.includes('TestClass2'), true);
537      assert.strictEqual(reservedProperties.includes('prop1'), true);
538      assert.strictEqual(reservedProperties.includes('objProp1'), true);
539      assert.strictEqual(reservedProperties.includes('innerProp2'), true);
540      assert.strictEqual(reservedProperties.includes('default'), true);
541      assert.strictEqual(reservedProperties.includes('mc'), true);
542      assert.strictEqual(reservedProperties.includes('otherElement1'), true);
543      assert.strictEqual(reservedProperties.includes('otherElement2'), false);
544      assert.strictEqual(reservedProperties.includes('o2'), true);
545    });
546  });
547});