FunctionObfuscator.spec.ts 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import * as ESTree from 'estree';
  2. import { ICustomNode } from '../../../src/interfaces/custom-nodes/ICustomNode';
  3. import { DEFAULT_PRESET } from '../../../src/preset-options/DefaultPreset';
  4. import { FunctionObfuscator } from '../../../src/node-obfuscators/FunctionObfuscator';
  5. import { NodeMocks } from '../../mocks/NodeMocks';
  6. import { Options } from '../../../src/options/Options';
  7. const assert: Chai.AssertStatic = require('chai').assert;
  8. describe('FunctionObfuscator', () => {
  9. describe('obfuscateNode (functionNode: IFunctionNode): void', () => {
  10. let blockStatementNode: ESTree.BlockStatement,
  11. expressionStatementNode1: ESTree.ExpressionStatement,
  12. expressionStatementNode2: ESTree.ExpressionStatement,
  13. functionObfuscator: FunctionObfuscator,
  14. functionDeclarationNode: ESTree.FunctionDeclaration,
  15. functionName: string = 'functionDeclaration',
  16. identifierName: string = 'identifierName',
  17. identifierNode1: ESTree.Identifier,
  18. identifierNode2: ESTree.Identifier,
  19. identifierNode3: ESTree.Identifier,
  20. paramName: string = 'param1',
  21. programNode: ESTree.Program;
  22. before(() => {
  23. identifierNode1 = NodeMocks.getIdentifierNode(paramName);
  24. identifierNode2 = NodeMocks.getIdentifierNode(paramName);
  25. identifierNode3 = NodeMocks.getIdentifierNode(identifierName);
  26. expressionStatementNode1 = NodeMocks.getExpressionStatementNode(
  27. NodeMocks.getCallExpressionNode(identifierNode2)
  28. );
  29. expressionStatementNode2 = NodeMocks.getExpressionStatementNode(
  30. NodeMocks.getCallExpressionNode(identifierNode3)
  31. );
  32. blockStatementNode = NodeMocks.getBlockStatementNode([
  33. expressionStatementNode1
  34. ]);
  35. functionDeclarationNode = NodeMocks.getFunctionDeclarationNode(
  36. functionName,
  37. blockStatementNode,
  38. [
  39. identifierNode1
  40. ]
  41. );
  42. programNode = NodeMocks.getProgramNode([
  43. functionDeclarationNode
  44. ]);
  45. programNode['parentNode'] = programNode;
  46. functionDeclarationNode['parentNode'] = programNode;
  47. blockStatementNode['parentNode'] = functionDeclarationNode;
  48. identifierNode1['parentNode'] = functionDeclarationNode;
  49. expressionStatementNode1['parentNode'] = blockStatementNode;
  50. functionObfuscator = new FunctionObfuscator(
  51. new Map<string, ICustomNode>(),
  52. new Options(DEFAULT_PRESET)
  53. );
  54. functionObfuscator.obfuscateNode(functionDeclarationNode);
  55. });
  56. it('should obfuscate function parameter', () => {
  57. assert.match(identifierNode1.name, /^_0x\w+$/);
  58. });
  59. it('should obfuscate function parameter in function body', () => {
  60. assert.match(identifierNode2.name, /^_0x\w+$/);
  61. assert.equal(identifierNode2.name, identifierNode1.name);
  62. });
  63. it('shouldn\'t obfuscate other identifiers in function body', () => {
  64. assert.equal(identifierNode3.name, identifierName);
  65. });
  66. });
  67. });