| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 | import 'reflect-metadata';import { assert } from 'chai';import * as ESTree from 'estree';import { ServiceIdentifiers } from '../../../../src/container/ServiceIdentifiers';import { IInversifyContainerFacade } from '../../../../src/interfaces/container/IInversifyContainerFacade';import { IPrevailingKindOfVariablesAnalyzer } from '../../../../src/interfaces/analyzers/calls-graph-analyzer/IPrevailingKindOfVariablesAnalyzer';import { InversifyContainerFacade } from '../../../../src/container/InversifyContainerFacade';import { NodeFactory } from '../../../../src/node/NodeFactory';describe('PrevailingKindOfVariablesAnalyzer', () => {    let prevailingKindOfVariablesAnalyzer: IPrevailingKindOfVariablesAnalyzer;    before(() => {        const inversifyContainerFacade: IInversifyContainerFacade = new InversifyContainerFacade();        inversifyContainerFacade.load('', '', {});        prevailingKindOfVariablesAnalyzer = inversifyContainerFacade            .get<IPrevailingKindOfVariablesAnalyzer>(ServiceIdentifiers.IPrevailingKindOfVariablesAnalyzer);    });    describe('analyze', () => {        let prevailingKindOfVariables: ESTree.VariableDeclaration['kind'];        describe('Prevailing `var` kind', () => {            const expectedPrevailingKind: ESTree.VariableDeclaration['kind'] = 'var';            before(() => {                const astTree: ESTree.Program = NodeFactory.programNode([                    NodeFactory.variableDeclarationNode(                        [                            NodeFactory.variableDeclaratorNode(                                NodeFactory.identifierNode('foo'),                                null                            )                        ],                        'var'                    ),                    NodeFactory.variableDeclarationNode(                        [                            NodeFactory.variableDeclaratorNode(                                NodeFactory.identifierNode('bar'),                                null                            )                        ],                        'const'                    ),                    NodeFactory.variableDeclarationNode(                        [                            NodeFactory.variableDeclaratorNode(                                NodeFactory.identifierNode('baz'),                                null                            )                        ],                        'var'                    )                ]);                prevailingKindOfVariablesAnalyzer.analyze(astTree);                prevailingKindOfVariables = prevailingKindOfVariablesAnalyzer.getPrevailingKind();            });            it('should return correct prevailing kind of variables', () => {                assert.equal(prevailingKindOfVariables, expectedPrevailingKind);            });        });        describe('Prevailing `let` kind', () => {            const expectedPrevailingKind: ESTree.VariableDeclaration['kind'] = 'let';            before(() => {                const astTree: ESTree.Program = NodeFactory.programNode([                    NodeFactory.variableDeclarationNode(                        [                            NodeFactory.variableDeclaratorNode(                                NodeFactory.identifierNode('foo'),                                null                            )                        ],                        'let'                    ),                    NodeFactory.variableDeclarationNode(                        [                            NodeFactory.variableDeclaratorNode(                                NodeFactory.identifierNode('bar'),                                null                            )                        ],                        'var'                    ),                    NodeFactory.variableDeclarationNode(                        [                            NodeFactory.variableDeclaratorNode(                                NodeFactory.identifierNode('baz'),                                null                            )                        ],                        'let'                    )                ]);                prevailingKindOfVariablesAnalyzer.analyze(astTree);                prevailingKindOfVariables = prevailingKindOfVariablesAnalyzer.getPrevailingKind();            });            it('should return correct prevailing kind of variables', () => {                assert.equal(prevailingKindOfVariables, expectedPrevailingKind);            });        });        describe('Prevailing `const` kind', () => {            const expectedPrevailingKind: ESTree.VariableDeclaration['kind'] = 'const';            before(() => {                const astTree: ESTree.Program = NodeFactory.programNode([                    NodeFactory.variableDeclarationNode(                        [                            NodeFactory.variableDeclaratorNode(                                NodeFactory.identifierNode('foo'),                                null                            )                        ],                        'let'                    ),                    NodeFactory.variableDeclarationNode(                        [                            NodeFactory.variableDeclaratorNode(                                NodeFactory.identifierNode('bar'),                                null                            )                        ],                        'const'                    ),                    NodeFactory.variableDeclarationNode(                        [                            NodeFactory.variableDeclaratorNode(                                NodeFactory.identifierNode('baz'),                                null                            )                        ],                        'const'                    )                ]);                prevailingKindOfVariablesAnalyzer.analyze(astTree);                prevailingKindOfVariables = prevailingKindOfVariablesAnalyzer.getPrevailingKind();            });            it('should return correct prevailing kind of variables', () => {                assert.equal(prevailingKindOfVariables, expectedPrevailingKind);            });        });        describe('No variables', () => {            const expectedPrevailingKind: ESTree.VariableDeclaration['kind'] = 'var';            before(() => {                const astTree: ESTree.Program = NodeFactory.programNode();                prevailingKindOfVariablesAnalyzer.analyze(astTree);                prevailingKindOfVariables = prevailingKindOfVariablesAnalyzer.getPrevailingKind();            });            it('should return correct prevailing kind of variables', () => {                assert.equal(prevailingKindOfVariables, expectedPrevailingKind);            });        });    });});
 |