mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
split tests into functional and unit tests
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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
-2
@@ -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;
|
||||
|
||||
+8
-8
@@ -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
@@ -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;
|
||||
|
||||
+10
-10
@@ -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;
|
||||
Reference in New Issue
Block a user