|
1 |
| -import {setup} from '#testHelpers' |
| 1 | +import {isJsdomEnv, setup} from '#testHelpers' |
2 | 2 |
|
3 | 3 | test('click element', async () => {
|
4 | 4 | const {element, getClickEventsSnapshot, getEvents, user} = setup('<div />')
|
@@ -236,6 +236,29 @@ describe('label', () => {
|
236 | 236 | expect(getEvents('click')).toHaveLength(2)
|
237 | 237 | })
|
238 | 238 |
|
| 239 | + test('click nested FACE per label', async () => { |
| 240 | + const {element, getEvents, user} = setup(`<label><fa-ce></fa-ce></label>`) |
| 241 | + |
| 242 | + await user.pointer({ |
| 243 | + keys: '[MouseLeft]', |
| 244 | + target: element, |
| 245 | + }) |
| 246 | + |
| 247 | + // JSDOM does not set `HTMLLabelElement.control` to the form-associated custom element |
| 248 | + expect(getEvents('click')).toHaveLength(isJsdomEnv() ? 1 : 2) |
| 249 | + }) |
| 250 | + |
| 251 | + test('click nested FACE', async () => { |
| 252 | + const {element, getEvents, user} = setup(`<label><fa-ce></fa-ce></label>`) |
| 253 | + |
| 254 | + await user.pointer({ |
| 255 | + keys: '[MouseLeft]', |
| 256 | + target: element.firstChild as Element, |
| 257 | + }) |
| 258 | + |
| 259 | + expect(getEvents('click')).toHaveLength(1) |
| 260 | + }) |
| 261 | + |
239 | 262 | test('do not click associated non-focusable control per label', async () => {
|
240 | 263 | const {element, getEvents, user} = setup(
|
241 | 264 | `<label for="in">foo</label><input disabled id="in"/>`,
|
@@ -404,3 +427,10 @@ test('preventDefault on pointer down prevents compatibility events works with po
|
404 | 427 | `)
|
405 | 428 | expect(getEvents('click')).toHaveLength(1)
|
406 | 429 | })
|
| 430 | + |
| 431 | +customElements.define( |
| 432 | + 'fa-ce', |
| 433 | + class FaCe extends globalThis.window.HTMLElement { |
| 434 | + static formAssociated = true |
| 435 | + }, |
| 436 | +) |
0 commit comments