Automatic update from web-platform-tests [forms] Make <select> use a UA-clip instead of a manual one. This aligns with Firefox to implement the clip behaviour of the select element in the UA-stylesheet. See: https://searchfox.org/firefox-main/rev/f19dd05bb08e26d46137ce52924e35ff7a501dfe/layout/style/res/forms.css#211 This is currently unspecified, and there is an open issue on the HTML spec here: https://github.com/whatwg/html/issues/10031 Behind the flag: SelectUsesUAClip Additionally we need to specify overflow-clip-margin:content-box to maintain our previous behaviour which differs slightly from Firefox. Change-Id: Icdc61604603f5b15735958b1b95e408fb74e7b1b Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7916526 Reviewed-by: David Baron <dbaron@chromium.org> Commit-Queue: Ian Kilpatrick <ikilpatrick@chromium.org> Cr-Commit-Position: refs/heads/main@{#1644964} -- wpt-commits: b65827009f87c89d569fa442ec403d34a2b54f88 wpt-pr: 60536
76 lines
2.4 KiB
JavaScript
76 lines
2.4 KiB
JavaScript
function runUAStyleTests(props) {
|
|
const refs = document.getElementById('refs');
|
|
for (const el of document.querySelectorAll('#tests > *')) {
|
|
const clone = fakeClone(el);
|
|
refs.append(clone);
|
|
}
|
|
const testsContainer = document.getElementById('tests');
|
|
const testEls = document.querySelectorAll('#tests *');
|
|
const refEls = document.querySelectorAll('#refs *');
|
|
for (let i = 0; i < testEls.length; ++i) {
|
|
const testEl = testEls[i];
|
|
if (testEl.hasAttribute('data-skip')) {
|
|
continue;
|
|
}
|
|
const refEl = refEls[i];
|
|
const testStyle = getComputedStyle(testEl);
|
|
const refStyle = getComputedStyle(refEl);
|
|
for (const prop of props) {
|
|
// Don't test display for some elements.
|
|
// TODO(zcorpan): https://github.com/whatwg/html/issues/4093
|
|
// TODO(zcorpan): https://github.com/whatwg/html/issues/5063
|
|
if (prop === 'display' &&
|
|
(testEl.localName === 'optgroup' ||
|
|
testEl.localName === 'option' ||
|
|
testEl.localName === 'marquee')
|
|
) {
|
|
continue;
|
|
}
|
|
if (testEl.localName === 'select' &&
|
|
(prop === 'overflow' || prop === 'overflow-clip-margin')) {
|
|
// TODO: https://github.com/whatwg/html/issues/10031
|
|
continue;
|
|
}
|
|
test(() => {
|
|
assert_equals(testStyle.getPropertyValue(prop), refStyle.getPropertyValue(prop));
|
|
}, `${testNameContext(testEl)} - ${prop}`);
|
|
}
|
|
}
|
|
|
|
function fakeClone(el) {
|
|
const clone = document.createElementNS('urn:not-html', el.localName);
|
|
for (const att of el.attributes) {
|
|
clone.setAttributeNS(att.namespaceURI, att.name, att.value);
|
|
}
|
|
// deep clone
|
|
for (const child of el.children) {
|
|
clone.append(fakeClone(child));
|
|
}
|
|
return clone;
|
|
}
|
|
|
|
function testNameContext(el) {
|
|
const outerHTML = el.outerHTML;
|
|
const startTags = outerHTML.substring(0, outerHTML.indexOf('</')) || outerHTML;
|
|
|
|
let ancestors = [];
|
|
let current = el.parentNode;
|
|
while (current != testsContainer) {
|
|
ancestors.unshift(`<${current.localName}${contextAttrs(current.attributes)}>`);
|
|
current = current.parentNode;
|
|
}
|
|
return startTags + (ancestors.length ? ` (in ${ancestors.join('')})` : '');
|
|
}
|
|
|
|
function contextAttrs(attributes) {
|
|
let rv = "";
|
|
for (let i = 0; i < attributes.length; ++i) {
|
|
if (attributes[i].name === 'data-skip') {
|
|
continue;
|
|
}
|
|
rv += ` ${attributes[i].name}="${attributes[i].value}"`;
|
|
}
|
|
return rv;
|
|
}
|
|
}
|