11
11
var rule = require ( '../../../lib/rules/no-did-update-set-state' ) ;
12
12
var RuleTester = require ( 'eslint' ) . RuleTester ;
13
13
14
+ require ( 'babel-eslint' ) ;
15
+
14
16
// ------------------------------------------------------------------------------
15
17
// Tests
16
18
// ------------------------------------------------------------------------------
@@ -32,10 +34,7 @@ ruleTester.run('no-did-update-set-state', rule, {
32
34
} , {
33
35
code : [
34
36
'var Hello = React.createClass({' ,
35
- 'componentDidUpdate: function() {},' ,
36
- ' render: function() {' ,
37
- ' return <div>Hello {this.props.name}</div>;' ,
38
- ' }' ,
37
+ ' componentDidUpdate: function() {}' ,
39
38
'});'
40
39
] . join ( '\n' ) ,
41
40
ecmaFeatures : {
@@ -47,30 +46,89 @@ ruleTester.run('no-did-update-set-state', rule, {
47
46
' componentDidUpdate: function() {' ,
48
47
' someNonMemberFunction(arg);' ,
49
48
' this.someHandler = this.setState;' ,
50
- ' },' ,
51
- ' render: function() {' ,
52
- ' return <div>Hello {this.props.name}</div>;' ,
53
49
' }' ,
54
50
'});'
55
51
] . join ( '\n' ) ,
56
52
ecmaFeatures : {
57
53
jsx : true
58
54
}
55
+ } , {
56
+ code : [
57
+ 'var Hello = React.createClass({' ,
58
+ ' componentDidUpdate: function() {' ,
59
+ ' someClass.onSomeEvent(function(data) {' ,
60
+ ' this.setState({' ,
61
+ ' data: data' ,
62
+ ' });' ,
63
+ ' })' ,
64
+ ' }' ,
65
+ '});'
66
+ ] . join ( '\n' ) ,
67
+ options : [ 'allow-in-func' ] ,
68
+ ecmaFeatures : {
69
+ jsx : true
70
+ }
71
+ } , {
72
+ code : [
73
+ 'var Hello = React.createClass({' ,
74
+ ' componentDidUpdate: function() {' ,
75
+ ' function handleEvent(data) {' ,
76
+ ' this.setState({' ,
77
+ ' data: data' ,
78
+ ' });' ,
79
+ ' }' ,
80
+ ' someClass.onSomeEvent(handleEvent)' ,
81
+ ' }' ,
82
+ '});'
83
+ ] . join ( '\n' ) ,
84
+ parser : 'babel-eslint' ,
85
+ options : [ 'allow-in-func' ] ,
86
+ ecmaFeatures : {
87
+ jsx : true
88
+ }
59
89
} ] ,
60
90
61
91
invalid : [ {
62
92
code : [
63
93
'var Hello = React.createClass({' ,
64
94
' componentDidUpdate: function() {' ,
65
95
' this.setState({' ,
66
- ' name: this.props.name.toUpperCase()' ,
96
+ ' data: data' ,
97
+ ' });' ,
98
+ ' }' ,
99
+ '});'
100
+ ] . join ( '\n' ) ,
101
+ ecmaFeatures : {
102
+ jsx : true
103
+ } ,
104
+ errors : [ {
105
+ message : 'Do not use setState in componentDidUpdate'
106
+ } ]
107
+ } , {
108
+ code : [
109
+ 'class Hello extends React.Component {' ,
110
+ ' componentDidUpdate() {' ,
111
+ ' this.setState({' ,
112
+ ' data: data' ,
113
+ ' });' ,
114
+ ' }' ,
115
+ '}'
116
+ ] . join ( '\n' ) ,
117
+ parser : 'babel-eslint' ,
118
+ errors : [ {
119
+ message : 'Do not use setState in componentDidUpdate'
120
+ } ]
121
+ } , {
122
+ code : [
123
+ 'var Hello = React.createClass({' ,
124
+ ' componentDidUpdate: function() {' ,
125
+ ' this.setState({' ,
126
+ ' data: data' ,
67
127
' });' ,
68
- ' },' ,
69
- ' render: function() {' ,
70
- ' return <div>Hello {this.state.name}</div>;' ,
71
128
' }' ,
72
129
'});'
73
130
] . join ( '\n' ) ,
131
+ options : [ 'allow-in-func' ] ,
74
132
ecmaFeatures : {
75
133
jsx : true
76
134
} ,
@@ -82,11 +140,104 @@ ruleTester.run('no-did-update-set-state', rule, {
82
140
'class Hello extends React.Component {' ,
83
141
' componentDidUpdate() {' ,
84
142
' this.setState({' ,
85
- ' name: this.props.name.toUpperCase() ' ,
143
+ ' data: data ' ,
86
144
' });' ,
87
145
' }' ,
88
- ' render() {' ,
89
- ' return <div>Hello {this.state.name}</div>;' ,
146
+ '}'
147
+ ] . join ( '\n' ) ,
148
+ parser : 'babel-eslint' ,
149
+ options : [ 'allow-in-func' ] ,
150
+ errors : [ {
151
+ message : 'Do not use setState in componentDidUpdate'
152
+ } ]
153
+ } , {
154
+ code : [
155
+ 'var Hello = React.createClass({' ,
156
+ ' componentDidUpdate: function() {' ,
157
+ ' someClass.onSomeEvent(function(data) {' ,
158
+ ' this.setState({' ,
159
+ ' data: data' ,
160
+ ' });' ,
161
+ ' })' ,
162
+ ' }' ,
163
+ '});'
164
+ ] . join ( '\n' ) ,
165
+ ecmaFeatures : {
166
+ jsx : true
167
+ } ,
168
+ errors : [ {
169
+ message : 'Do not use setState in componentDidUpdate'
170
+ } ]
171
+ } , {
172
+ code : [
173
+ 'class Hello extends React.Component {' ,
174
+ ' componentDidUpdate() {' ,
175
+ ' someClass.onSomeEvent(function(data) {' ,
176
+ ' this.setState({' ,
177
+ ' data: data' ,
178
+ ' });' ,
179
+ ' })' ,
180
+ ' }' ,
181
+ '}'
182
+ ] . join ( '\n' ) ,
183
+ parser : 'babel-eslint' ,
184
+ errors : [ {
185
+ message : 'Do not use setState in componentDidUpdate'
186
+ } ]
187
+ } , {
188
+ code : [
189
+ 'var Hello = React.createClass({' ,
190
+ ' componentDidUpdate: function() {' ,
191
+ ' if (true) {' ,
192
+ ' this.setState({' ,
193
+ ' data: data' ,
194
+ ' });' ,
195
+ ' }' ,
196
+ ' }' ,
197
+ '});'
198
+ ] . join ( '\n' ) ,
199
+ ecmaFeatures : {
200
+ jsx : true
201
+ } ,
202
+ errors : [ {
203
+ message : 'Do not use setState in componentDidUpdate'
204
+ } ]
205
+ } , {
206
+ code : [
207
+ 'class Hello extends React.Component {' ,
208
+ ' componentDidUpdate() {' ,
209
+ ' if (true) {' ,
210
+ ' this.setState({' ,
211
+ ' data: data' ,
212
+ ' });' ,
213
+ ' }' ,
214
+ ' }' ,
215
+ '}'
216
+ ] . join ( '\n' ) ,
217
+ parser : 'babel-eslint' ,
218
+ errors : [ {
219
+ message : 'Do not use setState in componentDidUpdate'
220
+ } ]
221
+ } , {
222
+ code : [
223
+ 'var Hello = React.createClass({' ,
224
+ ' componentDidUpdate: function() {' ,
225
+ ' someClass.onSomeEvent((data) => this.setState({data: data}));' ,
226
+ ' }' ,
227
+ '});'
228
+ ] . join ( '\n' ) ,
229
+ parser : 'babel-eslint' ,
230
+ ecmaFeatures : {
231
+ jsx : true
232
+ } ,
233
+ errors : [ {
234
+ message : 'Do not use setState in componentDidUpdate'
235
+ } ]
236
+ } , {
237
+ code : [
238
+ 'class Hello extends React.Component {' ,
239
+ ' componentDidUpdate() {' ,
240
+ ' someClass.onSomeEvent((data) => this.setState({data: data}));' ,
90
241
' }' ,
91
242
'}'
92
243
] . join ( '\n' ) ,
0 commit comments