Skip to content

Commit 2330f73

Browse files
phateddanez
authored andcommitted
Add importer tests for resolveObjectValuesToArray
1 parent 146c8ff commit 2330f73

File tree

1 file changed

+75
-13
lines changed

1 file changed

+75
-13
lines changed

src/utils/__tests__/resolveObjectValuesToArray-test.js

Lines changed: 75 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,47 @@
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 resolveObjectValuesToArray from '../resolveObjectValuesToArray';
1217

1318
describe('resolveObjectValuesToArray', () => {
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+
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+
1945
it('resolves Object.values with strings', () => {
2046
const path = parse(
2147
['var foo = { 1: "bar", 2: "foo" };', 'Object.values(foo);'].join('\n'),
2248
);
2349

24-
expect(resolveObjectValuesToArray(path)).toEqualASTNode(
50+
expect(resolveObjectValuesToArray(path, noopImporter)).toEqualASTNode(
2551
builders.arrayExpression([
2652
builders.literal('bar'),
2753
builders.literal('foo'),
@@ -34,7 +60,7 @@ describe('resolveObjectValuesToArray', () => {
3460
['var foo = { 1: 0, 2: 5 };', 'Object.values(foo);'].join('\n'),
3561
);
3662

37-
expect(resolveObjectValuesToArray(path)).toEqualASTNode(
63+
expect(resolveObjectValuesToArray(path, noopImporter)).toEqualASTNode(
3864
builders.arrayExpression([builders.literal(0), builders.literal(5)]),
3965
);
4066
});
@@ -46,7 +72,7 @@ describe('resolveObjectValuesToArray', () => {
4672
),
4773
);
4874

49-
expect(resolveObjectValuesToArray(path)).toEqualASTNode(
75+
expect(resolveObjectValuesToArray(path, noopImporter)).toEqualASTNode(
5076
builders.arrayExpression([
5177
builders.literal(null),
5278
builders.literal(null),
@@ -59,7 +85,7 @@ describe('resolveObjectValuesToArray', () => {
5985
['var foo = { ["bar"]: 1, [5]: 2};', 'Object.values(foo);'].join('\n'),
6086
);
6187

62-
expect(resolveObjectValuesToArray(path)).toEqualASTNode(
88+
expect(resolveObjectValuesToArray(path, noopImporter)).toEqualASTNode(
6389
builders.arrayExpression([builders.literal(2), builders.literal(1)]),
6490
);
6591
});
@@ -69,7 +95,7 @@ describe('resolveObjectValuesToArray', () => {
6995
['var foo = { [()=>{}]: 1, [5]: 2};', 'Object.values(foo);'].join('\n'),
7096
);
7197

72-
expect(resolveObjectValuesToArray(path)).toBeNull();
98+
expect(resolveObjectValuesToArray(path, noopImporter)).toBeNull();
7399
});
74100

75101
it('resolves Object.values when using resolvable spread', () => {
@@ -81,7 +107,7 @@ describe('resolveObjectValuesToArray', () => {
81107
].join('\n'),
82108
);
83109

84-
expect(resolveObjectValuesToArray(path)).toEqualASTNode(
110+
expect(resolveObjectValuesToArray(path, noopImporter)).toEqualASTNode(
85111
builders.arrayExpression([
86112
builders.literal(1),
87113
builders.literal(4),
@@ -98,7 +124,7 @@ describe('resolveObjectValuesToArray', () => {
98124
].join('\n'),
99125
);
100126

101-
expect(resolveObjectValuesToArray(path)).toEqualASTNode(
127+
expect(resolveObjectValuesToArray(path, noopImporter)).toEqualASTNode(
102128
builders.arrayExpression([builders.literal(1), builders.literal(2)]),
103129
);
104130
});
@@ -111,7 +137,7 @@ describe('resolveObjectValuesToArray', () => {
111137
].join('\n'),
112138
);
113139

114-
expect(resolveObjectValuesToArray(path)).toEqualASTNode(
140+
expect(resolveObjectValuesToArray(path, noopImporter)).toEqualASTNode(
115141
builders.arrayExpression([builders.literal(1), builders.literal(2)]),
116142
);
117143
});
@@ -125,7 +151,7 @@ describe('resolveObjectValuesToArray', () => {
125151
].join('\n'),
126152
);
127153

128-
expect(resolveObjectValuesToArray(path)).toEqualASTNode(
154+
expect(resolveObjectValuesToArray(path, noopImporter)).toEqualASTNode(
129155
builders.arrayExpression([
130156
builders.literal(1),
131157
builders.literal(5),
@@ -141,7 +167,7 @@ describe('resolveObjectValuesToArray', () => {
141167
),
142168
);
143169

144-
expect(resolveObjectValuesToArray(path)).toEqualASTNode(
170+
expect(resolveObjectValuesToArray(path, noopImporter)).toEqualASTNode(
145171
builders.arrayExpression([]),
146172
);
147173
});
@@ -153,6 +179,42 @@ describe('resolveObjectValuesToArray', () => {
153179
),
154180
);
155181

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+
);
157219
});
158220
});

0 commit comments

Comments
 (0)