voluptasvelit
Version:
JavaScript obfuscator
146 lines (116 loc) • 6.44 kB
text/typescript
import { assert } from 'chai';
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');
obfuscatedCode = JavaScriptObfuscator.obfuscate(
code,
{
...NO_ADDITIONAL_NODES_PRESET
}
).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');
obfuscatedCode = JavaScriptObfuscator.obfuscate(
code,
{
...NO_ADDITIONAL_NODES_PRESET
}
).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');
obfuscatedCode = JavaScriptObfuscator.obfuscate(
code,
{
...NO_ADDITIONAL_NODES_PRESET
}
).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');
obfuscatedCode = JavaScriptObfuscator.obfuscate(
code,
{
...NO_ADDITIONAL_NODES_PRESET
}
).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');
obfuscatedCode = JavaScriptObfuscator.obfuscate(
code,
{
...NO_ADDITIONAL_NODES_PRESET,
identifiersPrefix: 'bark'
}
).getObfuscatedCode();
importSpecifierIdentifier = getRegExpMatch(obfuscatedCode, importSpecifierRegExp);
consoleLogIdentifier = getRegExpMatch(obfuscatedCode, consoleLogRegExp);
});
it('should transform import specifier identifier name', () => {
assert.equal(importSpecifierIdentifier, consoleLogIdentifier);
});
});
});
});