|
@@ -5,15 +5,52 @@ import { TStatement } from '../../../src/types/TStatement';
|
|
|
|
|
|
import { IStackTraceData } from '../../../src/interfaces/stack-trace-analyzer/IStackTraceData';
|
|
|
|
|
|
-import { CustomNodeAppender } from '../../../src/custom-nodes/CustomNodeAppender';
|
|
|
+import { NodeAppender } from '../../../src/NodeAppender';
|
|
|
import { NodeMocks } from '../../mocks/NodeMocks';
|
|
|
import { NodeUtils } from '../../../src/NodeUtils';
|
|
|
import { StackTraceAnalyzer } from '../../../src/stack-trace-analyzer/StackTraceAnalyzer';
|
|
|
|
|
|
const assert: any = chai.assert;
|
|
|
|
|
|
-describe('CustomNodeAppender', () => {
|
|
|
- describe('appendNode (blockScopeStackTraceData: IStackTraceData[], blockScopeNode: TNodeWithBlockStatement, nodeBodyStatements: TStatement[], index: number = 0): void', () => {
|
|
|
+describe('NodeAppender', () => {
|
|
|
+ describe('appendNode (blockScopeNode: TNodeWithBlockStatement[], nodeBodyStatements: TStatement[]): void', () => {
|
|
|
+ let blockStatementNode: ESTree.BlockStatement,
|
|
|
+ expectedBlockStatementNode: ESTree.BlockStatement,
|
|
|
+ expectedExpressionStatementNode: ESTree.ExpressionStatement,
|
|
|
+ expressionStatementNode: ESTree.ExpressionStatement;
|
|
|
+
|
|
|
+ beforeEach(() => {
|
|
|
+ expressionStatementNode = NodeMocks.getExpressionStatementNode();
|
|
|
+ expectedExpressionStatementNode = NodeMocks.getExpressionStatementNode();
|
|
|
+
|
|
|
+ blockStatementNode = NodeMocks.getBlockStatementNode();
|
|
|
+
|
|
|
+ expectedExpressionStatementNode['parentNode'] = blockStatementNode;
|
|
|
+
|
|
|
+ expectedBlockStatementNode = NodeMocks.getBlockStatementNode([
|
|
|
+ expectedExpressionStatementNode
|
|
|
+ ]);
|
|
|
+
|
|
|
+ NodeAppender.appendNode(
|
|
|
+ blockStatementNode,
|
|
|
+ [expressionStatementNode]
|
|
|
+ );
|
|
|
+ NodeAppender.appendNode(
|
|
|
+ blockStatementNode,
|
|
|
+ <TStatement[]>[{}]
|
|
|
+ );
|
|
|
+ });
|
|
|
+
|
|
|
+ it('should append given node to a `BlockStatement` node body', () => {
|
|
|
+ assert.deepEqual(blockStatementNode, expectedBlockStatementNode);
|
|
|
+ });
|
|
|
+
|
|
|
+ it('should does not change `BlockStatement` node body if given node is not a valid Node', () => {
|
|
|
+ assert.deepEqual(blockStatementNode, expectedBlockStatementNode);
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe('appendNodeToOptimalBlockScope (blockScopeStackTraceData: IStackTraceData[], blockScopeNode: TNodeWithBlockStatement, nodeBodyStatements: TStatement[], index: number = 0): void', () => {
|
|
|
let astTree: ESTree.Program,
|
|
|
expectedAstTree: ESTree.Program,
|
|
|
node: TStatement[],
|
|
@@ -92,7 +129,7 @@ describe('CustomNodeAppender', () => {
|
|
|
);
|
|
|
|
|
|
stackTraceData = new StackTraceAnalyzer(astTree.body).analyze();
|
|
|
- CustomNodeAppender.appendNode(stackTraceData, astTree, node);
|
|
|
+ NodeAppender.appendNodeToOptimalBlockScope(stackTraceData, astTree, node);
|
|
|
|
|
|
assert.deepEqual(astTree, expectedAstTree);
|
|
|
});
|
|
@@ -165,7 +202,7 @@ describe('CustomNodeAppender', () => {
|
|
|
);
|
|
|
|
|
|
stackTraceData = new StackTraceAnalyzer(astTree.body).analyze();
|
|
|
- CustomNodeAppender.appendNode(stackTraceData, astTree, node);
|
|
|
+ NodeAppender.appendNodeToOptimalBlockScope(stackTraceData, astTree, node);
|
|
|
|
|
|
assert.deepEqual(astTree, expectedAstTree);
|
|
|
});
|
|
@@ -243,7 +280,7 @@ describe('CustomNodeAppender', () => {
|
|
|
);
|
|
|
|
|
|
stackTraceData = new StackTraceAnalyzer(astTree.body).analyze();
|
|
|
- CustomNodeAppender.appendNode(stackTraceData, astTree, node, 2);
|
|
|
+ NodeAppender.appendNodeToOptimalBlockScope(stackTraceData, astTree, node, 2);
|
|
|
|
|
|
assert.deepEqual(astTree, expectedAstTree);
|
|
|
});
|
|
@@ -283,7 +320,7 @@ describe('CustomNodeAppender', () => {
|
|
|
);
|
|
|
|
|
|
stackTraceData = new StackTraceAnalyzer(astTree.body).analyze();
|
|
|
- CustomNodeAppender.appendNode(stackTraceData, astTree, node, 1);
|
|
|
+ NodeAppender.appendNodeToOptimalBlockScope(stackTraceData, astTree, node, 1);
|
|
|
|
|
|
assert.deepEqual(astTree, expectedAstTree);
|
|
|
});
|
|
@@ -353,11 +390,11 @@ describe('CustomNodeAppender', () => {
|
|
|
);
|
|
|
|
|
|
stackTraceData = new StackTraceAnalyzer(astTree.body).analyze();
|
|
|
- CustomNodeAppender.appendNode(
|
|
|
+ NodeAppender.appendNodeToOptimalBlockScope(
|
|
|
stackTraceData,
|
|
|
astTree,
|
|
|
node,
|
|
|
- CustomNodeAppender.getRandomStackTraceIndex(stackTraceData.length)
|
|
|
+ NodeAppender.getRandomStackTraceIndex(stackTraceData.length)
|
|
|
);
|
|
|
|
|
|
assert.deepEqual(astTree, expectedAstTree);
|
|
@@ -370,11 +407,104 @@ describe('CustomNodeAppender', () => {
|
|
|
let index: number;
|
|
|
|
|
|
for (let i: number = 0; i < 100; i++) {
|
|
|
- index = CustomNodeAppender.getRandomStackTraceIndex(100);
|
|
|
+ index = NodeAppender.getRandomStackTraceIndex(100);
|
|
|
|
|
|
assert.isAtLeast(index, 0);
|
|
|
assert.isAtMost(index, 100);
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
+
|
|
|
+ describe('insertNodeAtIndex (blockScopeNode: TNodeWithBlockStatement[], nodeBodyStatements: TStatement[], index: number): void', () => {
|
|
|
+ let blockStatementNode: ESTree.BlockStatement,
|
|
|
+ expectedBlockStatementNode: ESTree.BlockStatement,
|
|
|
+ expressionStatementNode1: ESTree.ExpressionStatement,
|
|
|
+ expressionStatementNode2: ESTree.ExpressionStatement,
|
|
|
+ expressionStatementNode3: ESTree.ExpressionStatement,
|
|
|
+ expressionStatementNode4: ESTree.ExpressionStatement;
|
|
|
+
|
|
|
+ beforeEach(() => {
|
|
|
+ expressionStatementNode1 = NodeMocks.getExpressionStatementNode(NodeMocks.getLiteralNode(1));
|
|
|
+ expressionStatementNode2 = NodeMocks.getExpressionStatementNode(NodeMocks.getLiteralNode(2));
|
|
|
+ expressionStatementNode3 = NodeMocks.getExpressionStatementNode(NodeMocks.getLiteralNode(3));
|
|
|
+ expressionStatementNode4 = NodeMocks.getExpressionStatementNode(NodeMocks.getLiteralNode(2));
|
|
|
+
|
|
|
+ blockStatementNode = NodeMocks.getBlockStatementNode([
|
|
|
+ expressionStatementNode1,
|
|
|
+ expressionStatementNode3
|
|
|
+ ]);
|
|
|
+
|
|
|
+ expressionStatementNode1['parentNode'] = blockStatementNode;
|
|
|
+ expressionStatementNode2['parentNode'] = blockStatementNode;
|
|
|
+ expressionStatementNode3['parentNode'] = blockStatementNode;
|
|
|
+
|
|
|
+ expectedBlockStatementNode = NodeMocks.getBlockStatementNode([
|
|
|
+ expressionStatementNode1,
|
|
|
+ expressionStatementNode2,
|
|
|
+ expressionStatementNode3
|
|
|
+ ]);
|
|
|
+
|
|
|
+ NodeAppender.insertNodeAtIndex(
|
|
|
+ blockStatementNode,
|
|
|
+ [expressionStatementNode4],
|
|
|
+ 1
|
|
|
+ );
|
|
|
+ NodeAppender.insertNodeAtIndex(
|
|
|
+ blockStatementNode,
|
|
|
+ <TStatement[]>[{}],
|
|
|
+ 1
|
|
|
+ );
|
|
|
+ });
|
|
|
+
|
|
|
+ it('should insert given node in `BlockStatement` node body at index', () => {
|
|
|
+ assert.deepEqual(blockStatementNode, expectedBlockStatementNode);
|
|
|
+ });
|
|
|
+
|
|
|
+ it('should does not change `BlockStatement` node body if given node is not a valid Node', () => {
|
|
|
+ assert.deepEqual(blockStatementNode, expectedBlockStatementNode);
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe('prependNode (blockScopeNode: TNodeWithBlockStatement[], nodeBodyStatements: TStatement[]): void', () => {
|
|
|
+ let blockStatementNode: ESTree.BlockStatement,
|
|
|
+ expectedBlockStatementNode: ESTree.BlockStatement,
|
|
|
+ expressionStatementNode1: ESTree.ExpressionStatement,
|
|
|
+ expressionStatementNode2: ESTree.ExpressionStatement,
|
|
|
+ expressionStatementNode3: ESTree.ExpressionStatement;
|
|
|
+
|
|
|
+ beforeEach(() => {
|
|
|
+ expressionStatementNode1 = NodeMocks.getExpressionStatementNode(NodeMocks.getLiteralNode(1));
|
|
|
+ expressionStatementNode2 = NodeMocks.getExpressionStatementNode(NodeMocks.getLiteralNode(2));
|
|
|
+ expressionStatementNode3 = NodeMocks.getExpressionStatementNode(NodeMocks.getLiteralNode(2));
|
|
|
+
|
|
|
+ blockStatementNode = NodeMocks.getBlockStatementNode([
|
|
|
+ expressionStatementNode1
|
|
|
+ ]);
|
|
|
+
|
|
|
+ expressionStatementNode1['parentNode'] = blockStatementNode;
|
|
|
+ expressionStatementNode2['parentNode'] = blockStatementNode;
|
|
|
+
|
|
|
+ expectedBlockStatementNode = NodeMocks.getBlockStatementNode([
|
|
|
+ expressionStatementNode2,
|
|
|
+ expressionStatementNode1
|
|
|
+ ]);
|
|
|
+
|
|
|
+ NodeAppender.prependNode(
|
|
|
+ blockStatementNode,
|
|
|
+ [Object.assign({}, expressionStatementNode3)]
|
|
|
+ );
|
|
|
+ NodeAppender.prependNode(
|
|
|
+ blockStatementNode,
|
|
|
+ <TStatement[]>[{}]
|
|
|
+ )
|
|
|
+ });
|
|
|
+
|
|
|
+ it('should prepend given node to a `BlockStatement` node body', () => {
|
|
|
+ assert.deepEqual(blockStatementNode, expectedBlockStatementNode);
|
|
|
+ });
|
|
|
+
|
|
|
+ it('should does not change `BlockStatement` node body if given node is not a valid Node', () => {
|
|
|
+ assert.deepEqual(blockStatementNode, expectedBlockStatementNode);
|
|
|
+ });
|
|
|
+ });
|
|
|
});
|