Skip to content

Commit c024843

Browse files
phateddanez
authored andcommitted
Add importer tests for isReactComponentClass
1 parent a3ed54d commit c024843

File tree

1 file changed

+54
-18
lines changed

1 file changed

+54
-18
lines changed

src/utils/__tests__/isReactComponentClass-test.js

Lines changed: 54 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,37 +6,55 @@
66
*
77
*/
88

9-
import { expression, statement, parse } from '../../../tests/utils';
9+
import {
10+
expression,
11+
statement,
12+
parse,
13+
noopImporter,
14+
makeMockImporter,
15+
} from '../../../tests/utils';
1016
import isReactComponentClass from '../isReactComponentClass';
1117

1218
describe('isReactComponentClass', () => {
19+
const mockImporter = makeMockImporter({
20+
component: statement(`
21+
export default React.Component;
22+
import React from 'react';
23+
`).get('declaration'),
24+
25+
pureComponent: statement(`
26+
export default React.PureComponent;
27+
import React from 'react';
28+
`).get('declaration'),
29+
});
30+
1331
describe('render method', () => {
1432
it('ignores class declarations with a render method without superclass', () => {
1533
const def = statement('class Foo { render() {}}');
16-
expect(isReactComponentClass(def)).toBe(false);
34+
expect(isReactComponentClass(def, noopImporter)).toBe(false);
1735
});
1836

1937
it('ignores class expression with a render method without superclass', () => {
2038
const def = expression('class { render() {}}');
21-
expect(isReactComponentClass(def)).toBe(false);
39+
expect(isReactComponentClass(def, noopImporter)).toBe(false);
2240
});
2341

2442
it('ignores static render methods', () => {
2543
const def = statement('class Foo { static render() {}}');
26-
expect(isReactComponentClass(def)).toBe(false);
44+
expect(isReactComponentClass(def, noopImporter)).toBe(false);
2745
});
2846

2947
it('ignores dynamic render methods', () => {
3048
const def = statement('class Foo { static [render]() {}}');
31-
expect(isReactComponentClass(def)).toBe(false);
49+
expect(isReactComponentClass(def, noopImporter)).toBe(false);
3250
});
3351

3452
it('ignores getter or setter render methods', () => {
3553
let def = statement('class Foo { get render() {}}');
36-
expect(isReactComponentClass(def)).toBe(false);
54+
expect(isReactComponentClass(def, noopImporter)).toBe(false);
3755

3856
def = statement('class Foo { set render(value) {}}');
39-
expect(isReactComponentClass(def)).toBe(false);
57+
expect(isReactComponentClass(def, noopImporter)).toBe(false);
4058
});
4159
});
4260

@@ -51,7 +69,7 @@ describe('isReactComponentClass', () => {
5169
class Foo extends Bar {}
5270
`).get('body', 1);
5371

54-
expect(isReactComponentClass(def)).toBe(true);
72+
expect(isReactComponentClass(def, noopImporter)).toBe(true);
5573
});
5674
});
5775

@@ -62,7 +80,7 @@ describe('isReactComponentClass', () => {
6280
class Foo extends React.Component {}
6381
`).get('body', 1);
6482

65-
expect(isReactComponentClass(def)).toBe(true);
83+
expect(isReactComponentClass(def, noopImporter)).toBe(true);
6684
});
6785

6886
it('accepts class expressions extending React.Component', () => {
@@ -71,7 +89,7 @@ describe('isReactComponentClass', () => {
7189
var Foo = class extends React.Component {}
7290
`).get('body', 1, 'declarations', 0, 'init');
7391

74-
expect(isReactComponentClass(def)).toBe(true);
92+
expect(isReactComponentClass(def, noopImporter)).toBe(true);
7593
});
7694

7795
it('resolves the super class reference', () => {
@@ -81,7 +99,7 @@ describe('isReactComponentClass', () => {
8199
class Foo extends C {}
82100
`).get('body', 2);
83101

84-
expect(isReactComponentClass(def)).toBe(true);
102+
expect(isReactComponentClass(def, noopImporter)).toBe(true);
85103
});
86104

87105
it('does not accept references to other modules', () => {
@@ -90,7 +108,7 @@ describe('isReactComponentClass', () => {
90108
class Foo extends Component {}
91109
`).get('body', 1);
92110

93-
expect(isReactComponentClass(def)).toBe(false);
111+
expect(isReactComponentClass(def, noopImporter)).toBe(false);
94112
});
95113

96114
it('does not consider super class if render method is present', () => {
@@ -99,7 +117,16 @@ describe('isReactComponentClass', () => {
99117
class Foo extends Component { render() {} }
100118
`).get('body', 1);
101119

102-
expect(isReactComponentClass(def)).toBe(true);
120+
expect(isReactComponentClass(def, noopImporter)).toBe(true);
121+
});
122+
123+
it('can resolve Component from an intermediate module', () => {
124+
const def = parse(`
125+
import RC from 'component';
126+
class Foo extends RC {}
127+
`).get('body', 1);
128+
129+
expect(isReactComponentClass(def, mockImporter)).toBe(true);
103130
});
104131
});
105132

@@ -110,7 +137,7 @@ describe('isReactComponentClass', () => {
110137
class Foo extends React.PureComponent {}
111138
`).get('body', 1);
112139

113-
expect(isReactComponentClass(def)).toBe(true);
140+
expect(isReactComponentClass(def, noopImporter)).toBe(true);
114141
});
115142

116143
it('accepts class expressions extending React.PureComponent', () => {
@@ -119,7 +146,7 @@ describe('isReactComponentClass', () => {
119146
var Foo = class extends React.PureComponent {}
120147
`).get('body', 1, 'declarations', 0, 'init');
121148

122-
expect(isReactComponentClass(def)).toBe(true);
149+
expect(isReactComponentClass(def, noopImporter)).toBe(true);
123150
});
124151

125152
it('resolves the super class reference', () => {
@@ -129,7 +156,7 @@ describe('isReactComponentClass', () => {
129156
class Foo extends C {}
130157
`).get('body', 2);
131158

132-
expect(isReactComponentClass(def)).toBe(true);
159+
expect(isReactComponentClass(def, noopImporter)).toBe(true);
133160
});
134161

135162
it('does not accept references to other modules', () => {
@@ -138,7 +165,7 @@ describe('isReactComponentClass', () => {
138165
class Foo extends PureComponent {}
139166
`).get('body', 1);
140167

141-
expect(isReactComponentClass(def)).toBe(false);
168+
expect(isReactComponentClass(def, noopImporter)).toBe(false);
142169
});
143170

144171
it('does not consider super class if render method is present', () => {
@@ -147,7 +174,16 @@ describe('isReactComponentClass', () => {
147174
class Foo extends PureComponent { render() {} }
148175
`).get('body', 1);
149176

150-
expect(isReactComponentClass(def)).toBe(true);
177+
expect(isReactComponentClass(def, noopImporter)).toBe(true);
178+
});
179+
180+
it('can resolve PureComponent from an intermediate module', () => {
181+
const def = parse(`
182+
import PC from 'pureComponent';
183+
class Foo extends PC {}
184+
`).get('body', 1);
185+
186+
expect(isReactComponentClass(def, mockImporter)).toBe(true);
151187
});
152188
});
153189
});

0 commit comments

Comments
 (0)