Просмотр исходного кода

Added more tests for array rest

sanex3339 7 лет назад
Родитель
Сommit
f78018089c

+ 27 - 0
test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/FunctionTransformer.spec.ts

@@ -312,6 +312,33 @@ describe('FunctionTransformer', () => {
         });
         });
     });
     });
 
 
+    describe('array rest parameter', () => {
+        const functionRegExp: RegExp = /function *func *\(\[_0x[a-f0-9]{4,6}, *..._0x[a-f0-9]{4,6}\]\) *\{/;
+        const returnRegExp: RegExp = /return *_0x[a-f0-9]{4,6} *\+ *_0x[a-f0-9]{4,6};/;
+
+        let obfuscatedCode: string;
+
+        before(() => {
+            const code: string = readFileAsString(__dirname + '/fixtures/array-rest-parameter.js');
+            const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
+                code,
+                {
+                    ...NO_ADDITIONAL_NODES_PRESET
+                }
+            );
+
+            obfuscatedCode = obfuscationResult.getObfuscatedCode();
+        });
+
+        it('Match #1: should transform function rest parameter', () => {
+            assert.match(obfuscatedCode, functionRegExp);
+        });
+
+        it('Match #2: should transform identifiers inside function body', () => {
+            assert.match(obfuscatedCode, returnRegExp);
+        });
+    });
+
     describe('object rest parameter', () => {
     describe('object rest parameter', () => {
         const functionRegExp: RegExp = /function *func *\(\{foo, *..._0x[a-f0-9]{4,6}\}\) *\{/;
         const functionRegExp: RegExp = /function *func *\(\{foo, *..._0x[a-f0-9]{4,6}\}\) *\{/;
         const returnRegExp: RegExp = /return *foo *\+ *_0x[a-f0-9]{4,6};/;
         const returnRegExp: RegExp = /return *foo *\+ *_0x[a-f0-9]{4,6};/;

+ 3 - 0
test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/fixtures/array-rest-parameter.js

@@ -0,0 +1,3 @@
+function func ([foo, ...rest]) {
+    return foo + rest;
+}

+ 28 - 1
test/functional-tests/node-transformers/obfuscating-transformers/variable-declaration-transformer/VariableDeclarationTransformer.spec.ts

@@ -572,7 +572,34 @@ describe('VariableDeclarationTransformer', () => {
         });
         });
     });
     });
 
 
-    describe('Variant #16: object rest', () => {
+    describe('Variant #16: array rest', () => {
+        const objectRegExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\['foo', *'bar', *'baz'\];/;
+        const objectRestRegExp: RegExp = /var *\[_0x[a-f0-9]{4,6}, *\.\.\.*_0x[a-f0-9]{4,6}] *= *_0x[a-f0-9]{4,6};/;
+
+        let obfuscatedCode: string;
+
+        before(() => {
+            const code: string = readFileAsString(__dirname + '/fixtures/array-rest.js');
+            const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
+                code,
+                {
+                    ...NO_ADDITIONAL_NODES_PRESET
+                }
+            );
+
+            obfuscatedCode = obfuscationResult.getObfuscatedCode();
+        });
+
+        it('Match #1: should transform object name', () => {
+            assert.match(obfuscatedCode, objectRegExp);
+        });
+
+        it('Match #2: should transform object rest construction', () => {
+            assert.match(obfuscatedCode, objectRestRegExp);
+        });
+    });
+
+    describe('Variant #17: object rest', () => {
         const objectRegExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{'foo': *0x1, *'bar': *0x2, *'baz': *0x3\};/;
         const objectRegExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{'foo': *0x1, *'bar': *0x2, *'baz': *0x3\};/;
         const objectRestRegExp: RegExp = /var *\{foo, *\.\.\.*_0x[a-f0-9]{4,6}\} *= *_0x[a-f0-9]{4,6};/;
         const objectRestRegExp: RegExp = /var *\{foo, *\.\.\.*_0x[a-f0-9]{4,6}\} *= *_0x[a-f0-9]{4,6};/;
 
 

+ 4 - 0
test/functional-tests/node-transformers/obfuscating-transformers/variable-declaration-transformer/fixtures/array-rest.js

@@ -0,0 +1,4 @@
+(function() {
+    var array = ['foo', 'bar', 'baz'];
+    var [foo, ...rest] = array;
+})();