LibWeb: Make CSS display serialization match other engines

The spec just says to follow "most backwards-compatible, then shortest"
when serializing these (and it does so in a very hand-wavy fashion).

By omitting some keywords when they are implied, we end up matching
other engines and pass a bunch of WPT tests.
This commit is contained in:
Andreas Kling 2024-11-15 13:07:23 +01:00 committed by Andreas Kling
commit ce23efc5f6
Notes: github-actions[bot] 2024-11-15 13:47:01 +00:00
3 changed files with 60 additions and 57 deletions

View file

@ -42,11 +42,16 @@ String Display::to_string() const
if (*this == Display::from_short(Display::Short::InlineTable)) if (*this == Display::from_short(Display::Short::InlineTable))
return "inline-table"_string; return "inline-table"_string;
builder.append(CSS::to_string(m_value.outside_inside.outside)); {
builder.append(' '); Vector<StringView, 3> parts;
builder.append(CSS::to_string(m_value.outside_inside.inside)); if (!(m_value.outside_inside.outside == DisplayOutside::Block && m_value.outside_inside.inside == DisplayInside::FlowRoot))
parts.append(CSS::to_string(m_value.outside_inside.outside));
if (m_value.outside_inside.inside != DisplayInside::Flow)
parts.append(CSS::to_string(m_value.outside_inside.inside));
if (m_value.outside_inside.list_item == ListItem::Yes) if (m_value.outside_inside.list_item == ListItem::Yes)
builder.append(" list-item"sv); parts.append("list-item"sv);
builder.join(' ', parts);
}
break; break;
case Type::Internal: case Type::Internal:
builder.append(CSS::to_string(m_value.internal)); builder.append(CSS::to_string(m_value.internal));

View file

@ -6,8 +6,7 @@ Rerun
Found 112 tests Found 112 tests
88 Pass 112 Pass
24 Fail
Details Details
Result Test Name MessagePass Property display value 'grid' Result Test Name MessagePass Property display value 'grid'
Pass Property display value 'inline-grid' Pass Property display value 'inline-grid'
@ -37,8 +36,8 @@ Pass Property display value 'ruby-base'
Pass Property display value 'ruby-text' Pass Property display value 'ruby-text'
Pass Property display value 'flow list-item' Pass Property display value 'flow list-item'
Pass Property display value 'list-item flow' Pass Property display value 'list-item flow'
Fail Property display value 'flow-root list-item' Pass Property display value 'flow-root list-item'
Fail Property display value 'list-item flow-root' Pass Property display value 'list-item flow-root'
Pass Property display value 'block flow' Pass Property display value 'block flow'
Pass Property display value 'flow block' Pass Property display value 'flow block'
Pass Property display value 'flow-root block' Pass Property display value 'flow-root block'
@ -59,12 +58,12 @@ Pass Property display value 'flow list-item block'
Pass Property display value 'block list-item flow' Pass Property display value 'block list-item flow'
Pass Property display value 'list-item block flow' Pass Property display value 'list-item block flow'
Pass Property display value 'list-item flow block' Pass Property display value 'list-item flow block'
Fail Property display value 'flow-root block list-item' Pass Property display value 'flow-root block list-item'
Fail Property display value 'block flow-root list-item' Pass Property display value 'block flow-root list-item'
Fail Property display value 'flow-root list-item block' Pass Property display value 'flow-root list-item block'
Fail Property display value 'block list-item flow-root' Pass Property display value 'block list-item flow-root'
Fail Property display value 'list-item block flow-root' Pass Property display value 'list-item block flow-root'
Fail Property display value 'list-item flow-root block' Pass Property display value 'list-item flow-root block'
Pass Property display value 'inline flow' Pass Property display value 'inline flow'
Pass Property display value 'flow inline' Pass Property display value 'flow inline'
Pass Property display value 'flow-root inline' Pass Property display value 'flow-root inline'
@ -77,14 +76,14 @@ Pass Property display value 'table inline'
Pass Property display value 'inline table' Pass Property display value 'inline table'
Pass Property display value 'inline ruby' Pass Property display value 'inline ruby'
Pass Property display value 'ruby inline' Pass Property display value 'ruby inline'
Fail Property display value 'inline list-item' Pass Property display value 'inline list-item'
Fail Property display value 'list-item inline' Pass Property display value 'list-item inline'
Fail Property display value 'flow inline list-item' Pass Property display value 'flow inline list-item'
Fail Property display value 'inline flow list-item' Pass Property display value 'inline flow list-item'
Fail Property display value 'flow list-item inline' Pass Property display value 'flow list-item inline'
Fail Property display value 'inline list-item flow' Pass Property display value 'inline list-item flow'
Fail Property display value 'list-item inline flow' Pass Property display value 'list-item inline flow'
Fail Property display value 'list-item flow inline' Pass Property display value 'list-item flow inline'
Pass Property display value 'flow-root inline list-item' Pass Property display value 'flow-root inline list-item'
Pass Property display value 'inline flow-root list-item' Pass Property display value 'inline flow-root list-item'
Pass Property display value 'flow-root list-item inline' Pass Property display value 'flow-root list-item inline'
@ -103,14 +102,14 @@ Pass Property display value 'table run-in'
Pass Property display value 'run-in table' Pass Property display value 'run-in table'
Pass Property display value 'run-in ruby' Pass Property display value 'run-in ruby'
Pass Property display value 'ruby run-in' Pass Property display value 'ruby run-in'
Fail Property display value 'run-in list-item' Pass Property display value 'run-in list-item'
Fail Property display value 'list-item run-in' Pass Property display value 'list-item run-in'
Fail Property display value 'flow run-in list-item' Pass Property display value 'flow run-in list-item'
Fail Property display value 'run-in flow list-item' Pass Property display value 'run-in flow list-item'
Fail Property display value 'flow list-item run-in' Pass Property display value 'flow list-item run-in'
Fail Property display value 'run-in list-item flow' Pass Property display value 'run-in list-item flow'
Fail Property display value 'list-item run-in flow' Pass Property display value 'list-item run-in flow'
Fail Property display value 'list-item flow run-in' Pass Property display value 'list-item flow run-in'
Pass Property display value 'flow-root run-in list-item' Pass Property display value 'flow-root run-in list-item'
Pass Property display value 'run-in flow-root list-item' Pass Property display value 'run-in flow-root list-item'
Pass Property display value 'flow-root list-item run-in' Pass Property display value 'flow-root list-item run-in'

