NumericalExpressionDataToNodeConverter.spec.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import 'reflect-metadata';
  2. import * as ESTree from 'estree';
  3. import { assert } from 'chai';
  4. import { TNumberNumericalExpressionData } from '../../../../src/types/analyzers/number-numerical-expression-analyzer/TNumberNumericalExpressionData';
  5. import { NodeFactory } from '../../../../src/node/NodeFactory';
  6. import { NumericalExpressionDataToNodeConverter } from '../../../../src/node/NumericalExpressionDataToNodeConverter';
  7. describe('NumericalExpressionDataToNodeConverter', () => {
  8. describe('Variant #1: base', () => {
  9. const expectedExpressionNode: ESTree.Expression = NodeFactory.binaryExpressionNode(
  10. '+',
  11. NodeFactory.binaryExpressionNode(
  12. '+',
  13. NodeFactory.literalNode(1),
  14. NodeFactory.binaryExpressionNode(
  15. '*',
  16. NodeFactory.unaryExpressionNode(
  17. '-',
  18. NodeFactory.literalNode(2),
  19. ),
  20. NodeFactory.literalNode(3)
  21. ),
  22. ),
  23. NodeFactory.literalNode(4)
  24. );
  25. const numberNumericalExpressionData: TNumberNumericalExpressionData = [
  26. 1, [-2, 3], 4
  27. ];
  28. let expressionNode: ESTree.Expression;
  29. before(() => {
  30. expressionNode = NumericalExpressionDataToNodeConverter.convert(
  31. numberNumericalExpressionData,
  32. (number: number, isPositiveNumber: boolean): ESTree.Expression => {
  33. const numberLiteralNode: ESTree.Literal = NodeFactory.literalNode(number);
  34. return isPositiveNumber
  35. ? numberLiteralNode
  36. : NodeFactory.unaryExpressionNode(
  37. '-',
  38. numberLiteralNode
  39. );
  40. }
  41. );
  42. });
  43. it('should convert number numerical expression data to expression node', () => {
  44. assert.deepEqual(expressionNode, expectedExpressionNode);
  45. });
  46. });
  47. });