123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- import { IBlockStatementNode } from "../../src/interfaces/nodes/IBlockStatementNode";
- import { ICustomNode } from "../../src/interfaces/ICustomNode";
- import { IFunctionDeclarationNode } from "../../src/interfaces/nodes/IFunctionDeclarationNode";
- import { INode } from "../../src/interfaces/nodes/INode";
- import { IProgramNode } from "../../src/interfaces/nodes/IProgramNode";
- import { NodeType } from "../../src/enums/NodeType";
- 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";
- const assert: Chai.AssertStatic = require('chai').assert;
- describe('FunctionDeclarationObfuscator', () => {
- describe('obfuscateNode (functionDeclarationNode: IFunctionDeclarationNode, parentNode: INode): void', () => {
- let expressionStatementNode: INode,
- functionDeclarationObfuscator: FunctionDeclarationObfuscator,
- functionDeclarationNode: IFunctionDeclarationNode,
- functionName: string = 'functionDeclaration',
- programNode: IProgramNode;
- beforeEach(() => {
- expressionStatementNode = <INode>{
- type: NodeType.ExpressionStatement,
- expression: {
- type: NodeType.CallExpression,
- callee: NodeMocks.getIdentifierNode(functionName),
- arguments: []
- }
- };
- functionDeclarationObfuscator = new FunctionDeclarationObfuscator(
- new Map<string, ICustomNode>(),
- new Options(DEFAULT_PRESET)
- );
- functionDeclarationNode = NodeMocks.getFunctionDeclarationNode(
- functionName,
- NodeMocks.getBlockStatementNode()
- );
- });
- describe('if `functionDeclaration` node parent node is not a Program node', () => {
- let blockStatementNode: IBlockStatementNode,
- functionDeclarationParentNode: IFunctionDeclarationNode;
- beforeEach(() => {
- blockStatementNode = NodeMocks.getBlockStatementNode([
- functionDeclarationNode,
- expressionStatementNode
- ]);
- functionDeclarationParentNode = NodeMocks.getFunctionDeclarationNode(
- 'functionDeclarationParentNode',
- blockStatementNode
- );
- programNode = NodeMocks.getProgramNode([
- functionDeclarationParentNode
- ]);
- programNode['parentNode'] = programNode;
- functionDeclarationParentNode['parentNode'] = programNode;
- blockStatementNode['parentNode'] = functionDeclarationParentNode;
- functionDeclarationNode['parentNode'] = blockStatementNode;
- expressionStatementNode['parentNode'] = blockStatementNode;
- functionDeclarationObfuscator.obfuscateNode(
- functionDeclarationNode,
- functionDeclarationNode['parentNode']
- );
- });
- it('should obfuscate function name inside `functionDeclaration` parent scope', () => {
- assert.match(functionDeclarationNode.id.name, /^_0x\w+$/);
- });
- it('should obfuscate function name in `functionDeclaration` calls inside `functionDeclaration` parent scope', () => {
- assert.match((<any>expressionStatementNode).expression.callee.name, /^_0x\w+$/);
- });
- });
- describe('if `functionDeclaration` node parent node is a Program node', () => {
- beforeEach(() => {
- programNode = NodeMocks.getProgramNode([
- functionDeclarationNode
- ]);
- functionDeclarationNode['parentNode'] = programNode;
- expressionStatementNode['parentNode'] = programNode;
- functionDeclarationObfuscator.obfuscateNode(
- functionDeclarationNode,
- functionDeclarationNode['parentNode']
- );
- });
- it('shouldn\'t obfuscate function name inside `programNode` scope', () => {
- assert.equal(functionDeclarationNode.id.name, functionName);
- });
- it('should\'t obfuscate function name in `functionDeclaration` calls inside `programNode`', () => {
- assert.equal((<any>expressionStatementNode).expression.callee.name, functionName);
- });
- });
- });
- });
|