diff --git a/crates/obscura-render/tests/layout_test.rs b/crates/obscura-render/tests/layout_test.rs index a0061aa..6749ec9 100644 --- a/crates/obscura-render/tests/layout_test.rs +++ b/crates/obscura-render/tests/layout_test.rs @@ -192,6 +192,71 @@ fn absolute_auto_axes_preserve_static_position_after_reparenting() { ); } +#[test] +fn legacy_center_keeps_block_flow_and_centers_descendants() { + let tree = parse_html(include_str!("../../../render-repros/legacy-center.html")); + let layout = layout_dom(&tree, (900.0, 1000.0)); + let rect = |selector| { + let id = tree.query_selector_all(selector).unwrap()[0]; + layout.rects[&id] + }; + let inline = rect(".inline-box"); + let block = rect(".block-box"); + let nested = rect(".nested-inline"); + let auto = rect(".auto-block"); + let table = rect(".center-table"); + let table_inline = rect(".table-inline"); + let cell_center = rect(".cell-center"); + let overridden = rect(".override-box"); + let pure = rect("#pure-center"); + + assert!( + (inline.x - 150.0).abs() < 0.01 && (inline.y - 0.0).abs() < 0.01, + "centered inline content: {inline:?}" + ); + assert!( + (block.x - 150.0).abs() < 0.01 && (block.y - 20.0).abs() < 0.01, + "centered block descendant: {block:?}" + ); + assert!( + (nested.x - 170.0).abs() < 0.01 && (nested.y - 40.0).abs() < 0.01, + "inherited nested alignment: {nested:?}" + ); + assert!( + (auto.x - 0.0).abs() < 0.01 + && (auto.y - 60.0).abs() < 0.01 + && (auto.width - 400.0).abs() < 0.01, + "auto-width block remains fill-available: {auto:?}" + ); + assert!( + (table.x - 100.0).abs() < 0.01 + && (table.y - 80.0).abs() < 0.01 + && (table.width - 200.0).abs() < 0.01, + "table outer box is centered: {table:?}" + ); + assert!( + (table_inline.x - 100.0).abs() < 0.01 + && (table_inline.y - 80.0).abs() < 0.01, + "table contents reset legacy alignment: {table_inline:?}" + ); + assert!( + (cell_center.x - 100.0).abs() < 0.01 + && (cell_center.y - 100.0).abs() < 0.01 + && (cell_center.width - 200.0).abs() < 0.01, + "center in table cell fills the cell: {cell_center:?}" + ); + assert!( + (overridden.x - 0.0).abs() < 0.01 && (overridden.y - 120.0).abs() < 0.01, + "author text-align override: {overridden:?}" + ); + assert!( + (pure.x - 0.0).abs() < 0.01 + && (pure.y - 240.0).abs() < 0.01 + && (pure.width - 400.0).abs() < 0.01, + "pure-text center remains fill-available: {pure:?}" + ); +} + #[test] fn transforms_establish_absolute_and_fixed_containing_blocks() { let html = r##" diff --git a/render-repros/checks.json b/render-repros/checks.json index b8b4c3b..e36b521 100644 --- a/render-repros/checks.json +++ b/render-repros/checks.json @@ -98,6 +98,16 @@ {"name": "place content aligns first grid track", "color": "#7048e8", "x": 100, "y": 570, "width": 100, "height": 50}, {"name": "place content aligns second grid track", "color": "#37b24d", "x": 100, "y": 620, "width": 100, "height": 50} ], + "legacy-center": [ + {"name": "legacy center aligns inline content", "color": "#087f5b", "x": 150, "y": 0, "width": 100, "height": 20}, + {"name": "legacy center preserves block stacking", "color": "#1971c2", "x": 150, "y": 20, "width": 100, "height": 20}, + {"name": "legacy alignment is inherited by nested content", "color": "#862e9c", "x": 170, "y": 40, "width": 60, "height": 20}, + {"name": "auto width block remains fill available", "color": "#c92a2a", "x": 0, "y": 60, "width": 400, "height": 20}, + {"name": "centered table resets legacy alignment internally", "color": "#5f3dc4", "x": 100, "y": 80, "width": 80, "height": 20}, + {"name": "center in table cell fills the cell", "color": "#fab005", "x": 100, "y": 100, "width": 200, "height": 20}, + {"name": "author text alignment overrides the UA rule", "color": "#e8590c", "x": 0, "y": 120, "width": 80, "height": 20}, + {"name": "pure text center remains fill available", "color": "#2f9e44", "x": 0, "y": 240, "width": 400, "height": 20} + ], "mixed-content-block": [ {"name": "full-width block child", "color": "#ccddff", "width": 400} ], diff --git a/render-repros/legacy-center.html b/render-repros/legacy-center.html new file mode 100644 index 0000000..ef9b5b0 --- /dev/null +++ b/render-repros/legacy-center.html @@ -0,0 +1,95 @@ + + + + + legacy center uses block text alignment + + + +
+
+ +
+
+
+ + + +
cell text
+
+
+
+
+
+
centered text
+ +