11import * as ts from 'typescript' ;
22import { Logger } from '../../logger/logger' ;
3- import { ArrayHelper } from '../array/array' ;
43import { GetDescriptor } from '../descriptor/descriptor' ;
54import { TypescriptHelper } from '../descriptor/helper/helper' ;
65import {
76 getMockMergeExpression ,
8- getMockMergeIteratorExpression ,
7+ mergePropertyAccessor ,
98} from '../mergeExpression/mergeExpression' ;
109import { MockDefiner } from '../mockDefiner/mockDefiner' ;
1110import { Scope } from '../scope/scope' ;
11+ import {
12+ MockCreateMockListLoopArray ,
13+ MockCreateMockListLoopStep ,
14+ } from '../mockIdentifier/mockIdentifier' ;
1215import { SetCurrentCreateMock } from './currentCreateMockNode' ;
1316
1417function getMockExpression ( nodeToMock : ts . TypeNode ) : ts . Expression {
@@ -23,34 +26,6 @@ function hasDefaultListValues(node: ts.CallExpression): boolean {
2326 return ! ! node . arguments [ 1 ] ;
2427}
2528
26- function getNumberFromNumericLiteral (
27- numericLiteral : ts . NumericLiteral
28- ) : number {
29- const numericLiteralNumber : number = parseInt ( numericLiteral . text , 10 ) ;
30- return numericLiteralNumber > 0 ? numericLiteralNumber : 0 ;
31- }
32-
33- function getMockMergeListExpression (
34- mock : ts . Expression ,
35- length : number ,
36- defaultValues : ts . Expression
37- ) : ts . Expression [ ] {
38- return ArrayHelper . ArrayFromLength ( length ) . map ( ( index : number ) =>
39- getMockMergeIteratorExpression (
40- mock ,
41- defaultValues ,
42- ts . createNumericLiteral ( '' + index . toString ( ) )
43- )
44- ) ;
45- }
46-
47- function getMockListExpression (
48- mock : ts . Expression ,
49- length : number
50- ) : ts . Expression [ ] {
51- return ArrayHelper . ArrayFromLength ( length ) . map ( ( ) => mock ) ;
52- }
53-
5429export function getMock (
5530 nodeToMock : ts . TypeNode ,
5631 node : ts . CallExpression
@@ -69,7 +44,7 @@ export function getMock(
6944export function getMockForList (
7045 nodeToMock : ts . TypeNode ,
7146 node : ts . CallExpression
72- ) : ts . ArrayLiteralExpression {
47+ ) : ts . Expression {
7348 SetCurrentCreateMock ( node ) ;
7449 const mock : ts . Expression = getMockExpression ( nodeToMock ) ;
7550 const lengthLiteral : ts . NumericLiteral = node
@@ -79,21 +54,93 @@ export function getMockForList(
7954 return ts . createArrayLiteral ( [ ] ) ;
8055 }
8156
82- const length : number = getNumberFromNumericLiteral ( lengthLiteral ) ;
83-
8457 if ( hasDefaultListValues ( node ) ) {
85- const mockMergeList : ts . Expression [ ] = getMockMergeListExpression (
86- mock ,
87- length ,
88- node . arguments [ 1 ]
58+ return getListCallMock (
59+ node . arguments [ 0 ] ,
60+ ts . createCall (
61+ mergePropertyAccessor ( 'mergeIterator' ) ,
62+ [ ] ,
63+ [ mock , node . arguments [ 1 ] , MockCreateMockListLoopStep ]
64+ )
8965 ) ;
90-
91- return ts . createArrayLiteral ( mockMergeList ) ;
9266 }
9367
94- const mockList : ts . Expression [ ] = getMockListExpression ( mock , length ) ;
68+ return getListCallMock ( node . arguments [ 0 ] , mock ) ;
69+ }
9570
96- return ts . createArrayLiteral ( mockList ) ;
71+ function getListCallMock (
72+ expression : ts . Expression ,
73+ mockExpr : ts . Expression
74+ ) : ts . CallExpression {
75+ return ts . createCall (
76+ ts . createParen (
77+ ts . createFunctionExpression (
78+ undefined ,
79+ undefined ,
80+ undefined ,
81+ undefined ,
82+ [ ] ,
83+ undefined ,
84+ ts . createBlock (
85+ [
86+ ts . createVariableStatement (
87+ undefined ,
88+ ts . createVariableDeclarationList (
89+ [
90+ ts . createVariableDeclaration (
91+ MockCreateMockListLoopArray ,
92+ undefined ,
93+ ts . createArrayLiteral ( [ ] , false )
94+ ) ,
95+ ] ,
96+ ts . NodeFlags . Const
97+ )
98+ ) ,
99+ ts . createFor (
100+ ts . createVariableDeclarationList (
101+ [
102+ ts . createVariableDeclaration (
103+ MockCreateMockListLoopStep ,
104+ undefined ,
105+ ts . createNumericLiteral ( '0' )
106+ ) ,
107+ ] ,
108+ ts . NodeFlags . Let
109+ ) ,
110+ ts . createBinary (
111+ MockCreateMockListLoopStep ,
112+ ts . createToken ( ts . SyntaxKind . LessThanToken ) ,
113+ expression
114+ ) ,
115+ ts . createPostfix (
116+ MockCreateMockListLoopStep ,
117+ ts . SyntaxKind . PlusPlusToken
118+ ) ,
119+ ts . createBlock (
120+ [
121+ ts . createExpressionStatement (
122+ ts . createCall (
123+ ts . createPropertyAccess (
124+ MockCreateMockListLoopArray ,
125+ ts . createIdentifier ( 'push' )
126+ ) ,
127+ undefined ,
128+ [ mockExpr ]
129+ )
130+ ) ,
131+ ] ,
132+ true
133+ )
134+ ) ,
135+ ts . createReturn ( MockCreateMockListLoopArray ) ,
136+ ] ,
137+ true
138+ )
139+ )
140+ ) ,
141+ undefined ,
142+ [ ]
143+ ) ;
97144}
98145
99146export function storeRegisterMock (
0 commit comments