瀏覽代碼

split tests into functional and unit tests

sanex3339 8 年之前
父節點
當前提交
5333fb1cde

+ 1 - 4
src/JavaScriptObfuscator.ts

@@ -23,10 +23,7 @@ export class JavaScriptObfuscator {
      * @param options
      * @returns {string}
      */
-    public static obfuscateWithSourceMap (
-        sourceCode: string,
-        options: IOptionsPreset = {}
-    ): IObfuscationResult {
+    public static obfuscateWithSourceMap (sourceCode: string, options: IOptionsPreset = {}): IObfuscationResult {
         let javaScriptObfuscator: JavaScriptObfuscatorInternal = new JavaScriptObfuscatorInternal(sourceCode, options);
 
         javaScriptObfuscator.obfuscate();

+ 0 - 55
test/JavaScriptObfuscator.spec.ts

@@ -1,55 +0,0 @@
-import { JavaScriptObfuscator } from "../src/JavaScriptObfuscator";
-
-import { NO_CUSTOM_NODES_PRESET } from "../src/preset-options/NoCustomNodesPreset";
-
-const assert: Chai.AssertStatic = require('chai').assert;
-
-describe('JavaScriptObfuscator', () => {
-    describe('obfuscate (sourceCode: string, customOptions?: IOptionsPreset): string', () => {
-        it('should obfuscate simple code with variable inside global scope', () => {
-            assert.match(
-                JavaScriptObfuscator.obfuscate(
-                    `var test = 1;`,
-                    Object.assign({}, NO_CUSTOM_NODES_PRESET)
-                ),
-                /^var *test *= *0x\d+;$/
-            );
-        });
-
-        it('should obfuscate simple code with variable inside block-scope', () => {
-            assert.match(
-                JavaScriptObfuscator.obfuscate(
-                    `(function () {var test = 1;})()`,
-                    Object.assign({}, NO_CUSTOM_NODES_PRESET)
-                ),
-                /^\(function *\(\) *\{ *var *_0x[\w]+ *= *0x\d+; *\}(\(\)\)|\)\(\));?$/
-            );
-        });
-
-        it('should obfuscate simple code with literal variable value', () => {
-            let pattern: RegExp = /^var _0x(\w){4} *= *\['(\\[x|u]\d+)+'\]; *var *test *= *_0x(\w){4}\[0x0\];$/;
-
-            assert.match(
-                JavaScriptObfuscator.obfuscate(
-                    `var test = 'abc';`,
-                    Object.assign({}, NO_CUSTOM_NODES_PRESET, {
-                        unicodeArray: true,
-                        unicodeArrayThreshold: 1
-                    })
-                ),
-                pattern
-            );
-
-            assert.match(
-                JavaScriptObfuscator.obfuscate(
-                    `var test = 'абц';`,
-                    Object.assign({}, NO_CUSTOM_NODES_PRESET, {
-                        unicodeArray: true,
-                        unicodeArrayThreshold: 1
-                    })
-                ),
-                pattern
-            );
-        });
-    });
-});

+ 165 - 0
test/functional-tests/JavaScriptObfuscator.spec.ts

@@ -0,0 +1,165 @@
+import { JavaScriptObfuscator } from "../../src/JavaScriptObfuscator";
+
+import { NO_CUSTOM_NODES_PRESET } from "../../src/preset-options/NoCustomNodesPreset";
+import {IObfuscationResult} from "../../src/interfaces/IObfuscationResult";
+
+const assert: Chai.AssertStatic = require('chai').assert;
+
+describe('JavaScriptObfuscator', () => {
+    describe('obfuscate (sourceCode: string, customOptions?: IOptionsPreset): string', () => {
+        it('should returns empty string if source code is empty', () => {
+            assert.isNotOk(JavaScriptObfuscator.obfuscate('', Object.assign({}, NO_CUSTOM_NODES_PRESET)));
+        });
+
+        it('should obfuscate simple code with variable inside global scope', () => {
+            assert.match(
+                JavaScriptObfuscator.obfuscate(
+                    `var test = 1;`,
+                    Object.assign({}, NO_CUSTOM_NODES_PRESET)
+                ),
+                /^var *test *= *0x\d+;$/
+            );
+        });
+
+        it('should obfuscate simple code with variable inside block-scope', () => {
+            assert.match(
+                JavaScriptObfuscator.obfuscate(
+                    `(function () {var test = 1;})()`,
+                    Object.assign({}, NO_CUSTOM_NODES_PRESET)
+                ),
+                /^\(function *\(\) *\{ *var *_0x[\w]+ *= *0x\d+; *\}(\(\)\)|\)\(\));?$/
+            );
+        });
+
+        it('should obfuscate simple code with literal variable value', () => {
+            let pattern: RegExp = /^var _0x(\w){4} *= *\['(\\[x|u]\d+)+'\]; *var *test *= *_0x(\w){4}\[0x0\];$/;
+
+            assert.match(
+                JavaScriptObfuscator.obfuscate(
+                    `var test = 'abc';`,
+                    Object.assign({}, NO_CUSTOM_NODES_PRESET, {
+                        unicodeArray: true,
+                        unicodeArrayThreshold: 1
+                    })
+                ),
+                pattern
+            );
+
+            assert.match(
+                JavaScriptObfuscator.obfuscate(
+                    `var test = 'абц';`,
+                    Object.assign({}, NO_CUSTOM_NODES_PRESET, {
+                        unicodeArray: true,
+                        unicodeArrayThreshold: 1
+                    })
+                ),
+                pattern
+            );
+        });
+    });
+
+    describe('obfuscateWithSourceMap (sourceCode: string, customOptions?: IOptionsPreset): string', () => {
+        describe('if `sourceMap` option is `false`', () => {
+            it('should returns object with obfuscated code and empty source map', () => {
+                let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscateWithSourceMap(
+                    `var test = 1;`,
+                    Object.assign({}, NO_CUSTOM_NODES_PRESET)
+                );
+
+                assert.isOk(obfuscationResult.obfuscatedCode);
+                assert.isNotOk(obfuscationResult.sourceMap);
+            });
+        });
+
+        describe('if `sourceMap` option is `true`', () => {
+            it('should returns object with obfuscated code and source map', () => {
+                let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscateWithSourceMap(
+                    `var test = 1;`,
+                    Object.assign({}, NO_CUSTOM_NODES_PRESET, {
+                        sourceMap: true
+                    })
+                );
+
+                assert.isOk(obfuscationResult.obfuscatedCode);
+                assert.isOk(JSON.parse(obfuscationResult.sourceMap).mappings);
+            });
+
+            it('should returns object with obfuscated code and empty source map if `sourceMapMode` is `inline', () => {
+                let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscateWithSourceMap(
+                    `var test = 1;`,
+                    Object.assign({}, NO_CUSTOM_NODES_PRESET, {
+                        sourceMapMode: 'inline'
+                    })
+                );
+
+                assert.isOk(obfuscationResult.obfuscatedCode);
+                assert.isNotOk(obfuscationResult.sourceMap);
+            });
+
+            it('should returns object with empty obfuscated code and empty source map if source code is empty', () => {
+                let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscateWithSourceMap(
+                    '',
+                    Object.assign({}, NO_CUSTOM_NODES_PRESET)
+                );
+
+                assert.isNotOk(obfuscationResult.obfuscatedCode);
+                assert.isNotOk(obfuscationResult.sourceMap);
+            });
+        });
+
+        it('should returns empty string if source code is empty', () => {
+            assert.isNotOk(
+                JavaScriptObfuscator.obfuscateWithSourceMap(
+                    '',
+                    Object.assign({}, NO_CUSTOM_NODES_PRESET)
+                ).obfuscatedCode
+            );
+        });
+
+        it('should obfuscate simple code with variable inside global scope', () => {
+            assert.match(
+                JavaScriptObfuscator.obfuscateWithSourceMap(
+                    `var test = 1;`,
+                    Object.assign({}, NO_CUSTOM_NODES_PRESET)
+                ).obfuscatedCode,
+                /^var *test *= *0x\d+;$/
+            );
+        });
+
+        it('should obfuscate simple code with variable inside block-scope', () => {
+            assert.match(
+                JavaScriptObfuscator.obfuscateWithSourceMap(
+                    `(function () {var test = 1;})()`,
+                    Object.assign({}, NO_CUSTOM_NODES_PRESET)
+                ).obfuscatedCode,
+                /^\(function *\(\) *\{ *var *_0x[\w]+ *= *0x\d+; *\}(\(\)\)|\)\(\));?$/
+            );
+        });
+
+        it('should obfuscate simple code with literal variable value', () => {
+            let pattern: RegExp = /^var _0x(\w){4} *= *\['(\\[x|u]\d+)+'\]; *var *test *= *_0x(\w){4}\[0x0\];$/;
+
+            assert.match(
+                JavaScriptObfuscator.obfuscateWithSourceMap(
+                    `var test = 'abc';`,
+                    Object.assign({}, NO_CUSTOM_NODES_PRESET, {
+                        unicodeArray: true,
+                        unicodeArrayThreshold: 1
+                    })
+                ).obfuscatedCode,
+                pattern
+            );
+
+            assert.match(
+                JavaScriptObfuscator.obfuscateWithSourceMap(
+                    `var test = 'абц';`,
+                    Object.assign({}, NO_CUSTOM_NODES_PRESET, {
+                        unicodeArray: true,
+                        unicodeArrayThreshold: 1
+                    })
+                ).obfuscatedCode,
+                pattern
+            );
+        });
+    });
+});

+ 2 - 2
test/JavaScriptObfuscatorCLI.spec.ts → test/functional-tests/JavaScriptObfuscatorCLI.spec.ts

@@ -2,9 +2,9 @@ import * as fs from 'fs';
 import * as mkdirp from 'mkdirp';
 import * as sinon from 'sinon';
 
-import { StdoutWriteMock } from "../test/mocks/StdoutWriteMock";
+import { StdoutWriteMock } from "../mocks/StdoutWriteMock";
 
-import { JavaScriptObfuscator } from "../src/JavaScriptObfuscator";
+import { JavaScriptObfuscator } from "../../src/JavaScriptObfuscator";
 
 const assert: Chai.AssertStatic = require('chai').assert;
 

+ 13 - 13
test/NodeUtils.spec.ts → test/unit-tests/NodeUtils.spec.ts

@@ -1,18 +1,18 @@
 import * as chai from 'chai';
 
-import { IBlockStatementNode } from "../src/interfaces/nodes/IBlockStatementNode";
-import { IExpressionStatementNode } from "../src/interfaces/nodes/IExpressionStatementNode";
-import { IFunctionDeclarationNode } from "../src/interfaces/nodes/IFunctionDeclarationNode";
-import { IIdentifierNode } from "../src/interfaces/nodes/IIdentifierNode";
-import { IIfStatementNode } from "../src/interfaces/nodes/IIfStatementNode";
-import { ILiteralNode } from "../src/interfaces/nodes/ILiteralNode";
-import { INode } from "../src/interfaces/nodes/INode";
-import { IProgramNode } from "../src/interfaces/nodes/IProgramNode";
-import { IVariableDeclarationNode } from "../src/interfaces/nodes/IVariableDeclarationNode";
-import { IVariableDeclaratorNode } from "../src/interfaces/nodes/IVariableDeclaratorNode";
-
-import { NodeMocks } from './mocks/NodeMocks';
-import { NodeUtils } from '../src/NodeUtils';
+import { IBlockStatementNode } from "../../src/interfaces/nodes/IBlockStatementNode";
+import { IExpressionStatementNode } from "../../src/interfaces/nodes/IExpressionStatementNode";
+import { IFunctionDeclarationNode } from "../../src/interfaces/nodes/IFunctionDeclarationNode";
+import { IIdentifierNode } from "../../src/interfaces/nodes/IIdentifierNode";
+import { IIfStatementNode } from "../../src/interfaces/nodes/IIfStatementNode";
+import { ILiteralNode } from "../../src/interfaces/nodes/ILiteralNode";
+import { INode } from "../../src/interfaces/nodes/INode";
+import { IProgramNode } from "../../src/interfaces/nodes/IProgramNode";
+import { IVariableDeclarationNode } from "../../src/interfaces/nodes/IVariableDeclarationNode";
+import { IVariableDeclaratorNode } from "../../src/interfaces/nodes/IVariableDeclaratorNode";
+
+import { NodeMocks } from '../mocks/NodeMocks';
+import { NodeUtils } from '../../src/NodeUtils';
 
 chai.use(require('chai-members-deep'));
 

+ 3 - 3
test/OptionsNormalizer.spec.ts → test/unit-tests/OptionsNormalizer.spec.ts

@@ -1,8 +1,8 @@
-import { IOptionsPreset } from "../src/interfaces/IOptionsPreset";
+import { IOptionsPreset } from "../../src/interfaces/IOptionsPreset";
 
-import { OptionsNormalizer } from '../src/OptionsNormalizer';
+import { OptionsNormalizer } from '../../src/OptionsNormalizer';
 
-import { DEFAULT_PRESET } from '../src/preset-options/DefaultPreset';
+import { DEFAULT_PRESET } from '../../src/preset-options/DefaultPreset';
 
 const assert: Chai.AssertStatic = require('chai').assert;
 

+ 2 - 2
test/Utils.spec.ts → test/unit-tests/Utils.spec.ts

@@ -1,6 +1,6 @@
-import { Utils } from '../src/Utils';
+import { Utils } from '../../src/Utils';
 
-import { JSFuck } from '../src/enums/JSFuck';
+import { JSFuck } from '../../src/enums/JSFuck';
 
 const assert: Chai.AssertStatic = require('chai').assert;
 

+ 8 - 8
test/node-obfuscators/CatchClauseObfuscator.spec.ts → test/unit-tests/node-obfuscators/CatchClauseObfuscator.spec.ts

@@ -1,14 +1,14 @@
-import { ICatchClauseNode } from "../../src/interfaces/nodes/ICatchClauseNode";
-import { ICustomNode } from "../../src/interfaces/ICustomNode";
-import { IExpressionStatementNode } from "../../src/interfaces/nodes/IExpressionStatementNode";
+import { ICatchClauseNode } from "../../../src/interfaces/nodes/ICatchClauseNode";
+import { ICustomNode } from "../../../src/interfaces/ICustomNode";
+import { IExpressionStatementNode } from "../../../src/interfaces/nodes/IExpressionStatementNode";
 
-import { DEFAULT_PRESET } from "../../src/preset-options/DefaultPreset";
+import { DEFAULT_PRESET } from "../../../src/preset-options/DefaultPreset";
 
-import { NodeType } from "../../src/enums/NodeType";
+import { NodeType } from "../../../src/enums/NodeType";
 
-import { CatchClauseObfuscator } from '../../src/node-obfuscators/CatchClauseObfuscator';
-import { NodeMocks } from "../mocks/NodeMocks";
-import { Options } from "../../src/Options";
+import { CatchClauseObfuscator } from '../../../src/node-obfuscators/CatchClauseObfuscator';
+import { NodeMocks } from "../../mocks/NodeMocks";
+import { Options } from "../../../src/Options";
 
 const assert: Chai.AssertStatic = require('chai').assert;
 

+ 9 - 9
test/node-obfuscators/FunctionDeclarationObfuscator.spec.ts → test/unit-tests/node-obfuscators/FunctionDeclarationObfuscator.spec.ts

@@ -1,14 +1,14 @@
-import { IBlockStatementNode } from "../../src/interfaces/nodes/IBlockStatementNode";
-import { ICustomNode } from "../../src/interfaces/ICustomNode";
-import { IExpressionStatementNode } from "../../src/interfaces/nodes/IExpressionStatementNode";
-import { IFunctionDeclarationNode } from "../../src/interfaces/nodes/IFunctionDeclarationNode";
-import { IProgramNode } from "../../src/interfaces/nodes/IProgramNode";
+import { IBlockStatementNode } from "../../../src/interfaces/nodes/IBlockStatementNode";
+import { ICustomNode } from "../../../src/interfaces/ICustomNode";
+import { IExpressionStatementNode } from "../../../src/interfaces/nodes/IExpressionStatementNode";
+import { IFunctionDeclarationNode } from "../../../src/interfaces/nodes/IFunctionDeclarationNode";
+import { IProgramNode } from "../../../src/interfaces/nodes/IProgramNode";
 
-import { DEFAULT_PRESET } from "../../src/preset-options/DefaultPreset";
+import { DEFAULT_PRESET } from "../../../src/preset-options/DefaultPreset";
 
-import { FunctionDeclarationObfuscator } from '../../src/node-obfuscators/FunctionDeclarationObfuscator';
-import { NodeMocks } from "../mocks/NodeMocks";
-import { Options } from "../../src/Options";
+import { FunctionDeclarationObfuscator } from '../../../src/node-obfuscators/FunctionDeclarationObfuscator';
+import { NodeMocks } from "../../mocks/NodeMocks";
+import { Options } from "../../../src/Options";
 
 const assert: Chai.AssertStatic = require('chai').assert;
 

+ 12 - 12
test/node-obfuscators/FunctionObfuscator.spec.ts → test/unit-tests/node-obfuscators/FunctionObfuscator.spec.ts

@@ -1,15 +1,15 @@
-import { IBlockStatementNode } from "../../src/interfaces/nodes/IBlockStatementNode";
-import { ICustomNode } from "../../src/interfaces/ICustomNode";
-import { IExpressionStatementNode } from "../../src/interfaces/nodes/IExpressionStatementNode";
-import { IFunctionDeclarationNode } from "../../src/interfaces/nodes/IFunctionDeclarationNode";
-import { IIdentifierNode } from "../../src/interfaces/nodes/IIdentifierNode";
-import { IProgramNode } from "../../src/interfaces/nodes/IProgramNode";
-
-import { DEFAULT_PRESET } from "../../src/preset-options/DefaultPreset";
-
-import { FunctionObfuscator } from "../../src/node-obfuscators/FunctionObfuscator";
-import { NodeMocks } from "../mocks/NodeMocks";
-import { Options } from "../../src/Options";
+import { IBlockStatementNode } from "../../../src/interfaces/nodes/IBlockStatementNode";
+import { ICustomNode } from "../../../src/interfaces/ICustomNode";
+import { IExpressionStatementNode } from "../../../src/interfaces/nodes/IExpressionStatementNode";
+import { IFunctionDeclarationNode } from "../../../src/interfaces/nodes/IFunctionDeclarationNode";
+import { IIdentifierNode } from "../../../src/interfaces/nodes/IIdentifierNode";
+import { IProgramNode } from "../../../src/interfaces/nodes/IProgramNode";
+
+import { DEFAULT_PRESET } from "../../../src/preset-options/DefaultPreset";
+
+import { FunctionObfuscator } from "../../../src/node-obfuscators/FunctionObfuscator";
+import { NodeMocks } from "../../mocks/NodeMocks";
+import { Options } from "../../../src/Options";
 
 
 const assert: Chai.AssertStatic = require('chai').assert;