@@ -13,9 +13,10 @@ ruleTester.run('template-no-invalid-interactive', rule, {
1313 code : '<template><button onclick={{this.handleClick}}>Click</button></template>' ,
1414 output : null ,
1515 } ,
16+ // <a> with href is interactive
1617 {
1718 filename : 'test.gjs' ,
18- code : '<template><a onclick={{this.handleClick}}>Link</a></template>' ,
19+ code : '<template><a href="/about" onclick={{this.handleClick}}>Link</a></template>' ,
1920 output : null ,
2021 } ,
2122 {
@@ -62,6 +63,26 @@ ruleTester.run('template-no-invalid-interactive', rule, {
6263 '<template><video {{on "pause" this.onPause}}></video></template>' ,
6364 '<template><img {{action "foo" on="load"}}></template>' ,
6465 '<template><img {{action "foo" on="error"}}></template>' ,
66+
67+ // <summary> is natively interactive
68+ '<template><summary onclick={{this.toggle}}>Details</summary></template>' ,
69+
70+ // ARIA widget roles: scrollbar, tooltip, treeitem
71+ '<template><div role="scrollbar" onclick={{this.scroll}}>Scroll</div></template>' ,
72+ '<template><div role="tooltip" onclick={{this.show}}>Tip</div></template>' ,
73+ '<template><div role="treeitem" onclick={{this.select}}>Node</div></template>' ,
74+
75+ // audio/video with controls are interactive
76+ '<template><audio controls onclick={{this.play}}></audio></template>' ,
77+ '<template><video controls onclick={{this.play}}></video></template>' ,
78+
79+ // usemap only makes img/object interactive
80+ '<template><img usemap="#map" onclick={{this.click}}></template>' ,
81+
82+ // Component invocations are skipped (not HTML elements)
83+ '<template><@someComponent onclick={{this.click}} /></template>' ,
84+ '<template><this.myComponent onclick={{this.click}} /></template>' ,
85+ '<template><ns.SomeWidget onclick={{this.click}} /></template>' ,
6586 ] ,
6687
6788 invalid : [
@@ -140,5 +161,29 @@ ruleTester.run('template-no-invalid-interactive', rule, {
140161 output : null ,
141162 errors : [ { messageId : 'noInvalidInteractive' } ] ,
142163 } ,
164+ {
165+ // usemap on non-img/object does NOT make the element interactive
166+ code : '<template><div usemap="#map" onclick={{this.click}}>Content</div></template>' ,
167+ output : null ,
168+ errors : [ { messageId : 'noInvalidInteractive' } ] ,
169+ } ,
170+ {
171+ // audio/video without controls is NOT interactive
172+ code : '<template><audio onclick={{this.play}}></audio></template>' ,
173+ output : null ,
174+ errors : [ { messageId : 'noInvalidInteractive' } ] ,
175+ } ,
176+ {
177+ // <a> without href is NOT interactive
178+ filename : 'test.gjs' ,
179+ code : '<template><a onclick={{this.handleClick}}>Link</a></template>' ,
180+ output : null ,
181+ errors : [
182+ {
183+ messageId : 'noInvalidInteractive' ,
184+ data : { tagName : 'a' , handler : 'onclick' } ,
185+ } ,
186+ ] ,
187+ } ,
143188 ] ,
144189} ) ;
0 commit comments