NodeLiteralUtils.spec.ts 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. import * as ESTree from 'estree';
  2. import { assert } from 'chai';
  3. import { NodeFactory } from '../../../../src/node/NodeFactory';
  4. import { NodeLiteralUtils } from '../../../../src/node/NodeLiteralUtils';
  5. describe('NodeLiteralUtils', () => {
  6. describe('isProhibitedLiteralNode', () => {
  7. describe('String literal node', () => {
  8. describe('Variant #1: base string literal node', () => {
  9. const literalNode: ESTree.Literal = NodeFactory.literalNode('foo');
  10. let statementNode: ESTree.Statement;
  11. before(() => {
  12. statementNode = NodeFactory.expressionStatementNode(
  13. literalNode
  14. );
  15. literalNode.parentNode = statementNode;
  16. });
  17. it('should return false for base string literal node', () => {
  18. assert.equal(NodeLiteralUtils.isProhibitedLiteralNode(literalNode, statementNode), false);
  19. });
  20. });
  21. describe('Variant #2: property literal node', () => {
  22. describe('Variant #1: property key literal node', () => {
  23. const literalNode: ESTree.Literal = NodeFactory.literalNode('foo');
  24. let propertyNode: ESTree.Property;
  25. before(() => {
  26. propertyNode = NodeFactory.propertyNode(
  27. literalNode,
  28. NodeFactory.literalNode(1)
  29. );
  30. literalNode.parentNode = propertyNode;
  31. });
  32. it('should return false for property key literal node', () => {
  33. assert.equal(NodeLiteralUtils.isProhibitedLiteralNode(literalNode, propertyNode), true);
  34. });
  35. });
  36. describe('Variant #2: computed property key literal node', () => {
  37. const literalNode: ESTree.Literal = NodeFactory.literalNode('foo');
  38. let propertyNode: ESTree.Property;
  39. before(() => {
  40. propertyNode = NodeFactory.propertyNode(
  41. literalNode,
  42. NodeFactory.literalNode(1),
  43. true
  44. );
  45. literalNode.parentNode = propertyNode;
  46. });
  47. it('should return false for computed property key literal node', () => {
  48. assert.equal(NodeLiteralUtils.isProhibitedLiteralNode(literalNode, propertyNode), false);
  49. });
  50. });
  51. describe('Variant #3: property value literal node', () => {
  52. const literalNode: ESTree.Literal = NodeFactory.literalNode('foo');
  53. let propertyNode: ESTree.Property;
  54. before(() => {
  55. propertyNode = NodeFactory.propertyNode(
  56. NodeFactory.literalNode(1),
  57. literalNode
  58. );
  59. literalNode.parentNode = propertyNode;
  60. });
  61. it('should return false for property value literal node', () => {
  62. assert.equal(NodeLiteralUtils.isProhibitedLiteralNode(literalNode, propertyNode), false);
  63. });
  64. });
  65. });
  66. describe('Variant #3: import declaration node', () => {
  67. describe('Variant #1: base import declaration literal node', () => {
  68. const literalNode: ESTree.Literal = NodeFactory.literalNode('foo');
  69. let importDeclarationNode: ESTree.ImportDeclaration;
  70. before(() => {
  71. importDeclarationNode = NodeFactory.importDeclarationNode(
  72. [],
  73. literalNode
  74. );
  75. literalNode.parentNode = importDeclarationNode;
  76. });
  77. it('should return false for import declaration literal node', () => {
  78. assert.equal(NodeLiteralUtils.isProhibitedLiteralNode(literalNode, importDeclarationNode), true);
  79. });
  80. });
  81. });
  82. describe('Variant #4: export named declaration node', () => {
  83. describe('Variant #1: base export named declaration literal node', () => {
  84. const literalNode: ESTree.Literal = NodeFactory.literalNode('foo');
  85. let exportNamedDeclarationNode: ESTree.ExportNamedDeclaration;
  86. before(() => {
  87. exportNamedDeclarationNode = NodeFactory.exportNamedDeclarationNode(
  88. [],
  89. literalNode
  90. );
  91. literalNode.parentNode = exportNamedDeclarationNode;
  92. });
  93. it('should return false for export named declaration literal node', () => {
  94. assert.equal(NodeLiteralUtils.isProhibitedLiteralNode(literalNode, exportNamedDeclarationNode), true);
  95. });
  96. });
  97. });
  98. describe('Variant #5: export all declaration node', () => {
  99. describe('Variant #1: base export all declaration literal node', () => {
  100. const literalNode: ESTree.Literal = NodeFactory.literalNode('foo');
  101. let exportAllDeclarationNode: ESTree.ExportAllDeclaration;
  102. before(() => {
  103. exportAllDeclarationNode = NodeFactory.exportAllDeclarationNode(
  104. literalNode
  105. );
  106. literalNode.parentNode = exportAllDeclarationNode;
  107. });
  108. it('should return false for export all declaration literal node', () => {
  109. assert.equal(NodeLiteralUtils.isProhibitedLiteralNode(literalNode, exportAllDeclarationNode), true);
  110. });
  111. });
  112. });
  113. });
  114. describe('Number literal node', () => {
  115. describe('Variant #1: base number literal node', () => {
  116. const literalNode: ESTree.Literal = NodeFactory.literalNode(1);
  117. let statementNode: ESTree.Statement;
  118. before(() => {
  119. statementNode = NodeFactory.expressionStatementNode(
  120. literalNode
  121. );
  122. const blockStatementNode: ESTree.BlockStatement = NodeFactory.blockStatementNode([
  123. statementNode
  124. ]);
  125. statementNode.parentNode = blockStatementNode;
  126. literalNode.parentNode = statementNode;
  127. });
  128. it('should return false for base number literal node', () => {
  129. assert.equal(NodeLiteralUtils.isProhibitedLiteralNode(literalNode, statementNode), false);
  130. });
  131. });
  132. });
  133. });
  134. });