PrevailingKindOfVariablesAnalyzer.spec.ts 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. import 'reflect-metadata';
  2. import { assert } from 'chai';
  3. import * as ESTree from 'estree';
  4. import { ServiceIdentifiers } from '../../../../src/container/ServiceIdentifiers';
  5. import { IInversifyContainerFacade } from '../../../../src/interfaces/container/IInversifyContainerFacade';
  6. import { IPrevailingKindOfVariablesAnalyzer } from '../../../../src/interfaces/analyzers/calls-graph-analyzer/IPrevailingKindOfVariablesAnalyzer';
  7. import { InversifyContainerFacade } from '../../../../src/container/InversifyContainerFacade';
  8. import { NodeFactory } from '../../../../src/node/NodeFactory';
  9. describe('PrevailingKindOfVariablesAnalyzer', () => {
  10. let prevailingKindOfVariablesAnalyzer: IPrevailingKindOfVariablesAnalyzer;
  11. before(() => {
  12. const inversifyContainerFacade: IInversifyContainerFacade = new InversifyContainerFacade();
  13. inversifyContainerFacade.load('', '', {});
  14. prevailingKindOfVariablesAnalyzer = inversifyContainerFacade
  15. .get<IPrevailingKindOfVariablesAnalyzer>(ServiceIdentifiers.IPrevailingKindOfVariablesAnalyzer);
  16. });
  17. describe('analyze', () => {
  18. let prevailingKindOfVariables: ESTree.VariableDeclaration['kind'];
  19. describe('Prevailing `var` kind', () => {
  20. const expectedPrevailingKind: ESTree.VariableDeclaration['kind'] = 'var';
  21. before(() => {
  22. const astTree: ESTree.Program = NodeFactory.programNode([
  23. NodeFactory.variableDeclarationNode(
  24. [
  25. NodeFactory.variableDeclaratorNode(
  26. NodeFactory.identifierNode('foo'),
  27. null
  28. )
  29. ],
  30. 'var'
  31. ),
  32. NodeFactory.variableDeclarationNode(
  33. [
  34. NodeFactory.variableDeclaratorNode(
  35. NodeFactory.identifierNode('bar'),
  36. null
  37. )
  38. ],
  39. 'const'
  40. ),
  41. NodeFactory.variableDeclarationNode(
  42. [
  43. NodeFactory.variableDeclaratorNode(
  44. NodeFactory.identifierNode('baz'),
  45. null
  46. )
  47. ],
  48. 'var'
  49. )
  50. ]);
  51. prevailingKindOfVariablesAnalyzer.analyze(astTree);
  52. prevailingKindOfVariables = prevailingKindOfVariablesAnalyzer.getPrevailingKind();
  53. });
  54. it('should return correct prevailing kind of variables', () => {
  55. assert.equal(prevailingKindOfVariables, expectedPrevailingKind);
  56. });
  57. });
  58. describe('Prevailing `let` kind', () => {
  59. const expectedPrevailingKind: ESTree.VariableDeclaration['kind'] = 'let';
  60. before(() => {
  61. const astTree: ESTree.Program = NodeFactory.programNode([
  62. NodeFactory.variableDeclarationNode(
  63. [
  64. NodeFactory.variableDeclaratorNode(
  65. NodeFactory.identifierNode('foo'),
  66. null
  67. )
  68. ],
  69. 'let'
  70. ),
  71. NodeFactory.variableDeclarationNode(
  72. [
  73. NodeFactory.variableDeclaratorNode(
  74. NodeFactory.identifierNode('bar'),
  75. null
  76. )
  77. ],
  78. 'var'
  79. ),
  80. NodeFactory.variableDeclarationNode(
  81. [
  82. NodeFactory.variableDeclaratorNode(
  83. NodeFactory.identifierNode('baz'),
  84. null
  85. )
  86. ],
  87. 'let'
  88. )
  89. ]);
  90. prevailingKindOfVariablesAnalyzer.analyze(astTree);
  91. prevailingKindOfVariables = prevailingKindOfVariablesAnalyzer.getPrevailingKind();
  92. });
  93. it('should return correct prevailing kind of variables', () => {
  94. assert.equal(prevailingKindOfVariables, expectedPrevailingKind);
  95. });
  96. });
  97. describe('Prevailing `const` kind', () => {
  98. const expectedPrevailingKind: ESTree.VariableDeclaration['kind'] = 'const';
  99. before(() => {
  100. const astTree: ESTree.Program = NodeFactory.programNode([
  101. NodeFactory.variableDeclarationNode(
  102. [
  103. NodeFactory.variableDeclaratorNode(
  104. NodeFactory.identifierNode('foo'),
  105. null
  106. )
  107. ],
  108. 'let'
  109. ),
  110. NodeFactory.variableDeclarationNode(
  111. [
  112. NodeFactory.variableDeclaratorNode(
  113. NodeFactory.identifierNode('bar'),
  114. null
  115. )
  116. ],
  117. 'const'
  118. ),
  119. NodeFactory.variableDeclarationNode(
  120. [
  121. NodeFactory.variableDeclaratorNode(
  122. NodeFactory.identifierNode('baz'),
  123. null
  124. )
  125. ],
  126. 'const'
  127. )
  128. ]);
  129. prevailingKindOfVariablesAnalyzer.analyze(astTree);
  130. prevailingKindOfVariables = prevailingKindOfVariablesAnalyzer.getPrevailingKind();
  131. });
  132. it('should return correct prevailing kind of variables', () => {
  133. assert.equal(prevailingKindOfVariables, expectedPrevailingKind);
  134. });
  135. });
  136. describe('No variables', () => {
  137. const expectedPrevailingKind: ESTree.VariableDeclaration['kind'] = 'var';
  138. before(() => {
  139. const astTree: ESTree.Program = NodeFactory.programNode();
  140. prevailingKindOfVariablesAnalyzer.analyze(astTree);
  141. prevailingKindOfVariables = prevailingKindOfVariablesAnalyzer.getPrevailingKind();
  142. });
  143. it('should return correct prevailing kind of variables', () => {
  144. assert.equal(prevailingKindOfVariables, expectedPrevailingKind);
  145. });
  146. });
  147. });
  148. });