| <!DOCTYPE html> |
| <link rel="help" href="https://drafts.csswg.org/css-ui-4/#field-sizing"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <body> |
| <style> |
| .disable-default { |
| field-sizing: content; |
| } |
| </style> |
| <div id="container"></div> |
| <script> |
| const container = document.querySelector('#container'); |
| const DISABLE = 'class="disable-default"'; |
| |
| // Tests for drop-down box ==================================================== |
| |
| test(() => { |
| const s = '<select>><option>1<option>quick brown<option>fox</select>'; |
| container.innerHTML = s + s; |
| container.lastElementChild.style.fieldSizing = 'content'; |
| const widthForContent1 = container.lastElementChild.offsetWidth; |
| assert_greater_than(container.firstElementChild.offsetWidth, |
| widthForContent1); |
| container.lastElementChild.selectedIndex = 1; |
| const widthForContentQuickBrown = container.lastElementChild.offsetWidth; |
| assert_greater_than(widthForContentQuickBrown, widthForContent1); |
| }, 'dropdown: The width should depend on the selected OPTION'); |
| |
| test(() => { |
| container.innerHTML = '<select><option>foo<option>quick brown fox</select>'; |
| const select = container.firstElementChild; |
| const initialWidth = select.offsetWidth; |
| select.style.fieldSizing = 'content'; |
| assert_less_than(select.offsetWidth, initialWidth); |
| select.style.fieldSizing = 'fixed'; |
| assert_equals(select.offsetWidth, initialWidth); |
| }, 'dropdown: Change the field-sizing value dynamically'); |
| |
| // Tests for list box ========================================================= |
| |
| // Some paltforms don't support list box rendering. |
| container.innerHTML = '<select></select><select multiple></select>'; |
| if (container.firstElementChild.offsetHeight != container.lastElementChild.offsetHeight) { |
| |
| test(() => { |
| container.innerHTML = `<select multiple><option>fox</select>` + |
| `<select multiple ${DISABLE}><option>fox</select>`; |
| const former = container.firstElementChild; |
| const latter = container.lastElementChild; |
| const widthForOneItem = latter.offsetWidth; |
| const heightForOneItem = latter.offsetHeight; |
| assert_equals(former.offsetWidth, widthForOneItem); |
| assert_greater_than(former.offsetHeight, heightForOneItem); |
| |
| latter.add(new Option('quick brown')); |
| assert_greater_than(latter.offsetWidth, widthForOneItem); |
| assert_greater_than(latter.offsetHeight, heightForOneItem); |
| }, 'listbox: The size depend on the content'); |
| |
| test(() => { |
| container.innerHTML = `<select size="4"></select><select size="4" ${DISABLE}></select>`; |
| const former = container.firstElementChild; |
| const latter = container.lastElementChild; |
| const widthForZeroItem = latter.offsetWidth; |
| const heightForZeroItem = latter.offsetHeight; |
| assert_equals(former.offsetWidth, widthForZeroItem); |
| assert_greater_than(former.offsetHeight, heightForZeroItem); |
| |
| latter.add(new Option('quick brown')); |
| assert_greater_than(latter.offsetWidth, widthForZeroItem); |
| assert_greater_than(latter.offsetHeight, heightForZeroItem); |
| }, 'listbox: The size attribute value is ignored'); |
| |
| test(() => { |
| container.innerHTML = '<select multiple><option>foo<option>quick brown fox</select>'; |
| const select = container.firstElementChild; |
| const initialHeight = select.offsetHeight; |
| select.style.fieldSizing = 'content'; |
| assert_less_than(select.offsetHeight, initialHeight); |
| select.style.fieldSizing = 'fixed'; |
| assert_equals(select.offsetHeight, initialHeight); |
| }, 'listbox: Change the field-sizing value dynamically'); |
| |
| } |
| </script> |
| </body> |