Skip to content

Commit fa878b8

Browse files
phateddanez
authored andcommitted
Add importer tests for resolveHOC
1 parent 5827f7c commit fa878b8

File tree

1 file changed

+78
-12
lines changed

1 file changed

+78
-12
lines changed

src/utils/__tests__/resolveHOC-test.js

Lines changed: 78 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,43 @@
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 resolveHOC from '../resolveHOC';
1217

1318
describe('resolveHOC', () => {
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+
component: statement(`
26+
export default Component;
27+
`).get('declaration'),
28+
29+
hoc: statement(`
30+
export default hoc1(foo);
31+
import foo from 'component';
32+
`).get('declaration'),
33+
});
34+
1935
it('resolves simple hoc', () => {
2036
const path = parse(['hoc(Component);'].join('\n'));
21-
expect(resolveHOC(path)).toEqualASTNode(builders.identifier('Component'));
37+
expect(resolveHOC(path, noopImporter)).toEqualASTNode(
38+
builders.identifier('Component'),
39+
);
2240
});
2341

2442
it('resolves simple hoc w/ multiple args', () => {
2543
const path = parse(['hoc1(arg1a, arg1b)(Component);'].join('\n'));
26-
expect(resolveHOC(path)).toEqualASTNode(builders.identifier('Component'));
44+
expect(resolveHOC(path, noopImporter)).toEqualASTNode(
45+
builders.identifier('Component'),
46+
);
2747
});
2848

2949
it('resolves nested hocs', () => {
@@ -32,7 +52,9 @@ describe('resolveHOC', () => {
3252
hoc1(arg1a, arg2a)(Component)
3353
);`,
3454
);
35-
expect(resolveHOC(path)).toEqualASTNode(builders.identifier('Component'));
55+
expect(resolveHOC(path, noopImporter)).toEqualASTNode(
56+
builders.identifier('Component'),
57+
);
3658
});
3759

3860
it('resolves really nested hocs', () => {
@@ -43,38 +65,82 @@ describe('resolveHOC', () => {
4365
)
4466
);`,
4567
);
46-
expect(resolveHOC(path)).toEqualASTNode(builders.identifier('Component'));
68+
expect(resolveHOC(path, noopImporter)).toEqualASTNode(
69+
builders.identifier('Component'),
70+
);
4771
});
4872

4973
it('resolves HOC with additional params', () => {
5074
const path = parse(`hoc3(Component, {})`);
51-
expect(resolveHOC(path)).toEqualASTNode(builders.identifier('Component'));
75+
expect(resolveHOC(path, noopImporter)).toEqualASTNode(
76+
builders.identifier('Component'),
77+
);
5278
});
5379

5480
it('resolves HOC as last element if first is literal', () => {
5581
const path = parse(`hoc3(41, Component)`);
56-
expect(resolveHOC(path)).toEqualASTNode(builders.identifier('Component'));
82+
expect(resolveHOC(path, noopImporter)).toEqualASTNode(
83+
builders.identifier('Component'),
84+
);
5785
});
5886

5987
it('resolves HOC as last element if first is array', () => {
6088
const path = parse(`hoc3([], Component)`);
61-
expect(resolveHOC(path)).toEqualASTNode(builders.identifier('Component'));
89+
expect(resolveHOC(path, noopImporter)).toEqualASTNode(
90+
builders.identifier('Component'),
91+
);
6292
});
6393

6494
it('resolves HOC as last element if first is object', () => {
6595
const path = parse(`hoc3({}, Component)`);
66-
expect(resolveHOC(path)).toEqualASTNode(builders.identifier('Component'));
96+
expect(resolveHOC(path, noopImporter)).toEqualASTNode(
97+
builders.identifier('Component'),
98+
);
6799
});
68100

69101
it('resolves HOC as last element if first is spread', () => {
70102
const path = parse(`hoc3(...params, Component)`);
71-
expect(resolveHOC(path)).toEqualASTNode(builders.identifier('Component'));
103+
expect(resolveHOC(path, noopImporter)).toEqualASTNode(
104+
builders.identifier('Component'),
105+
);
72106
});
73107

74108
it('resolves intermediate hocs', () => {
75109
const path = parse(
76110
['const Component = React.memo(42);', 'hoc()(Component);'].join('\n'),
77111
);
78-
expect(resolveHOC(path)).toEqualASTNode(builders.literal(42));
112+
expect(resolveHOC(path, noopImporter)).toEqualASTNode(builders.literal(42));
113+
});
114+
115+
it('can resolve an imported component passed to hoc', () => {
116+
const path = parse(`
117+
import foo from 'component';
118+
hoc(foo);
119+
`);
120+
expect(resolveHOC(path, mockImporter)).toEqualASTNode(
121+
builders.identifier('Component'),
122+
);
123+
});
124+
125+
it('can resolve an imported component passed to nested hoc', () => {
126+
const path = parse(`
127+
import foo from 'component';
128+
hoc2(arg2b, arg2b)(
129+
hoc1(arg1a, arg2a)(foo)
130+
);
131+
`);
132+
expect(resolveHOC(path, mockImporter)).toEqualASTNode(
133+
builders.identifier('Component'),
134+
);
135+
});
136+
137+
it('can resolve an hocs inside imported component passed to hoc', () => {
138+
const path = parse(`
139+
import bar from 'hoc';
140+
hoc(bar);
141+
`);
142+
expect(resolveHOC(path, mockImporter)).toEqualASTNode(
143+
builders.identifier('Component'),
144+
);
79145
});
80146
});

0 commit comments

Comments
 (0)