diff --git a/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts b/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts new file mode 100644 index 00000000..537e58a5 --- /dev/null +++ b/test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts @@ -0,0 +1,88 @@ +import { IObfuscationResult } from "../../../src/interfaces/IObfuscationResult"; + +import { NO_CUSTOM_NODES_PRESET } from "../../../src/preset-options/NoCustomNodesPreset"; + +import { JavaScriptObfuscator } from "../../../src/JavaScriptObfuscator"; + +const assert: Chai.AssertStatic = require('chai').assert; + +describe('VariableDeclarationObfuscator', () => { + it('should obfuscate `variableDeclaration` node', () => { + let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + ` + function foo () { + var test = 'abc'; + console.log(test); + } + `, + Object.assign({}, NO_CUSTOM_NODES_PRESET) + ); + + assert.match(obfuscationResult.getObfuscatedCode(), /var *_0x([a-z0-9]){6} *= *'\\x61\\x62\\x63';/); + assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(_0x([a-z0-9]){6}\);/); + }); + + it('should obfuscate variable call (`identifier` node) outside of block scope of node in which this variable was declared with `var` kind', () => { + let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + ` + if (true) + { + var test = 10; + } + + console.log(test); + `, + Object.assign({}, NO_CUSTOM_NODES_PRESET) + ); + + assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(_0x([a-z0-9]){6}\);/); + }); + + it('should not obfuscate variable call (`identifier` node) outside of block scope of node in which this variable was declared with `let` kind', () => { + let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + ` + if (true) + { + let test = 10; + } + + console.log(test); + `, + Object.assign({}, NO_CUSTOM_NODES_PRESET) + ); + + assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(test\);/); + }); + + describe(`variable calls before variable declaration`, () => { + let obfuscationResult: IObfuscationResult; + + beforeEach(() => { + obfuscationResult = JavaScriptObfuscator.obfuscate( + ` + function foo () { + function bar () { + console.log(abc.item); + } + + console.log(abc); + + var abc = {}; + + abc.item = 15; + bar(); + } + `, + Object.assign({}, NO_CUSTOM_NODES_PRESET) + ); + }); + + it('should obfuscate variable call (`identifier` node) before variable declaration if this call is inside function body', () => { + assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(_0x([a-z0-9]){6}\['\\x69\\x74\\x65\\x6d'\]\);/); + }); + + it('should not obfuscate variable call (`identifier` node) before variable declaration', () => { + assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(abc\);/); + }); + }); +}); diff --git a/test/index.spec.ts b/test/index.spec.ts index c966d17a..d3c27a5f 100644 --- a/test/index.spec.ts +++ b/test/index.spec.ts @@ -27,3 +27,4 @@ import './functional-tests/node-obfuscators/LiteralObfuscator.spec'; import './functional-tests/node-obfuscators/MemberExpressionObfuscator.spec'; import './functional-tests/node-obfuscators/MethodDefinitionObfuscator.spec'; import './functional-tests/node-obfuscators/ObjectExpressionObfuscator.spec'; +import './functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec';