split tests into functional and unit tests

This commit is contained in:
sanex3339
2016-07-09 18:35:47 +03:00
parent e30172dfda
commit 5333fb1cde
10 changed files with 212 additions and 105 deletions
+1 -4
View File
@@ -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();
-55
View File
@@ -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
);
});
});
});
@@ -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,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;
@@ -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 { 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 { NodeMocks } from '../mocks/NodeMocks';
import { NodeUtils } from '../../src/NodeUtils';
chai.use(require('chai-members-deep'));
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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 { 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 { 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 { FunctionObfuscator } from "../../../src/node-obfuscators/FunctionObfuscator";
import { NodeMocks } from "../../mocks/NodeMocks";
import { Options } from "../../../src/Options";
const assert: Chai.AssertStatic = require('chai').assert;