From 8ba6eaf04d3418460f0afa50579735c460cf143b Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Fri, 5 Jan 2018 13:27:59 +0300 Subject: [PATCH] Added more tests for object keys transformation --- package.json | 2 +- .../ObjectExpressionKeysTransformer.spec.ts | 60 +++++++++++++++++++ ...ntegration-with-control-flow-flattening.js | 3 + yarn.lock | 8 +-- 4 files changed, 67 insertions(+), 6 deletions(-) create mode 100644 test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/integration-with-control-flow-flattening.js diff --git a/package.json b/package.json index aef0796f..2742bf97 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@types/estree": "0.0.38", "@types/md5": "2.1.32", "@types/mkdirp": "0.5.2", - "@types/mocha": "2.2.45", + "@types/mocha": "2.2.46", "@types/node": "8.5.5", "@types/rimraf": "^2.0.2", "@types/sinon": "4.1.2", diff --git a/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/ObjectExpressionKeysTransformer.spec.ts b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/ObjectExpressionKeysTransformer.spec.ts index 027b6587..782f3b07 100644 --- a/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/ObjectExpressionKeysTransformer.spec.ts +++ b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/ObjectExpressionKeysTransformer.spec.ts @@ -102,6 +102,38 @@ describe('ObjectExpressionKeysTransformer', () => { assert.match(obfuscatedCode, regExp); }); }); + + describe('variant #4: correct integration with control flow flattening object', () => { + const match: string = `` + + `var *${variableMatch} *= *{};` + + `${variableMatch}\\['\\w{5}'] *= *function *${variableMatch} *\\(${variableMatch}, *${variableMatch}\\) *{` + + `return *${variableMatch} *\\+ *${variableMatch};` + + `};` + + `var *${variableMatch} *= *${variableMatch}\\['\\w{5}']\\(0x1, *0x2\\);` + + ``; + const regExp: RegExp = new RegExp(match); + + let obfuscatedCode: string; + + before(() => { + const code: string = readFileAsString(__dirname + '/fixtures/integration-with-control-flow-flattening.js'); + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + controlFlowFlattening: true, + controlFlowFlatteningThreshold: 1, + transformObjectKeys: true + } + ); + + obfuscatedCode = obfuscationResult.getObfuscatedCode(); + }); + + it('should correctly transform object keys', () => { + assert.match(obfuscatedCode, regExp); + }); + }); }); describe('correct placement of expression statements', () => { @@ -226,6 +258,34 @@ describe('ObjectExpressionKeysTransformer', () => { }); describe('Ignore transformation', () => { + describe('variant #1: disabled option', () => { + const match: string = `` + + `var *${variableMatch} *= *{` + + `'foo': *'bar',` + + `'baz': *'bark'` + + `}` + + ``; + const regExp: RegExp = new RegExp(match); + + let obfuscatedCode: string; + + before(() => { + const code: string = readFileAsString(__dirname + '/fixtures/simple.js'); + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET + } + ); + + obfuscatedCode = obfuscationResult.getObfuscatedCode(); + }); + + it('shouldn\'t transform object keys', () => { + assert.match(obfuscatedCode, regExp); + }); + }); + describe('variant #2: variable declaration without initialization', () => { const match: string = `` + `var *${variableMatch};` + diff --git a/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/integration-with-control-flow-flattening.js b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/integration-with-control-flow-flattening.js new file mode 100644 index 00000000..07b7b01f --- /dev/null +++ b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/fixtures/integration-with-control-flow-flattening.js @@ -0,0 +1,3 @@ +(function () { + var variable = 1 + 2; +})(); \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index b3488e9d..704c4de8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -64,11 +64,9 @@ dependencies: "@types/node" "*" -"@types/mocha@2.2.45": - version "2.2.45" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.45.tgz#816572b6e45164526a36d4faa123e8267d6d5d0a" - dependencies: - "@types/node" "*" +"@types/mocha@2.2.46": + version "2.2.46" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.46.tgz#b04713f7759d1cf752effdaae7b3969e285ebc16" "@types/node@*": version "8.0.53"