Skip to content

Commit 9612a15

Browse files
committed
Update and consolidate default resolvers
This consolidates React.createClass and class definition resolvers into two resolvers, just like before.
1 parent e26065d commit 9612a15

15 files changed

+837
-1074
lines changed

src/main.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212

1313
import * as handlers from './handlers';
1414
import parse from './parse';
15-
import resolver from './resolver';
15+
import * as resolver from './resolver';
1616
import utils from './utils';
1717

18-
const defaultResolver = resolver.findExportedReactCreateClassCall;
18+
const defaultResolver = resolver.findExportedComponentDefinition;
1919
const defaultHandlers = [
2020
handlers.propTypeHandler,
2121
handlers.propDocBlockHandler,

src/resolver/__tests__/findAllClassDefinitions-test.js

Lines changed: 0 additions & 69 deletions
This file was deleted.
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
/*
2+
* Copyright (c) 2015, Facebook, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the BSD-style license found in the
6+
* LICENSE file in the root directory of this source tree. An additional grant
7+
* of patent rights can be found in the PATENTS file in the same directory.
8+
*
9+
*/
10+
11+
/*global jest, describe, beforeEach, it, expect*/
12+
13+
jest.autoMockOff();
14+
15+
describe('findAllComponentDefinitions', () => {
16+
var findAllComponentDefinitions;
17+
var recast;
18+
var utils;
19+
20+
function parse(source) {
21+
return findAllComponentDefinitions(
22+
utils.parse(source),
23+
recast
24+
);
25+
}
26+
27+
beforeEach(() => {
28+
findAllComponentDefinitions = require('../findAllComponentDefinitions');
29+
utils = require('../../../tests/utils');
30+
recast = require('recast');
31+
});
32+
33+
describe('React.createClass', () => {
34+
35+
it('finds React.createClass', () => {
36+
var source = `
37+
var React = require("React");
38+
var Component = React.createClass({});
39+
module.exports = Component;
40+
`;
41+
42+
var result = parse(source);
43+
expect(Array.isArray(result)).toBe(true);
44+
expect(result.length).toBe(1);
45+
expect(result[0] instanceof recast.types.NodePath).toBe(true);
46+
expect(result[0].node.type).toBe('ObjectExpression');
47+
});
48+
49+
it('finds React.createClass, independent of the var name', () => {
50+
var source = `
51+
var R = require("React");
52+
var Component = R.createClass({});
53+
module.exports = Component;
54+
`;
55+
56+
var result = parse(source);
57+
expect(Array.isArray(result)).toBe(true);
58+
expect(result.length).toBe(1);
59+
});
60+
61+
it('does not process X.createClass of other modules', () => {
62+
var source = `
63+
var R = require("NoReact");
64+
var Component = R.createClass({});
65+
module.exports = Component;
66+
`;
67+
68+
var result = parse(source);
69+
expect(Array.isArray(result)).toBe(true);
70+
expect(result.length).toBe(0);
71+
});
72+
73+
it('finds assignments to exports', () => {
74+
var source = `
75+
var R = require("React");
76+
var Component = R.createClass({});
77+
exports.foo = 42;
78+
exports.Component = Component;
79+
`;
80+
81+
var result = parse(source);
82+
expect(Array.isArray(result)).toBe(true);
83+
expect(result.length).toBe(1);
84+
});
85+
86+
it('accepts multiple definitions', () => {
87+
var source = `
88+
var R = require("React");
89+
var ComponentA = R.createClass({});
90+
var ComponentB = R.createClass({});
91+
exports.ComponentB = ComponentB;
92+
`;
93+
94+
var result = parse(source);
95+
expect(Array.isArray(result)).toBe(true);
96+
expect(result.length).toBe(2);
97+
98+
source = `
99+
var R = require("React");
100+
var ComponentA = R.createClass({});
101+
var ComponentB = R.createClass({});
102+
module.exports = ComponentB;
103+
`;
104+
105+
result = parse(source);
106+
expect(Array.isArray(result)).toBe(true);
107+
expect(result.length).toBe(2);
108+
});
109+
110+
});
111+
112+
describe('class definitions', () => {
113+
114+
it('finds component classes', () => {
115+
var source = `
116+
import React from 'React';
117+
class ComponentA extends React.Component {}
118+
class ComponentB { render() {} }
119+
var ComponentC = class extends React.Component {}
120+
var ComponentD = class { render() {} }
121+
class NotAComponent {}
122+
`;
123+
124+
var result = parse(source);
125+
expect(Array.isArray(result)).toBe(true);
126+
expect(result.length).toBe(4);
127+
});
128+
129+
it('finds React.createClass, independent of the var name', () => {
130+
var source = `
131+
import R from 'React';
132+
class Component extends R.Component {};
133+
`;
134+
135+
var result = parse(source);
136+
expect(Array.isArray(result)).toBe(true);
137+
expect(result.length).toBe(1);
138+
});
139+
140+
it('does not process X.createClass of other modules', () => {
141+
var source = `
142+
import R from 'FakeReact';
143+
class Component extends R.Component {};
144+
`;
145+
146+
var result = parse(source);
147+
expect(Array.isArray(result)).toBe(true);
148+
expect(result.length).toBe(0);
149+
});
150+
});
151+
152+
});

src/resolver/__tests__/findAllReactCreateClassCalls-test.js

Lines changed: 0 additions & 106 deletions
This file was deleted.

0 commit comments

Comments
 (0)