ObfuscatingGuardsTransformer.spec.ts 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. import 'reflect-metadata';
  2. import { assert } from 'chai';
  3. import * as ESTree from 'estree';
  4. import { ServiceIdentifiers } from '../../../../src/container/ServiceIdentifiers';
  5. import { InversifyContainerFacade } from '../../../../src/container/InversifyContainerFacade';
  6. import { IInversifyContainerFacade } from '../../../../src/interfaces/container/IInversifyContainerFacade';
  7. import { INodeTransformer } from '../../../../src/interfaces/node-transformers/INodeTransformer';
  8. import { NodeTransformer } from '../../../../src/enums/node-transformers/NodeTransformer';
  9. import { NodeFactory } from '../../../../src/node/NodeFactory';
  10. import { NodeMetadata } from '../../../../src/node/NodeMetadata';
  11. import { NodeUtils } from '../../../../src/node/NodeUtils';
  12. describe('ObfuscatingGuardsTransformer', () => {
  13. describe('transformNode', () => {
  14. const forceTransformString: string = 'important string';
  15. const ignoredAndForceTransformString: string = 'important ignored string';
  16. let inversifyContainerFacade: IInversifyContainerFacade,
  17. obfuscatingGuardsTransformer: INodeTransformer;
  18. before(() => {
  19. inversifyContainerFacade = new InversifyContainerFacade();
  20. inversifyContainerFacade.load('', '', {
  21. forceTransformStrings: [
  22. forceTransformString,
  23. ignoredAndForceTransformString
  24. ],
  25. reservedStrings: [
  26. ignoredAndForceTransformString
  27. ]
  28. });
  29. obfuscatingGuardsTransformer = inversifyContainerFacade
  30. .getNamed(ServiceIdentifiers.INodeTransformer, NodeTransformer.ObfuscatingGuardsTransformer);
  31. });
  32. describe('Variant #1: transform node', () => {
  33. const identifier: ESTree.Identifier = NodeFactory.identifierNode('foo');
  34. const expectedResult: ESTree.Identifier = NodeUtils.clone(identifier);
  35. let result: ESTree.Identifier;
  36. before(() => {
  37. identifier.parentNode = identifier;
  38. NodeMetadata.set(expectedResult, {
  39. forceTransformNode: false,
  40. ignoredNode: false
  41. });
  42. result = <ESTree.Identifier>obfuscatingGuardsTransformer.transformNode(identifier, identifier);
  43. });
  44. it('should add `ignoredNode` property with `false` value to given node', () => {
  45. assert.deepEqual(result, expectedResult);
  46. });
  47. });
  48. describe('Variant #2: ignored node', () => {
  49. const expressionStatement: ESTree.ExpressionStatement = NodeFactory.directiveNode(
  50. NodeFactory.literalNode('use strict'),
  51. 'use strict'
  52. );
  53. const expectedResult: ESTree.ExpressionStatement = NodeUtils.clone(expressionStatement);
  54. let result: ESTree.ExpressionStatement;
  55. before(() => {
  56. expressionStatement.parentNode = expressionStatement;
  57. expressionStatement.expression.parentNode = expressionStatement;
  58. expectedResult.parentNode = expectedResult;
  59. NodeMetadata.set(expectedResult, {
  60. forceTransformNode: false,
  61. ignoredNode: true
  62. });
  63. result = <ESTree.ExpressionStatement>obfuscatingGuardsTransformer
  64. .transformNode(expressionStatement, expressionStatement);
  65. });
  66. it('should add `ignoredNode` property with `true` value to given node', () => {
  67. assert.deepEqual(result, expectedResult);
  68. });
  69. });
  70. describe('Variant #3: force transform node', () => {
  71. const literalNode: ESTree.Literal = NodeFactory.literalNode(forceTransformString);
  72. const expectedResult: ESTree.Literal = NodeUtils.clone(literalNode);
  73. let result: ESTree.Literal;
  74. before(() => {
  75. literalNode.parentNode = literalNode;
  76. expectedResult.parentNode = expectedResult;
  77. NodeMetadata.set(expectedResult, {
  78. forceTransformNode: true,
  79. ignoredNode: false
  80. });
  81. result = <ESTree.Literal>obfuscatingGuardsTransformer
  82. .transformNode(literalNode, literalNode);
  83. });
  84. it('should add `forceTransformNode` property with `true` value to given node', () => {
  85. assert.deepEqual(result, expectedResult);
  86. });
  87. });
  88. describe('Variant #4: ignored node and force transform node', () => {
  89. const literalNode: ESTree.Literal = NodeFactory.literalNode(ignoredAndForceTransformString);
  90. const expectedResult: ESTree.Literal = NodeUtils.clone(literalNode);
  91. let result: ESTree.Literal;
  92. before(() => {
  93. literalNode.parentNode = literalNode;
  94. expectedResult.parentNode = expectedResult;
  95. NodeMetadata.set(expectedResult, {
  96. forceTransformNode: true,
  97. ignoredNode: false
  98. });
  99. result = <ESTree.Literal>obfuscatingGuardsTransformer
  100. .transformNode(literalNode, literalNode);
  101. });
  102. it('should add correct metadata to given node', () => {
  103. assert.deepEqual(result, expectedResult);
  104. });
  105. });
  106. });
  107. });