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 resolveObjectKeysToArray from '../resolveObjectKeysToArray' ;
12
17
13
18
describe ( 'resolveObjectKeysToArray' , ( ) => {
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
+ bar: "bar",
28
+ "foo": "foo",
29
+ 1: 0,
30
+ 2: 5,
31
+ [3]: 3,
32
+ ['baz']: "baz",
33
+ };
34
+ ` ) . get ( 'declaration' ) ,
35
+
36
+ bar : statement ( `
37
+ export default {
38
+ bar: 'bar',
39
+ };
40
+ ` ) . get ( 'declaration' ) ,
41
+ } ) ;
42
+
19
43
it ( 'resolves Object.keys with identifiers' , ( ) => {
20
44
const path = parse (
21
45
[ 'var foo = { bar: 1, foo: 2 };' , 'Object.keys(foo);' ] . join ( '\n' ) ,
22
46
) ;
23
47
24
- expect ( resolveObjectKeysToArray ( path ) ) . toEqualASTNode (
48
+ expect ( resolveObjectKeysToArray ( path , noopImporter ) ) . toEqualASTNode (
25
49
builders . arrayExpression ( [
26
50
builders . literal ( 'bar' ) ,
27
51
builders . literal ( 'foo' ) ,
@@ -34,7 +58,7 @@ describe('resolveObjectKeysToArray', () => {
34
58
[ 'var foo = { "bar": 1, 5: 2 };' , 'Object.keys(foo);' ] . join ( '\n' ) ,
35
59
) ;
36
60
37
- expect ( resolveObjectKeysToArray ( path ) ) . toEqualASTNode (
61
+ expect ( resolveObjectKeysToArray ( path , noopImporter ) ) . toEqualASTNode (
38
62
builders . arrayExpression ( [
39
63
builders . literal ( 'bar' ) ,
40
64
builders . literal ( '5' ) ,
@@ -47,7 +71,7 @@ describe('resolveObjectKeysToArray', () => {
47
71
[ 'var foo = { ["bar"]: 1, [5]: 2};' , 'Object.keys(foo);' ] . join ( '\n' ) ,
48
72
) ;
49
73
50
- expect ( resolveObjectKeysToArray ( path ) ) . toEqualASTNode (
74
+ expect ( resolveObjectKeysToArray ( path , noopImporter ) ) . toEqualASTNode (
51
75
builders . arrayExpression ( [
52
76
builders . literal ( 'bar' ) ,
53
77
builders . literal ( '5' ) ,
@@ -64,7 +88,7 @@ describe('resolveObjectKeysToArray', () => {
64
88
] . join ( '\n' ) ,
65
89
) ;
66
90
67
- expect ( resolveObjectKeysToArray ( path ) ) . toEqualASTNode (
91
+ expect ( resolveObjectKeysToArray ( path , noopImporter ) ) . toEqualASTNode (
68
92
builders . arrayExpression ( [
69
93
builders . literal ( 'boo' ) ,
70
94
builders . literal ( 'foo' ) ,
@@ -80,7 +104,7 @@ describe('resolveObjectKeysToArray', () => {
80
104
) ,
81
105
) ;
82
106
83
- expect ( resolveObjectKeysToArray ( path ) ) . toEqualASTNode (
107
+ expect ( resolveObjectKeysToArray ( path , noopImporter ) ) . toEqualASTNode (
84
108
builders . arrayExpression ( [
85
109
builders . literal ( 'boo' ) ,
86
110
builders . literal ( 'foo' ) ,
@@ -97,7 +121,7 @@ describe('resolveObjectKeysToArray', () => {
97
121
] . join ( '\n' ) ,
98
122
) ;
99
123
100
- expect ( resolveObjectKeysToArray ( path ) ) . toEqualASTNode (
124
+ expect ( resolveObjectKeysToArray ( path , noopImporter ) ) . toEqualASTNode (
101
125
builders . arrayExpression ( [
102
126
builders . literal ( 'boo' ) ,
103
127
builders . literal ( 'foo' ) ,
@@ -115,7 +139,7 @@ describe('resolveObjectKeysToArray', () => {
115
139
] . join ( '\n' ) ,
116
140
) ;
117
141
118
- expect ( resolveObjectKeysToArray ( path ) ) . toEqualASTNode (
142
+ expect ( resolveObjectKeysToArray ( path , noopImporter ) ) . toEqualASTNode (
119
143
builders . arrayExpression ( [
120
144
builders . literal ( 'boo' ) ,
121
145
builders . literal ( 'foo' ) ,
@@ -131,7 +155,7 @@ describe('resolveObjectKeysToArray', () => {
131
155
) ,
132
156
) ;
133
157
134
- expect ( resolveObjectKeysToArray ( path ) ) . toEqualASTNode (
158
+ expect ( resolveObjectKeysToArray ( path , noopImporter ) ) . toEqualASTNode (
135
159
builders . arrayExpression ( [ builders . literal ( 'x' ) ] ) ,
136
160
) ;
137
161
} ) ;
@@ -141,14 +165,48 @@ describe('resolveObjectKeysToArray', () => {
141
165
[ 'var foo = { bar: 1, foo: 2, ...bar };' , 'Object.keys(foo);' ] . join ( '\n' ) ,
142
166
) ;
143
167
144
- expect ( resolveObjectKeysToArray ( path ) ) . toBeNull ( ) ;
168
+ expect ( resolveObjectKeysToArray ( path , noopImporter ) ) . toBeNull ( ) ;
145
169
} ) ;
146
170
147
171
it ( 'does not resolve Object.keys when using computed keys' , ( ) => {
148
172
const path = parse (
149
173
[ 'var foo = { [bar]: 1, foo: 2 };' , 'Object.keys(foo);' ] . join ( '\n' ) ,
150
174
) ;
151
175
152
- expect ( resolveObjectKeysToArray ( path ) ) . toBeNull ( ) ;
176
+ expect ( resolveObjectKeysToArray ( path , noopImporter ) ) . toBeNull ( ) ;
177
+ } ) ;
178
+
179
+ it ( 'can resolve imported objects passed to Object.keys' , ( ) => {
180
+ const path = parse ( `
181
+ import foo from 'foo';
182
+ Object.keys(foo);
183
+ ` ) ;
184
+
185
+ expect ( resolveObjectKeysToArray ( path , mockImporter ) ) . toEqualASTNode (
186
+ builders . arrayExpression ( [
187
+ builders . literal ( 'bar' ) ,
188
+ builders . literal ( 'foo' ) ,
189
+ builders . literal ( 1 ) ,
190
+ builders . literal ( 2 ) ,
191
+ builders . literal ( 3 ) ,
192
+ builders . literal ( 'baz' ) ,
193
+ ] ) ,
194
+ ) ;
195
+ } ) ;
196
+
197
+ it ( 'can resolve spreads from imported objects' , ( ) => {
198
+ const path = parse ( `
199
+ import bar from 'bar';
200
+ var abc = { foo: 'foo', baz: 'baz', ...bar };
201
+ Object.keys(abc);
202
+ ` ) ;
203
+
204
+ expect ( resolveObjectKeysToArray ( path , mockImporter ) ) . toEqualASTNode (
205
+ builders . arrayExpression ( [
206
+ builders . literal ( 'foo' ) ,
207
+ builders . literal ( 'baz' ) ,
208
+ builders . literal ( 'bar' ) ,
209
+ ] ) ,
210
+ ) ;
153
211
} ) ;
154
212
} ) ;
0 commit comments