Skip to content

Commit 5827f7c

Browse files
phateddanez
authored andcommitted
Add importer tests for resolveObjectKeysToArray
1 parent 2330f73 commit 5827f7c

File tree

1 file changed

+70
-12
lines changed

1 file changed

+70
-12
lines changed

src/utils/__tests__/resolveObjectKeysToArray-test.js

Lines changed: 70 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,45 @@
77
*/
88

99
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';
1116
import resolveObjectKeysToArray from '../resolveObjectKeysToArray';
1217

1318
describe('resolveObjectKeysToArray', () => {
1419
function parse(src) {
15-
const root = utils.parse(src);
20+
const root = parseSource(src);
1621
return root.get('body', root.node.body.length - 1, 'expression');
1722
}
1823

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+
1943
it('resolves Object.keys with identifiers', () => {
2044
const path = parse(
2145
['var foo = { bar: 1, foo: 2 };', 'Object.keys(foo);'].join('\n'),
2246
);
2347

24-
expect(resolveObjectKeysToArray(path)).toEqualASTNode(
48+
expect(resolveObjectKeysToArray(path, noopImporter)).toEqualASTNode(
2549
builders.arrayExpression([
2650
builders.literal('bar'),
2751
builders.literal('foo'),
@@ -34,7 +58,7 @@ describe('resolveObjectKeysToArray', () => {
3458
['var foo = { "bar": 1, 5: 2 };', 'Object.keys(foo);'].join('\n'),
3559
);
3660

37-
expect(resolveObjectKeysToArray(path)).toEqualASTNode(
61+
expect(resolveObjectKeysToArray(path, noopImporter)).toEqualASTNode(
3862
builders.arrayExpression([
3963
builders.literal('bar'),
4064
builders.literal('5'),
@@ -47,7 +71,7 @@ describe('resolveObjectKeysToArray', () => {
4771
['var foo = { ["bar"]: 1, [5]: 2};', 'Object.keys(foo);'].join('\n'),
4872
);
4973

50-
expect(resolveObjectKeysToArray(path)).toEqualASTNode(
74+
expect(resolveObjectKeysToArray(path, noopImporter)).toEqualASTNode(
5175
builders.arrayExpression([
5276
builders.literal('bar'),
5377
builders.literal('5'),
@@ -64,7 +88,7 @@ describe('resolveObjectKeysToArray', () => {
6488
].join('\n'),
6589
);
6690

67-
expect(resolveObjectKeysToArray(path)).toEqualASTNode(
91+
expect(resolveObjectKeysToArray(path, noopImporter)).toEqualASTNode(
6892
builders.arrayExpression([
6993
builders.literal('boo'),
7094
builders.literal('foo'),
@@ -80,7 +104,7 @@ describe('resolveObjectKeysToArray', () => {
80104
),
81105
);
82106

83-
expect(resolveObjectKeysToArray(path)).toEqualASTNode(
107+
expect(resolveObjectKeysToArray(path, noopImporter)).toEqualASTNode(
84108
builders.arrayExpression([
85109
builders.literal('boo'),
86110
builders.literal('foo'),
@@ -97,7 +121,7 @@ describe('resolveObjectKeysToArray', () => {
97121
].join('\n'),
98122
);
99123

100-
expect(resolveObjectKeysToArray(path)).toEqualASTNode(
124+
expect(resolveObjectKeysToArray(path, noopImporter)).toEqualASTNode(
101125
builders.arrayExpression([
102126
builders.literal('boo'),
103127
builders.literal('foo'),
@@ -115,7 +139,7 @@ describe('resolveObjectKeysToArray', () => {
115139
].join('\n'),
116140
);
117141

118-
expect(resolveObjectKeysToArray(path)).toEqualASTNode(
142+
expect(resolveObjectKeysToArray(path, noopImporter)).toEqualASTNode(
119143
builders.arrayExpression([
120144
builders.literal('boo'),
121145
builders.literal('foo'),
@@ -131,7 +155,7 @@ describe('resolveObjectKeysToArray', () => {
131155
),
132156
);
133157

134-
expect(resolveObjectKeysToArray(path)).toEqualASTNode(
158+
expect(resolveObjectKeysToArray(path, noopImporter)).toEqualASTNode(
135159
builders.arrayExpression([builders.literal('x')]),
136160
);
137161
});
@@ -141,14 +165,48 @@ describe('resolveObjectKeysToArray', () => {
141165
['var foo = { bar: 1, foo: 2, ...bar };', 'Object.keys(foo);'].join('\n'),
142166
);
143167

144-
expect(resolveObjectKeysToArray(path)).toBeNull();
168+
expect(resolveObjectKeysToArray(path, noopImporter)).toBeNull();
145169
});
146170

147171
it('does not resolve Object.keys when using computed keys', () => {
148172
const path = parse(
149173
['var foo = { [bar]: 1, foo: 2 };', 'Object.keys(foo);'].join('\n'),
150174
);
151175

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+
);
153211
});
154212
});

0 commit comments

Comments
 (0)