13af6ab5fSopenharmony_ci/* 23af6ab5fSopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 33af6ab5fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 43af6ab5fSopenharmony_ci * you may not use this file except in compliance with the License. 53af6ab5fSopenharmony_ci * You may obtain a copy of the License at 63af6ab5fSopenharmony_ci * 73af6ab5fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 83af6ab5fSopenharmony_ci * 93af6ab5fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 103af6ab5fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 113af6ab5fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 123af6ab5fSopenharmony_ci * See the License for the specific language governing permissions and 133af6ab5fSopenharmony_ci * limitations under the License. 143af6ab5fSopenharmony_ci */ 153af6ab5fSopenharmony_ci 163af6ab5fSopenharmony_ciimport { describe, it } from 'mocha'; 173af6ab5fSopenharmony_ciimport { TransformerManager } from '../../../src/transformers/TransformerManager'; 183af6ab5fSopenharmony_ciimport { assert, expect } from 'chai'; 193af6ab5fSopenharmony_ciimport { FileUtils } from '../../../src/utils/FileUtils'; 203af6ab5fSopenharmony_ciimport path from 'path'; 213af6ab5fSopenharmony_ciimport { IOptions } from '../../../src/configs/IOptions'; 223af6ab5fSopenharmony_ciimport fs from 'fs'; 233af6ab5fSopenharmony_ciimport ts, { 243af6ab5fSopenharmony_ci TransformerFactory, 253af6ab5fSopenharmony_ci Node, 263af6ab5fSopenharmony_ci TransformationContext, 273af6ab5fSopenharmony_ci factory, 283af6ab5fSopenharmony_ci SyntaxKind, 293af6ab5fSopenharmony_ci CallExpression, 303af6ab5fSopenharmony_ci Expression, 313af6ab5fSopenharmony_ci CompilerOptions, 323af6ab5fSopenharmony_ci EmitHelper, 333af6ab5fSopenharmony_ci EmitHint, 343af6ab5fSopenharmony_ci FunctionDeclaration, 353af6ab5fSopenharmony_ci Identifier, 363af6ab5fSopenharmony_ci Statement, 373af6ab5fSopenharmony_ci SourceFile, 383af6ab5fSopenharmony_ci VariableDeclaration, 393af6ab5fSopenharmony_ci} from 'typescript'; 403af6ab5fSopenharmony_ciimport { 413af6ab5fSopenharmony_ci getMangleCompletePath, 423af6ab5fSopenharmony_ci handleNormalizedOhmUrl, 433af6ab5fSopenharmony_ci globalFileNameMangledTable, 443af6ab5fSopenharmony_ci clearCaches, 453af6ab5fSopenharmony_ci isInOhModules, 463af6ab5fSopenharmony_ci isLocalDependencyOhmUrlForTest, 473af6ab5fSopenharmony_ci mangleOhmUrl, 483af6ab5fSopenharmony_ci getMangleIncompletePathForTest, 493af6ab5fSopenharmony_ci} from '../../../src/transformers/rename/RenameFileNameTransformer'; 503af6ab5fSopenharmony_ciimport type { ProjectInfo } from '../../../src/common/type'; 513af6ab5fSopenharmony_ciimport { OhmUrlStatus } from '../../../src/configs/INameObfuscationOption'; 523af6ab5fSopenharmony_ciimport secharmony from '../../../src/transformers/rename/RenameFileNameTransformer'; 533af6ab5fSopenharmony_ciimport { ArkObfuscator } from '../../../src/ArkObfuscator'; 543af6ab5fSopenharmony_ci 553af6ab5fSopenharmony_ciconst renameFileNameModule = require('../../../src/transformers/rename/RenameFileNameTransformer'); 563af6ab5fSopenharmony_ciconst obfuscator = require('../../../src/ArkObfuscator'); 573af6ab5fSopenharmony_ci 583af6ab5fSopenharmony_cidescribe('Tester Cases for <RenameFileNameTransformer>.', function () { 593af6ab5fSopenharmony_ci let options; 603af6ab5fSopenharmony_ci let context: TransformationContext = { 613af6ab5fSopenharmony_ci requestEmitHelper: function (helper: EmitHelper): void {}, 623af6ab5fSopenharmony_ci readEmitHelpers: function (): EmitHelper[] | undefined { 633af6ab5fSopenharmony_ci return undefined; 643af6ab5fSopenharmony_ci }, 653af6ab5fSopenharmony_ci enableSubstitution: function (kind: SyntaxKind): void {}, 663af6ab5fSopenharmony_ci isSubstitutionEnabled: function (node: Node): boolean { 673af6ab5fSopenharmony_ci throw new Error('Function not implemented.'); 683af6ab5fSopenharmony_ci }, 693af6ab5fSopenharmony_ci onSubstituteNode: function (hint: EmitHint, node: Node): Node { 703af6ab5fSopenharmony_ci throw new Error('Function not implemented.'); 713af6ab5fSopenharmony_ci }, 723af6ab5fSopenharmony_ci enableEmitNotification: function (kind: SyntaxKind): void {}, 733af6ab5fSopenharmony_ci isEmitNotificationEnabled: function (node: Node): boolean { 743af6ab5fSopenharmony_ci throw new Error('Function not implemented.'); 753af6ab5fSopenharmony_ci }, 763af6ab5fSopenharmony_ci onEmitNode: function (hint: EmitHint, node: Node, emitCallback: (hint: EmitHint, node: Node) => void): void { 773af6ab5fSopenharmony_ci throw new Error('Function not implemented.'); 783af6ab5fSopenharmony_ci }, 793af6ab5fSopenharmony_ci factory: ts.factory, 803af6ab5fSopenharmony_ci getCompilerOptions: function (): CompilerOptions { 813af6ab5fSopenharmony_ci throw new Error('Function not implemented.'); 823af6ab5fSopenharmony_ci }, 833af6ab5fSopenharmony_ci startLexicalEnvironment: function (): void {}, 843af6ab5fSopenharmony_ci suspendLexicalEnvironment: function (): void {}, 853af6ab5fSopenharmony_ci resumeLexicalEnvironment: function (): void {}, 863af6ab5fSopenharmony_ci endLexicalEnvironment: function (): Statement[] | undefined { 873af6ab5fSopenharmony_ci return undefined; 883af6ab5fSopenharmony_ci }, 893af6ab5fSopenharmony_ci hoistFunctionDeclaration: function (node: FunctionDeclaration): void {}, 903af6ab5fSopenharmony_ci hoistVariableDeclaration: function (node: Identifier): void {} 913af6ab5fSopenharmony_ci }; 923af6ab5fSopenharmony_ci let node: Node; 933af6ab5fSopenharmony_ci 943af6ab5fSopenharmony_ci describe('Tester Cases for <createRenameFileNameFactory>.', function () { 953af6ab5fSopenharmony_ci let projectInfo; 963af6ab5fSopenharmony_ci 973af6ab5fSopenharmony_ci beforeEach(() => { 983af6ab5fSopenharmony_ci options = { 993af6ab5fSopenharmony_ci mRenameFileName: { 1003af6ab5fSopenharmony_ci mEnable: true, 1013af6ab5fSopenharmony_ci mNameGeneratorType: 1, 1023af6ab5fSopenharmony_ci mReservedFileNames: ['file1.ts', 'file2.ts'], 1033af6ab5fSopenharmony_ci mUniversalReservedFileNames: [], 1043af6ab5fSopenharmony_ci mReservedProperties: ['1'], 1053af6ab5fSopenharmony_ci mReservedToplevelNames: ['2'], 1063af6ab5fSopenharmony_ci } 1073af6ab5fSopenharmony_ci }; 1083af6ab5fSopenharmony_ci projectInfo = { 1093af6ab5fSopenharmony_ci projectRootPath: '/Users/test/project', 1103af6ab5fSopenharmony_ci packageDir: 'src/ohmodules', 1113af6ab5fSopenharmony_ci localPackageSet: new Set<string>(), 1123af6ab5fSopenharmony_ci useNormalized: true, 1133af6ab5fSopenharmony_ci useTsHar: true, 1143af6ab5fSopenharmony_ci }; 1153af6ab5fSopenharmony_ci }); 1163af6ab5fSopenharmony_ci 1173af6ab5fSopenharmony_ci it('Tester: Test initialization of config in api createRenameFileNameFactory', function () { 1183af6ab5fSopenharmony_ci let mCustomProfiles: IOptions | undefined = FileUtils.readFileAsJson(path.join(__dirname, "obfuscate_filename_config.json")); 1193af6ab5fSopenharmony_ci assert.strictEqual(mCustomProfiles !== undefined, true); 1203af6ab5fSopenharmony_ci let mTransformers: TransformerFactory<Node>[] = []; 1213af6ab5fSopenharmony_ci if (mCustomProfiles) { 1223af6ab5fSopenharmony_ci mTransformers = new TransformerManager(mCustomProfiles).getTransformers(); 1233af6ab5fSopenharmony_ci } 1243af6ab5fSopenharmony_ci const originalPath = 'D:/workplace/src/ets/entryability/EntryAbility.ts'; 1253af6ab5fSopenharmony_ci const mangledPath = getMangleCompletePath(originalPath); 1263af6ab5fSopenharmony_ci assert.strictEqual(mangledPath === 'D:/workplace/src/ets/a/b.ts', true); 1273af6ab5fSopenharmony_ci }); 1283af6ab5fSopenharmony_ci 1293af6ab5fSopenharmony_ci it('should return null if mEnable is false', () => { 1303af6ab5fSopenharmony_ci options.mRenameFileName.mEnable = false; 1313af6ab5fSopenharmony_ci const result = secharmony.transformerPlugin.createTransformerFactory(options); 1323af6ab5fSopenharmony_ci expect(result).to.be.null; 1333af6ab5fSopenharmony_ci }); 1343af6ab5fSopenharmony_ci 1353af6ab5fSopenharmony_ci it('should return null if profile is null', () => { 1363af6ab5fSopenharmony_ci options = {}; 1373af6ab5fSopenharmony_ci const result = secharmony.transformerPlugin.createTransformerFactory(options); 1383af6ab5fSopenharmony_ci expect(result).to.be.null; 1393af6ab5fSopenharmony_ci }); 1403af6ab5fSopenharmony_ci 1413af6ab5fSopenharmony_ci it('should create globalFileNameMangledTable if not exist', () => { 1423af6ab5fSopenharmony_ci const transformerFactory = secharmony.transformerPlugin.createTransformerFactory(options); 1433af6ab5fSopenharmony_ci clearCaches(); 1443af6ab5fSopenharmony_ci renameFileNameModule.globalFileNameMangledTable = undefined; 1453af6ab5fSopenharmony_ci const sourcefile = factory.createSourceFile([],factory.createToken(SyntaxKind.EndOfFileToken),0); 1463af6ab5fSopenharmony_ci const transformer = transformerFactory(context); 1473af6ab5fSopenharmony_ci const node = transformer(sourcefile); 1483af6ab5fSopenharmony_ci expect(globalFileNameMangledTable).to.not.be.undefined; 1493af6ab5fSopenharmony_ci }) 1503af6ab5fSopenharmony_ci 1513af6ab5fSopenharmony_ci it('should rename the node.fileName if it is a sourcefile and not in OhModules', () => { 1523af6ab5fSopenharmony_ci ArkObfuscator.projectInfo = projectInfo; 1533af6ab5fSopenharmony_ci obfuscator.orignalFilePathForSearching = '/Users/test/project/src/othermodules/somefile.js'; 1543af6ab5fSopenharmony_ci options.mRenameFileName.mReservedFileNames = ["D:", "workplace", "src", "ets"]; 1553af6ab5fSopenharmony_ci const transformerFactory = secharmony.transformerPlugin.createTransformerFactory(options); 1563af6ab5fSopenharmony_ci clearCaches(); 1573af6ab5fSopenharmony_ci const sourcefile = factory.createSourceFile([], factory.createToken(SyntaxKind.EndOfFileToken), 0); 1583af6ab5fSopenharmony_ci sourcefile.fileName = 'D:/workplace/src/ets/entryability/EntryAbility.ts'; 1593af6ab5fSopenharmony_ci const transformer = transformerFactory(context); 1603af6ab5fSopenharmony_ci const node = transformer(sourcefile); 1613af6ab5fSopenharmony_ci expect((node as SourceFile).fileName).to.equal('D:/workplace/src/ets/a/b.ts'); 1623af6ab5fSopenharmony_ci }) 1633af6ab5fSopenharmony_ci 1643af6ab5fSopenharmony_ci it('should update declaration if node is ImportDeclaration', () => { 1653af6ab5fSopenharmony_ci const transformerFactory = secharmony.transformerPlugin.createTransformerFactory(options); 1663af6ab5fSopenharmony_ci clearCaches(); 1673af6ab5fSopenharmony_ci const importdeclaration = factory.createImportDeclaration( 1683af6ab5fSopenharmony_ci undefined, undefined, factory.createStringLiteral('ModuleInfo'), undefined); 1693af6ab5fSopenharmony_ci const transformer = transformerFactory(context); 1703af6ab5fSopenharmony_ci const node = transformer(importdeclaration); 1713af6ab5fSopenharmony_ci expect(node).to.equal(importdeclaration); 1723af6ab5fSopenharmony_ci }) 1733af6ab5fSopenharmony_ci 1743af6ab5fSopenharmony_ci it('should update declaration if node is ExportDeclaration', () => { 1753af6ab5fSopenharmony_ci const transformerFactory = secharmony.transformerPlugin.createTransformerFactory(options); 1763af6ab5fSopenharmony_ci clearCaches(); 1773af6ab5fSopenharmony_ci const exportdeclaration = factory.createExportDeclaration( 1783af6ab5fSopenharmony_ci undefined, true, undefined, factory.createStringLiteral('ModuleInfo'), undefined); 1793af6ab5fSopenharmony_ci const transformer = transformerFactory(context); 1803af6ab5fSopenharmony_ci const node = transformer(exportdeclaration); 1813af6ab5fSopenharmony_ci expect(node).to.equal(exportdeclaration); 1823af6ab5fSopenharmony_ci }) 1833af6ab5fSopenharmony_ci 1843af6ab5fSopenharmony_ci it('should try update dynamic import if node is ImportCall', () => { 1853af6ab5fSopenharmony_ci const transformerFactory = secharmony.transformerPlugin.createTransformerFactory(options); 1863af6ab5fSopenharmony_ci clearCaches(); 1873af6ab5fSopenharmony_ci const sourceCode = `let module = import('./test');`; 1883af6ab5fSopenharmony_ci let sourcefile = ts.createSourceFile("getNode.ts", sourceCode, ts.ScriptTarget.ES2022,false); 1893af6ab5fSopenharmony_ci const transformer = transformerFactory(context); 1903af6ab5fSopenharmony_ci const node = transformer(sourcefile); 1913af6ab5fSopenharmony_ci expect(node).to.equal(sourcefile); 1923af6ab5fSopenharmony_ci }); 1933af6ab5fSopenharmony_ci 1943af6ab5fSopenharmony_ci it('should update call expression if renamefilename', () => { 1953af6ab5fSopenharmony_ci options.mRenameFileName.mOhmUrlStatus = OhmUrlStatus.NORMALIZED; 1963af6ab5fSopenharmony_ci const transformerFactory = secharmony.transformerPlugin.createTransformerFactory(options); 1973af6ab5fSopenharmony_ci clearCaches(); 1983af6ab5fSopenharmony_ci const sourceCode = `let module = import('@normalized:N&&&entry/src/main/ets/pages/test&');`; 1993af6ab5fSopenharmony_ci let sourcefile = ts.createSourceFile("getNode.ts", sourceCode, ts.ScriptTarget.ES2022,false); 2003af6ab5fSopenharmony_ci const transformer = transformerFactory(context); 2013af6ab5fSopenharmony_ci const node = transformer(sourcefile); 2023af6ab5fSopenharmony_ci expect(node).to.not.equal(sourcefile); 2033af6ab5fSopenharmony_ci }); 2043af6ab5fSopenharmony_ci }); 2053af6ab5fSopenharmony_ci 2063af6ab5fSopenharmony_ci describe('Tester Cases for <handleNormalizedOhmUrl>.', function () { 2073af6ab5fSopenharmony_ci beforeEach(() => { 2083af6ab5fSopenharmony_ci options = { 2093af6ab5fSopenharmony_ci mRenameFileName: { 2103af6ab5fSopenharmony_ci mEnable: true, 2113af6ab5fSopenharmony_ci mNameGeneratorType: 1, 2123af6ab5fSopenharmony_ci mReservedFileNames: ["D:", "workplace", "src", "ets"], 2133af6ab5fSopenharmony_ci mUniversalReservedFileNames: [], 2143af6ab5fSopenharmony_ci mOhmUrlStatus: OhmUrlStatus.NONE, 2153af6ab5fSopenharmony_ci } 2163af6ab5fSopenharmony_ci }; 2173af6ab5fSopenharmony_ci }); 2183af6ab5fSopenharmony_ci 2193af6ab5fSopenharmony_ci it('should return pakName if needPkgName is true', () => { 2203af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options)(context); 2213af6ab5fSopenharmony_ci let ohmUrl1 = '@normalized:N&&&entry/src/main/ets/pages/test&'; 2223af6ab5fSopenharmony_ci let ohmUrl2 = '@normalized:N&&&library/Index&1.0.0'; 2233af6ab5fSopenharmony_ci let ohmUrl3 = '@normalized:N&&&@abc/a/src/main/ets/pages/test&'; 2243af6ab5fSopenharmony_ci 2253af6ab5fSopenharmony_ci let pkgname1 = handleNormalizedOhmUrl(ohmUrl1, true); 2263af6ab5fSopenharmony_ci let pkgname2 = handleNormalizedOhmUrl(ohmUrl2, true); 2273af6ab5fSopenharmony_ci let pkgname3 = handleNormalizedOhmUrl(ohmUrl3, true); 2283af6ab5fSopenharmony_ci 2293af6ab5fSopenharmony_ci assert.strictEqual(pkgname1, 'entry'); 2303af6ab5fSopenharmony_ci assert.strictEqual(pkgname2, 'library'); 2313af6ab5fSopenharmony_ci assert.strictEqual(pkgname3, '@abc/a'); 2323af6ab5fSopenharmony_ci }); 2333af6ab5fSopenharmony_ci 2343af6ab5fSopenharmony_ci it('should correctly normalize OhmUrl', () => { 2353af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options)(context); 2363af6ab5fSopenharmony_ci clearCaches(); 2373af6ab5fSopenharmony_ci let ohmUrl1 = '@normalized:N&&&entry/src/main/ets/pages/test&'; 2383af6ab5fSopenharmony_ci let ohmUrl2 = '@normalized:N&&&library/Index&1.0.0'; 2393af6ab5fSopenharmony_ci let ohmUrl3 = '@normalized:N&&&@abc/a/src/main/ets/pages/test&'; 2403af6ab5fSopenharmony_ci 2413af6ab5fSopenharmony_ci let mangledOhmurl1 = handleNormalizedOhmUrl(ohmUrl1); 2423af6ab5fSopenharmony_ci let mangledOhmurl2 = handleNormalizedOhmUrl(ohmUrl2); 2433af6ab5fSopenharmony_ci let mangledOhmurl3 = handleNormalizedOhmUrl(ohmUrl3); 2443af6ab5fSopenharmony_ci 2453af6ab5fSopenharmony_ci assert.strictEqual(mangledOhmurl1, '@normalized:N&&&entry/src/a/ets/b/c&'); 2463af6ab5fSopenharmony_ci assert.strictEqual(mangledOhmurl2, '@normalized:N&&&library/d&1.0.0'); 2473af6ab5fSopenharmony_ci assert.strictEqual(mangledOhmurl3, '@normalized:N&&&@abc/a/src/a/ets/b/c&'); 2483af6ab5fSopenharmony_ci }); 2493af6ab5fSopenharmony_ci }); 2503af6ab5fSopenharmony_ci 2513af6ab5fSopenharmony_ci describe('Tester Cases for <clearCaches>.', function () { 2523af6ab5fSopenharmony_ci it('should clear globalFileNameMangledTable', function () { 2533af6ab5fSopenharmony_ci globalFileNameMangledTable.set('key1', 'value1'); 2543af6ab5fSopenharmony_ci clearCaches(); 2553af6ab5fSopenharmony_ci expect(globalFileNameMangledTable.size).to.equal(0); 2563af6ab5fSopenharmony_ci }); 2573af6ab5fSopenharmony_ci 2583af6ab5fSopenharmony_ci it('should clear historyFileNameMangledTable if it exists', function () { 2593af6ab5fSopenharmony_ci renameFileNameModule.historyFileNameMangledTable = new Map<string, string>(); 2603af6ab5fSopenharmony_ci renameFileNameModule.historyFileNameMangledTable.set('key1', 'value1'); 2613af6ab5fSopenharmony_ci clearCaches(); 2623af6ab5fSopenharmony_ci expect(renameFileNameModule.historyFileNameMangledTable.size).to.equal(0); 2633af6ab5fSopenharmony_ci }); 2643af6ab5fSopenharmony_ci 2653af6ab5fSopenharmony_ci it('should not throw an error if historyFileNameMangledTable is undefined', () => { 2663af6ab5fSopenharmony_ci renameFileNameModule.historyFileNameMangledTable = undefined; 2673af6ab5fSopenharmony_ci expect(() => clearCaches()).not.to.throw(); 2683af6ab5fSopenharmony_ci }); 2693af6ab5fSopenharmony_ci }); 2703af6ab5fSopenharmony_ci 2713af6ab5fSopenharmony_ci describe('Tester Cases for <isInOhModules>.', function () { 2723af6ab5fSopenharmony_ci 2733af6ab5fSopenharmony_ci let proInfo: ProjectInfo; 2743af6ab5fSopenharmony_ci 2753af6ab5fSopenharmony_ci beforeEach(() => { 2763af6ab5fSopenharmony_ci proInfo = { 2773af6ab5fSopenharmony_ci projectRootPath: '/Users/test/project', 2783af6ab5fSopenharmony_ci packageDir: 'src/ohmodules', 2793af6ab5fSopenharmony_ci localPackageSet: new Set<string>(), 2803af6ab5fSopenharmony_ci useNormalized: true, 2813af6ab5fSopenharmony_ci useTsHar: true, 2823af6ab5fSopenharmony_ci }; 2833af6ab5fSopenharmony_ci }); 2843af6ab5fSopenharmony_ci 2853af6ab5fSopenharmony_ci it('should return true when originalPath is in the ohPackagePath', () => { 2863af6ab5fSopenharmony_ci const originalPath = '/Users/test/project/src/ohmodules/somefile.js'; 2873af6ab5fSopenharmony_ci const result = isInOhModules(proInfo, originalPath); 2883af6ab5fSopenharmony_ci expect(result).to.be.true; 2893af6ab5fSopenharmony_ci }); 2903af6ab5fSopenharmony_ci 2913af6ab5fSopenharmony_ci it('should return false when originalPath is not in the ohPackagePath', () => { 2923af6ab5fSopenharmony_ci const originalPath = '/Users/test/project/src/othermodules/somefile.js'; 2933af6ab5fSopenharmony_ci const result = isInOhModules(proInfo, originalPath); 2943af6ab5fSopenharmony_ci expect(result).to.be.false; 2953af6ab5fSopenharmony_ci }); 2963af6ab5fSopenharmony_ci }); 2973af6ab5fSopenharmony_ci 2983af6ab5fSopenharmony_ci describe('Tester Cases for <updateImportOrExportDeclaration>.', function () { 2993af6ab5fSopenharmony_ci 3003af6ab5fSopenharmony_ci beforeEach(() => { 3013af6ab5fSopenharmony_ci options = { 3023af6ab5fSopenharmony_ci mRenameFileName: { 3033af6ab5fSopenharmony_ci mEnable: true, 3043af6ab5fSopenharmony_ci mNameGeneratorType: 1, 3053af6ab5fSopenharmony_ci mReservedFileNames: ['file1.ts', 'file2.ts'], 3063af6ab5fSopenharmony_ci mUniversalReservedFileNames: [], 3073af6ab5fSopenharmony_ci mReservedProperties: ['1'], 3083af6ab5fSopenharmony_ci mReservedToplevelNames: ['2'], 3093af6ab5fSopenharmony_ci mOhmUrlStatus: OhmUrlStatus.NONE, 3103af6ab5fSopenharmony_ci } 3113af6ab5fSopenharmony_ci }; 3123af6ab5fSopenharmony_ci }); 3133af6ab5fSopenharmony_ci 3143af6ab5fSopenharmony_ci it('should return the same node if moduleSpecifier is missing', () => { 3153af6ab5fSopenharmony_ci node = factory.createExportDeclaration(undefined, true, undefined); 3163af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options); 3173af6ab5fSopenharmony_ci const result = renameFileNameModule.updateImportOrExportDeclarationForTest(node); 3183af6ab5fSopenharmony_ci assert.deepEqual(result, node); 3193af6ab5fSopenharmony_ci }); 3203af6ab5fSopenharmony_ci 3213af6ab5fSopenharmony_ci it('should update the moduleSpecifier of an ImportDeclaration', () => { 3223af6ab5fSopenharmony_ci node = factory.createImportDeclaration(undefined, undefined, factory.createStringLiteral('ModuleInfo'), undefined); 3233af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options); 3243af6ab5fSopenharmony_ci const result = renameFileNameModule.updateImportOrExportDeclarationForTest(node); 3253af6ab5fSopenharmony_ci assert.deepEqual(result, node); 3263af6ab5fSopenharmony_ci }); 3273af6ab5fSopenharmony_ci 3283af6ab5fSopenharmony_ci it('should update the moduleSpecifier of an ExportDeclaration', () => { 3293af6ab5fSopenharmony_ci node = factory.createExportDeclaration(undefined, true, undefined, factory.createStringLiteral('ModuleInfo'), undefined); 3303af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options); 3313af6ab5fSopenharmony_ci const result = renameFileNameModule.updateImportOrExportDeclarationForTest(node); 3323af6ab5fSopenharmony_ci assert.deepEqual(result, node); 3333af6ab5fSopenharmony_ci }); 3343af6ab5fSopenharmony_ci }); 3353af6ab5fSopenharmony_ci 3363af6ab5fSopenharmony_ci describe('Tester Cases for <isLocalDependencyOhmUrl>.', function () { 3373af6ab5fSopenharmony_ci let projectInfo; 3383af6ab5fSopenharmony_ci 3393af6ab5fSopenharmony_ci beforeEach(() => { 3403af6ab5fSopenharmony_ci options = { 3413af6ab5fSopenharmony_ci mRenameFileName: { 3423af6ab5fSopenharmony_ci mEnable: true, 3433af6ab5fSopenharmony_ci mNameGeneratorType: 1, 3443af6ab5fSopenharmony_ci mReservedFileNames: ['file1.ts', 'file2.ts'], 3453af6ab5fSopenharmony_ci mUniversalReservedFileNames: [], 3463af6ab5fSopenharmony_ci mReservedProperties: ['1'], 3473af6ab5fSopenharmony_ci mReservedToplevelNames: ['2'], 3483af6ab5fSopenharmony_ci mOhmUrlStatus: OhmUrlStatus.NONE, 3493af6ab5fSopenharmony_ci } 3503af6ab5fSopenharmony_ci }; 3513af6ab5fSopenharmony_ci projectInfo = { 3523af6ab5fSopenharmony_ci packageDir: 'path', 3533af6ab5fSopenharmony_ci projectRootPath: 'rootpath', 3543af6ab5fSopenharmony_ci localPackageSet: new Set<string>(), 3553af6ab5fSopenharmony_ci useNormalized: false, 3563af6ab5fSopenharmony_ci useTsHar: false, 3573af6ab5fSopenharmony_ci }; 3583af6ab5fSopenharmony_ci }); 3593af6ab5fSopenharmony_ci 3603af6ab5fSopenharmony_ci it('should return true if mOhmUrlStatus is AT_BUNDLE or NORMALIZED', () => { 3613af6ab5fSopenharmony_ci options.mRenameFileName.mOhmUrlStatus = OhmUrlStatus.AT_BUNDLE; 3623af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options); 3633af6ab5fSopenharmony_ci expect(isLocalDependencyOhmUrlForTest('path/to/file')).to.be.true; 3643af6ab5fSopenharmony_ci options.mRenameFileName.mOhmUrlStatus = OhmUrlStatus.NORMALIZED; 3653af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options); 3663af6ab5fSopenharmony_ci expect(isLocalDependencyOhmUrlForTest('path/to/file')).to.be.true; 3673af6ab5fSopenharmony_ci }); 3683af6ab5fSopenharmony_ci 3693af6ab5fSopenharmony_ci it('should return false if filePath does not start with NORMALIZE and useNormalized is true', () => { 3703af6ab5fSopenharmony_ci projectInfo.useNormalized = true; 3713af6ab5fSopenharmony_ci ArkObfuscator.projectInfo = projectInfo; 3723af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options)(context); 3733af6ab5fSopenharmony_ci expect(isLocalDependencyOhmUrlForTest('path/to/file')).to.be.false; 3743af6ab5fSopenharmony_ci }); 3753af6ab5fSopenharmony_ci 3763af6ab5fSopenharmony_ci it('should return true if packageName is in localPackageSet when use normalized', () => { 3773af6ab5fSopenharmony_ci projectInfo.useNormalized = true; 3783af6ab5fSopenharmony_ci projectInfo.localPackageSet.add('library'); 3793af6ab5fSopenharmony_ci ArkObfuscator.projectInfo = projectInfo; 3803af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options)(context); 3813af6ab5fSopenharmony_ci expect(isLocalDependencyOhmUrlForTest('@normalized:N&&&library/Index&1.0.0')).to.be.true; 3823af6ab5fSopenharmony_ci }); 3833af6ab5fSopenharmony_ci 3843af6ab5fSopenharmony_ci it('should return false if filePath does not start with BUNDLE and useNormalized is false', () => { 3853af6ab5fSopenharmony_ci projectInfo.useNormalized = false; 3863af6ab5fSopenharmony_ci ArkObfuscator.projectInfo = projectInfo; 3873af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options)(context); 3883af6ab5fSopenharmony_ci expect(isLocalDependencyOhmUrlForTest('path/to/file')).to.be.false; 3893af6ab5fSopenharmony_ci }); 3903af6ab5fSopenharmony_ci 3913af6ab5fSopenharmony_ci it('should return true if packageName is in localPackageSet when not use normalized', () => { 3923af6ab5fSopenharmony_ci projectInfo.useNormalized = false; 3933af6ab5fSopenharmony_ci projectInfo.localPackageSet.add('testName'); 3943af6ab5fSopenharmony_ci ArkObfuscator.projectInfo = projectInfo; 3953af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options)(context); 3963af6ab5fSopenharmony_ci expect(isLocalDependencyOhmUrlForTest('@bundle:bundleName/testName/')).to.be.true; 3973af6ab5fSopenharmony_ci expect(isLocalDependencyOhmUrlForTest('@bundle:bundleName/moduleName@testName/')).to.be.true; 3983af6ab5fSopenharmony_ci }); 3993af6ab5fSopenharmony_ci 4003af6ab5fSopenharmony_ci it('should return false if packageName is not in localPackageSet', () => { 4013af6ab5fSopenharmony_ci projectInfo.useNormalized = false; 4023af6ab5fSopenharmony_ci ArkObfuscator.projectInfo = projectInfo; 4033af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options)(context); 4043af6ab5fSopenharmony_ci expect(isLocalDependencyOhmUrlForTest('@bundle:bundleName/testName/')).to.be.false; 4053af6ab5fSopenharmony_ci expect(isLocalDependencyOhmUrlForTest('@bundle:bundleName/moduleName@testName/')).to.be.false; 4063af6ab5fSopenharmony_ci }); 4073af6ab5fSopenharmony_ci }); 4083af6ab5fSopenharmony_ci 4093af6ab5fSopenharmony_ci describe('Tester Cases for <getMangleCompletePath>.', function () { 4103af6ab5fSopenharmony_ci beforeEach(() => { 4113af6ab5fSopenharmony_ci options = { 4123af6ab5fSopenharmony_ci mRenameFileName: { 4133af6ab5fSopenharmony_ci mEnable: true, 4143af6ab5fSopenharmony_ci mNameGeneratorType: 1, 4153af6ab5fSopenharmony_ci mReservedFileNames: ["D:", "workplace", "src", "ets"], 4163af6ab5fSopenharmony_ci mUniversalReservedFileNames: [], 4173af6ab5fSopenharmony_ci } 4183af6ab5fSopenharmony_ci }; 4193af6ab5fSopenharmony_ci }); 4203af6ab5fSopenharmony_ci 4213af6ab5fSopenharmony_ci it('should return a mangled file path with the same extension', () => { 4223af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options)(context); 4233af6ab5fSopenharmony_ci const originalPath = 'D:/workplace/src/ets/entryability/EntryAbility.ts' 4243af6ab5fSopenharmony_ci const mangledPath = getMangleCompletePath(originalPath); 4253af6ab5fSopenharmony_ci assert.strictEqual(mangledPath === 'D:/workplace/src/ets/a/b.ts', true); 4263af6ab5fSopenharmony_ci }); 4273af6ab5fSopenharmony_ci 4283af6ab5fSopenharmony_ci it('should reserve file names in mReservedFileNames', () => { 4293af6ab5fSopenharmony_ci options.mRenameFileName.mReservedFileNames = ["D:", "workplace", "src", "ets", "entryability", "EntryAbility"]; 4303af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options)(context); 4313af6ab5fSopenharmony_ci const originalPath = 'D:/workplace/src/ets/entryability/EntryAbility.ts'; 4323af6ab5fSopenharmony_ci const mangledPath = getMangleCompletePath(originalPath); 4333af6ab5fSopenharmony_ci assert.strictEqual(mangledPath === 'D:/workplace/src/ets/entryability/EntryAbility.ts', true); 4343af6ab5fSopenharmony_ci }); 4353af6ab5fSopenharmony_ci 4363af6ab5fSopenharmony_ci it('should return history name when in historyFileNameMangledTable', () => { 4373af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options)(context); 4383af6ab5fSopenharmony_ci renameFileNameModule.historyFileNameMangledTable = new Map<string, string>(); 4393af6ab5fSopenharmony_ci renameFileNameModule.historyFileNameMangledTable.set('entryability', 'test1'); 4403af6ab5fSopenharmony_ci const originalPath = 'D:/workplace/src/ets/entryability/EntryAbility.ts'; 4413af6ab5fSopenharmony_ci const mangledPath = getMangleCompletePath(originalPath); 4423af6ab5fSopenharmony_ci assert.strictEqual(mangledPath === 'D:/workplace/src/ets/test1/b.ts', true); 4433af6ab5fSopenharmony_ci }); 4443af6ab5fSopenharmony_ci 4453af6ab5fSopenharmony_ci it('should reuse name when in globalFileNameMangledTable', () => { 4463af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options)(context); 4473af6ab5fSopenharmony_ci clearCaches(); 4483af6ab5fSopenharmony_ci const originalPath = 'D:/workplace/src/ets/entryability1/EntryAbility.ts'; 4493af6ab5fSopenharmony_ci const mangledPath = getMangleCompletePath(originalPath); 4503af6ab5fSopenharmony_ci assert.strictEqual(mangledPath === 'D:/workplace/src/ets/a/b.ts', true); 4513af6ab5fSopenharmony_ci const originalPath2 = 'D:/workplace/src/ets/entryability2/EntryAbility.ts'; 4523af6ab5fSopenharmony_ci const mangledPath2 = getMangleCompletePath(originalPath2); 4533af6ab5fSopenharmony_ci assert.strictEqual(mangledPath2 === 'D:/workplace/src/ets/c/b.ts', true); 4543af6ab5fSopenharmony_ci }); 4553af6ab5fSopenharmony_ci 4563af6ab5fSopenharmony_ci it('should return next available name when the generated name same as original name', () => { 4573af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options)(context); 4583af6ab5fSopenharmony_ci clearCaches(); 4593af6ab5fSopenharmony_ci const originalPath = 'D:/workplace/src/ets/a.ts'; 4603af6ab5fSopenharmony_ci const mangledPath = getMangleCompletePath(originalPath); 4613af6ab5fSopenharmony_ci assert.strictEqual(mangledPath === 'D:/workplace/src/ets/b.ts', true); 4623af6ab5fSopenharmony_ci }); 4633af6ab5fSopenharmony_ci 4643af6ab5fSopenharmony_ci it('should return next available name when the generated name need to be reserved', () => { 4653af6ab5fSopenharmony_ci options.mRenameFileName.mReservedFileNames = ["a", "D:", "workplace", "src", "ets"]; 4663af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options)(context); 4673af6ab5fSopenharmony_ci clearCaches(); 4683af6ab5fSopenharmony_ci const originalPath = 'D:/workplace/src/ets/entryability/EntryAbility.ts'; 4693af6ab5fSopenharmony_ci const mangledPath = getMangleCompletePath(originalPath); 4703af6ab5fSopenharmony_ci assert.strictEqual(mangledPath === 'D:/workplace/src/ets/b/c.ts', true); 4713af6ab5fSopenharmony_ci }); 4723af6ab5fSopenharmony_ci 4733af6ab5fSopenharmony_ci it('should return next available name when the generated name exist in globalFileNameMangledTable', () => { 4743af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options)(context); 4753af6ab5fSopenharmony_ci clearCaches(); 4763af6ab5fSopenharmony_ci renameFileNameModule.globalFileNameMangledTable.set('testability', 'a'); 4773af6ab5fSopenharmony_ci renameFileNameModule.globalFileNameMangledTable.set('Testability', 'b'); 4783af6ab5fSopenharmony_ci const originalPath = 'D:/workplace/src/ets/entryability/EntryAbility.ts'; 4793af6ab5fSopenharmony_ci const mangledPath = getMangleCompletePath(originalPath); 4803af6ab5fSopenharmony_ci assert.strictEqual(mangledPath === 'D:/workplace/src/ets/c/d.ts', true); 4813af6ab5fSopenharmony_ci }) 4823af6ab5fSopenharmony_ci 4833af6ab5fSopenharmony_ci it('should return next available name when the generated name exist in historyFileNameMangledTable', () => { 4843af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options)(context); 4853af6ab5fSopenharmony_ci clearCaches(); 4863af6ab5fSopenharmony_ci renameFileNameModule.historyFileNameMangledTable = new Map<string, string>(); 4873af6ab5fSopenharmony_ci renameFileNameModule.historyFileNameMangledTable.set('testability', 'a'); 4883af6ab5fSopenharmony_ci renameFileNameModule.historyFileNameMangledTable.set('Testability', 'b'); 4893af6ab5fSopenharmony_ci const originalPath = 'D:/workplace/src/ets/entryability/EntryAbility.ts'; 4903af6ab5fSopenharmony_ci const mangledPath = getMangleCompletePath(originalPath); 4913af6ab5fSopenharmony_ci assert.strictEqual(mangledPath === 'D:/workplace/src/ets/c/d.ts', true); 4923af6ab5fSopenharmony_ci }) 4933af6ab5fSopenharmony_ci }); 4943af6ab5fSopenharmony_ci 4953af6ab5fSopenharmony_ci describe('Tester Cases for <mangleOhmUrl>.', function () { 4963af6ab5fSopenharmony_ci let projectInfo; 4973af6ab5fSopenharmony_ci 4983af6ab5fSopenharmony_ci beforeEach(() => { 4993af6ab5fSopenharmony_ci options = { 5003af6ab5fSopenharmony_ci mRenameFileName: { 5013af6ab5fSopenharmony_ci mEnable: true, 5023af6ab5fSopenharmony_ci mNameGeneratorType: 1, 5033af6ab5fSopenharmony_ci mReservedFileNames: ["D:", "workplace", "src", "ets"], 5043af6ab5fSopenharmony_ci mUniversalReservedFileNames: [], 5053af6ab5fSopenharmony_ci mOhmUrlStatus: OhmUrlStatus.NONE, 5063af6ab5fSopenharmony_ci } 5073af6ab5fSopenharmony_ci }; 5083af6ab5fSopenharmony_ci projectInfo = { 5093af6ab5fSopenharmony_ci packageDir: 'path', 5103af6ab5fSopenharmony_ci projectRootPath: 'rootpath', 5113af6ab5fSopenharmony_ci localPackageSet: new Set<string>(), 5123af6ab5fSopenharmony_ci useNormalized: false, 5133af6ab5fSopenharmony_ci useTsHar: false, 5143af6ab5fSopenharmony_ci }; 5153af6ab5fSopenharmony_ci }); 5163af6ab5fSopenharmony_ci 5173af6ab5fSopenharmony_ci it('should normalize ohmUrl if useNormalized is true', () => { 5183af6ab5fSopenharmony_ci projectInfo.useNormalized = true; 5193af6ab5fSopenharmony_ci ArkObfuscator.projectInfo = projectInfo; 5203af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options)(context); 5213af6ab5fSopenharmony_ci clearCaches(); 5223af6ab5fSopenharmony_ci let ohmUrl1 = '@normalized:N&&&entry/src/main/ets/pages/test&'; 5233af6ab5fSopenharmony_ci let ohmUrl2 = '@normalized:N&&&library/Index&1.0.0'; 5243af6ab5fSopenharmony_ci let ohmUrl3 = '@normalized:N&&&@abc/a/src/main/ets/pages/test&'; 5253af6ab5fSopenharmony_ci 5263af6ab5fSopenharmony_ci let mangledOhmurl1 = mangleOhmUrl(ohmUrl1); 5273af6ab5fSopenharmony_ci let mangledOhmurl2 = mangleOhmUrl(ohmUrl2); 5283af6ab5fSopenharmony_ci let mangledOhmurl3 = mangleOhmUrl(ohmUrl3); 5293af6ab5fSopenharmony_ci 5303af6ab5fSopenharmony_ci assert.strictEqual(mangledOhmurl1, '@normalized:N&&&entry/src/a/ets/b/c&'); 5313af6ab5fSopenharmony_ci assert.strictEqual(mangledOhmurl2, '@normalized:N&&&library/d&1.0.0'); 5323af6ab5fSopenharmony_ci assert.strictEqual(mangledOhmurl3, '@normalized:N&&&@abc/a/src/a/ets/b/c&'); 5333af6ab5fSopenharmony_ci }); 5343af6ab5fSopenharmony_ci 5353af6ab5fSopenharmony_ci it('should normalize ohmUrl if mOhmUrlStatus is OhmUrlStatus.NORMALIZED', () => { 5363af6ab5fSopenharmony_ci options.mRenameFileName.mOhmUrlStatus = OhmUrlStatus.NORMALIZED; 5373af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options)(context); 5383af6ab5fSopenharmony_ci clearCaches(); 5393af6ab5fSopenharmony_ci let ohmUrl1 = '@normalized:N&&&entry/src/main/ets/pages/test&'; 5403af6ab5fSopenharmony_ci let ohmUrl2 = '@normalized:N&&&library/Index&1.0.0'; 5413af6ab5fSopenharmony_ci let ohmUrl3 = '@normalized:N&&&@abc/a/src/main/ets/pages/test&'; 5423af6ab5fSopenharmony_ci 5433af6ab5fSopenharmony_ci let mangledOhmurl1 = mangleOhmUrl(ohmUrl1); 5443af6ab5fSopenharmony_ci let mangledOhmurl2 = mangleOhmUrl(ohmUrl2); 5453af6ab5fSopenharmony_ci let mangledOhmurl3 = mangleOhmUrl(ohmUrl3); 5463af6ab5fSopenharmony_ci 5473af6ab5fSopenharmony_ci assert.strictEqual(mangledOhmurl1, '@normalized:N&&&entry/src/a/ets/b/c&'); 5483af6ab5fSopenharmony_ci assert.strictEqual(mangledOhmurl2, '@normalized:N&&&library/d&1.0.0'); 5493af6ab5fSopenharmony_ci assert.strictEqual(mangledOhmurl3, '@normalized:N&&&@abc/a/src/a/ets/b/c&'); 5503af6ab5fSopenharmony_ci }); 5513af6ab5fSopenharmony_ci 5523af6ab5fSopenharmony_ci it('should return mangled Ohm URL with fixed parts and mangled parts', () => { 5533af6ab5fSopenharmony_ci projectInfo.useNormalized = false; 5543af6ab5fSopenharmony_ci ArkObfuscator.projectInfo = projectInfo; 5553af6ab5fSopenharmony_ci options.mRenameFileName.mOhmUrlStatus = OhmUrlStatus.NONE; 5563af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options)(context); 5573af6ab5fSopenharmony_ci clearCaches(); 5583af6ab5fSopenharmony_ci let ohmUrl1 = '@normalized:N&&&entry/src/main/ets/pages/test&'; 5593af6ab5fSopenharmony_ci let ohmUrl2 = '@normalized:N&&&library/Index&1.0.0'; 5603af6ab5fSopenharmony_ci let ohmUrl3 = '@normalized:N&&&@abc/a/src/main/ets/pages/test&'; 5613af6ab5fSopenharmony_ci 5623af6ab5fSopenharmony_ci let mangledOhmurl1 = mangleOhmUrl(ohmUrl1); 5633af6ab5fSopenharmony_ci let mangledOhmurl2 = mangleOhmUrl(ohmUrl2); 5643af6ab5fSopenharmony_ci let mangledOhmurl3 = mangleOhmUrl(ohmUrl3); 5653af6ab5fSopenharmony_ci 5663af6ab5fSopenharmony_ci assert.strictEqual(mangledOhmurl1, '@normalized:N&&&entry/src/a/ets/b/c'); 5673af6ab5fSopenharmony_ci assert.strictEqual(mangledOhmurl2, '@normalized:N&&&library/Index&1.0.0/'); 5683af6ab5fSopenharmony_ci assert.strictEqual(mangledOhmurl3, '@normalized:N&&&@abc/a/src/a/ets/b/c'); 5693af6ab5fSopenharmony_ci }); 5703af6ab5fSopenharmony_ci }); 5713af6ab5fSopenharmony_ci 5723af6ab5fSopenharmony_ci describe('Tester Cases for <getMangleIncompletePath>.', function () { 5733af6ab5fSopenharmony_ci let projectInfo; 5743af6ab5fSopenharmony_ci 5753af6ab5fSopenharmony_ci beforeEach(() => { 5763af6ab5fSopenharmony_ci options = { 5773af6ab5fSopenharmony_ci mRenameFileName: { 5783af6ab5fSopenharmony_ci mEnable: true, 5793af6ab5fSopenharmony_ci mNameGeneratorType: 1, 5803af6ab5fSopenharmony_ci mReservedFileNames: ["D:", "workplace", "src", "ets"], 5813af6ab5fSopenharmony_ci mUniversalReservedFileNames: [], 5823af6ab5fSopenharmony_ci mOhmUrlStatus: OhmUrlStatus.NONE, 5833af6ab5fSopenharmony_ci } 5843af6ab5fSopenharmony_ci }; 5853af6ab5fSopenharmony_ci projectInfo = { 5863af6ab5fSopenharmony_ci packageDir: 'path', 5873af6ab5fSopenharmony_ci projectRootPath: 'rootpath', 5883af6ab5fSopenharmony_ci localPackageSet: new Set<string>(), 5893af6ab5fSopenharmony_ci useNormalized: false, 5903af6ab5fSopenharmony_ci useTsHar: false, 5913af6ab5fSopenharmony_ci }; 5923af6ab5fSopenharmony_ci }); 5933af6ab5fSopenharmony_ci 5943af6ab5fSopenharmony_ci it('should return mangled Ohm URL for local dependencies', () => { 5953af6ab5fSopenharmony_ci projectInfo.localPackageSet.add('entry'); 5963af6ab5fSopenharmony_ci ArkObfuscator.projectInfo = projectInfo; 5973af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options)(context); 5983af6ab5fSopenharmony_ci clearCaches(); 5993af6ab5fSopenharmony_ci let ohmUrl = '@bundle:com.example.myapplication/entry/index'; 6003af6ab5fSopenharmony_ci let mangledOhmurl = getMangleIncompletePathForTest(ohmUrl); 6013af6ab5fSopenharmony_ci assert.strictEqual(mangledOhmurl, '@bundle:com.example.myapplication/entry/a'); 6023af6ab5fSopenharmony_ci }); 6033af6ab5fSopenharmony_ci 6043af6ab5fSopenharmony_ci it('should return the original path if it is not a valid file path and not a local dependency', () => { 6053af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options)(context); 6063af6ab5fSopenharmony_ci clearCaches(); 6073af6ab5fSopenharmony_ci let path = '/workplace/src/ets/entryability/EntryAbility'; 6083af6ab5fSopenharmony_ci let mangledPath = getMangleIncompletePathForTest(path); 6093af6ab5fSopenharmony_ci assert.strictEqual(mangledPath, '/workplace/src/ets/entryability/EntryAbility'); 6103af6ab5fSopenharmony_ci }); 6113af6ab5fSopenharmony_ci 6123af6ab5fSopenharmony_ci it('should return mangled directory name without extension', () => { 6133af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options)(context); 6143af6ab5fSopenharmony_ci obfuscator.orignalFilePathForSearching = ''; 6153af6ab5fSopenharmony_ci clearCaches(); 6163af6ab5fSopenharmony_ci let path = 'test/ut/transformer/demo.ts'; 6173af6ab5fSopenharmony_ci fs.writeFileSync(path, 'test'); 6183af6ab5fSopenharmony_ci let path1 = 'test/ut/transformer/demo'; 6193af6ab5fSopenharmony_ci let mangledPath = getMangleIncompletePathForTest(path1); 6203af6ab5fSopenharmony_ci assert.strictEqual(mangledPath, 'a/b/c/d'); 6213af6ab5fSopenharmony_ci fs.unlinkSync(path); 6223af6ab5fSopenharmony_ci }); 6233af6ab5fSopenharmony_ci 6243af6ab5fSopenharmony_ci it('should return mangled file path with extension for valid file paths', () => { 6253af6ab5fSopenharmony_ci secharmony.transformerPlugin.createTransformerFactory(options)(context); 6263af6ab5fSopenharmony_ci obfuscator.orignalFilePathForSearching = ''; 6273af6ab5fSopenharmony_ci clearCaches(); 6283af6ab5fSopenharmony_ci let path = 'test/ut/transformer/demo.ts'; 6293af6ab5fSopenharmony_ci fs.writeFileSync(path, 'test'); 6303af6ab5fSopenharmony_ci let path1 = 'test/ut/transformer/demo.ts'; 6313af6ab5fSopenharmony_ci let mangledPath = getMangleIncompletePathForTest(path1); 6323af6ab5fSopenharmony_ci assert.strictEqual(mangledPath, 'a/b/c/d.ts'); 6333af6ab5fSopenharmony_ci fs.unlinkSync(path); 6343af6ab5fSopenharmony_ci }); 6353af6ab5fSopenharmony_ci }); 6363af6ab5fSopenharmony_ci}); 637