@@ -43,6 +43,12 @@ ruleTester.run('onclick-has-focus', rule, {
43
43
{ code : '<div aria-hidden={1 <= 2} onClick={() => void 0} />' , parserOptions } ,
44
44
{ code : '<div aria-hidden={2 > 1} onClick={() => void 0} />' , parserOptions } ,
45
45
{ code : '<div aria-hidden={2 >= 1} onClick={() => void 0} />' , parserOptions } ,
46
+ { code : '<div onClick={() => void 0} />;' , parserOptions } ,
47
+ { code : '<div onClick={() => void 0} tabIndex={undefined} />;' , parserOptions } ,
48
+ { code : '<div onClick={() => void 0} tabIndex="bad" />;' , parserOptions } ,
49
+ { code : '<div onClick={() => void 0} role={undefined} />;' , parserOptions } ,
50
+ { code : '<div onClick={() => void 0} aria-hidden={false} />;' , parserOptions } ,
51
+ { code : '<div onClick={() => void 0} {...props} />;' , parserOptions } ,
46
52
{ code : '<input type="text" onClick={() => void 0} />' , parserOptions } ,
47
53
{ code : '<input type="hidden" onClick={() => void 0} tabIndex="-1" />' , parserOptions } ,
48
54
{ code : '<input type="hidden" onClick={() => void 0} tabIndex={-1} />' , parserOptions } ,
@@ -51,7 +57,12 @@ ruleTester.run('onclick-has-focus', rule, {
51
57
{ code : '<option onClick={() => void 0} className="foo" />' , parserOptions } ,
52
58
{ code : '<select onClick={() => void 0} className="foo" />' , parserOptions } ,
53
59
{ code : '<area href="#" onClick={() => void 0} className="foo" />' , parserOptions } ,
60
+ { code : '<area onClick={() => void 0} className="foo" />' , parserOptions } ,
54
61
{ code : '<textarea onClick={() => void 0} className="foo" />' , parserOptions } ,
62
+ { code : '<a onClick="showNextPage();">Next page</a>' , parserOptions } ,
63
+ { code : '<a onClick="showNextPage();" tabIndex={undefined}>Next page</a>' , parserOptions } ,
64
+ { code : '<a onClick="showNextPage();" tabIndex="bad">Next page</a>' , parserOptions } ,
65
+ { code : '<a onClick={() => void 0} />' , parserOptions } ,
55
66
{ code : '<a tabIndex="0" onClick={() => void 0} />' , parserOptions } ,
56
67
{ code : '<a tabIndex={dynamicTabIndex} onClick={() => void 0} />' , parserOptions } ,
57
68
{ code : '<a tabIndex={0} onClick={() => void 0} />' , parserOptions } ,
@@ -61,76 +72,101 @@ ruleTester.run('onclick-has-focus', rule, {
61
72
{ code : '<a onClick={() => void 0} href="http://x.y.z" tabIndex={0} />' , parserOptions } ,
62
73
{ code : '<TestComponent onClick={doFoo} />' , parserOptions } ,
63
74
{ code : '<input onClick={() => void 0} type="hidden" />;' , parserOptions } ,
75
+ { code : '<span onClick="submitForm();">Submit</span>' , errors : [ expectedError ] , parserOptions } ,
76
+ { code : '<span onClick="submitForm();" tabIndex={undefined}>Submit</span>' , parserOptions } ,
77
+ { code : '<span onClick="submitForm();" tabIndex="bad">Submit</span>' , parserOptions } ,
64
78
{ code : '<span onClick="doSomething();" tabIndex="0">Click me!</span>' , parserOptions } ,
65
79
{ code : '<span onClick="doSomething();" tabIndex={0}>Click me!</span>' , parserOptions } ,
66
80
{ code : '<span onClick="doSomething();" tabIndex="-1">Click me too!</span>' , parserOptions } ,
67
81
{
68
82
code : '<a href="javascript:void(0);" onClick="doSomething();">Click ALL the things!</a>' ,
69
83
parserOptions,
70
84
} ,
85
+ { code : '<section onClick={() => void 0} />;' , parserOptions } ,
86
+ { code : '<main onClick={() => void 0} />;' , parserOptions } ,
87
+ { code : '<article onClick={() => void 0} />;' , parserOptions } ,
88
+ { code : '<header onClick={() => void 0} />;' , parserOptions } ,
89
+ { code : '<footer onClick={() => void 0} />;' , parserOptions } ,
90
+ { code : '<div role="button" tabIndex="0" onClick={() => void 0} />' , parserOptions } ,
91
+ { code : '<div role="checkbox" tabIndex="0" onClick={() => void 0} />' , parserOptions } ,
92
+ { code : '<div role="link" tabIndex="0" onClick={() => void 0} />' , parserOptions } ,
93
+ { code : '<div role="menuitem" tabIndex="0" onClick={() => void 0} />' , parserOptions } ,
94
+ { code : '<div role="menuitemcheckbox" tabIndex="0" onClick={() => void 0} />' , parserOptions } ,
95
+ { code : '<div role="menuitemradio" tabIndex="0" onClick={() => void 0} />' , parserOptions } ,
96
+ { code : '<div role="option" tabIndex="0" onClick={() => void 0} />' , parserOptions } ,
97
+ { code : '<div role="radio" tabIndex="0" onClick={() => void 0} />' , parserOptions } ,
98
+ { code : '<div role="spinbutton" tabIndex="0" onClick={() => void 0} />' , parserOptions } ,
99
+ { code : '<div role="tab" tabIndex="0" onClick={() => void 0} />' , parserOptions } ,
100
+ { code : '<div role="textbox" tabIndex="0" onClick={() => void 0} />' , parserOptions } ,
71
101
{ code : '<Foo.Bar onClick={() => void 0} aria-hidden={false} />;' , parserOptions } ,
72
102
{ code : '<Input onClick={() => void 0} type="hidden" />;' , parserOptions } ,
73
103
] ,
74
104
75
105
invalid : [
76
- { code : '<span onClick="submitForm();">Submit</span>' , errors : [ expectedError ] , parserOptions } ,
77
106
{
78
- code : '<span onClick="submitForm();" tabIndex={undefined}>Submit</span>' ,
107
+ code : '<span role="button" onClick={() => void 0} />' ,
108
+ errors : [ expectedError ] ,
109
+ parserOptions,
110
+ } ,
111
+ {
112
+ code : '<a role="button" onClick={() => void 0} />' ,
113
+ errors : [ expectedError ] ,
114
+ parserOptions,
115
+ } ,
116
+ {
117
+ code : '<div role="button" onClick={() => void 0} />' ,
118
+ errors : [ expectedError ] ,
119
+ parserOptions,
120
+ } ,
121
+ {
122
+ code : '<div role="checkbox" onClick={() => void 0} />' ,
79
123
errors : [ expectedError ] ,
80
124
parserOptions,
81
125
} ,
82
126
{
83
- code : '<span onClick="submitForm();" tabIndex="bad">Submit</span >' ,
127
+ code : '<div role="link" onClick={() => void 0} / >' ,
84
128
errors : [ expectedError ] ,
85
129
parserOptions,
86
130
} ,
87
- { code : '<a onClick="showNextPage();">Next page</a>' , errors : [ expectedError ] , parserOptions } ,
88
131
{
89
- code : '<a onClick="showNextPage();" tabIndex={undefined}>Next page</a >' ,
132
+ code : '<div role="menuitem" onClick={() => void 0} / >' ,
90
133
errors : [ expectedError ] ,
91
134
parserOptions,
92
135
} ,
93
136
{
94
- code : '<a onClick="showNextPage();" tabIndex="bad">Next page</a >' ,
137
+ code : '<div role="menuitemcheckbox" onClick={() => void 0} / >' ,
95
138
errors : [ expectedError ] ,
96
139
parserOptions,
97
140
} ,
98
141
{
99
- code : '<a onClick={() => void 0} />' ,
142
+ code : '<div role="menuitemradio" onClick={() => void 0} />' ,
100
143
errors : [ expectedError ] ,
101
144
parserOptions,
102
145
} ,
103
146
{
104
- code : '<area onClick={() => void 0} className="foo" />' ,
147
+ code : '<div role="option" onClick={() => void 0} />' ,
105
148
errors : [ expectedError ] ,
106
149
parserOptions,
107
150
} ,
108
- { code : '<div onClick={() => void 0} />;' , errors : [ expectedError ] , parserOptions } ,
109
151
{
110
- code : '<div onClick={() => void 0} tabIndex={undefined} />; ' ,
152
+ code : '<div role="radio" onClick={() => void 0} /> ' ,
111
153
errors : [ expectedError ] ,
112
154
parserOptions,
113
155
} ,
114
156
{
115
- code : '<div onClick={() => void 0} tabIndex="bad" />; ' ,
157
+ code : '<div role="spinbutton" onClick={() => void 0} /> ' ,
116
158
errors : [ expectedError ] ,
117
159
parserOptions,
118
160
} ,
119
161
{
120
- code : '<div onClick={() => void 0} role={undefined} />; ' ,
162
+ code : '<div role="tab" onClick={() => void 0} /> ' ,
121
163
errors : [ expectedError ] ,
122
164
parserOptions,
123
165
} ,
124
166
{
125
- code : '<div onClick={() => void 0} aria-hidden={false} />; ' ,
167
+ code : '<div role="textbox" onClick={() => void 0} /> ' ,
126
168
errors : [ expectedError ] ,
127
169
parserOptions,
128
170
} ,
129
- { code : '<div onClick={() => void 0} {...props} />;' , errors : [ expectedError ] , parserOptions } ,
130
- { code : '<section onClick={() => void 0} />;' , errors : [ expectedError ] , parserOptions } ,
131
- { code : '<main onClick={() => void 0} />;' , errors : [ expectedError ] , parserOptions } ,
132
- { code : '<article onClick={() => void 0} />;' , errors : [ expectedError ] , parserOptions } ,
133
- { code : '<header onClick={() => void 0} />;' , errors : [ expectedError ] , parserOptions } ,
134
- { code : '<footer onClick={() => void 0} />;' , errors : [ expectedError ] , parserOptions } ,
135
171
] ,
136
172
} ) ;
0 commit comments