Browse Source

More tests for hashbang operator transformer

sanex3339 5 years ago
parent
commit
6c48791427

+ 49 - 3
test/functional-tests/code-transformers/preparing-transformers/hashbang-operator-transformer/HashbangOperatorTransformer.spec.ts

@@ -9,7 +9,7 @@ import { JavaScriptObfuscator } from '../../../../../src/JavaScriptObfuscatorFac
 describe('HashbangOperatorTransformer', () => {
 describe('HashbangOperatorTransformer', () => {
     describe('Variant #1: simple', () => {
     describe('Variant #1: simple', () => {
         const regExp: RegExp = new RegExp(
         const regExp: RegExp = new RegExp(
-            `#!\/usr\/bin\/env node\n` +
+            `^#!\/usr\/bin\/env node\n` +
             `var foo *= *'abc';`
             `var foo *= *'abc';`
         );
         );
 
 
@@ -33,7 +33,7 @@ describe('HashbangOperatorTransformer', () => {
 
 
     describe('Variant #2: multiple new lines', () => {
     describe('Variant #2: multiple new lines', () => {
         const regExp: RegExp = new RegExp(
         const regExp: RegExp = new RegExp(
-            `#!\/usr\/bin\/env node\n\n\n\n` +
+            `^#!\/usr\/bin\/env node\n\n\n\n` +
             `var foo *= *'abc';`
             `var foo *= *'abc';`
         );
         );
 
 
@@ -57,7 +57,7 @@ describe('HashbangOperatorTransformer', () => {
 
 
     describe('Variant #3: `stringArray` option enabled', () => {
     describe('Variant #3: `stringArray` option enabled', () => {
         const regExp: RegExp = new RegExp(
         const regExp: RegExp = new RegExp(
-            `#!\/usr\/bin\/env node\n` +
+            `^#!\/usr\/bin\/env node\n` +
             `var _0x(\\w){4} *= *\\['abc'];`
             `var _0x(\\w){4} *= *\\['abc'];`
         );
         );
 
 
@@ -80,4 +80,50 @@ describe('HashbangOperatorTransformer', () => {
             assert.match(obfuscatedCode, regExp);
             assert.match(obfuscatedCode, regExp);
         });
         });
     });
     });
+
+    describe('Variant #4: invalid hashbang indent', () => {
+        const regExp: RegExp = new RegExp(
+            `^var foo *= *'abc';`
+        );
+
+        let obfuscatedCode: string;
+
+        before(() => {
+            const code: string = readFileAsString(__dirname + '/fixtures/hashbang-indent.js');
+
+            obfuscatedCode = JavaScriptObfuscator.obfuscate(
+                code,
+                {
+                    ...NO_ADDITIONAL_NODES_PRESET
+                }
+            ).getObfuscatedCode();
+        });
+
+        it('should remove invalid hashbang operator', () => {
+            assert.match(obfuscatedCode, regExp);
+        });
+    });
+
+    describe('Variant #5: hashbang as a string value', () => {
+        const regExp: RegExp = new RegExp(
+            `^var foo *= *'#!/usr/bin/env\\\\x20node';$`
+        );
+
+        let obfuscatedCode: string;
+
+        before(() => {
+            const code: string = readFileAsString(__dirname + '/fixtures/hashbang-as-string-value.js');
+
+            obfuscatedCode = JavaScriptObfuscator.obfuscate(
+                code,
+                {
+                    ...NO_ADDITIONAL_NODES_PRESET
+                }
+            ).getObfuscatedCode();
+        });
+
+        it('should keep hashbang operator as a string value', () => {
+            assert.match(obfuscatedCode, regExp);
+        });
+    });
 });
 });

+ 1 - 0
test/functional-tests/code-transformers/preparing-transformers/hashbang-operator-transformer/fixtures/hashbang-as-string-value.js

@@ -0,0 +1 @@
+var foo = '#!/usr/bin/env node';

+ 5 - 0
test/functional-tests/code-transformers/preparing-transformers/hashbang-operator-transformer/fixtures/hashbang-indent.js

@@ -0,0 +1,5 @@
+ #!/usr/bin/env node
+
+
+
+var foo = 'abc';