7
7
*/
8
8
9
9
import { builders } from 'ast-types' ;
10
- import * as utils from '../../../tests/utils' ;
10
+ import {
11
+ parse as parseSource ,
12
+ statement ,
13
+ noopImporter ,
14
+ makeMockImporter ,
15
+ } from '../../../tests/utils' ;
11
16
import resolveObjectValuesToArray from '../resolveObjectValuesToArray' ;
12
17
13
18
describe ( 'resolveObjectValuesToArray' , ( ) => {
14
19
function parse ( src ) {
15
- const root = utils . parse ( src ) ;
20
+ const root = parseSource ( src ) ;
16
21
return root . get ( 'body' , root . node . body . length - 1 , 'expression' ) ;
17
22
}
18
23
24
+ const mockImporter = makeMockImporter ( {
25
+ foo : statement ( `
26
+ export default {
27
+ 1: "bar",
28
+ 2: "foo",
29
+ 3: 0,
30
+ 4: 5,
31
+ 5: undefined,
32
+ 6: null,
33
+ [7]: 7,
34
+ ['foo']: "foo",
35
+ };
36
+ ` ) . get ( 'declaration' ) ,
37
+
38
+ bar : statement ( `
39
+ export default {
40
+ bar: 'bar',
41
+ };
42
+ ` ) . get ( 'declaration' ) ,
43
+ } ) ;
44
+
19
45
it ( 'resolves Object.values with strings' , ( ) => {
20
46
const path = parse (
21
47
[ 'var foo = { 1: "bar", 2: "foo" };' , 'Object.values(foo);' ] . join ( '\n' ) ,
22
48
) ;
23
49
24
- expect ( resolveObjectValuesToArray ( path ) ) . toEqualASTNode (
50
+ expect ( resolveObjectValuesToArray ( path , noopImporter ) ) . toEqualASTNode (
25
51
builders . arrayExpression ( [
26
52
builders . literal ( 'bar' ) ,
27
53
builders . literal ( 'foo' ) ,
@@ -34,7 +60,7 @@ describe('resolveObjectValuesToArray', () => {
34
60
[ 'var foo = { 1: 0, 2: 5 };' , 'Object.values(foo);' ] . join ( '\n' ) ,
35
61
) ;
36
62
37
- expect ( resolveObjectValuesToArray ( path ) ) . toEqualASTNode (
63
+ expect ( resolveObjectValuesToArray ( path , noopImporter ) ) . toEqualASTNode (
38
64
builders . arrayExpression ( [ builders . literal ( 0 ) , builders . literal ( 5 ) ] ) ,
39
65
) ;
40
66
} ) ;
@@ -46,7 +72,7 @@ describe('resolveObjectValuesToArray', () => {
46
72
) ,
47
73
) ;
48
74
49
- expect ( resolveObjectValuesToArray ( path ) ) . toEqualASTNode (
75
+ expect ( resolveObjectValuesToArray ( path , noopImporter ) ) . toEqualASTNode (
50
76
builders . arrayExpression ( [
51
77
builders . literal ( null ) ,
52
78
builders . literal ( null ) ,
@@ -59,7 +85,7 @@ describe('resolveObjectValuesToArray', () => {
59
85
[ 'var foo = { ["bar"]: 1, [5]: 2};' , 'Object.values(foo);' ] . join ( '\n' ) ,
60
86
) ;
61
87
62
- expect ( resolveObjectValuesToArray ( path ) ) . toEqualASTNode (
88
+ expect ( resolveObjectValuesToArray ( path , noopImporter ) ) . toEqualASTNode (
63
89
builders . arrayExpression ( [ builders . literal ( 2 ) , builders . literal ( 1 ) ] ) ,
64
90
) ;
65
91
} ) ;
@@ -69,7 +95,7 @@ describe('resolveObjectValuesToArray', () => {
69
95
[ 'var foo = { [()=>{}]: 1, [5]: 2};' , 'Object.values(foo);' ] . join ( '\n' ) ,
70
96
) ;
71
97
72
- expect ( resolveObjectValuesToArray ( path ) ) . toBeNull ( ) ;
98
+ expect ( resolveObjectValuesToArray ( path , noopImporter ) ) . toBeNull ( ) ;
73
99
} ) ;
74
100
75
101
it ( 'resolves Object.values when using resolvable spread' , ( ) => {
@@ -81,7 +107,7 @@ describe('resolveObjectValuesToArray', () => {
81
107
] . join ( '\n' ) ,
82
108
) ;
83
109
84
- expect ( resolveObjectValuesToArray ( path ) ) . toEqualASTNode (
110
+ expect ( resolveObjectValuesToArray ( path , noopImporter ) ) . toEqualASTNode (
85
111
builders . arrayExpression ( [
86
112
builders . literal ( 1 ) ,
87
113
builders . literal ( 4 ) ,
@@ -98,7 +124,7 @@ describe('resolveObjectValuesToArray', () => {
98
124
] . join ( '\n' ) ,
99
125
) ;
100
126
101
- expect ( resolveObjectValuesToArray ( path ) ) . toEqualASTNode (
127
+ expect ( resolveObjectValuesToArray ( path , noopImporter ) ) . toEqualASTNode (
102
128
builders . arrayExpression ( [ builders . literal ( 1 ) , builders . literal ( 2 ) ] ) ,
103
129
) ;
104
130
} ) ;
@@ -111,7 +137,7 @@ describe('resolveObjectValuesToArray', () => {
111
137
] . join ( '\n' ) ,
112
138
) ;
113
139
114
- expect ( resolveObjectValuesToArray ( path ) ) . toEqualASTNode (
140
+ expect ( resolveObjectValuesToArray ( path , noopImporter ) ) . toEqualASTNode (
115
141
builders . arrayExpression ( [ builders . literal ( 1 ) , builders . literal ( 2 ) ] ) ,
116
142
) ;
117
143
} ) ;
@@ -125,7 +151,7 @@ describe('resolveObjectValuesToArray', () => {
125
151
] . join ( '\n' ) ,
126
152
) ;
127
153
128
- expect ( resolveObjectValuesToArray ( path ) ) . toEqualASTNode (
154
+ expect ( resolveObjectValuesToArray ( path , noopImporter ) ) . toEqualASTNode (
129
155
builders . arrayExpression ( [
130
156
builders . literal ( 1 ) ,
131
157
builders . literal ( 5 ) ,
@@ -141,7 +167,7 @@ describe('resolveObjectValuesToArray', () => {
141
167
) ,
142
168
) ;
143
169
144
- expect ( resolveObjectValuesToArray ( path ) ) . toEqualASTNode (
170
+ expect ( resolveObjectValuesToArray ( path , noopImporter ) ) . toEqualASTNode (
145
171
builders . arrayExpression ( [ ] ) ,
146
172
) ;
147
173
} ) ;
@@ -153,6 +179,42 @@ describe('resolveObjectValuesToArray', () => {
153
179
) ,
154
180
) ;
155
181
156
- expect ( resolveObjectValuesToArray ( path ) ) . toBeNull ( ) ;
182
+ expect ( resolveObjectValuesToArray ( path , noopImporter ) ) . toBeNull ( ) ;
183
+ } ) ;
184
+
185
+ it ( 'can resolve imported objects passed to Object.values' , ( ) => {
186
+ const path = parse ( `
187
+ import foo from 'foo';
188
+ Object.values(foo);
189
+ ` ) ;
190
+
191
+ expect ( resolveObjectValuesToArray ( path , mockImporter ) ) . toEqualASTNode (
192
+ builders . arrayExpression ( [
193
+ builders . literal ( 'bar' ) ,
194
+ builders . literal ( 'foo' ) ,
195
+ builders . literal ( 0 ) ,
196
+ builders . literal ( 5 ) ,
197
+ builders . literal ( null ) ,
198
+ builders . literal ( null ) ,
199
+ builders . literal ( 7 ) ,
200
+ builders . literal ( 'foo' ) ,
201
+ ] ) ,
202
+ ) ;
203
+ } ) ;
204
+
205
+ it ( 'can resolve spreads from imported objects' , ( ) => {
206
+ const path = parse ( `
207
+ import bar from 'bar';
208
+ var abc = { foo: 'foo', baz: 'baz', ...bar };
209
+ Object.values(abc);
210
+ ` ) ;
211
+
212
+ expect ( resolveObjectValuesToArray ( path , mockImporter ) ) . toEqualASTNode (
213
+ builders . arrayExpression ( [
214
+ builders . literal ( 'bar' ) ,
215
+ builders . literal ( 'baz' ) ,
216
+ builders . literal ( 'foo' ) ,
217
+ ] ) ,
218
+ ) ;
157
219
} ) ;
158
220
} ) ;
0 commit comments