| <!DOCTYPE html> |
| <body> |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <div id="container"></div> |
| <script> |
| class MyControl extends HTMLElement { |
| static get formAssociated() { return true; } |
| |
| constructor() { |
| super(); |
| this.internals_ = this.attachInternals(); |
| } |
| get i() { return this.internals_; } |
| |
| set value(v) {} |
| } |
| customElements.define('my-control', MyControl); |
| const container = document.querySelector('#container'); |
| |
| test(() => { |
| container.innerHTML = '<label><span><my-control></my-control></span></label>'; |
| let label = container.querySelector('label'); |
| let control = container.querySelector('my-control'); |
| assert_equals(label.control, control); |
| assert_equals(control.i.labels[0], label); |
| |
| container.innerHTML = '<label for="mc"></label><form><my-control id="mc"></my-control></form>'; |
| label = container.querySelector('label'); |
| control = container.querySelector('my-control'); |
| assert_equals(label.control, control); |
| assert_equals(label.form, control.i.form); |
| assert_equals(control.i.labels[0], label); |
| |
| container.innerHTML = '<label for="mc"></label><label for="mc"><my-control id="mc">'; |
| const labels = container.querySelectorAll('label'); |
| control = container.querySelector('my-control'); |
| assert_equals(control.i.labels[0], labels[0]); |
| assert_equals(control.i.labels[1], labels[1]); |
| }, 'LABEL association'); |
| |
| test(() => { |
| container.innerHTML = '<label for="mc"></label><form><my-control id="mc"></my-control></form>'; |
| const control = container.querySelector('my-control'); |
| let clickCount = 0; |
| control.addEventListener('click', e => { ++clickCount; }); |
| container.querySelector('label').click(); |
| assert_equals(clickCount, 1); |
| }, 'LABEL click'); |
| </script> |
| </body> |