|  | @@ -0,0 +1,152 @@
 | 
	
		
			
				|  |  | +import { assert } from 'chai';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import { IObfuscationResult } from '../../../../../src/interfaces/IObfuscationResult';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import { getRegExpMatch } from '../../../../helpers/getRegExpMatch';
 | 
	
		
			
				|  |  | +import { readFileAsString } from '../../../../helpers/readFileAsString';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import { JavaScriptObfuscator } from '../../../../../src/JavaScriptObfuscatorFacade';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +describe('ImportDeclarationTransformer', () => {
 | 
	
		
			
				|  |  | +    describe('transformation of `importSpecifier` node identifiers', () => {
 | 
	
		
			
				|  |  | +        describe('Variant #1: `defaultImportSpecifier` node', () => {
 | 
	
		
			
				|  |  | +            const importSpecifierRegExp: RegExp = /import (_0x[a-f0-9]{4,6}) from *'\.\/foo';/;
 | 
	
		
			
				|  |  | +            const consoleLogRegExp: RegExp = /console\['log']\((_0x[a-f0-9]{4,6})\);/;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            let obfuscatedCode: string,
 | 
	
		
			
				|  |  | +                importSpecifierIdentifier: string,
 | 
	
		
			
				|  |  | +                consoleLogIdentifier: string;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            before(() => {
 | 
	
		
			
				|  |  | +                const code: string = readFileAsString(__dirname + '/fixtures/default-import.js');
 | 
	
		
			
				|  |  | +                const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
 | 
	
		
			
				|  |  | +                    code,
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        ...NO_ADDITIONAL_NODES_PRESET
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                obfuscatedCode = obfuscationResult.getObfuscatedCode();
 | 
	
		
			
				|  |  | +                importSpecifierIdentifier = getRegExpMatch(obfuscatedCode, importSpecifierRegExp);
 | 
	
		
			
				|  |  | +                consoleLogIdentifier = getRegExpMatch(obfuscatedCode, consoleLogRegExp);
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            it('should transform import specifier identifier name', () => {
 | 
	
		
			
				|  |  | +                assert.equal(importSpecifierIdentifier, consoleLogIdentifier);
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        describe('Variant #2: `namespaceImportSpecifier` node', () => {
 | 
	
		
			
				|  |  | +            const importSpecifierRegExp: RegExp = /import *\* *as *(_0x[a-f0-9]{4,6}) *from *'\.\/foo';/;
 | 
	
		
			
				|  |  | +            const consoleLogRegExp: RegExp = /console\['log']\((_0x[a-f0-9]{4,6})\);/;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            let obfuscatedCode: string,
 | 
	
		
			
				|  |  | +                importSpecifierIdentifier: string,
 | 
	
		
			
				|  |  | +                consoleLogIdentifier: string;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            before(() => {
 | 
	
		
			
				|  |  | +                const code: string = readFileAsString(__dirname + '/fixtures/namespace-import.js');
 | 
	
		
			
				|  |  | +                const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
 | 
	
		
			
				|  |  | +                    code,
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        ...NO_ADDITIONAL_NODES_PRESET
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                obfuscatedCode = obfuscationResult.getObfuscatedCode();
 | 
	
		
			
				|  |  | +                importSpecifierIdentifier = getRegExpMatch(obfuscatedCode, importSpecifierRegExp);
 | 
	
		
			
				|  |  | +                consoleLogIdentifier = getRegExpMatch(obfuscatedCode, consoleLogRegExp);
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            it('should transform import specifier identifier name', () => {
 | 
	
		
			
				|  |  | +                assert.equal(importSpecifierIdentifier, consoleLogIdentifier);
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        describe('Variant #3: named `importSpecifier` node', () => {
 | 
	
		
			
				|  |  | +            describe('Variant #1: named import specifier with same `import` and `local` names', () => {
 | 
	
		
			
				|  |  | +                const importSpecifierRegExp: RegExp = /import *{foo} *from *'\.\/foo';/;
 | 
	
		
			
				|  |  | +                const consoleLogRegExp: RegExp = /console\['log']\(foo\);/;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                let obfuscatedCode: string;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                before(() => {
 | 
	
		
			
				|  |  | +                    const code: string = readFileAsString(__dirname + '/fixtures/named-import-1.js');
 | 
	
		
			
				|  |  | +                    const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
 | 
	
		
			
				|  |  | +                        code,
 | 
	
		
			
				|  |  | +                        {
 | 
	
		
			
				|  |  | +                            ...NO_ADDITIONAL_NODES_PRESET
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                    );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    obfuscatedCode = obfuscationResult.getObfuscatedCode();
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                it('Match #1: shouldn\'t transform import specifier identifier name', () => {
 | 
	
		
			
				|  |  | +                    assert.match(obfuscatedCode, importSpecifierRegExp);
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                it('Match #2: shouldn\'t transform import specifier identifier name', () => {
 | 
	
		
			
				|  |  | +                    assert.match(obfuscatedCode, consoleLogRegExp);
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            describe('Variant #2: named import specifier with different `import` and `local` names', () => {
 | 
	
		
			
				|  |  | +                const importSpecifierRegExp: RegExp = /import *{foo as (_0x[a-f0-9]{4,6})} *from *'\.\/foo';/;
 | 
	
		
			
				|  |  | +                const consoleLogRegExp: RegExp = /console\['log']\((_0x[a-f0-9]{4,6})\);/;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                let obfuscatedCode: string,
 | 
	
		
			
				|  |  | +                    importSpecifierIdentifier: string,
 | 
	
		
			
				|  |  | +                    consoleLogIdentifier: string;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                before(() => {
 | 
	
		
			
				|  |  | +                    const code: string = readFileAsString(__dirname + '/fixtures/named-import-2.js');
 | 
	
		
			
				|  |  | +                    const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
 | 
	
		
			
				|  |  | +                        code,
 | 
	
		
			
				|  |  | +                        {
 | 
	
		
			
				|  |  | +                            ...NO_ADDITIONAL_NODES_PRESET
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                    );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    obfuscatedCode = obfuscationResult.getObfuscatedCode();
 | 
	
		
			
				|  |  | +                    importSpecifierIdentifier = getRegExpMatch(obfuscatedCode, importSpecifierRegExp);
 | 
	
		
			
				|  |  | +                    consoleLogIdentifier = getRegExpMatch(obfuscatedCode, consoleLogRegExp);
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                it('should transform import specifier identifier name', () => {
 | 
	
		
			
				|  |  | +                    assert.equal(importSpecifierIdentifier, consoleLogIdentifier);
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        describe('Variant #4: `identifiersPrefix` option', () => {
 | 
	
		
			
				|  |  | +            const importSpecifierRegExp: RegExp = /import *\* *as *(bark_0x[a-f0-9]{4,6}) *from *'\.\/foo';/;
 | 
	
		
			
				|  |  | +            const consoleLogRegExp: RegExp = /console\['log']\((bark_0x[a-f0-9]{4,6})\);/;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            let obfuscatedCode: string,
 | 
	
		
			
				|  |  | +                importSpecifierIdentifier: string,
 | 
	
		
			
				|  |  | +                consoleLogIdentifier: string;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            before(() => {
 | 
	
		
			
				|  |  | +                const code: string = readFileAsString(__dirname + '/fixtures/namespace-import.js');
 | 
	
		
			
				|  |  | +                const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
 | 
	
		
			
				|  |  | +                    code,
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        ...NO_ADDITIONAL_NODES_PRESET,
 | 
	
		
			
				|  |  | +                        identifiersPrefix: 'bark'
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                obfuscatedCode = obfuscationResult.getObfuscatedCode();
 | 
	
		
			
				|  |  | +                importSpecifierIdentifier = getRegExpMatch(obfuscatedCode, importSpecifierRegExp);
 | 
	
		
			
				|  |  | +                consoleLogIdentifier = getRegExpMatch(obfuscatedCode, consoleLogRegExp);
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            it('should transform import specifier identifier name', () => {
 | 
	
		
			
				|  |  | +                assert.equal(importSpecifierIdentifier, consoleLogIdentifier);
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +});
 |