diff --git a/Libraries/LibWeb/CSS/CSSStyleProperties.cpp b/Libraries/LibWeb/CSS/CSSStyleProperties.cpp index 6f680e442bf..4fdbd024df8 100644 --- a/Libraries/LibWeb/CSS/CSSStyleProperties.cpp +++ b/Libraries/LibWeb/CSS/CSSStyleProperties.cpp @@ -356,44 +356,6 @@ static NonnullRefPtr style_value_for_size(Size const& size) TODO(); } -enum class LogicalSide { - BlockStart, - BlockEnd, - InlineStart, - InlineEnd, -}; -static RefPtr style_value_for_length_box_logical_side(Layout::NodeWithStyle const&, LengthBox const& box, LogicalSide logical_side) -{ - // FIXME: Actually determine the logical sides based on layout_node's writing-mode and direction. - switch (logical_side) { - case LogicalSide::BlockStart: - return style_value_for_length_percentage(box.top()); - case LogicalSide::BlockEnd: - return style_value_for_length_percentage(box.bottom()); - case LogicalSide::InlineStart: - return style_value_for_length_percentage(box.left()); - case LogicalSide::InlineEnd: - return style_value_for_length_percentage(box.right()); - } - VERIFY_NOT_REACHED(); -} - -static CSSPixels pixels_for_pixel_box_logical_side(Layout::NodeWithStyle const&, Painting::PixelBox const& box, LogicalSide logical_side) -{ - // FIXME: Actually determine the logical sides based on layout_node's writing-mode and direction. - switch (logical_side) { - case LogicalSide::BlockStart: - return box.top; - case LogicalSide::BlockEnd: - return box.bottom; - case LogicalSide::InlineStart: - return box.left; - case LogicalSide::InlineEnd: - return box.right; - } - VERIFY_NOT_REACHED(); -} - static RefPtr style_value_for_shadow(Vector const& shadow_data) { if (shadow_data.is_empty()) @@ -728,11 +690,25 @@ RefPtr CSSStyleProperties::style_value_for_computed_propert return element.computed_properties()->property(property_id); }; + if (property_is_logical_alias(property_id)) { + GC::Ptr computed_properties; + + if (pseudo_element.has_value()) + computed_properties = element.pseudo_element_computed_properties(pseudo_element.value()); + else + computed_properties = element.computed_properties(); + + return style_value_for_computed_property( + layout_node, + StyleComputer::map_logical_alias_to_physical_property_id(property_id, StyleComputer::LogicalAliasMappingContext { computed_properties->writing_mode(), computed_properties->direction() })); + } + // A limited number of properties have special rules for producing their "resolved value". // We also have to manually construct shorthands from their longhands here. // Everything else uses the computed value. // https://drafts.csswg.org/cssom/#resolved-values + // AD-HOC: We don't resolve logical properties here as we have already handled above // The resolved value for a given longhand property can be determined as follows: switch (property_id) { // -> background-color @@ -752,20 +728,8 @@ RefPtr CSSStyleProperties::style_value_for_computed_propert // The resolved value is the used value. case PropertyID::BackgroundColor: return resolve_color_style_value(get_computed_value(property_id), layout_node.computed_values().background_color()); - case PropertyID::BorderBlockEndColor: - // FIXME: Honor writing-mode, direction and text-orientation. - return style_value_for_computed_property(layout_node, PropertyID::BorderBottomColor); - case PropertyID::BorderBlockStartColor: - // FIXME: Honor writing-mode, direction and text-orientation. - return style_value_for_computed_property(layout_node, PropertyID::BorderTopColor); case PropertyID::BorderBottomColor: return resolve_color_style_value(get_computed_value(property_id), layout_node.computed_values().border_bottom().color); - case PropertyID::BorderInlineEndColor: - // FIXME: Honor writing-mode, direction and text-orientation. - return style_value_for_computed_property(layout_node, PropertyID::BorderRightColor); - case PropertyID::BorderInlineStartColor: - // FIXME: Honor writing-mode, direction and text-orientation. - return style_value_for_computed_property(layout_node, PropertyID::BorderLeftColor); case PropertyID::BorderLeftColor: return resolve_color_style_value(get_computed_value(property_id), layout_node.computed_values().border_left().color); case PropertyID::BorderRightColor: @@ -818,46 +782,16 @@ RefPtr CSSStyleProperties::style_value_for_computed_propert // If the property applies to the element or pseudo-element and the resolved value of the // display property is not none or contents, then the resolved value is the used value. // Otherwise the resolved value is the computed value. - case PropertyID::BlockSize: { - auto writing_mode = layout_node.computed_values().writing_mode(); - auto is_vertically_oriented = first_is_one_of(writing_mode, WritingMode::VerticalLr, WritingMode::VerticalRl); - if (is_vertically_oriented) - return style_value_for_computed_property(layout_node, PropertyID::Width); - return style_value_for_computed_property(layout_node, PropertyID::Height); - } case PropertyID::Height: { auto maybe_used_height = used_value_for_property([](auto const& paintable_box) { return paintable_box.content_height(); }); if (maybe_used_height.has_value()) return style_value_for_size(Size::make_px(maybe_used_height.release_value())); return style_value_for_size(layout_node.computed_values().height()); } - case PropertyID::InlineSize: { - auto writing_mode = layout_node.computed_values().writing_mode(); - auto is_vertically_oriented = first_is_one_of(writing_mode, WritingMode::VerticalLr, WritingMode::VerticalRl); - if (is_vertically_oriented) - return style_value_for_computed_property(layout_node, PropertyID::Height); - return style_value_for_computed_property(layout_node, PropertyID::Width); - } - case PropertyID::MarginBlockEnd: - if (auto maybe_used_value = used_value_for_property([&](auto const& paintable_box) { return pixels_for_pixel_box_logical_side(layout_node, paintable_box.box_model().margin, LogicalSide::BlockEnd); }); maybe_used_value.has_value()) - return LengthStyleValue::create(Length::make_px(maybe_used_value.release_value())); - return style_value_for_length_box_logical_side(layout_node, layout_node.computed_values().margin(), LogicalSide::BlockEnd); - case PropertyID::MarginBlockStart: - if (auto maybe_used_value = used_value_for_property([&](auto const& paintable_box) { return pixels_for_pixel_box_logical_side(layout_node, paintable_box.box_model().margin, LogicalSide::BlockStart); }); maybe_used_value.has_value()) - return LengthStyleValue::create(Length::make_px(maybe_used_value.release_value())); - return style_value_for_length_box_logical_side(layout_node, layout_node.computed_values().margin(), LogicalSide::BlockStart); case PropertyID::MarginBottom: if (auto maybe_used_value = used_value_for_property([](auto const& paintable_box) { return paintable_box.box_model().margin.bottom; }); maybe_used_value.has_value()) return LengthStyleValue::create(Length::make_px(maybe_used_value.release_value())); return style_value_for_length_percentage(layout_node.computed_values().margin().bottom()); - case PropertyID::MarginInlineEnd: - if (auto maybe_used_value = used_value_for_property([&](auto const& paintable_box) { return pixels_for_pixel_box_logical_side(layout_node, paintable_box.box_model().margin, LogicalSide::InlineEnd); }); maybe_used_value.has_value()) - return LengthStyleValue::create(Length::make_px(maybe_used_value.release_value())); - return style_value_for_length_box_logical_side(layout_node, layout_node.computed_values().margin(), LogicalSide::InlineEnd); - case PropertyID::MarginInlineStart: - if (auto maybe_used_value = used_value_for_property([&](auto const& paintable_box) { return pixels_for_pixel_box_logical_side(layout_node, paintable_box.box_model().margin, LogicalSide::InlineStart); }); maybe_used_value.has_value()) - return LengthStyleValue::create(Length::make_px(maybe_used_value.release_value())); - return style_value_for_length_box_logical_side(layout_node, layout_node.computed_values().margin(), LogicalSide::InlineStart); case PropertyID::MarginLeft: if (auto maybe_used_value = used_value_for_property([](auto const& paintable_box) { return paintable_box.box_model().margin.left; }); maybe_used_value.has_value()) return LengthStyleValue::create(Length::make_px(maybe_used_value.release_value())); @@ -870,26 +804,10 @@ RefPtr CSSStyleProperties::style_value_for_computed_propert if (auto maybe_used_value = used_value_for_property([](auto const& paintable_box) { return paintable_box.box_model().margin.top; }); maybe_used_value.has_value()) return LengthStyleValue::create(Length::make_px(maybe_used_value.release_value())); return style_value_for_length_percentage(layout_node.computed_values().margin().top()); - case PropertyID::PaddingBlockEnd: - if (auto maybe_used_value = used_value_for_property([&](auto const& paintable_box) { return pixels_for_pixel_box_logical_side(layout_node, paintable_box.box_model().padding, LogicalSide::BlockEnd); }); maybe_used_value.has_value()) - return LengthStyleValue::create(Length::make_px(maybe_used_value.release_value())); - return style_value_for_length_box_logical_side(layout_node, layout_node.computed_values().padding(), LogicalSide::BlockEnd); - case PropertyID::PaddingBlockStart: - if (auto maybe_used_value = used_value_for_property([&](auto const& paintable_box) { return pixels_for_pixel_box_logical_side(layout_node, paintable_box.box_model().padding, LogicalSide::BlockStart); }); maybe_used_value.has_value()) - return LengthStyleValue::create(Length::make_px(maybe_used_value.release_value())); - return style_value_for_length_box_logical_side(layout_node, layout_node.computed_values().padding(), LogicalSide::BlockStart); case PropertyID::PaddingBottom: if (auto maybe_used_value = used_value_for_property([](auto const& paintable_box) { return paintable_box.box_model().padding.bottom; }); maybe_used_value.has_value()) return LengthStyleValue::create(Length::make_px(maybe_used_value.release_value())); return style_value_for_length_percentage(layout_node.computed_values().padding().bottom()); - case PropertyID::PaddingInlineEnd: - if (auto maybe_used_value = used_value_for_property([&](auto const& paintable_box) { return pixels_for_pixel_box_logical_side(layout_node, paintable_box.box_model().padding, LogicalSide::InlineEnd); }); maybe_used_value.has_value()) - return LengthStyleValue::create(Length::make_px(maybe_used_value.release_value())); - return style_value_for_length_box_logical_side(layout_node, layout_node.computed_values().padding(), LogicalSide::InlineEnd); - case PropertyID::PaddingInlineStart: - if (auto maybe_used_value = used_value_for_property([&](auto const& paintable_box) { return pixels_for_pixel_box_logical_side(layout_node, paintable_box.box_model().padding, LogicalSide::InlineStart); }); maybe_used_value.has_value()) - return LengthStyleValue::create(Length::make_px(maybe_used_value.release_value())); - return style_value_for_length_box_logical_side(layout_node, layout_node.computed_values().padding(), LogicalSide::InlineStart); case PropertyID::PaddingLeft: if (auto maybe_used_value = used_value_for_property([](auto const& paintable_box) { return paintable_box.box_model().padding.left; }); maybe_used_value.has_value()) return LengthStyleValue::create(Length::make_px(maybe_used_value.release_value())); @@ -928,14 +846,6 @@ RefPtr CSSStyleProperties::style_value_for_computed_propert return style_value_for_length_percentage(inset.bottom()); } - case PropertyID::InsetBlockEnd: - return style_value_for_length_box_logical_side(layout_node, layout_node.computed_values().inset(), LogicalSide::BlockEnd); - case PropertyID::InsetBlockStart: - return style_value_for_length_box_logical_side(layout_node, layout_node.computed_values().inset(), LogicalSide::BlockStart); - case PropertyID::InsetInlineEnd: - return style_value_for_length_box_logical_side(layout_node, layout_node.computed_values().inset(), LogicalSide::InlineEnd); - case PropertyID::InsetInlineStart: - return style_value_for_length_box_logical_side(layout_node, layout_node.computed_values().inset(), LogicalSide::InlineStart); case PropertyID::Left: { auto& inset = layout_node.computed_values().inset(); if (auto maybe_used_value = used_value_for_inset(inset.left(), inset.right(), [](auto const& paintable_box) { return paintable_box.box_model().inset.left; }); maybe_used_value.has_value()) diff --git a/Tests/LibWeb/Text/expected/css/CSSStyleProperties-all-supported-properties-and-default-values.txt b/Tests/LibWeb/Text/expected/css/CSSStyleProperties-all-supported-properties-and-default-values.txt index 5df7ab9a320..b30f511a90d 100644 --- a/Tests/LibWeb/Text/expected/css/CSSStyleProperties-all-supported-properties-and-default-values.txt +++ b/Tests/LibWeb/Text/expected/css/CSSStyleProperties-all-supported-properties-and-default-values.txt @@ -201,22 +201,22 @@ All supported properties and their default values exposed from CSSStylePropertie 'blockSize': '0px' 'block-size': '0px' 'border': '0px rgb(0, 0, 0)' -'borderBlockEnd': 'rgb(0, 0, 0)' -'border-block-end': 'rgb(0, 0, 0)' +'borderBlockEnd': '0px rgb(0, 0, 0)' +'border-block-end': '0px rgb(0, 0, 0)' 'borderBlockEndColor': 'rgb(0, 0, 0)' 'border-block-end-color': 'rgb(0, 0, 0)' 'borderBlockEndStyle': 'none' 'border-block-end-style': 'none' -'borderBlockEndWidth': 'medium' -'border-block-end-width': 'medium' -'borderBlockStart': 'rgb(0, 0, 0)' -'border-block-start': 'rgb(0, 0, 0)' +'borderBlockEndWidth': '0px' +'border-block-end-width': '0px' +'borderBlockStart': '0px rgb(0, 0, 0)' +'border-block-start': '0px rgb(0, 0, 0)' 'borderBlockStartColor': 'rgb(0, 0, 0)' 'border-block-start-color': 'rgb(0, 0, 0)' 'borderBlockStartStyle': 'none' 'border-block-start-style': 'none' -'borderBlockStartWidth': 'medium' -'border-block-start-width': 'medium' +'borderBlockStartWidth': '0px' +'border-block-start-width': '0px' 'borderBottom': '0px rgb(0, 0, 0)' 'border-bottom': '0px rgb(0, 0, 0)' 'borderBottomColor': 'rgb(0, 0, 0)' @@ -233,22 +233,22 @@ All supported properties and their default values exposed from CSSStylePropertie 'border-collapse': 'separate' 'borderColor': 'rgb(0, 0, 0)' 'border-color': 'rgb(0, 0, 0)' -'borderInlineEnd': 'rgb(0, 0, 0)' -'border-inline-end': 'rgb(0, 0, 0)' +'borderInlineEnd': '0px rgb(0, 0, 0)' +'border-inline-end': '0px rgb(0, 0, 0)' 'borderInlineEndColor': 'rgb(0, 0, 0)' 'border-inline-end-color': 'rgb(0, 0, 0)' 'borderInlineEndStyle': 'none' 'border-inline-end-style': 'none' -'borderInlineEndWidth': 'medium' -'border-inline-end-width': 'medium' -'borderInlineStart': 'rgb(0, 0, 0)' -'border-inline-start': 'rgb(0, 0, 0)' +'borderInlineEndWidth': '0px' +'border-inline-end-width': '0px' +'borderInlineStart': '0px rgb(0, 0, 0)' +'border-inline-start': '0px rgb(0, 0, 0)' 'borderInlineStartColor': 'rgb(0, 0, 0)' 'border-inline-start-color': 'rgb(0, 0, 0)' 'borderInlineStartStyle': 'none' 'border-inline-start-style': 'none' -'borderInlineStartWidth': 'medium' -'border-inline-start-width': 'medium' +'borderInlineStartWidth': '0px' +'border-inline-start-width': '0px' 'borderLeft': '0px rgb(0, 0, 0)' 'border-left': '0px rgb(0, 0, 0)' 'borderLeftColor': 'rgb(0, 0, 0)' @@ -500,12 +500,12 @@ All supported properties and their default values exposed from CSSStylePropertie 'max-inline-size': 'none' 'maxWidth': 'none' 'max-width': 'none' -'minBlockSize': '0px' -'min-block-size': '0px' +'minBlockSize': 'auto' +'min-block-size': 'auto' 'minHeight': 'auto' 'min-height': 'auto' -'minInlineSize': '0px' -'min-inline-size': '0px' +'minInlineSize': 'auto' +'min-inline-size': 'auto' 'minWidth': 'auto' 'min-width': 'auto' 'mixBlendMode': 'normal' diff --git a/Tests/LibWeb/Text/expected/css/getComputedStyle-print-all.txt b/Tests/LibWeb/Text/expected/css/getComputedStyle-print-all.txt index 2a9ca1cf5e0..d84acbfd9cc 100644 --- a/Tests/LibWeb/Text/expected/css/getComputedStyle-print-all.txt +++ b/Tests/LibWeb/Text/expected/css/getComputedStyle-print-all.txt @@ -91,10 +91,10 @@ background-size: auto auto block-size: 1350px border-block-end-color: rgb(0, 0, 0) border-block-end-style: none -border-block-end-width: medium +border-block-end-width: 0px border-block-start-color: rgb(0, 0, 0) border-block-start-style: none -border-block-start-width: medium +border-block-start-width: 0px border-bottom-color: rgb(0, 0, 0) border-bottom-left-radius: 0px border-bottom-right-radius: 0px @@ -102,10 +102,10 @@ border-bottom-style: none border-bottom-width: 0px border-inline-end-color: rgb(0, 0, 0) border-inline-end-style: none -border-inline-end-width: medium +border-inline-end-width: 0px border-inline-start-color: rgb(0, 0, 0) border-inline-start-style: none -border-inline-start-width: medium +border-inline-start-width: 0px border-left-color: rgb(0, 0, 0) border-left-style: none border-left-width: 0px @@ -178,9 +178,9 @@ max-block-size: none max-height: none max-inline-size: none max-width: none -min-block-size: 0px +min-block-size: auto min-height: auto -min-inline-size: 0px +min-inline-size: auto min-width: auto mix-blend-mode: normal object-fit: fill diff --git a/Tests/LibWeb/Text/expected/wpt-import/css/css-cascade/all-prop-revert-layer.txt b/Tests/LibWeb/Text/expected/wpt-import/css/css-cascade/all-prop-revert-layer.txt index eb1d2bc0b1f..1a195a7362f 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/css/css-cascade/all-prop-revert-layer.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/css/css-cascade/all-prop-revert-layer.txt @@ -2,8 +2,8 @@ Harness status: OK Found 236 tests -218 Pass -18 Fail +230 Pass +6 Fail Pass accent-color Pass border-collapse Pass border-spacing @@ -92,22 +92,22 @@ Pass background-repeat Pass background-size Fail block-size Pass border-block-end-color -Fail border-block-end-style -Fail border-block-end-width +Pass border-block-end-style +Pass border-block-end-width Pass border-block-start-color -Fail border-block-start-style -Fail border-block-start-width +Pass border-block-start-style +Pass border-block-start-width Pass border-bottom-color Pass border-bottom-left-radius Pass border-bottom-right-radius Pass border-bottom-style Pass border-bottom-width Pass border-inline-end-color -Fail border-inline-end-style -Fail border-inline-end-width +Pass border-inline-end-style +Pass border-inline-end-width Pass border-inline-start-color -Fail border-inline-start-style -Fail border-inline-start-width +Pass border-inline-start-style +Pass border-inline-start-width Pass border-left-color Pass border-left-style Pass border-left-width @@ -175,13 +175,13 @@ Pass margin-right Pass margin-top Pass mask-image Pass mask-type -Fail max-block-size +Pass max-block-size Pass max-height -Fail max-inline-size +Pass max-inline-size Pass max-width -Fail min-block-size +Pass min-block-size Pass min-height -Fail min-inline-size +Pass min-inline-size Pass min-width Pass mix-blend-mode Pass object-fit diff --git a/Tests/LibWeb/Text/expected/wpt-import/css/css-logical/inheritance.txt b/Tests/LibWeb/Text/expected/wpt-import/css/css-logical/inheritance.txt new file mode 100644 index 00000000000..3b045905538 --- /dev/null +++ b/Tests/LibWeb/Text/expected/wpt-import/css/css-logical/inheritance.txt @@ -0,0 +1,74 @@ +Harness status: OK + +Found 68 tests + +57 Pass +11 Fail +Pass Property block-size has initial value 0px +Pass Property block-size does not inherit +Pass Property border-block-end-color has initial value rgb(0, 0, 255) +Pass Property border-block-end-color does not inherit +Pass Property border-block-end-style has initial value none +Pass Property border-block-end-style does not inherit +Pass Property border-block-end-width has initial value 3px +Pass Property border-block-end-width does not inherit +Pass Property border-block-start-color has initial value rgb(0, 0, 255) +Pass Property border-block-start-color does not inherit +Pass Property border-block-start-style has initial value none +Pass Property border-block-start-style does not inherit +Pass Property border-block-start-width has initial value 3px +Pass Property border-block-start-width does not inherit +Fail Property border-end-end-radius has initial value 0px +Fail Property border-end-end-radius does not inherit +Fail Property border-end-start-radius has initial value 0px +Fail Property border-end-start-radius does not inherit +Pass Property border-inline-end-color has initial value rgb(0, 0, 255) +Pass Property border-inline-end-color does not inherit +Pass Property border-inline-end-style has initial value none +Pass Property border-inline-end-style does not inherit +Pass Property border-inline-end-width has initial value 3px +Pass Property border-inline-end-width does not inherit +Pass Property border-inline-start-color has initial value rgb(0, 0, 255) +Pass Property border-inline-start-color does not inherit +Pass Property border-inline-start-style has initial value none +Pass Property border-inline-start-style does not inherit +Pass Property border-inline-start-width has initial value 3px +Pass Property border-inline-start-width does not inherit +Fail Property border-start-end-radius has initial value 0px +Fail Property border-start-end-radius does not inherit +Fail Property border-start-start-radius has initial value 0px +Fail Property border-start-start-radius does not inherit +Pass Property inline-size has initial value 294px +Pass Property inline-size does not inherit +Pass Property inset-block-end has initial value auto +Pass Property inset-block-end does not inherit +Pass Property inset-block-start has initial value auto +Pass Property inset-block-start does not inherit +Pass Property inset-inline-end has initial value auto +Pass Property inset-inline-end does not inherit +Pass Property inset-inline-start has initial value auto +Pass Property inset-inline-start does not inherit +Pass Property margin-block-end has initial value 0px +Pass Property margin-block-end does not inherit +Pass Property margin-block-start has initial value 0px +Pass Property margin-block-start does not inherit +Pass Property margin-inline-end has initial value 0px +Fail Property margin-inline-end does not inherit +Pass Property margin-inline-start has initial value 0px +Pass Property margin-inline-start does not inherit +Pass Property max-block-size has initial value none +Pass Property max-block-size does not inherit +Pass Property max-inline-size has initial value none +Pass Property max-inline-size does not inherit +Fail Property min-block-size has initial value 0px +Pass Property min-block-size does not inherit +Fail Property min-inline-size has initial value 0px +Pass Property min-inline-size does not inherit +Pass Property padding-block-end has initial value 0px +Pass Property padding-block-end does not inherit +Pass Property padding-block-start has initial value 0px +Pass Property padding-block-start does not inherit +Pass Property padding-inline-end has initial value 0px +Pass Property padding-inline-end does not inherit +Pass Property padding-inline-start has initial value 0px +Pass Property padding-inline-start does not inherit \ No newline at end of file diff --git a/Tests/LibWeb/Text/expected/wpt-import/css/css-logical/logical-box-size.txt b/Tests/LibWeb/Text/expected/wpt-import/css/css-logical/logical-box-size.txt new file mode 100644 index 00000000000..42922d80ab7 --- /dev/null +++ b/Tests/LibWeb/Text/expected/wpt-import/css/css-logical/logical-box-size.txt @@ -0,0 +1,99 @@ +Harness status: OK + +Found 93 tests + +21 Pass +72 Fail +Pass Test that logical sizing properties are supported. +Pass Test that logical sizing properties share computed values with their physical associates, with 'writing-mode: horizontal-tb; direction: ltr; '. +Pass Test that sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: horizontal-tb; direction: ltr; '. +Pass Test that sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: horizontal-tb; direction: ltr; '. +Pass Test that logical sizing properties share computed values with their physical associates, with 'writing-mode: horizontal-tb; direction: rtl; '. +Pass Test that sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: horizontal-tb; direction: rtl; '. +Pass Test that sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: horizontal-tb; direction: rtl; '. +Fail Test that logical sizing properties share computed values with their physical associates, with 'writing-mode: vertical-rl; direction: rtl; '. +Fail Test that sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: vertical-rl; direction: rtl; '. +Fail Test that sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: vertical-rl; direction: rtl; '. +Fail Test that logical sizing properties share computed values with their physical associates, with 'writing-mode: sideways-rl; direction: rtl; '. +Fail Test that sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: sideways-rl; direction: rtl; '. +Fail Test that sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: sideways-rl; direction: rtl; '. +Fail Test that logical sizing properties share computed values with their physical associates, with 'writing-mode: vertical-rl; direction: ltr; '. +Fail Test that sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: vertical-rl; direction: ltr; '. +Fail Test that sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: vertical-rl; direction: ltr; '. +Fail Test that logical sizing properties share computed values with their physical associates, with 'writing-mode: sideways-rl; direction: ltr; '. +Fail Test that sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: sideways-rl; direction: ltr; '. +Fail Test that sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: sideways-rl; direction: ltr; '. +Fail Test that logical sizing properties share computed values with their physical associates, with 'writing-mode: vertical-lr; direction: rtl; '. +Fail Test that sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: vertical-lr; direction: rtl; '. +Fail Test that sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: vertical-lr; direction: rtl; '. +Fail Test that logical sizing properties share computed values with their physical associates, with 'writing-mode: sideways-lr; direction: ltr; '. +Fail Test that sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: sideways-lr; direction: ltr; '. +Fail Test that sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: sideways-lr; direction: ltr; '. +Fail Test that logical sizing properties share computed values with their physical associates, with 'writing-mode: vertical-lr; direction: ltr; '. +Fail Test that sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: vertical-lr; direction: ltr; '. +Fail Test that sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: vertical-lr; direction: ltr; '. +Fail Test that logical sizing properties share computed values with their physical associates, with 'writing-mode: sideways-lr; direction: rtl; '. +Fail Test that sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: sideways-lr; direction: rtl; '. +Fail Test that sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: sideways-lr; direction: rtl; '. +Pass Test that logical max sizing properties are supported. +Pass Test that logical max sizing properties share computed values with their physical associates, with 'writing-mode: horizontal-tb; direction: ltr; '. +Pass Test that max sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: horizontal-tb; direction: ltr; '. +Pass Test that max sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: horizontal-tb; direction: ltr; '. +Pass Test that logical max sizing properties share computed values with their physical associates, with 'writing-mode: horizontal-tb; direction: rtl; '. +Pass Test that max sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: horizontal-tb; direction: rtl; '. +Pass Test that max sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: horizontal-tb; direction: rtl; '. +Fail Test that logical max sizing properties share computed values with their physical associates, with 'writing-mode: vertical-rl; direction: rtl; '. +Fail Test that max sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: vertical-rl; direction: rtl; '. +Fail Test that max sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: vertical-rl; direction: rtl; '. +Fail Test that logical max sizing properties share computed values with their physical associates, with 'writing-mode: sideways-rl; direction: rtl; '. +Fail Test that max sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: sideways-rl; direction: rtl; '. +Fail Test that max sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: sideways-rl; direction: rtl; '. +Fail Test that logical max sizing properties share computed values with their physical associates, with 'writing-mode: vertical-rl; direction: ltr; '. +Fail Test that max sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: vertical-rl; direction: ltr; '. +Fail Test that max sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: vertical-rl; direction: ltr; '. +Fail Test that logical max sizing properties share computed values with their physical associates, with 'writing-mode: sideways-rl; direction: ltr; '. +Fail Test that max sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: sideways-rl; direction: ltr; '. +Fail Test that max sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: sideways-rl; direction: ltr; '. +Fail Test that logical max sizing properties share computed values with their physical associates, with 'writing-mode: vertical-lr; direction: rtl; '. +Fail Test that max sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: vertical-lr; direction: rtl; '. +Fail Test that max sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: vertical-lr; direction: rtl; '. +Fail Test that logical max sizing properties share computed values with their physical associates, with 'writing-mode: sideways-lr; direction: ltr; '. +Fail Test that max sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: sideways-lr; direction: ltr; '. +Fail Test that max sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: sideways-lr; direction: ltr; '. +Fail Test that logical max sizing properties share computed values with their physical associates, with 'writing-mode: vertical-lr; direction: ltr; '. +Fail Test that max sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: vertical-lr; direction: ltr; '. +Fail Test that max sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: vertical-lr; direction: ltr; '. +Fail Test that logical max sizing properties share computed values with their physical associates, with 'writing-mode: sideways-lr; direction: rtl; '. +Fail Test that max sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: sideways-lr; direction: rtl; '. +Fail Test that max sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: sideways-lr; direction: rtl; '. +Pass Test that logical min sizing properties are supported. +Pass Test that logical min sizing properties share computed values with their physical associates, with 'writing-mode: horizontal-tb; direction: ltr; '. +Pass Test that min sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: horizontal-tb; direction: ltr; '. +Pass Test that min sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: horizontal-tb; direction: ltr; '. +Pass Test that logical min sizing properties share computed values with their physical associates, with 'writing-mode: horizontal-tb; direction: rtl; '. +Pass Test that min sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: horizontal-tb; direction: rtl; '. +Pass Test that min sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: horizontal-tb; direction: rtl; '. +Fail Test that logical min sizing properties share computed values with their physical associates, with 'writing-mode: vertical-rl; direction: rtl; '. +Fail Test that min sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: vertical-rl; direction: rtl; '. +Fail Test that min sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: vertical-rl; direction: rtl; '. +Fail Test that logical min sizing properties share computed values with their physical associates, with 'writing-mode: sideways-rl; direction: rtl; '. +Fail Test that min sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: sideways-rl; direction: rtl; '. +Fail Test that min sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: sideways-rl; direction: rtl; '. +Fail Test that logical min sizing properties share computed values with their physical associates, with 'writing-mode: vertical-rl; direction: ltr; '. +Fail Test that min sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: vertical-rl; direction: ltr; '. +Fail Test that min sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: vertical-rl; direction: ltr; '. +Fail Test that logical min sizing properties share computed values with their physical associates, with 'writing-mode: sideways-rl; direction: ltr; '. +Fail Test that min sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: sideways-rl; direction: ltr; '. +Fail Test that min sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: sideways-rl; direction: ltr; '. +Fail Test that logical min sizing properties share computed values with their physical associates, with 'writing-mode: vertical-lr; direction: rtl; '. +Fail Test that min sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: vertical-lr; direction: rtl; '. +Fail Test that min sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: vertical-lr; direction: rtl; '. +Fail Test that logical min sizing properties share computed values with their physical associates, with 'writing-mode: sideways-lr; direction: ltr; '. +Fail Test that min sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: sideways-lr; direction: ltr; '. +Fail Test that min sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: sideways-lr; direction: ltr; '. +Fail Test that logical min sizing properties share computed values with their physical associates, with 'writing-mode: vertical-lr; direction: ltr; '. +Fail Test that min sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: vertical-lr; direction: ltr; '. +Fail Test that min sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: vertical-lr; direction: ltr; '. +Fail Test that logical min sizing properties share computed values with their physical associates, with 'writing-mode: sideways-lr; direction: rtl; '. +Fail Test that min sizing properties honor order of appearance when both logical and physical associates are declared, with 'writing-mode: sideways-lr; direction: rtl; '. +Fail Test that min sizing properties honor selector specificty when both logical and physical associates are declared, with 'writing-mode: sideways-lr; direction: rtl; '. \ No newline at end of file diff --git a/Tests/LibWeb/Text/input/wpt-import/css/css-logical/inheritance.html b/Tests/LibWeb/Text/input/wpt-import/css/css-logical/inheritance.html new file mode 100644 index 00000000000..31f29b4795b --- /dev/null +++ b/Tests/LibWeb/Text/input/wpt-import/css/css-logical/inheritance.html @@ -0,0 +1,95 @@ + + + + +Inheritance of CSS Logical Properties and Values properties + + + + + + + + +
+
+
+
+
+
+ + + + diff --git a/Tests/LibWeb/Text/input/wpt-import/css/css-logical/logical-box-size.html b/Tests/LibWeb/Text/input/wpt-import/css/css-logical/logical-box-size.html new file mode 100644 index 00000000000..26772ce297f --- /dev/null +++ b/Tests/LibWeb/Text/input/wpt-import/css/css-logical/logical-box-size.html @@ -0,0 +1,17 @@ + + +CSS Logical Properties: Flow-Relative Sizing + + + + + + +
+ +