diff --git a/test/functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts b/test/functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts index e264a30f..ae2c20e1 100644 --- a/test/functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts +++ b/test/functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts @@ -95,6 +95,41 @@ describe('JavaScriptObfuscator', () => { }); }); + describe('class function not obfuscated if option "reservedNames', () => { + let obfuscations: string[]; + + beforeEach(() => { + obfuscations = [] + const code: string = readFileAsString(__dirname + '/fixtures/class-with-function.js'); + for (let i = 0; i < 100; i++) { + const obfuscatedCode:string = JavaScriptObfuscator.obfuscate( + code, + { + controlFlowFlattening: true, + deadCodeInjection: true, + reservedNames: ['bar'] + } + ).getObfuscatedCode(); + + obfuscations.push(obfuscatedCode) + } + }); + + it('class should always have "bar" function not obfuscated', () => { + let obfuscated: number = 0; + let notObfuscated: number = 0; + for (const codeAsString of obfuscations) { + if (codeAsString.includes("['bar']")) { notObfuscated++; } + else { obfuscated++; } + + } + + console.log({obfuscated, notObfuscated}) + assert.equal(obfuscated, 0) + assert.equal(notObfuscated, obfuscations.length) + }); + }); + describe('invalid source code type', () => { let obfuscatedCode: string; diff --git a/test/functional-tests/javascript-obfuscator/fixtures/class-with-function.js b/test/functional-tests/javascript-obfuscator/fixtures/class-with-function.js new file mode 100644 index 00000000..a05cc8cd --- /dev/null +++ b/test/functional-tests/javascript-obfuscator/fixtures/class-with-function.js @@ -0,0 +1,6 @@ +class Foo{ + bar(){ + console.log(1) + baz() + } +} \ No newline at end of file