Skip to content

Commit ea819d6

Browse files
committed
Static elements pass the no-noninteractive-element-handlers test
1 parent 99c3cdd commit ea819d6

File tree

2 files changed

+105
-106
lines changed

2 files changed

+105
-106
lines changed

__tests__/src/rules/no-noninteractive-element-handlers-test.js

Lines changed: 103 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,6 @@ ruleTester.run('no-noninteractive-element-handlers', rule, {
3030
valid: [
3131
{ code: '<TestComponent onClick={doFoo} />' },
3232
{ code: '<Button onClick={doFoo} />' },
33-
{ code: '<div />;' },
34-
{ code: '<div className="foo" />;' },
35-
{ code: '<div className="foo" {...props} />;' },
36-
{ code: '<div onClick={() => void 0} aria-hidden />;' },
37-
{ code: '<div onClick={() => void 0} aria-hidden={true} />;' },
3833
/* All flavors of input */
3934
{ code: '<input onClick={() => void 0} />' },
4035
{ code: '<input type="button" onClick={() => void 0} />' },
@@ -70,6 +65,107 @@ ruleTester.run('no-noninteractive-element-handlers', rule, {
7065
{ code: '<select onClick={() => void 0} className="foo" />' },
7166
{ code: '<textarea onClick={() => void 0} className="foo" />' },
7267
{ code: '<tr onClick={() => {}} />;' },
68+
/* HTML elements with neither an interactive or non-interactive valence (static) */
69+
{ code: '<acronym onClick={() => {}} />;' },
70+
{ code: '<address onClick={() => {}} />;' },
71+
{ code: '<applet onClick={() => {}} />;' },
72+
{ code: '<aside onClick={() => {}} />;' },
73+
{ code: '<audio onClick={() => {}} />;' },
74+
{ code: '<b onClick={() => {}} />;' },
75+
{ code: '<base onClick={() => {}} />;' },
76+
{ code: '<bdi onClick={() => {}} />;' },
77+
{ code: '<bdo onClick={() => {}} />;' },
78+
{ code: '<big onClick={() => {}} />;' },
79+
{ code: '<blink onClick={() => {}} />;' },
80+
{ code: '<blockquote onClick={() => {}} />;' },
81+
{ code: '<body onClick={() => {}} />;' },
82+
{ code: '<br onClick={() => {}} />;' },
83+
{ code: '<canvas onClick={() => {}} />;' },
84+
{ code: '<caption onClick={() => {}} />;' },
85+
{ code: '<center onClick={() => {}} />;' },
86+
{ code: '<cite onClick={() => {}} />;' },
87+
{ code: '<code onClick={() => {}} />;' },
88+
{ code: '<col onClick={() => {}} />;' },
89+
{ code: '<colgroup onClick={() => {}} />;' },
90+
{ code: '<content onClick={() => {}} />;' },
91+
{ code: '<data onClick={() => {}} />;' },
92+
{ code: '<datalist onClick={() => {}} />;' },
93+
{ code: '<del onClick={() => {}} />;' },
94+
{ code: '<details onClick={() => {}} />;' },
95+
{ code: '<dir onClick={() => {}} />;' },
96+
{ code: '<div />;' },
97+
{ code: '<div className="foo" />;' },
98+
{ code: '<div className="foo" {...props} />;' },
99+
{ code: '<div onClick={() => void 0} aria-hidden />;' },
100+
{ code: '<div onClick={() => void 0} aria-hidden={true} />;' },
101+
{ code: '<div onClick={() => void 0} />;' },
102+
{ code: '<div onClick={() => void 0} role={undefined} />;' },
103+
{ code: '<div onClick={() => void 0} {...props} />;' },
104+
{ code: '<div onKeyUp={() => void 0} aria-hidden={false} />;' },
105+
{ code: '<dl onClick={() => {}} />;' },
106+
{ code: '<em onClick={() => {}} />;' },
107+
{ code: '<embed onClick={() => {}} />;' },
108+
{ code: '<figcaption onClick={() => {}} />;' },
109+
{ code: '<font onClick={() => {}} />;' },
110+
{ code: '<footer onClick={() => {}} />;' },
111+
{ code: '<frameset onClick={() => {}} />;' },
112+
{ code: '<head onClick={() => {}} />;' },
113+
{ code: '<header onClick={() => {}} />;' },
114+
{ code: '<hgroup onClick={() => {}} />;' },
115+
{ code: '<html onClick={() => {}} />;' },
116+
{ code: '<i onClick={() => {}} />;' },
117+
{ code: '<iframe onClick={() => {}} />;' },
118+
{ code: '<ins onClick={() => {}} />;' },
119+
{ code: '<kbd onClick={() => {}} />;' },
120+
{ code: '<keygen onClick={() => {}} />;' },
121+
{ code: '<label onClick={() => {}} />;' },
122+
{ code: '<legend onClick={() => {}} />;' },
123+
{ code: '<link onClick={() => {}} />;' },
124+
{ code: '<map onClick={() => {}} />;' },
125+
{ code: '<mark onClick={() => {}} />;' },
126+
{ code: '<marquee onClick={() => {}} />;' },
127+
{ code: '<menu onClick={() => {}} />;' },
128+
{ code: '<meta onClick={() => {}} />;' },
129+
{ code: '<meter onClick={() => {}} />;' },
130+
{ code: '<noembed onClick={() => {}} />;' },
131+
{ code: '<noscript onClick={() => {}} />;' },
132+
{ code: '<object onClick={() => {}} />;' },
133+
{ code: '<optgroup onClick={() => {}} />;' },
134+
{ code: '<output onClick={() => {}} />;' },
135+
{ code: '<p onClick={() => {}} />;' },
136+
{ code: '<param onClick={() => {}} />;' },
137+
{ code: '<picture onClick={() => {}} />;' },
138+
{ code: '<pre onClick={() => {}} />;' },
139+
{ code: '<progress onClick={() => {}} />;' },
140+
{ code: '<q onClick={() => {}} />;' },
141+
{ code: '<rp onClick={() => {}} />;' },
142+
{ code: '<rt onClick={() => {}} />;' },
143+
{ code: '<rtc onClick={() => {}} />;' },
144+
{ code: '<ruby onClick={() => {}} />;' },
145+
{ code: '<s onClick={() => {}} />;' },
146+
{ code: '<samp onClick={() => {}} />;' },
147+
{ code: '<script onClick={() => {}} />;' },
148+
{ code: '<section onClick={() => {}} />;' },
149+
{ code: '<small onClick={() => {}} />;' },
150+
{ code: '<source onClick={() => {}} />;' },
151+
{ code: '<spacer onClick={() => {}} />;' },
152+
{ code: '<span onClick={() => {}} />;' },
153+
{ code: '<strike onClick={() => {}} />;' },
154+
{ code: '<strong onClick={() => {}} />;' },
155+
{ code: '<style onClick={() => {}} />;' },
156+
{ code: '<sub onClick={() => {}} />;' },
157+
{ code: '<summary onClick={() => {}} />;' },
158+
{ code: '<sup onClick={() => {}} />;' },
159+
{ code: '<th onClick={() => {}} />;' },
160+
{ code: '<time onClick={() => {}} />;' },
161+
{ code: '<title onClick={() => {}} />;' },
162+
{ code: '<track onClick={() => {}} />;' },
163+
{ code: '<tt onClick={() => {}} />;' },
164+
{ code: '<u onClick={() => {}} />;' },
165+
{ code: '<var onClick={() => {}} />;' },
166+
{ code: '<video onClick={() => {}} />;' },
167+
{ code: '<wbr onClick={() => {}} />;' },
168+
{ code: '<xmp onClick={() => {}} />;' },
73169
/* HTML elements attributed with an interactive role */
74170
{ code: '<div role="button" onClick={() => {}} />;' },
75171
{ code: '<div role="checkbox" onClick={() => {}} />;' },
@@ -117,105 +213,6 @@ ruleTester.run('no-noninteractive-element-handlers', rule, {
117213
{ code: '<div role="window" onClick={() => {}} />;' },
118214
].map(parserOptionsMapper),
119215
invalid: [
120-
{ code: '<div onClick={() => void 0} />;', errors: [expectedError] },
121-
{ code: '<div onClick={() => void 0} role={undefined} />;', errors: [expectedError] },
122-
{ code: '<div onClick={() => void 0} {...props} />;', errors: [expectedError] },
123-
{ code: '<div onKeyUp={() => void 0} aria-hidden={false} />;', errors: [expectedError] },
124-
/* Static elements; no inherent role */
125-
{ code: '<acronym onClick={() => {}} />;', errors: [expectedError] },
126-
{ code: '<address onClick={() => {}} />;', errors: [expectedError] },
127-
{ code: '<applet onClick={() => {}} />;', errors: [expectedError] },
128-
{ code: '<aside onClick={() => {}} />;', errors: [expectedError] },
129-
{ code: '<audio onClick={() => {}} />;', errors: [expectedError] },
130-
{ code: '<b onClick={() => {}} />;', errors: [expectedError] },
131-
{ code: '<base onClick={() => {}} />;', errors: [expectedError] },
132-
{ code: '<bdi onClick={() => {}} />;', errors: [expectedError] },
133-
{ code: '<bdo onClick={() => {}} />;', errors: [expectedError] },
134-
{ code: '<big onClick={() => {}} />;', errors: [expectedError] },
135-
{ code: '<blink onClick={() => {}} />;', errors: [expectedError] },
136-
{ code: '<blockquote onClick={() => {}} />;', errors: [expectedError] },
137-
{ code: '<body onClick={() => {}} />;', errors: [expectedError] },
138-
{ code: '<br onClick={() => {}} />;', errors: [expectedError] },
139-
{ code: '<canvas onClick={() => {}} />;', errors: [expectedError] },
140-
{ code: '<caption onClick={() => {}} />;', errors: [expectedError] },
141-
{ code: '<center onClick={() => {}} />;', errors: [expectedError] },
142-
{ code: '<cite onClick={() => {}} />;', errors: [expectedError] },
143-
{ code: '<code onClick={() => {}} />;', errors: [expectedError] },
144-
{ code: '<col onClick={() => {}} />;', errors: [expectedError] },
145-
{ code: '<colgroup onClick={() => {}} />;', errors: [expectedError] },
146-
{ code: '<content onClick={() => {}} />;', errors: [expectedError] },
147-
{ code: '<data onClick={() => {}} />;', errors: [expectedError] },
148-
{ code: '<datalist onClick={() => {}} />;', errors: [expectedError] },
149-
{ code: '<del onClick={() => {}} />;', errors: [expectedError] },
150-
{ code: '<details onClick={() => {}} />;', errors: [expectedError] },
151-
{ code: '<dir onClick={() => {}} />;', errors: [expectedError] },
152-
{ code: '<div onClick={() => {}} />;', errors: [expectedError] },
153-
{ code: '<dl onClick={() => {}} />;', errors: [expectedError] },
154-
{ code: '<em onClick={() => {}} />;', errors: [expectedError] },
155-
{ code: '<embed onClick={() => {}} />;', errors: [expectedError] },
156-
{ code: '<figcaption onClick={() => {}} />;', errors: [expectedError] },
157-
{ code: '<font onClick={() => {}} />;', errors: [expectedError] },
158-
{ code: '<footer onClick={() => {}} />;', errors: [expectedError] },
159-
{ code: '<form onClick={() => {}} />;', errors: [expectedError] },
160-
{ code: '<frameset onClick={() => {}} />;', errors: [expectedError] },
161-
{ code: '<head onClick={() => {}} />;', errors: [expectedError] },
162-
{ code: '<header onClick={() => {}} />;', errors: [expectedError] },
163-
{ code: '<hgroup onClick={() => {}} />;', errors: [expectedError] },
164-
{ code: '<html onClick={() => {}} />;', errors: [expectedError] },
165-
{ code: '<i onClick={() => {}} />;', errors: [expectedError] },
166-
{ code: '<iframe onClick={() => {}} />;', errors: [expectedError] },
167-
{ code: '<ins onClick={() => {}} />;', errors: [expectedError] },
168-
{ code: '<kbd onClick={() => {}} />;', errors: [expectedError] },
169-
{ code: '<keygen onClick={() => {}} />;', errors: [expectedError] },
170-
{ code: '<label onClick={() => {}} />;', errors: [expectedError] },
171-
{ code: '<legend onClick={() => {}} />;', errors: [expectedError] },
172-
{ code: '<link onClick={() => {}} />;', errors: [expectedError] },
173-
{ code: '<map onClick={() => {}} />;', errors: [expectedError] },
174-
{ code: '<mark onClick={() => {}} />;', errors: [expectedError] },
175-
{ code: '<marquee onClick={() => {}} />;', errors: [expectedError] },
176-
{ code: '<menu onClick={() => {}} />;', errors: [expectedError] },
177-
{ code: '<meta onClick={() => {}} />;', errors: [expectedError] },
178-
{ code: '<meter onClick={() => {}} />;', errors: [expectedError] },
179-
{ code: '<noembed onClick={() => {}} />;', errors: [expectedError] },
180-
{ code: '<noscript onClick={() => {}} />;', errors: [expectedError] },
181-
{ code: '<object onClick={() => {}} />;', errors: [expectedError] },
182-
{ code: '<optgroup onClick={() => {}} />;', errors: [expectedError] },
183-
{ code: '<output onClick={() => {}} />;', errors: [expectedError] },
184-
{ code: '<p onClick={() => {}} />;', errors: [expectedError] },
185-
{ code: '<param onClick={() => {}} />;', errors: [expectedError] },
186-
{ code: '<picture onClick={() => {}} />;', errors: [expectedError] },
187-
{ code: '<pre onClick={() => {}} />;', errors: [expectedError] },
188-
{ code: '<progress onClick={() => {}} />;', errors: [expectedError] },
189-
{ code: '<q onClick={() => {}} />;', errors: [expectedError] },
190-
{ code: '<rp onClick={() => {}} />;', errors: [expectedError] },
191-
{ code: '<rt onClick={() => {}} />;', errors: [expectedError] },
192-
{ code: '<rtc onClick={() => {}} />;', errors: [expectedError] },
193-
{ code: '<ruby onClick={() => {}} />;', errors: [expectedError] },
194-
{ code: '<s onClick={() => {}} />;', errors: [expectedError] },
195-
{ code: '<samp onClick={() => {}} />;', errors: [expectedError] },
196-
{ code: '<script onClick={() => {}} />;', errors: [expectedError] },
197-
{ code: '<section onClick={() => {}} />;', errors: [expectedError] },
198-
{ code: '<small onClick={() => {}} />;', errors: [expectedError] },
199-
{ code: '<source onClick={() => {}} />;', errors: [expectedError] },
200-
{ code: '<spacer onClick={() => {}} />;', errors: [expectedError] },
201-
{ code: '<span onClick={() => {}} />;', errors: [expectedError] },
202-
{ code: '<strike onClick={() => {}} />;', errors: [expectedError] },
203-
{ code: '<strong onClick={() => {}} />;', errors: [expectedError] },
204-
{ code: '<style onClick={() => {}} />;', errors: [expectedError] },
205-
{ code: '<sub onClick={() => {}} />;', errors: [expectedError] },
206-
{ code: '<summary onClick={() => {}} />;', errors: [expectedError] },
207-
{ code: '<sup onClick={() => {}} />;', errors: [expectedError] },
208-
{ code: '<td onClick={() => {}} />;', errors: [expectedError] },
209-
{ code: '<th onClick={() => {}} />;', errors: [expectedError] },
210-
{ code: '<time onClick={() => {}} />;', errors: [expectedError] },
211-
{ code: '<title onClick={() => {}} />;', errors: [expectedError] },
212-
{ code: '<track onClick={() => {}} />;', errors: [expectedError] },
213-
{ code: '<tt onClick={() => {}} />;', errors: [expectedError] },
214-
{ code: '<u onClick={() => {}} />;', errors: [expectedError] },
215-
{ code: '<var onClick={() => {}} />;', errors: [expectedError] },
216-
{ code: '<video onClick={() => {}} />;', errors: [expectedError] },
217-
{ code: '<wbr onClick={() => {}} />;', errors: [expectedError] },
218-
{ code: '<xmp onClick={() => {}} />;', errors: [expectedError] },
219216
/* HTML elements with an inherent, non-interactive role */
220217
{ code: '<main onClick={() => void 0} />;', errors: [expectedError] },
221218
{ code: '<a onClick={() => void 0} />', errors: [expectedError] },
@@ -228,6 +225,7 @@ ruleTester.run('no-noninteractive-element-handlers', rule, {
228225
{ code: '<dt onClick={() => {}} />;', errors: [expectedError] },
229226
{ code: '<fieldset onClick={() => {}} />;', errors: [expectedError] },
230227
{ code: '<figure onClick={() => {}} />;', errors: [expectedError] },
228+
{ code: '<form onClick={() => {}} />;', errors: [expectedError] },
231229
{ code: '<frame onClick={() => {}} />;', errors: [expectedError] },
232230
{ code: '<h1 onClick={() => {}} />;', errors: [expectedError] },
233231
{ code: '<h2 onClick={() => {}} />;', errors: [expectedError] },
@@ -242,6 +240,7 @@ ruleTester.run('no-noninteractive-element-handlers', rule, {
242240
{ code: '<ol onClick={() => {}} />;', errors: [expectedError] },
243241
{ code: '<table onClick={() => {}} />;', errors: [expectedError] },
244242
{ code: '<tbody onClick={() => {}} />;', errors: [expectedError] },
243+
{ code: '<td onClick={() => {}} />;', errors: [expectedError] },
245244
{ code: '<tfoot onClick={() => {}} />;', errors: [expectedError] },
246245
{ code: '<thead onClick={() => {}} />;', errors: [expectedError] },
247246
{ code: '<ul onClick={() => {}} />;', errors: [expectedError] },

__tests__/src/rules/no-static-element-interactions-test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ const expectedError = {
2828

2929
ruleTester.run('no-static-element-interactions', rule, {
3030
valid: [
31+
{ code: '<TestComponent onClick={doFoo} />' },
32+
{ code: '<Button onClick={doFoo} />' },
3133
{ code: '<div />;' },
3234
{ code: '<div className="foo" />;' },
3335
{ code: '<div className="foo" {...props} />;' },
@@ -69,8 +71,6 @@ ruleTester.run('no-static-element-interactions', rule, {
6971
{ code: '<a onClick={() => void 0} href="http://x.y.z" tabIndex="0" />' },
7072
{ code: '<input onClick={() => void 0} type="hidden" />;' },
7173
{ code: '<form onClick={() => {}} />;' },
72-
{ code: '<TestComponent onClick={doFoo} />' },
73-
{ code: '<Button onClick={doFoo} />' },
7474
/* HTML elements attributed with an interactive role */
7575
{ code: '<div role="button" onClick={() => {}} />;' },
7676
{ code: '<div role="checkbox" onClick={() => {}} />;' },

0 commit comments

Comments
 (0)