View file

@ -6,8 +6,7 @@ Rerun
Found 108 tests Found 108 tests
84 Pass 108 Pass
24 Fail
Details Details
Result Test Name MessagePass e.style['display'] = "grid" should set the property value Result Test Name MessagePass e.style['display'] = "grid" should set the property value
Pass e.style['display'] = "inline-grid" should set the property value Pass e.style['display'] = "inline-grid" should set the property value
@ -37,8 +36,8 @@ Pass e.style['display'] = "ruby-base" should set the property value
Pass e.style['display'] = "ruby-text" should set the property value Pass e.style['display'] = "ruby-text" should set the property value
Pass e.style['display'] = "flow list-item" should set the property value Pass e.style['display'] = "flow list-item" should set the property value
Pass e.style['display'] = "list-item flow" should set the property value Pass e.style['display'] = "list-item flow" should set the property value
Fail e.style['display'] = "flow-root list-item" should set the property value Pass e.style['display'] = "flow-root list-item" should set the property value
Fail e.style['display'] = "list-item flow-root" should set the property value Pass e.style['display'] = "list-item flow-root" should set the property value
Pass e.style['display'] = "block flow" should set the property value Pass e.style['display'] = "block flow" should set the property value
Pass e.style['display'] = "flow block" should set the property value Pass e.style['display'] = "flow block" should set the property value
Pass e.style['display'] = "flow-root block" should set the property value Pass e.style['display'] = "flow-root block" should set the property value
@ -59,12 +58,12 @@ Pass e.style['display'] = "flow list-item block" should set the property value
Pass e.style['display'] = "block list-item flow" should set the property value Pass e.style['display'] = "block list-item flow" should set the property value
Pass e.style['display'] = "list-item block flow" should set the property value Pass e.style['display'] = "list-item block flow" should set the property value
Pass e.style['display'] = "list-item flow block" should set the property value Pass e.style['display'] = "list-item flow block" should set the property value
Fail e.style['display'] = "flow-root block list-item" should set the property value Pass e.style['display'] = "flow-root block list-item" should set the property value
Fail e.style['display'] = "block flow-root list-item" should set the property value Pass e.style['display'] = "block flow-root list-item" should set the property value
Fail e.style['display'] = "flow-root list-item block" should set the property value Pass e.style['display'] = "flow-root list-item block" should set the property value
Fail e.style['display'] = "block list-item flow-root" should set the property value Pass e.style['display'] = "block list-item flow-root" should set the property value
Fail e.style['display'] = "list-item block flow-root" should set the property value Pass e.style['display'] = "list-item block flow-root" should set the property value
Fail e.style['display'] = "list-item flow-root block" should set the property value Pass e.style['display'] = "list-item flow-root block" should set the property value
Pass e.style['display'] = "inline flow" should set the property value Pass e.style['display'] = "inline flow" should set the property value
Pass e.style['display'] = "flow inline" should set the property value Pass e.style['display'] = "flow inline" should set the property value
Pass e.style['display'] = "flow-root inline" should set the property value Pass e.style['display'] = "flow-root inline" should set the property value
@ -77,14 +76,14 @@ Pass e.style['display'] = "table inline" should set the property value
Pass e.style['display'] = "inline table" should set the property value Pass e.style['display'] = "inline table" should set the property value
Pass e.style['display'] = "inline ruby" should set the property value Pass e.style['display'] = "inline ruby" should set the property value
Pass e.style['display'] = "ruby inline" should set the property value Pass e.style['display'] = "ruby inline" should set the property value
Fail e.style['display'] = "inline list-item" should set the property value Pass e.style['display'] = "inline list-item" should set the property value
Fail e.style['display'] = "list-item inline" should set the property value Pass e.style['display'] = "list-item inline" should set the property value
Fail e.style['display'] = "flow inline list-item" should set the property value Pass e.style['display'] = "flow inline list-item" should set the property value
Fail e.style['display'] = "inline flow list-item" should set the property value Pass e.style['display'] = "inline flow list-item" should set the property value
Fail e.style['display'] = "flow list-item inline" should set the property value Pass e.style['display'] = "flow list-item inline" should set the property value
Fail e.style['display'] = "inline list-item flow" should set the property value Pass e.style['display'] = "inline list-item flow" should set the property value
Fail e.style['display'] = "list-item inline flow" should set the property value Pass e.style['display'] = "list-item inline flow" should set the property value
Fail e.style['display'] = "list-item flow inline" should set the property value Pass e.style['display'] = "list-item flow inline" should set the property value
Pass e.style['display'] = "flow-root inline list-item" should set the property value Pass e.style['display'] = "flow-root inline list-item" should set the property value
Pass e.style['display'] = "inline flow-root list-item" should set the property value Pass e.style['display'] = "inline flow-root list-item" should set the property value
Pass e.style['display'] = "flow-root list-item inline" should set the property value Pass e.style['display'] = "flow-root list-item inline" should set the property value
@ -103,14 +102,14 @@ Pass e.style['display'] = "table run-in" should set the property value
Pass e.style['display'] = "run-in table" should set the property value Pass e.style['display'] = "run-in table" should set the property value
Pass e.style['display'] = "run-in ruby" should set the property value Pass e.style['display'] = "run-in ruby" should set the property value
Pass e.style['display'] = "ruby run-in" should set the property value Pass e.style['display'] = "ruby run-in" should set the property value
Fail e.style['display'] = "run-in list-item" should set the property value Pass e.style['display'] = "run-in list-item" should set the property value
Fail e.style['display'] = "list-item run-in" should set the property value Pass e.style['display'] = "list-item run-in" should set the property value
Fail e.style['display'] = "flow run-in list-item" should set the property value Pass e.style['display'] = "flow run-in list-item" should set the property value
Fail e.style['display'] = "run-in flow list-item" should set the property value Pass e.style['display'] = "run-in flow list-item" should set the property value
Fail e.style['display'] = "flow list-item run-in" should set the property value Pass e.style['display'] = "flow list-item run-in" should set the property value
Fail e.style['display'] = "run-in list-item flow" should set the property value Pass e.style['display'] = "run-in list-item flow" should set the property value
Fail e.style['display'] = "list-item run-in flow" should set the property value Pass e.style['display'] = "list-item run-in flow" should set the property value
Fail e.style['display'] = "list-item flow run-in" should set the property value Pass e.style['display'] = "list-item flow run-in" should set the property value
Pass e.style['display'] = "flow-root run-in list-item" should set the property value Pass e.style['display'] = "flow-root run-in list-item" should set the property value
Pass e.style['display'] = "run-in flow-root list-item" should set the property value Pass e.style['display'] = "run-in flow-root list-item" should set the property value
Pass e.style['display'] = "flow-root list-item run-in" should set the property value Pass e.style['display'] = "flow-root list-item run-in" should set the property value