diff --git a/Cargo.toml b/Cargo.toml index 7b145f688..7200048e5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -41,6 +41,7 @@ default = [ "grid", "block_layout", "float_layout", + "table_layout", "calc", "content_size", "detailed_layout_info", @@ -53,6 +54,8 @@ default = [ block_layout = [] ## Enables the Float layout algorithm. This is a sub-feature of block layout. float_layout = [] +## Enables the CSS Table layout algorithm. See [`compute_table_layout`](crate::compute_table_layout). +table_layout = ["alloc", "block_layout"] ## Enables the Flexbox layout algorithm. See [`compute_flexbox_layout`](crate::compute_flexbox_layout). flexbox = [] ## Enables support for `flex-wrap: balance` and `flex-line-count` from [CSS Flexbox Level 2](https://drafts.csswg.org/css-flexbox-2/) diff --git a/benches/src/yoga_helpers.rs b/benches/src/yoga_helpers.rs index dc520c5f3..33667e564 100644 --- a/benches/src/yoga_helpers.rs +++ b/benches/src/yoga_helpers.rs @@ -192,6 +192,9 @@ fn apply_taffy_style(node: &mut yg::Node, style: &tf::Style) { tf::Display::Grid => panic!("Yoga does not support CSS Grid layout"), tf::Display::Block => panic!("Yoga does not support CSS Block layout"), tf::Display::FlowRoot => panic!("Yoga does not support CSS Block layout"), + tf::Display::Table | tf::Display::TableRowGroup | tf::Display::TableRow | tf::Display::TableCell => { + panic!("Yoga does not support CSS Table layout") + } }); // box_sizing diff --git a/scripts/gentest/src/main.rs b/scripts/gentest/src/main.rs index 6a5c5b58c..8e314d660 100644 --- a/scripts/gentest/src/main.rs +++ b/scripts/gentest/src/main.rs @@ -130,6 +130,9 @@ async fn main() { if name.starts_with("balance") { writeln!(&mut mod_file, r#"#[cfg(feature = "flexbox_balance")]"#).unwrap(); } + if name.starts_with("table") { + writeln!(&mut mod_file, r#"#[cfg(feature = "table_layout")]"#).unwrap(); + } writeln!( &mut mod_file, "#[test] @@ -664,6 +667,11 @@ fn generate_node(w: &mut XmlWriter, node: &Value) { } maybe_write(w, "text-align", get_str_attr(&style["textAlign"], None)); + maybe_write(w, "table-layout", get_str_attr(&style["tableLayout"], None)); + maybe_write(w, "border-spacing-x", get_dim_attr(&style["borderSpacing"]["x"], None)); + maybe_write(w, "border-spacing-y", get_dim_attr(&style["borderSpacing"]["y"], None)); + maybe_write(w, "colspan", get_num_attr(&style["colspan"], None)); + maybe_write(w, "rowspan", get_num_attr(&style["rowspan"], None)); maybe_write(w, "align-items", get_str_attr(&style["alignItems"], None)); maybe_write(w, "align-self", get_str_attr(&style["alignSelf"], None)); maybe_write(w, "justify-items", get_str_attr(&style["justifyItems"], None)); diff --git a/scripts/gentest/test_helper.js b/scripts/gentest/test_helper.js index 6fad0d9f8..5889a8f93 100644 --- a/scripts/gentest/test_helper.js +++ b/scripts/gentest/test_helper.js @@ -203,6 +203,15 @@ function parseGridPosition(input) { return undefined; } +function parseBorderSpacing(input) { + if (!input) return undefined; + const parts = input.trim().split(/\s+/).map(part => parseDimension(part)); + const x = parts[0]; + const y = parts[1] ?? parts[0]; + if (!x && !y) return undefined; + return { x, y }; +} + function describeElement(e) { // Get precise, unrounded dimensions for the current element and it's parent @@ -211,9 +220,14 @@ function describeElement(e) { const computedStyle = getComputedStyle(e); + // Real table elements (, ,
, ...) get their display from the UA + // stylesheet rather than an inline style, so fall back to the computed value for them + const isTableElement = ['TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TR', 'TD', 'TH'].includes(e.tagName); + const displayValue = e.style.display || (isTableElement ? computedStyle.display : ''); + return { style: { - display: parseEnum(e.style.display), + display: parseEnum(displayValue), boxSizing: parseEnum(computedStyle.boxSizing), position: parseEnum(e.style.position), @@ -226,6 +240,12 @@ function describeElement(e) { textAlign: parseEnum(e.style.textAlign), + tableLayout: parseEnum(e.style.tableLayout), + // border-spacing is inherited, so only record it on the table itself + borderSpacing: displayValue === 'table' ? parseBorderSpacing(computedStyle.borderSpacing) : undefined, + colspan: e.colSpan > 1 ? e.colSpan : undefined, + rowspan: e.rowSpan > 1 ? e.rowSpan : undefined, + flexDirection: parseEnum(e.style.flexDirection), flexWrap: parseEnum(e.style.flexWrap), flexLineCount: parseNumber(e.style.flexLineCount), diff --git a/src/compute/block.rs b/src/compute/block.rs index 154358114..c257f5a26 100644 --- a/src/compute/block.rs +++ b/src/compute/block.rs @@ -441,7 +441,13 @@ fn compute_inner( #[allow(unused_mut)] mut block_ctx: &mut BlockContext<'_>, ) -> LayoutOutput { let LayoutInput { - known_dimensions, parent_size, available_space, run_mode, vertical_margins_are_collapsible, .. + known_dimensions, + parent_size, + available_space, + run_mode, + vertical_margins_are_collapsible, + content_offset_y, + .. } = inputs; let style = tree.get_block_container_style(node_id); @@ -599,6 +605,7 @@ fn compute_inner( own_margins_collapse_with_children, #[cfg(feature = "content_size")] is_scroll_container, + content_offset_y, block_ctx, ); @@ -947,6 +954,7 @@ fn perform_final_layout_on_in_flow_children( direction: Direction, own_margins_collapse_with_children: Line, #[cfg(feature = "content_size")] is_scroll_container: bool, + content_offset_y: f32, block_ctx: &mut BlockContext<'_>, ) -> (Rect, f32, CollapsibleMarginSet, CollapsibleMarginSet, Option) { // Resolve container_inner_width for sizing child nodes using initial content_box_inset @@ -981,8 +989,8 @@ fn perform_final_layout_on_in_flow_children( #[cfg_attr(not(feature = "content_size"), allow(unused_mut))] let mut inflow_overflow_rect = Rect::ZERO; - let mut committed_y_offset = resolved_content_box_inset.top; - let mut y_offset_for_absolute = resolved_content_box_inset.top; + let mut committed_y_offset = resolved_content_box_inset.top + content_offset_y; + let mut y_offset_for_absolute = resolved_content_box_inset.top + content_offset_y; let mut first_child_top_margin_set = CollapsibleMarginSet::ZERO; let mut active_collapsible_margin_set = CollapsibleMarginSet::ZERO; let mut is_collapsing_with_first_margin_set = true; @@ -1257,6 +1265,7 @@ fn perform_final_layout_on_in_flow_children( parent_size, available_space: available_space.map_width(|_| AvailableSpace::Definite(stretch_width)), vertical_margins_are_collapsible: if item.is_in_same_bfc { Line::TRUE } else { Line::FALSE }, + content_offset_y: 0.0, }; #[cfg(feature = "float_layout")] diff --git a/src/compute/flexbox.rs b/src/compute/flexbox.rs index 6d9c88e29..485cfd7b2 100644 --- a/src/compute/flexbox.rs +++ b/src/compute/flexbox.rs @@ -1787,6 +1787,7 @@ fn determine_hypothetical_cross_size( height: if constants.is_row { child_available_cross } else { child_known_main }, }, vertical_margins_are_collapsible: Line::FALSE, + content_offset_y: 0.0, }, ) .size @@ -1864,6 +1865,7 @@ fn calculate_children_base_lines( }, }, vertical_margins_are_collapsible: Line::FALSE, + content_offset_y: 0.0, }, ); @@ -2358,6 +2360,7 @@ fn calculate_flex_item( parent_size: node_inner_size, available_space: container_size.map(|s| s.into()), vertical_margins_are_collapsible: Line::FALSE, + content_offset_y: 0.0, }, ); let LayoutOutput { diff --git a/src/compute/mod.rs b/src/compute/mod.rs index 7523b1062..940750048 100644 --- a/src/compute/mod.rs +++ b/src/compute/mod.rs @@ -9,6 +9,7 @@ //! | [`compute_flexbox_layout`] | Layout a Flexbox container and it's direct children | //! | [`compute_grid_layout`] | Layout a CSS Grid container and it's direct children | //! | [`compute_block_layout`] | Layout a Block container and it's direct children | +//! | [`compute_table_layout`] | Layout a Table container and it's direct children | //! | [`compute_leaf_layout`] | Applies common properties like padding/border/aspect-ratio to a node before deferring to a passed closure to determine it's size. Can be applied to nodes like text or image nodes. | //! | [`compute_root_layout`] | Layout the root node of a tree (regardless of it's layout mode). This function is typically called once to begin a layout run. | | //! | [`compute_hidden_layout`] | Mark a node as hidden during layout (like `Display::None`) | @@ -36,6 +37,9 @@ pub(crate) mod flexbox; #[cfg(feature = "grid")] pub(crate) mod grid; +#[cfg(feature = "table_layout")] +pub(crate) mod table; + pub use leaf::compute_leaf_layout; #[cfg(feature = "block_layout")] @@ -47,6 +51,9 @@ pub use self::flexbox::compute_flexbox_layout; #[cfg(feature = "grid")] pub use self::grid::compute_grid_layout; +#[cfg(feature = "table_layout")] +pub use self::table::compute_table_layout; + #[cfg(feature = "float_layout")] pub use self::float::{BfcSlot, ContentSlot, FloatContext, FloatIntrinsicWidthCalculator}; diff --git a/src/compute/table.rs b/src/compute/table.rs new file mode 100644 index 000000000..3456c5349 --- /dev/null +++ b/src/compute/table.rs @@ -0,0 +1,1192 @@ +//! Computes CSS Table layout (CSS 2.1 §17 / [css-tables-3](https://www.w3.org/TR/css-tables-3/)) +//! +//! Implements the automatic and fixed table layout algorithms for well-formed table trees +//! (table → optional row group → row → cell). Anonymous box fixup +//! () is the responsibility of the code +//! constructing the tree. Border collapsing is likewise expected to be resolved by the +//! embedder: with `border-collapse: collapse`, resolve the winning border for each edge, +//! write half of it into each cell's border style, and set `border_spacing` to zero. +#[cfg(feature = "content_size")] +use crate::compute::common::scrollable_overflow::compute_scrollable_overflow_contribution; +use crate::geometry::{AbsoluteAxis, Line, Point, Rect, Size}; +use crate::style::{ + AvailableSpace, BoxGenerationMode, CompactLength, CoreStyle, Direction, TableContainerStyle, TableItemStyle, + TableLayout, TableRole, +}; +use crate::style_helpers::TaffyMaxContent; +use crate::tree::traits::{LayoutPartialTreeExt, LayoutTableContainer}; +use crate::tree::{Baselines, Layout, LayoutInput, LayoutOutput, NodeId, RequestedAxis, RunMode, SizingMode}; +use crate::util::sys::Vec; +use crate::util::{MaybeMath, MaybeResolve, ResolveOrZero}; +use crate::BoxSizing; + +/// A cell placed into the table grid +struct Cell { + /// The node id of the cell + node_id: NodeId, + /// Index of the first row this cell occupies + row: usize, + /// Index of the first column this cell occupies + col: usize, + /// Number of columns spanned + colspan: usize, + /// Number of rows spanned + rowspan: usize, + /// The cell's index among its row's children + order: u32, +} + +/// One cell's inline constraints, as measured for column sizing +struct CellMeasure { + /// The cell's min-content inline size (border-box) + min: f32, + /// The cell's max-content inline size (border-box) + max: f32, + /// The column-width percentage specified on the cell, if any + percent: Option, + /// Whether the cell has a fixed (length) specified width + is_constrained: bool, +} + +/// One cell's resolved geometry, carried from row sizing through to positioning +#[derive(Clone, Copy, Default)] +struct CellSizing { + /// The width of every column the cell spans, plus the spacing between them + width: f32, + /// The height the cell asks for at that width + height: f32, + /// The cell's own baseline, when it takes part in row baseline alignment + baseline: Option, + /// How far baseline alignment pushes the cell's content down + shift: f32, +} + +/// Accumulated sizing constraints for one column of the table grid +#[derive(Clone, Copy, Default)] +struct Column { + /// Largest min-content contribution of any cell in this column + min: f32, + /// Largest max-content contribution of any cell in this column + max: f32, + /// Largest percentage specified on any cell in this column + percent: Option, + /// Whether any cell in this column has a fixed (length) specified width + is_constrained: bool, + /// The resolved used width + used: f32, +} + +/// The table's cells, placed into rows and columns +#[derive(Default)] +struct Grid { + /// The rows of every row group, in document order + rows: Vec, + /// Every cell, in the order its row placed it + cells: Vec, + /// The table's row groups, in document order + groups: Vec, + /// The number of columns the placed cells add up to + col_count: usize, + /// The rows and cells that generate no box, which still need their layout cleared + hidden: Vec, +} + +/// A row group of the table +struct Group { + /// The node id of the row group + node_id: NodeId, + /// The group's index among the table's children + order: u32, +} + +/// A row of the table grid +struct Row { + /// The node id of the row + node_id: NodeId, + /// Index of the row group this row belongs to, if any + group: Option, + /// The row's index among its parent's children + order: u32, + /// The resolved used height + used_height: f32, + /// The largest percentage height specified on the row or one of its cells + percent: Option, + /// Whether the row or one of its cells specifies a height + is_constrained: bool, + /// Whether a rowspanning cell starts in this row + has_rowspan_start: bool, + /// The row's baseline, once its cells have settled it + baseline: Option, + /// How far above the row's bottom edge to synthesise a baseline for a row with no cell + /// that has one of its own + fallback_descent: Option, +} + +/// Computes the layout of [`LayoutTableContainer`] according to the CSS table layout algorithm +pub fn compute_table_layout( + tree: &mut impl LayoutTableContainer, + node_id: NodeId, + inputs: LayoutInput, +) -> LayoutOutput { + let LayoutInput { known_dimensions, parent_size, available_space, run_mode, axis, .. } = inputs; + + let style = tree.get_table_container_style(node_id); + let raw_padding = style.padding(); + let raw_border = style.border(); + let raw_margin = style.margin(); + let raw_size = style.size(); + let raw_min_size = style.min_size(); + let raw_max_size = style.max_size(); + let box_sizing = style.box_sizing(); + let aspect_ratio = style.aspect_ratio(); + let border_spacing = style.border_spacing(); + let table_layout_mode = style.table_layout(); + #[cfg(feature = "content_size")] + let is_scroll_container = { + let overflow = style.overflow(); + overflow.x.is_scroll_container() || overflow.y.is_scroll_container() + }; + drop(style); + + let parent_width = parent_size.width; + let padding = raw_padding.resolve_or_zero(parent_width, |v, b| tree.calc(v, b)); + let border = raw_border.resolve_or_zero(parent_width, |v, b| tree.calc(v, b)); + let margin = raw_margin.resolve_or_zero(parent_width, |v, b| tree.calc(v, b)); + let padding_border = padding + border; + let pb_size = padding_border.sum_axes(); + + let box_sizing_adjustment = if box_sizing == BoxSizing::ContentBox { pb_size } else { Size::ZERO }; + let min_size = raw_min_size + .maybe_resolve(parent_size, |v, b| tree.calc(v, b)) + .maybe_apply_aspect_ratio(aspect_ratio) + .maybe_add(box_sizing_adjustment); + let max_size = raw_max_size + .maybe_resolve(parent_size, |v, b| tree.calc(v, b)) + .maybe_apply_aspect_ratio(aspect_ratio) + .maybe_add(box_sizing_adjustment); + let specified_size = raw_size + .maybe_resolve(parent_size, |v, b| tree.calc(v, b)) + .maybe_apply_aspect_ratio(aspect_ratio) + .maybe_add(box_sizing_adjustment) + .maybe_clamp(min_size, max_size); + + let styled_known = known_dimensions.or(specified_size); + + let h_spacing = border_spacing.width.resolve_or_zero(parent_width, |v, b| tree.calc(v, b)); + let v_spacing = border_spacing.height.resolve_or_zero(parent_width, |v, b| tree.calc(v, b)); + + // Phase 1: place cells into the grid + let Grid { mut rows, cells, groups, col_count, hidden } = build_grid(tree, node_id); + + if col_count == 0 || rows.is_empty() { + let size = Size { + width: styled_known.width.unwrap_or(pb_size.width).maybe_clamp(min_size.width, max_size.width), + height: styled_known.height.unwrap_or(pb_size.height).maybe_clamp(min_size.height, max_size.height), + }; + if run_mode == RunMode::PerformLayout { + for order in 0..tree.child_count(node_id) { + let child_id = tree.get_child_id(node_id, order); + tree.set_unrounded_layout(child_id, &Layout::with_order(order as u32)); + } + } + return LayoutOutput::from_outer_size(size); + } + + // Phase 2: collect intrinsic size contributions per column + // + // Fixed layout reads the column widths off the first row alone and never looks at content + let is_fixed = table_layout_mode == TableLayout::Fixed && styled_known.width.is_some(); + let mut columns = measure_columns(tree, &cells, col_count, h_spacing, is_fixed); + + // Phase 3: resolve the table's used width and the columns' used widths + let total_h_spacing = h_spacing * (col_count as f32 + 1.0); + let (grid_min_sum, grid_max_sum) = grid_min_max(&columns, is_fixed); + let grid_min = grid_min_sum + total_h_spacing; + let grid_max = grid_max_sum + total_h_spacing; + + let table_width = match styled_known.width { + Some(w) => w.max(grid_min + pb_size.width), + None => { + let shrink_to_fit = match available_space.width { + AvailableSpace::Definite(w) => (w - margin.horizontal_axis_sum() - pb_size.width) + .maybe_clamp(max_size.width.map(|m| m - pb_size.width), None) + .clamp(grid_min, grid_max.max(grid_min)), + AvailableSpace::MaxContent => grid_max, + AvailableSpace::MinContent => grid_min, + }; + (shrink_to_fit + pb_size.width).maybe_clamp(min_size.width, max_size.width).max(grid_min + pb_size.width) + } + }; + let assignable = table_width - pb_size.width - total_h_spacing; + + if is_fixed { + resolve_fixed_layout_columns(&mut columns, assignable); + } else { + resolve_auto_layout_columns(&mut columns, assignable); + } + + if run_mode == RunMode::ComputeSize && axis == RequestedAxis::Horizontal { + return LayoutOutput::from_outer_size(Size { width: table_width, height: styled_known.height.unwrap_or(0.0) }); + } + + // Phase 4: resolve row heights by sizing each cell at its final width + let num_rows = rows.len(); + let mut sizing: Vec = cells + .iter() + .map(|cell| { + let range = cell.col..(cell.col + cell.colspan).min(col_count); + let width = + columns[range.clone()].iter().map(|c| c.used).sum::() + h_spacing * (range.len() as f32 - 1.0); + CellSizing { width, ..CellSizing::default() } + }) + .collect(); + + // Row baseline alignment per CSS 2.1 §17.5.4. An empty cell has no baseline of its own, so + // the row falls back to sitting its baseline on the shallowest such cell's content edge + for (cell, sizing) in cells.iter().zip(sizing.iter_mut()) { + let output = tree.compute_child_layout( + cell.node_id, + LayoutInput { + known_dimensions: Size { width: Some(sizing.width), height: None }, + known_dimensions_are_definite: Size { width: true, height: true }, + parent_size: Size { width: Some(table_width - pb_size.width), height: None }, + available_space: Size { + width: AvailableSpace::Definite(sizing.width), + height: AvailableSpace::MaxContent, + }, + sizing_mode: SizingMode::InherentSize, + axis: RequestedAxis::Both, + run_mode: RunMode::ComputeSize, + vertical_margins_are_collapsible: Line::FALSE, + content_offset_y: 0.0, + }, + ); + sizing.height = output.size.height; + + let cell_style = tree.get_table_child_style(cell.node_id); + let participates = tree.get_table_child_style(cell.node_id).align_content().is_none(); + let height_dim = cell_style.size().height; + drop(cell_style); + + let row = &mut rows[cell.row]; + if cell.rowspan > 1 { + row.has_rowspan_start = true; + } else { + if height_dim.tag() == CompactLength::PERCENT_TAG { + row.percent = Some(row.percent.map_or(height_dim.value(), |p: f32| p.max(height_dim.value()))); + row.is_constrained = true; + } else if height_dim.tag() == CompactLength::LENGTH_TAG { + row.is_constrained = true; + } + row.used_height = row.used_height.max(output.size.height); + } + + if participates { + let cell_style = tree.get_table_child_style(cell.node_id); + let pb_bottom = cell_style.padding().resolve_or_zero(parent_width, |v, b| tree.calc(v, b)).bottom + + cell_style.border().resolve_or_zero(parent_width, |v, b| tree.calc(v, b)).bottom; + drop(cell_style); + + let row = &mut rows[cell.row]; + if tree.child_count(cell.node_id) == 0 { + row.fallback_descent = Some(row.fallback_descent.map_or(pb_bottom, |d: f32| d.min(pb_bottom))); + } else { + let baseline = output.baselines.first.unwrap_or(output.size.height - pb_bottom); + sizing.baseline = Some(baseline); + row.baseline = Some(row.baseline.map_or(baseline, |b: f32| b.max(baseline))); + } + } + } + + // A rowspanning cell lends its ascent to the row it starts in but not its descent, which + // the rows it spans absorb instead + for (cell, sizing) in cells.iter().zip(sizing.iter_mut()) { + if let (Some(baseline), Some(row_baseline)) = (sizing.baseline, rows[cell.row].baseline) { + sizing.shift = row_baseline - baseline; + if cell.rowspan == 1 { + let row = &mut rows[cell.row]; + row.used_height = row.used_height.max(sizing.shift + sizing.height); + } + } + } + + for row in rows.iter_mut() { + let height_dim = tree.get_table_child_style(row.node_id).size().height; + if height_dim.tag() == CompactLength::PERCENT_TAG { + row.percent = Some(row.percent.map_or(height_dim.value(), |p: f32| p.max(height_dim.value()))); + row.is_constrained = true; + } else if height_dim.tag() == CompactLength::LENGTH_TAG { + row.used_height = row.used_height.max(height_dim.value()); + row.is_constrained = true; + } + } + + let total_v_spacing = v_spacing * (num_rows as f32 + 1.0); + // Row percentages resolve against the space a definite-height table leaves for its rows + let percentage_basis = styled_known.height.map(|h| (h - pb_size.height - total_v_spacing).max(0.0)); + + for (cell, sizing) in cells.iter().zip(sizing.iter()).filter(|(cell, _)| cell.rowspan > 1) { + let range = cell.row..(cell.row + cell.rowspan).min(num_rows); + let target = sizing.shift + sizing.height - v_spacing * (range.len() as f32 - 1.0); + distribute_excess_height(&mut rows[range], target, true, percentage_basis); + } + + for (group_index, group) in groups.iter().enumerate() { + let group_height = tree + .get_table_child_style(group.node_id) + .size() + .height + .maybe_resolve(percentage_basis, |v, b| tree.calc(v, b)); + + if let Some(height) = group_height { + let range = group_row_range(&rows, group_index); + let target = height - v_spacing * (range.len() as f32 - 1.0); + distribute_excess_height(&mut rows[range], target, false, percentage_basis); + } + } + + let content_height = rows.iter().map(|r| r.used_height).sum::() + total_v_spacing; + let table_height = styled_known + .height + .unwrap_or((content_height + pb_size.height).maybe_clamp(min_size.height, max_size.height)) + .max(content_height + pb_size.height) + .maybe_max(min_size.height); + + distribute_excess_height(&mut rows, table_height - pb_size.height - total_v_spacing, false, percentage_basis); + + for row in rows.iter_mut().filter(|r| r.baseline.is_none()) { + row.baseline = row.fallback_descent.map(|descent| (row.used_height - descent).max(0.0)); + } + + let final_size = Size { width: table_width, height: table_height }; + // The table's baseline is its first row's baseline (css-tables-3 §4.2) + let table_baseline = + rows.first().and_then(|row| row.baseline).map(|baseline| padding_border.top + v_spacing + baseline); + let baselines = Baselines::from_first(table_baseline); + + if run_mode == RunMode::ComputeSize { + return LayoutOutput::from_sizes_and_baselines(final_size, Rect::ZERO, baselines); + } + + // Phase 5: position rows, row groups, and cells (in RTL the first column is rightmost) + let rtl = tree.get_table_container_style(node_id).direction() == Direction::Rtl; + let mut col_x: Vec = Vec::with_capacity(col_count); + let mut x = padding_border.left + h_spacing; + for col in columns.iter() { + col_x.push(x); + x += col.used + h_spacing; + } + if rtl { + for (i, col) in columns.iter().enumerate() { + col_x[i] = table_width - pb_size.width + padding_border.left - (col_x[i] - padding_border.left) - col.used; + } + } + let mut row_y: Vec = Vec::with_capacity(num_rows); + let mut y = padding_border.top + v_spacing; + for row in rows.iter() { + row_y.push(y); + y += row.used_height + v_spacing; + } + + // Row and row-group boxes exclude the outer border-spacing, which belongs to the table + let grid_origin_x = padding_border.left + h_spacing; + let grid_width = assignable + h_spacing * (col_count as f32 - 1.0); + + let mut group_origin: Vec> = Vec::with_capacity(groups.len()); + for (group_index, group) in groups.iter().enumerate() { + let range = group_row_range(&rows, group_index); + let (start_y, end_y) = match range.end.checked_sub(1) { + Some(last) if !range.is_empty() => (row_y[range.start], row_y[last] + rows[last].used_height), + _ => (padding_border.top + v_spacing, padding_border.top + v_spacing), + }; + let origin = Point { x: grid_origin_x, y: start_y }; + group_origin.push(origin); + + set_item_layout( + tree, + group.node_id, + group.order, + origin, + Size { width: grid_width, height: end_y - start_y }, + parent_width, + ); + } + + for (row_index, row) in rows.iter().enumerate() { + let origin = match row.group { + Some(g) => Point { x: 0.0, y: row_y[row_index] - group_origin[g].y }, + None => Point { x: grid_origin_x, y: row_y[row_index] }, + }; + set_item_layout( + tree, + row.node_id, + row.order, + origin, + Size { width: grid_width, height: row.used_height }, + parent_width, + ); + } + + let mut cell_overflow_rect = Rect::ZERO; + for (cell, sizing) in cells.iter().zip(sizing.iter()) { + let cell_width = sizing.width; + let range = cell.row..(cell.row + cell.rowspan).min(num_rows); + let span_len = range.len(); + let cell_height: f32 = + rows[range].iter().map(|r| r.used_height).sum::() + v_spacing * (span_len as f32 - 1.0); + + let output = tree.compute_child_layout( + cell.node_id, + LayoutInput { + known_dimensions: Size { width: Some(cell_width), height: Some(cell_height) }, + known_dimensions_are_definite: Size { width: true, height: true }, + parent_size: Size { width: Some(grid_width), height: Some(table_height - pb_size.height) }, + available_space: Size { + width: AvailableSpace::Definite(cell_width), + height: AvailableSpace::Definite(cell_height), + }, + sizing_mode: SizingMode::InherentSize, + axis: RequestedAxis::Both, + run_mode: RunMode::PerformLayout, + vertical_margins_are_collapsible: Line::FALSE, + content_offset_y: sizing.shift, + }, + ); + + let cell_style = tree.get_table_child_style(cell.node_id); + let cell_padding = cell_style.padding().resolve_or_zero(parent_width, |v, b| tree.calc(v, b)); + let cell_border = cell_style.border().resolve_or_zero(parent_width, |v, b| tree.calc(v, b)); + #[cfg(feature = "content_size")] + let cell_overflow = cell_style.overflow(); + drop(cell_style); + + // A spanning cell starts at its leftmost spanned column, which in RTL is the last one + let col_range = cell.col..(cell.col + cell.colspan).min(col_count); + let cell_x = col_x[col_range].iter().copied().fold(f32::INFINITY, f32::min); + let location = Point { x: cell_x - grid_origin_x, y: 0.0 }; + + tree.set_unrounded_layout( + cell.node_id, + &Layout { + order: cell.order, + location, + size: Size { width: cell_width, height: cell_height }, + #[cfg(feature = "content_size")] + scrollable_overflow_rect: output.scrollable_overflow_rect, + scrollbar_size: Size::ZERO, + padding: cell_padding, + border: cell_border, + margin: Rect::ZERO, + }, + ); + + #[cfg(feature = "content_size")] + { + // Contributions are measured from the table's padding-box origin, mirrored for RTL + let cell_size = Size { width: cell_width, height: cell_height }; + let contribution_location = if rtl { + Point { x: table_width - (cell_x + cell_width) - border.right, y: row_y[cell.row] - border.top } + } else { + Point { x: cell_x - border.left, y: row_y[cell.row] - border.top } + }; + cell_overflow_rect = cell_overflow_rect.union(compute_scrollable_overflow_contribution( + contribution_location, + cell_size, + output.scrollable_overflow_rect, + cell_overflow, + is_scroll_container, + )); + } + } + + for (order, &child_id) in hidden.iter().enumerate() { + tree.set_unrounded_layout(child_id, &Layout::with_order(order as u32)); + tree.perform_child_layout( + child_id, + Size::NONE, + Size::NONE, + Size::MAX_CONTENT, + SizingMode::InherentSize, + Line::FALSE, + ); + } + + // A scroll container's own padding at the end of the content is part of its scrollable + // overflow region, so it is included in the in-flow overflow rect. Boxes that are not + // scroll containers do not extend their overflow region by their own padding. + #[cfg(feature = "content_size")] + let scrollable_overflow_rect = { + let mut overflow_rect = cell_overflow_rect; + if is_scroll_container { + overflow_rect.right += if rtl { padding.left } else { padding.right }; + overflow_rect.bottom += padding.bottom; + } + overflow_rect + }; + #[cfg(not(feature = "content_size"))] + let scrollable_overflow_rect = cell_overflow_rect; + + LayoutOutput::from_sizes_and_baselines(final_size, scrollable_overflow_rect, baselines) +} + +/// The rows a row group holds, which `build_grid` places contiguously +fn group_row_range(rows: &[Row], group: usize) -> core::ops::Range { + let start = rows.iter().position(|r| r.group == Some(group)).unwrap_or(0); + let len = rows[start..].iter().take_while(|r| r.group == Some(group)).count(); + + start..start + len +} + +/// Place every cell of the table into the grid, and collect its row groups. Rows outside a row +/// group belong to an anonymous one, and a rowspan never leaves the group it starts in +/// (css-tables-3 §2.2) +fn build_grid(tree: &mut impl LayoutTableContainer, node_id: NodeId) -> Grid { + let mut grid = Grid::default(); + // How many further rows the cell placed in each column still covers + let mut occupancy: Vec = Vec::new(); + let table_children = visible_children(tree, node_id, &mut grid.hidden); + let mut index = 0; + + while index < table_children.len() { + occupancy.clear(); + let group_id = table_children[index]; + + if tree.get_table_child_style(group_id).table_role() == TableRole::RowGroup { + let group = Some(grid.groups.len()); + grid.groups.push(Group { node_id: group_id, order: index as u32 }); + + let group_rows = visible_children(tree, group_id, &mut grid.hidden); + for (row, &row_id) in group_rows.iter().enumerate() { + place_row(tree, row_id, group, row as u32, group_rows.len() - row, &mut occupancy, &mut grid); + } + index += 1; + } else { + // Rows outside a row group belong to one anonymous group, which the run of + // consecutive non-group children marks out + let mut end = index + 1; + while end < table_children.len() + && tree.get_table_child_style(table_children[end]).table_role() != TableRole::RowGroup + { + end += 1; + } + for (offset, &row_id) in table_children[index..end].iter().enumerate() { + let row = index + offset; + place_row(tree, row_id, None, row as u32, end - row, &mut occupancy, &mut grid); + } + index = end; + } + } + + grid +} + +/// Collect the children of `node_id` that generate a box, pushing the rest onto `hidden` +fn visible_children(tree: &impl LayoutTableContainer, node_id: NodeId, hidden: &mut Vec) -> Vec { + let mut visible = Vec::with_capacity(tree.child_count(node_id)); + for index in 0..tree.child_count(node_id) { + let child_id = tree.get_child_id(node_id, index); + if tree.get_table_child_style(child_id).box_generation_mode() == BoxGenerationMode::None { + hidden.push(child_id); + } else { + visible.push(child_id); + } + } + + visible +} + +/// Place one row's cells into the grid, skipping columns still covered by +/// rowspanning cells from earlier rows. `rows_left` counts this row and the ones after it in +/// the same row group, which is as far as a rowspan can reach. +fn place_row( + tree: &mut impl LayoutTableContainer, + row_id: NodeId, + group: Option, + order: u32, + rows_left: usize, + occupancy: &mut Vec, + grid: &mut Grid, +) { + let row_index = grid.rows.len(); + grid.rows.push(Row { + node_id: row_id, + group, + order, + used_height: 0.0, + percent: None, + is_constrained: false, + has_rowspan_start: false, + baseline: None, + fallback_descent: None, + }); + + let row_cells = visible_children(tree, row_id, &mut grid.hidden); + let mut col = 0; + for (cell, &cell_id) in row_cells.iter().enumerate() { + let cell_style = tree.get_table_child_style(cell_id); + let colspan = (cell_style.colspan() as usize).max(1); + let rowspan = (cell_style.rowspan() as usize).clamp(1, rows_left); + drop(cell_style); + + while occupancy.get(col).is_some_and(|&o| o > 0) { + col += 1; + } + if occupancy.len() < col + colspan { + occupancy.resize(col + colspan, 0); + } + // Covers this row plus rowspan - 1 more; the end-of-row decrement consumes this row. + // A colspan may overlap a slot an earlier rowspan still holds, which HTML calls a table + // model error and lets stand, so the longer span keeps the slot. + for slot in occupancy[col..col + colspan].iter_mut() { + *slot = (*slot).max(rowspan); + } + + grid.cells.push(Cell { node_id: cell_id, row: row_index, col, colspan, rowspan, order: cell as u32 }); + col += colspan; + } + + grid.col_count = grid.col_count.max(occupancy.len().max(col)); + for slot in occupancy.iter_mut() { + *slot = slot.saturating_sub(1); + } +} + +/// Grow `rows` until their heights sum to `target`. css-tables-3 leaves this undefined +/// (), so this follows Blink's priority order: +/// percentage rows first, then the rows a rowspan starts in, then unconstrained rows, then empty +/// rows, and finally every non-empty row in proportion to its height. +fn distribute_excess_height( + rows: &mut [Row], + target: f32, + is_rowspan_distribution: bool, + percentage_basis: Option, +) { + let deficit = |row: &Row| match (row.percent, percentage_basis) { + (Some(percent), Some(basis)) => (percent * basis - row.used_height).max(0.0), + _ => 0.0, + }; + + let mut total: f32 = rows.iter().map(|r| r.used_height).sum(); + let mut extra = target - total; + if rows.is_empty() || extra <= 0.0 { + return; + } + + let percent_deficit: f32 = rows.iter().map(deficit).sum(); + if percent_deficit > 0.0 { + let distributable = percent_deficit.min(extra); + for row in rows.iter_mut() { + let delta = distributable * deficit(row) / percent_deficit; + row.used_height += delta; + total += delta; + extra -= delta; + } + if extra <= 0.0 { + return; + } + } + + // A rowspan's excess goes to the rows where the spans it crosses begin, not to its own row + if is_rowspan_distribution { + let originating = rows[1..].iter().filter(|r| r.has_rowspan_start).count(); + if originating > 0 { + for row in rows[1..].iter_mut().filter(|r| r.has_rowspan_start) { + row.used_height += extra / originating as f32; + } + return; + } + } + + let unconstrained: f32 = + rows.iter().filter(|r| !r.is_constrained && r.used_height > 0.0).map(|r| r.used_height).sum(); + if unconstrained > 0.0 { + for row in rows.iter_mut().filter(|r| !r.is_constrained && r.used_height > 0.0) { + row.used_height += extra * row.used_height / unconstrained; + } + return; + } + + let empty_count = rows.iter().filter(|r| r.used_height == 0.0).count(); + let constrained_non_empty = rows.iter().filter(|r| r.used_height > 0.0 && r.is_constrained).count(); + + if is_rowspan_distribution { + // Nothing to grow proportionally, so the last row absorbs the lot + if empty_count == rows.len() { + rows[rows.len() - 1].used_height += extra; + return; + } + } else if empty_count > 0 && empty_count + constrained_non_empty == rows.len() { + let unconstrained_empty = rows.iter().filter(|r| r.used_height == 0.0 && !r.is_constrained).count(); + let grow_unconstrained_only = unconstrained_empty > 0; + let count = if grow_unconstrained_only { unconstrained_empty } else { empty_count }; + + for row in rows.iter_mut().filter(|r| r.used_height == 0.0) { + if !grow_unconstrained_only || !row.is_constrained { + row.used_height = extra / count as f32; + } + } + return; + } + + if total > 0.0 { + for row in rows.iter_mut().filter(|r| r.used_height > 0.0) { + row.used_height += extra * row.used_height / total; + } + } +} + +/// Distribute `extra` over `field` across `columns`, proportionally to what each column already +/// has, or equally when they all have nothing +fn distribute(columns: &mut [Column], extra: f32, field: impl Fn(&mut Column) -> &mut f32) { + let total: f32 = columns.iter_mut().map(|col| *field(col)).sum(); + let count = columns.len() as f32; + for col in columns.iter_mut() { + let share = if total > 0.0 { extra * *field(col) / total } else { extra / count }; + *field(col) += share; + } +} + +/// Measure every cell and fold its inline constraints into the column it occupies, then settle +/// the columns' percentages against each other +fn measure_columns( + tree: &mut impl LayoutTableContainer, + cells: &[Cell], + col_count: usize, + h_spacing: f32, + is_fixed: bool, +) -> Vec { + let mut columns: Vec = core::iter::repeat_with(Column::default).take(col_count).collect(); + let mut spans: Vec<(usize, usize, CellMeasure)> = Vec::new(); + + // Fixed layout takes its column widths from the first row alone + for cell in cells.iter().filter(|c| !is_fixed || c.row == 0) { + let cell_style = tree.get_table_child_style(cell.node_id); + let width_dim = cell_style.size().width; + let width_tag = width_dim.tag(); + drop(cell_style); + + let mut measure = CellMeasure { + min: 0.0, + max: 0.0, + percent: (width_tag == CompactLength::PERCENT_TAG).then(|| width_dim.value()), + is_constrained: width_tag == CompactLength::LENGTH_TAG, + }; + + if !is_fixed { + // Specified widths count toward max-content only; columns may shrink below them + measure.min = tree.measure_child_size( + cell.node_id, + Size::NONE, + Size::NONE, + Size { width: AvailableSpace::MinContent, height: AvailableSpace::MinContent }, + SizingMode::ContentSize, + AbsoluteAxis::Horizontal, + Line::FALSE, + ); + } + // A fixed table never looks at content, so only a specified width is worth measuring + if !is_fixed || measure.is_constrained || cell.colspan > 1 { + measure.max = tree.measure_child_size( + cell.node_id, + Size::NONE, + Size::NONE, + Size { width: AvailableSpace::MaxContent, height: AvailableSpace::MaxContent }, + SizingMode::InherentSize, + AbsoluteAxis::Horizontal, + Line::FALSE, + ); + } + + if cell.colspan > 1 { + spans.push((cell.col, cell.colspan, measure)); + } else if !(is_fixed && columns[cell.col].is_constrained) { + // A fixed table's column keeps the first width it is given + encompass(&mut columns[cell.col], &measure); + } + } + + for (col, colspan, measure) in spans.iter() { + let range = *col..(col + colspan).min(col_count); + let spanned_spacing = h_spacing * (range.len() as f32 - 1.0); + + // Whatever a spanning cell's percentage asks for beyond the percentages already on the + // columns is shared out over the remaining ones, weighted by max-content width + if let Some(percent) = measure.percent { + let spanned = &columns[range.clone()]; + let surplus = percent - spanned.iter().filter_map(|c| c.percent).sum::(); + let auto_count = spanned.iter().filter(|c| c.percent.is_none()).count(); + let auto_max: f32 = spanned.iter().filter(|c| c.percent.is_none()).map(|c| c.max).sum(); + + if surplus > 0.0 && auto_count > 0 { + for col in columns[range.clone()].iter_mut().filter(|c| c.percent.is_none()) { + let share = if auto_max > 0.0 { surplus * col.max / auto_max } else { surplus / auto_count as f32 }; + col.percent = Some(share); + } + } + } + + let current_min: f32 = columns[range.clone()].iter().map(|c| c.min).sum::() + spanned_spacing; + if measure.min > current_min { + distribute(&mut columns[range.clone()], measure.min - current_min, |c| &mut c.min); + } + let current_max: f32 = columns[range.clone()].iter().map(|c| c.max).sum::() + spanned_spacing; + if measure.max > current_max { + distribute(&mut columns[range.clone()], measure.max - current_max, |c| &mut c.max); + } + } + + for col in columns.iter_mut() { + col.max = col.max.max(col.min); + } + + // Percentages cannot claim more than the whole table between them. An auto table caps each + // column by what the columns before it left of 100%; a fixed one scales them all down + if is_fixed { + let total: f32 = columns.iter().filter_map(|c| c.percent).sum(); + if total > 1.0 { + for col in columns.iter_mut() { + col.percent = col.percent.map(|percent| percent / total); + } + } + } else { + let mut budget = 1.0f32; + for col in columns.iter_mut().filter(|c| c.percent.is_some()) { + let capped = col.percent.unwrap_or(0.0).min(budget).max(0.0); + budget -= capped; + col.percent = Some(capped); + } + } + + columns +} + +/// The width a percentage column asks for, which never drops below the column's minimum +fn percent_width(column: &Column, target: f32) -> f32 { + column.min.max(column.percent.unwrap_or(0.0) * target) +} + +/// Merge one cell's inline constraints into its column. A column pinned by a specified width only +/// grows to an unconstrained cell's *minimum*, so a wrappable cell wraps instead of widening it +fn encompass(column: &mut Column, cell: &CellMeasure) { + column.min = column.min.max(cell.min); + column.max = if column.is_constrained == cell.is_constrained { + column.max.max(cell.max) + } else if column.is_constrained { + column.max.max(cell.min) + } else { + column.min.max(cell.max) + }; + column.is_constrained |= cell.is_constrained; + + if let Some(percent) = cell.percent { + column.percent = Some(column.percent.map_or(percent, |p: f32| p.max(percent))); + } +} + +/// Sum the columns into the table's min-content and max-content grid widths +/// (). Percentages have nothing to +/// resolve against yet, so they act as constraints on the total instead: a column at `p` percent +/// whose content needs `w` forces a total of at least `w / p`, and columns without a percentage +/// have to fit in the `1 - Σp` the percentage columns leave behind. +fn grid_min_max(columns: &[Column], is_fixed: bool) -> (f32, f32) { + /// The width Blink hands a table whose columns claim the whole 100% + const UNBOUNDED_WIDTH: f32 = 1_000_000.0; + + let mut min = 0.0; + let mut max = 0.0; + let mut percent_estimate: f32 = 0.0; + let mut non_percent_max = 0.0; + let mut percent_sum = 0.0; + + for column in columns.iter() { + // A fixed table cannot shrink a specified column below its width + let is_fixed_column = column.is_constrained && column.percent.is_none(); + min += if is_fixed && is_fixed_column { column.max } else { column.min }; + max += column.max; + + match column.percent { + Some(percent) if percent > 0.0 => { + if column.max > 0.0 { + percent_estimate = percent_estimate.max(column.max / percent); + } + } + _ => non_percent_max += column.max, + } + percent_sum += column.percent.unwrap_or(0.0); + } + + percent_sum = percent_sum.min(1.0); + if percent_sum > 0.0 { + let from_percentages = if non_percent_max == 0.0 { + 0.0 + } else if percent_sum >= 1.0 { + UNBOUNDED_WIDTH + } else { + non_percent_max / (1.0 - percent_sum) + }; + max = max.max(from_percentages).max(percent_estimate); + } + + (min, max.max(min)) +} + +/// Resolve used column widths for `table-layout: auto` over `assignable`, the table's content +/// width minus all border-spacing. Implements the spec's width distribution algorithm +/// (): size every column four +/// ways, find the first sizing that reaches the target, and share the shortfall among the columns +/// that sizing was about to grow. +fn resolve_auto_layout_columns(columns: &mut [Column], assignable: f32) { + const MIN: usize = 0; + const PERCENTAGE: usize = 1; + const SPECIFIED: usize = 2; + const MAX: usize = 3; + + if columns.is_empty() { + return; + } + + let mut guess = [0.0f32; 4]; + // What each guess adds over the one before it, summed over the columns it grows + let mut growth = [0.0f32; 4]; + let (mut percent_count, mut fixed_count, mut auto_count) = (0usize, 0usize, 0usize); + let (mut percent_sum, mut fixed_max_sum, mut auto_max_sum) = (0.0f32, 0.0f32, 0.0f32); + + for column in columns.iter() { + guess[MIN] += column.min; + if let Some(percent) = column.percent { + let width = percent_width(column, assignable); + percent_count += 1; + percent_sum += percent; + guess[PERCENTAGE] += width; + guess[SPECIFIED] += width; + guess[MAX] += width; + growth[PERCENTAGE] += width - column.min; + } else if column.is_constrained { + fixed_count += 1; + fixed_max_sum += column.max; + guess[PERCENTAGE] += column.min; + guess[SPECIFIED] += column.max; + guess[MAX] += column.max; + growth[SPECIFIED] += column.max - column.min; + } else { + auto_count += 1; + auto_max_sum += column.max; + guess[PERCENTAGE] += column.min; + guess[SPECIFIED] += column.min; + guess[MAX] += column.max; + growth[MAX] += column.max - column.min; + } + } + + // Columns never go below their minimums, however narrow the table is + let target = assignable.max(guess[MIN]); + let mut shortfall = 0.0; + let mut last_grown = None; + + match (MIN..=MAX).find(|&i| guess[i] >= target) { + Some(MIN) => { + for column in columns.iter_mut() { + column.used = column.min; + } + } + // Percentage columns grow towards their percentage of the table + Some(PERCENTAGE) => { + let distributable = target - guess[MIN]; + shortfall = distributable; + for (index, column) in columns.iter_mut().enumerate() { + column.used = column.min; + if column.percent.is_some() { + let wanted = percent_width(column, target) - column.min; + let delta = if growth[PERCENTAGE] > 0.0 { + distributable * wanted / growth[PERCENTAGE] + } else { + distributable / percent_count as f32 + }; + column.used += delta; + shortfall -= delta; + last_grown = Some(index); + } + } + } + // Columns with a specified width grow towards it, auto columns stay at their minimum + Some(SPECIFIED) => { + let distributable = target - guess[PERCENTAGE]; + shortfall = distributable; + for (index, column) in columns.iter_mut().enumerate() { + if column.percent.is_some() { + column.used = percent_width(column, target); + } else if column.is_constrained { + let delta = if growth[SPECIFIED] > 0.0 { + distributable * (column.max - column.min) / growth[SPECIFIED] + } else { + distributable / fixed_count as f32 + }; + column.used = column.min + delta; + shortfall -= delta; + last_grown = Some(index); + } else { + column.used = column.min; + } + } + } + // Auto columns grow towards their max-content width + Some(_) => { + let distributable = target - guess[SPECIFIED]; + // An exact match usually means an auto-width table, where handing out max-content + // widths directly avoids rounding a column into wrapping its content + let is_exact_match = target == guess[MAX]; + shortfall = if is_exact_match { 0.0 } else { distributable }; + + for (index, column) in columns.iter_mut().enumerate() { + if column.percent.is_some() { + column.used = percent_width(column, target); + } else if column.is_constrained || is_exact_match { + column.used = column.max; + } else { + let delta = if growth[MAX] > 0.0 { + distributable * (column.max - column.min) / growth[MAX] + } else { + distributable / auto_count as f32 + }; + column.used = column.min + delta; + shortfall -= delta; + last_grown = Some(index); + } + } + } + // Wider than every column's max-content width, so one category soaks up the rest + None => { + let distributable = target - guess[MAX]; + shortfall = distributable; + + for (index, column) in columns.iter_mut().enumerate() { + let percent = column.percent; + let (weight, weight_sum, count) = if auto_count > 0 { + (column.max, auto_max_sum, auto_count) + } else if fixed_count > 0 { + (column.max, fixed_max_sum, fixed_count) + } else { + (percent.unwrap_or(0.0), percent_sum, percent_count) + }; + let grows = match (percent, column.is_constrained) { + (Some(_), _) => auto_count == 0 && fixed_count == 0, + (None, true) => auto_count == 0, + (None, false) => true, + }; + + column.used = if percent.is_some() { percent_width(column, target) } else { column.max }; + if grows { + let delta = if weight_sum > 0.0 { + distributable * weight / weight_sum + } else { + distributable / count as f32 + }; + column.used += delta; + shortfall -= delta; + last_grown = Some(index); + } + } + } + } + + // Rounding leaves the columns a hair short of the table, which the last one takes up + if let Some(index) = last_grown { + columns[index].used += shortfall; + } +} + +/// Resolve used column widths for `table-layout: fixed`: columns with a specified width take it, +/// percentage columns share out what is left, and auto columns split whatever remains +fn resolve_fixed_layout_columns(columns: &mut [Column], assignable: f32) { + // Every browser treats a zero-width column as auto + let is_fixed_column = |column: &Column| column.is_constrained && column.percent.is_none() && column.max > 0.0; + let is_zero_width = |column: &Column| column.is_constrained && column.percent.is_none() && column.max == 0.0; + + let fixed_count = columns.iter().filter(|c| is_fixed_column(c)).count(); + let percent_count = columns.iter().filter(|c| c.percent.is_some()).count(); + let zero_width_count = columns.iter().filter(|c| is_zero_width(c)).count(); + let auto_count = columns.len() - fixed_count - percent_count - zero_width_count; + + let fixed_sum: f32 = columns.iter().filter(|c| is_fixed_column(c)).map(|c| c.max).sum(); + let percent_sum: f32 = columns.iter().filter(|c| c.percent.is_some()).map(|c| percent_width(c, assignable)).sum(); + + let mut assigned = 0.0; + let mut last = None; + + if fixed_count > 0 { + // Columns with a specified width only stretch when nothing else can take the space + let target = (assignable - percent_sum).max(0.0); + let rescale = (fixed_sum < target && auto_count == 0) || fixed_sum > assignable; + let scale = if rescale && fixed_sum > 0.0 { target / fixed_sum } else { 1.0 }; + + for (index, column) in columns.iter_mut().enumerate().filter(|(_, c)| is_fixed_column(c)) { + column.used = scale * column.max; + assigned += column.used; + last = Some(index); + } + } + + if percent_count > 0 && assigned < assignable { + let target = assignable - assigned; + let rescale = (percent_sum < target && auto_count == 0) || percent_sum > target; + let scale = if rescale && percent_sum > 0.0 { target / percent_sum } else { 1.0 }; + + for (index, column) in columns.iter_mut().enumerate().filter(|(_, c)| c.percent.is_some()) { + column.used = if percent_sum > 0.0 { + scale * percent_width(column, assignable) + } else { + target / percent_count as f32 + }; + assigned += column.used; + last = Some(index); + } + } + + // Zero-width columns only grow when there is nothing else left to grow + let grow_zero_width = zero_width_count == columns.len(); + let share_count = if grow_zero_width { zero_width_count } else { auto_count }; + let remaining = assignable - assigned; + + for (index, column) in columns.iter_mut().enumerate() { + if column.percent.is_some() || is_fixed_column(column) || (is_zero_width(column) && !grow_zero_width) { + continue; + } + column.used = remaining / share_count as f32; + assigned += column.used; + last = Some(index); + } + + if let Some(index) = last { + columns[index].used += assignable - assigned; + } +} + +/// Write a positioned layout for a non-cell table item (row or row group) +fn set_item_layout( + tree: &mut impl LayoutTableContainer, + node_id: NodeId, + order: u32, + location: Point, + size: Size, + parent_width: Option, +) { + let style = tree.get_table_child_style(node_id); + let padding = style.padding().resolve_or_zero(parent_width, |v, b| tree.calc(v, b)); + let border = style.border().resolve_or_zero(parent_width, |v, b| tree.calc(v, b)); + drop(style); + + tree.set_unrounded_layout( + node_id, + &Layout { + order, + location, + size, + #[cfg(feature = "content_size")] + scrollable_overflow_rect: Rect { left: 0.0, right: size.width, top: 0.0, bottom: size.height }, + scrollbar_size: Size::ZERO, + padding, + border, + margin: Rect::ZERO, + }, + ); +} diff --git a/src/lib.rs b/src/lib.rs index 51f6ba1df..17988b4e6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -106,6 +106,9 @@ pub use crate::compute::compute_flexbox_layout; #[cfg(feature = "grid")] #[doc(inline)] pub use crate::compute::compute_grid_layout; +#[cfg(feature = "table_layout")] +#[doc(inline)] +pub use crate::compute::compute_table_layout; #[cfg(feature = "detailed_layout_info")] pub use crate::compute::detailed_info::*; #[doc(inline)] diff --git a/src/style/mod.rs b/src/style/mod.rs index 49efff965..7ac0c107a 100644 --- a/src/style/mod.rs +++ b/src/style/mod.rs @@ -12,6 +12,8 @@ mod flex; mod float; #[cfg(feature = "grid")] mod grid; +#[cfg(feature = "table_layout")] +mod table; pub use self::alignment::{ AlignContent, AlignContentKeyword, AlignItems, AlignItemsKeyword, AlignSelf, AlignmentSafety, JustifyContent, @@ -40,6 +42,8 @@ pub(crate) use self::grid::{GridAreaAxis, GridAreaEnd}; pub use self::grid::{GridTemplateArea, GridTemplateAreas, NamedGridLine, TemplateLineNames}; #[cfg(feature = "grid")] pub(crate) use self::grid::{NonNamedGridPlacement, OriginZeroGridPlacement}; +#[cfg(feature = "table_layout")] +pub use self::table::{TableContainerStyle, TableItemStyle, TableLayout, TableRole}; use crate::geometry::{Point, Rect, Size}; use crate::style_helpers::TaffyAuto as _; @@ -198,6 +202,18 @@ pub enum Display { /// The children will follow the CSS Grid layout algorithm #[cfg(feature = "grid")] Grid, + /// The children will follow the CSS Table layout algorithm + #[cfg(feature = "table_layout")] + Table, + /// A row group within a table (thead, tbody, tfoot). Laid out by the parent table. + #[cfg(feature = "table_layout")] + TableRowGroup, + /// A row within a table. Laid out by the parent table. + #[cfg(feature = "table_layout")] + TableRow, + /// A cell within a table row. The cell's content follows the block layout algorithm. + #[cfg(feature = "table_layout")] + TableCell, /// The node is hidden, and it's children will also be hidden None, } @@ -237,6 +253,14 @@ crate::util::parse::impl_parse_for_keyword_enum!(Display, "block" => Block, #[cfg(feature = "block_layout")] "flow-root" => FlowRoot, + #[cfg(feature = "table_layout")] + "table" => Table, + #[cfg(feature = "table_layout")] + "table-row-group" => TableRowGroup, + #[cfg(feature = "table_layout")] + "table-row" => TableRow, + #[cfg(feature = "table_layout")] + "table-cell" => TableCell, ); impl core::fmt::Display for Display { @@ -251,6 +275,14 @@ impl core::fmt::Display for Display { Display::Flex => write!(f, "FLEX"), #[cfg(feature = "grid")] Display::Grid => write!(f, "GRID"), + #[cfg(feature = "table_layout")] + Display::Table => write!(f, "TABLE"), + #[cfg(feature = "table_layout")] + Display::TableRowGroup => write!(f, "TABLE-ROW-GROUP"), + #[cfg(feature = "table_layout")] + Display::TableRow => write!(f, "TABLE-ROW"), + #[cfg(feature = "table_layout")] + Display::TableCell => write!(f, "TABLE-CELL"), } } } @@ -535,6 +567,23 @@ pub struct Style { #[cfg(feature = "block_layout")] pub text_align: TextAlign, + // Table container properties + /// Which column sizing algorithm to use + #[cfg(feature = "table_layout")] + pub table_layout: TableLayout, + /// The distance between adjacent cell borders + #[cfg(feature = "table_layout")] + #[cfg_attr(feature = "serde", serde(default = "style_helpers::zero"))] + pub border_spacing: Size, + + // Table cell properties + /// The number of columns this cell spans + #[cfg(feature = "table_layout")] + pub colspan: u16, + /// The number of rows this cell spans + #[cfg(feature = "table_layout")] + pub rowspan: u16, + // Flexbox container properties /// Which direction does the main axis flow in? #[cfg(feature = "flexbox")] @@ -645,6 +694,15 @@ impl Style { // Block #[cfg(feature = "block_layout")] text_align: TextAlign::Auto, + // Table + #[cfg(feature = "table_layout")] + table_layout: TableLayout::Auto, + #[cfg(feature = "table_layout")] + border_spacing: Size::zero(), + #[cfg(feature = "table_layout")] + colspan: 1, + #[cfg(feature = "table_layout")] + rowspan: 1, // Flexbox #[cfg(feature = "flexbox")] flex_direction: FlexDirection::Row, @@ -860,6 +918,10 @@ impl BlockContainerStyle for &'_ T { impl BlockItemStyle for Style { #[inline(always)] fn is_table(&self) -> bool { + #[cfg(feature = "table_layout")] + if matches!(self.display, Display::Table) { + return true; + } self.item_is_table } @@ -1219,6 +1281,83 @@ impl GridItemStyle for Style { } } +#[cfg(feature = "table_layout")] +impl TableContainerStyle for Style { + #[inline(always)] + fn border_spacing(&self) -> Size { + self.border_spacing + } + + #[inline(always)] + fn table_layout(&self) -> TableLayout { + self.table_layout + } +} + +#[cfg(feature = "table_layout")] +impl TableContainerStyle for &'_ T { + #[inline(always)] + fn border_spacing(&self) -> Size { + (*self).border_spacing() + } + + #[inline(always)] + fn table_layout(&self) -> TableLayout { + (*self).table_layout() + } +} + +#[cfg(feature = "table_layout")] +impl TableItemStyle for Style { + #[inline(always)] + fn table_role(&self) -> TableRole { + match self.display { + Display::TableCell => TableRole::Cell, + Display::TableRow => TableRole::Row, + Display::TableRowGroup => TableRole::RowGroup, + _ => TableRole::Other, + } + } + + #[inline(always)] + fn align_content(&self) -> Option { + self.align_content + } + + #[inline(always)] + fn colspan(&self) -> u16 { + self.colspan + } + + #[inline(always)] + fn rowspan(&self) -> u16 { + self.rowspan + } +} + +#[cfg(feature = "table_layout")] +impl TableItemStyle for &'_ T { + #[inline(always)] + fn table_role(&self) -> TableRole { + (*self).table_role() + } + + #[inline(always)] + fn align_content(&self) -> Option { + (*self).align_content() + } + + #[inline(always)] + fn colspan(&self) -> u16 { + (*self).colspan() + } + + #[inline(always)] + fn rowspan(&self) -> u16 { + (*self).rowspan() + } +} + #[cfg(feature = "grid")] impl GridItemStyle for &'_ T { #[inline(always)] @@ -1291,6 +1430,14 @@ mod tests { gap: Size::zero(), #[cfg(feature = "block_layout")] text_align: Default::default(), + #[cfg(feature = "table_layout")] + table_layout: Default::default(), + #[cfg(feature = "table_layout")] + border_spacing: Size::zero(), + #[cfg(feature = "table_layout")] + colspan: 1, + #[cfg(feature = "table_layout")] + rowspan: 1, #[cfg(feature = "flexbox")] flex_grow: 0.0, #[cfg(feature = "flexbox")] @@ -1397,12 +1544,12 @@ mod tests { assert_type_size::>(56); assert_type_size::>(32); assert_type_size::>>(64); - assert_type_size::>(552); + assert_type_size::>(576); // String-type dependent (Arc) assert_type_size::>>(56); assert_type_size::>>(24); assert_type_size::>>>(48); - assert_type_size::>>(520); + assert_type_size::>>(544); } } diff --git a/src/style/table.rs b/src/style/table.rs new file mode 100644 index 000000000..d7758a300 --- /dev/null +++ b/src/style/table.rs @@ -0,0 +1,86 @@ +//! Style types for Table layout +use crate::geometry::Size; +use crate::style::{AlignContent, LengthPercentage}; +use crate::{CoreStyle, Style}; + +/// The value of the `table-layout` property, which selects the algorithm +/// used to resolve column widths. +/// +/// +#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] +pub enum TableLayout { + /// Column widths are derived from the content of all cells + #[default] + Auto, + /// Column widths are derived from the table's width and the first row of cells + Fixed, +} + +#[cfg(feature = "parse")] +crate::util::parse::impl_parse_for_keyword_enum!(TableLayout, + "auto" => Auto, + "fixed" => Fixed, +); + +/// The role a child node plays within a table, as determined by its `display` value. +/// +/// Taffy expects a well-formed table tree (table → row group / row → cell) as produced +/// by the box fixup described in . Fixup itself +/// is the responsibility of the code constructing the tree. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] +pub enum TableRole { + /// `display: table-cell` + #[default] + Cell, + /// `display: table-row` + Row, + /// `display: table-row-group` (thead, tbody, tfoot) + RowGroup, + /// Any other display value + Other, +} + +/// The set of styles required for a Table layout container +pub trait TableContainerStyle: CoreStyle { + /// The distance between adjacent cell borders (CSS `border-spacing`) + #[inline(always)] + fn border_spacing(&self) -> Size { + Style::::DEFAULT.border_spacing + } + + /// Which column sizing algorithm to use (CSS `table-layout`) + #[inline(always)] + fn table_layout(&self) -> TableLayout { + Style::::DEFAULT.table_layout + } +} + +/// The set of styles required for the descendants of a Table container +/// (row groups, rows, and cells) +pub trait TableItemStyle: CoreStyle { + /// The item's role within the table, derived from its `display` value + #[inline(always)] + fn table_role(&self) -> TableRole { + TableRole::Other + } + + /// How a cell aligns its content in the block axis. `None` means the cell takes part in + /// its row's baseline alignment + #[inline(always)] + fn align_content(&self) -> Option { + Style::::DEFAULT.align_content + } + + /// The number of columns this cell spans (HTML `colspan`) + #[inline(always)] + fn colspan(&self) -> u16 { + Style::::DEFAULT.colspan + } + + /// The number of rows this cell spans (HTML `rowspan`) + #[inline(always)] + fn rowspan(&self) -> u16 { + Style::::DEFAULT.rowspan + } +} diff --git a/src/tree/cache.rs b/src/tree/cache.rs index b4f5c49cc..770045a3b 100644 --- a/src/tree/cache.rs +++ b/src/tree/cache.rs @@ -92,6 +92,8 @@ struct CacheKey { /// Whether each known dimension is definite. Normalized such that an axis /// without a known dimension is always `true`. known_dimensions_are_definite: Size, + /// The block-start content offset (bit pattern), see [`LayoutInput::content_offset_y`] + content_offset_y: u32, } impl CacheKey { @@ -124,6 +126,7 @@ impl From<&LayoutInput> for CacheKey { known_dimensions_are_definite: input .known_dimensions_are_definite .zip_map(input.known_dimensions, |is_definite, kd| is_definite || kd.is_none()), + content_offset_y: input.content_offset_y.to_bits(), } } } @@ -237,6 +240,7 @@ impl Cache { if entry.key.kd_available_space == key.kd_available_space && entry.key.known_dimensions_are_definite == key.known_dimensions_are_definite && (entry.key.x_axis_parent_size() == key.x_axis_parent_size()) + && entry.key.content_offset_y == key.content_offset_y { return Some(LayoutOutput::from_outer_size(entry.content)); } diff --git a/src/tree/layout.rs b/src/tree/layout.rs index 507c25001..79007cbee 100644 --- a/src/tree/layout.rs +++ b/src/tree/layout.rs @@ -144,6 +144,10 @@ pub struct LayoutInput { pub available_space: Size, /// Specific to CSS Block layout. Used for correctly computing margin collapsing. You probably want to set this to `Line::FALSE`. pub vertical_margins_are_collapsible: Line, + /// Offset applied to the block-start edge of the node's content box, shifting its in-flow + /// content downwards. Used by table layout to implement cell baseline alignment. Only + /// meaningful when the node's height is known. You probably want to set this to `0.0`. + pub content_offset_y: f32, } impl LayoutInput { @@ -159,6 +163,7 @@ impl LayoutInput { sizing_mode: SizingMode::InherentSize, axis: RequestedAxis::Both, vertical_margins_are_collapsible: Line::FALSE, + content_offset_y: 0.0, }; } diff --git a/src/tree/mod.rs b/src/tree/mod.rs index 226f5c592..ed01c6327 100644 --- a/src/tree/mod.rs +++ b/src/tree/mod.rs @@ -26,6 +26,9 @@ pub use traits::LayoutGridContainer; #[cfg(feature = "block_layout")] pub use traits::LayoutBlockContainer; +#[cfg(feature = "table_layout")] +pub use traits::LayoutTableContainer; + #[cfg(feature = "taffy_tree")] mod taffy_tree; #[cfg(feature = "taffy_tree")] diff --git a/src/tree/taffy_tree.rs b/src/tree/taffy_tree.rs index abba48561..94ee79ee8 100644 --- a/src/tree/taffy_tree.rs +++ b/src/tree/taffy_tree.rs @@ -28,6 +28,8 @@ use crate::{compute::compute_block_layout, LayoutBlockContainer}; use crate::{compute::compute_flexbox_layout, LayoutFlexboxContainer}; #[cfg(feature = "grid")] use crate::{compute::compute_grid_layout, LayoutGridContainer}; +#[cfg(feature = "table_layout")] +use crate::{compute::compute_table_layout, LayoutTableContainer}; #[cfg(all(feature = "detailed_layout_info", feature = "grid"))] use crate::compute::grid::DetailedGridInfo; @@ -248,6 +250,14 @@ impl PrintTree for TaffyTree { } #[cfg(feature = "grid")] (_, Display::Grid) => "GRID", + #[cfg(feature = "table_layout")] + (_, Display::Table) => "TABLE", + #[cfg(feature = "table_layout")] + (_, Display::TableRowGroup) => "TABLE-ROW-GROUP", + #[cfg(feature = "table_layout")] + (_, Display::TableRow) => "TABLE-ROW", + #[cfg(feature = "table_layout")] + (_, Display::TableCell) => "TABLE-CELL", } } @@ -317,6 +327,14 @@ where (Display::Flex, true) => compute_flexbox_layout(tree, node_id, inputs), #[cfg(feature = "grid")] (Display::Grid, true) => compute_grid_layout(tree, node_id, inputs), + #[cfg(feature = "table_layout")] + (Display::Table, true) => compute_table_layout(tree, node_id, inputs), + // Cells are block containers. Rows and row groups are laid out by their parent + // table; one encountered here is outside a table, so fall back to block layout. + #[cfg(feature = "table_layout")] + (Display::TableCell | Display::TableRow | Display::TableRowGroup, true) => { + compute_block_layout(tree, node_id, inputs, None) + } (_, false) => { let node_key = node_id.into(); let style = &tree.taffy.nodes[node_key].style; @@ -451,6 +469,31 @@ where } } +#[cfg(feature = "table_layout")] +impl LayoutTableContainer for TaffyView<'_, NodeContext, MeasureFunction> +where + MeasureFunction: FnMut(LayoutInput, NodeId, Option<&mut NodeContext>, &Style) -> LayoutOutput, +{ + type TableContainerStyle<'a> + = &'a Style + where + Self: 'a; + type TableItemStyle<'a> + = &'a Style + where + Self: 'a; + + #[inline(always)] + fn get_table_container_style(&self, node_id: NodeId) -> Self::TableContainerStyle<'_> { + self.get_core_container_style(node_id) + } + + #[inline(always)] + fn get_table_child_style(&self, child_node_id: NodeId) -> Self::TableItemStyle<'_> { + self.get_core_container_style(child_node_id) + } +} + #[cfg(feature = "flexbox")] impl LayoutFlexboxContainer for TaffyView<'_, NodeContext, MeasureFunction> where diff --git a/src/tree/traits.rs b/src/tree/traits.rs index eb1a36069..4a642544c 100644 --- a/src/tree/traits.rs +++ b/src/tree/traits.rs @@ -26,7 +26,7 @@ //! //! | Trait | Requires | Enables | //! | --- | --- | --- | -//! | [`LayoutPartialTree`] | [`TraversePartialTree`] | [`compute_flexbox_layout`](crate::compute_flexbox_layout)
[`compute_grid_layout`](crate::compute_grid_layout)
[`compute_block_layout`](crate::compute_block_layout)
[`compute_root_layout`](crate::compute_root_layout)
[`compute_leaf_layout`](crate::compute_leaf_layout)
[`compute_hidden_layout`](crate::compute_hidden_layout)
[`compute_cached_layout`](crate::compute_cached_layout) | +//! | [`LayoutPartialTree`] | [`TraversePartialTree`] | [`compute_flexbox_layout`](crate::compute_flexbox_layout)
[`compute_grid_layout`](crate::compute_grid_layout)
[`compute_block_layout`](crate::compute_block_layout)
[`compute_table_layout`](crate::compute_table_layout)
[`compute_root_layout`](crate::compute_root_layout)
[`compute_leaf_layout`](crate::compute_leaf_layout)
[`compute_hidden_layout`](crate::compute_hidden_layout)
[`compute_cached_layout`](crate::compute_cached_layout) | //! | [`RoundTree`] | [`TraverseTree`] | [`round_layout`](crate::round_layout) | //! | [`PrintTree`] | [`TraverseTree`] | [`print_tree`](crate::print_tree) | //! @@ -66,7 +66,7 @@ //! ### LayoutPartialTree //! //! **Requires:** `TraversePartialTree`
-//! **Enables:** Flexbox, Grid, Block and Leaf layout algorithms from the [`crate::compute`] module +//! **Enables:** Flexbox, Grid, Block, Table and Leaf layout algorithms from the [`crate::compute`] module //! //! Any type that implements [`LayoutPartialTree`] can be laid out using [Taffy's algorithms](crate::compute) //! @@ -138,6 +138,8 @@ use crate::style::{GridContainerStyle, GridItemStyle}; use crate::CheapCloneStr; #[cfg(feature = "block_layout")] use crate::{BlockContainerStyle, BlockContext, BlockItemStyle}; +#[cfg(feature = "table_layout")] +use crate::{TableContainerStyle, TableItemStyle}; #[cfg(all(feature = "grid", feature = "detailed_layout_info"))] use crate::compute::grid::DetailedGridInfo; @@ -314,6 +316,27 @@ pub trait LayoutBlockContainer: LayoutPartialTree { } } +#[cfg(feature = "table_layout")] +/// Extends [`LayoutPartialTree`] with getters for the styles required for CSS Table layout. +/// Table layout reaches past its own children into the rows and cells below them, so the tree +/// must also be traversable to any depth. +pub trait LayoutTableContainer: LayoutPartialTree + TraverseTree { + /// The style type representing the CSS Table container's styles + type TableContainerStyle<'a>: TableContainerStyle + where + Self: 'a; + /// The style type representing the styles of the table's descendants (row groups, rows, and cells) + type TableItemStyle<'a>: TableItemStyle + where + Self: 'a; + + /// Get the container's styles + fn get_table_container_style(&self, node_id: NodeId) -> Self::TableContainerStyle<'_>; + + /// Get the child's styles + fn get_table_child_style(&self, child_node_id: NodeId) -> Self::TableItemStyle<'_>; +} + // --- PRIVATE TRAITS /// A private trait which allows us to add extra convenience methods to types which implement @@ -343,6 +366,7 @@ pub(crate) trait LayoutPartialTreeExt: LayoutPartialTree { axis: axis.into(), run_mode: RunMode::ComputeSize, vertical_margins_are_collapsible, + content_offset_y: 0.0, }, ) .size @@ -372,6 +396,7 @@ pub(crate) trait LayoutPartialTreeExt: LayoutPartialTree { axis: RequestedAxis::Both, run_mode: RunMode::ComputeSize, vertical_margins_are_collapsible, + content_offset_y: 0.0, }, ) .size @@ -399,6 +424,7 @@ pub(crate) trait LayoutPartialTreeExt: LayoutPartialTree { axis: RequestedAxis::Both, run_mode: RunMode::PerformLayout, vertical_margins_are_collapsible, + content_offset_y: 0.0, }, ) } diff --git a/test_fixtures/table/table_align_baseline_padding.html b/test_fixtures/table/table_align_baseline_padding.html new file mode 100644 index 000000000..959f719a9 --- /dev/null +++ b/test_fixtures/table/table_align_baseline_padding.html @@ -0,0 +1,22 @@ + + + + + + + Baseline alignment of cells with different padding + + + + +
+
+
+
HH
+
HH
+
+
+
+ + + diff --git a/test_fixtures/table/table_align_middle_all.html b/test_fixtures/table/table_align_middle_all.html new file mode 100644 index 000000000..efc1b6612 --- /dev/null +++ b/test_fixtures/table/table_align_middle_all.html @@ -0,0 +1,22 @@ + + + + + + + align-content center on every cell of a tall row + + + + +
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_align_top_with_row_height.html b/test_fixtures/table/table_align_top_with_row_height.html new file mode 100644 index 000000000..b9500814c --- /dev/null +++ b/test_fixtures/table/table_align_top_with_row_height.html @@ -0,0 +1,22 @@ + + + + + + + align-content start in a row taller than its cells + + + + +
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_align_vertical_mixed.html b/test_fixtures/table/table_align_vertical_mixed.html new file mode 100644 index 000000000..3d8bd65f1 --- /dev/null +++ b/test_fixtures/table/table_align_vertical_mixed.html @@ -0,0 +1,23 @@ + + + + + + + align-content start, center and end in one row + + + + +
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_auto_all_percent_surplus.html b/test_fixtures/table/table_auto_all_percent_surplus.html new file mode 100644 index 000000000..163046f34 --- /dev/null +++ b/test_fixtures/table/table_auto_all_percent_surplus.html @@ -0,0 +1,16 @@ + + + + + + table_auto_all_percent_surplus + + + + + + + +
+ + diff --git a/test_fixtures/table/table_auto_column_constrained_by_length.html b/test_fixtures/table/table_auto_column_constrained_by_length.html new file mode 100644 index 000000000..21b32d9fb --- /dev/null +++ b/test_fixtures/table/table_auto_column_constrained_by_length.html @@ -0,0 +1,18 @@ + + + + + + Length cell and a wrappable cell in the same column + + + + + + + + +
X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​
+ + + diff --git a/test_fixtures/table/table_auto_fixed_and_auto_column.html b/test_fixtures/table/table_auto_fixed_and_auto_column.html new file mode 100644 index 000000000..fed10da18 --- /dev/null +++ b/test_fixtures/table/table_auto_fixed_and_auto_column.html @@ -0,0 +1,16 @@ + + + + + + table_auto_fixed_and_auto_column + + + + + + + +
+ + diff --git a/test_fixtures/table/table_auto_percent_column_over_min.html b/test_fixtures/table/table_auto_percent_column_over_min.html new file mode 100644 index 000000000..786310045 --- /dev/null +++ b/test_fixtures/table/table_auto_percent_column_over_min.html @@ -0,0 +1,16 @@ + + + + + + table_auto_percent_column_over_min + + + + + + + +
+ + diff --git a/test_fixtures/table/table_baseline_empty_block_fallback.html b/test_fixtures/table/table_baseline_empty_block_fallback.html new file mode 100644 index 000000000..29a7637d9 --- /dev/null +++ b/test_fixtures/table/table_baseline_empty_block_fallback.html @@ -0,0 +1,26 @@ + + + + + + + Cells without line boxes synthesize their baseline from the bottom content edge + + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_baseline_fallback_end_padding.html b/test_fixtures/table/table_baseline_fallback_end_padding.html new file mode 100644 index 000000000..e8ada70dc --- /dev/null +++ b/test_fixtures/table/table_baseline_fallback_end_padding.html @@ -0,0 +1,21 @@ + + + + + + Table baseline synthesized from cells with no content + + + +
+
+ + + + + +
+
+ + + diff --git a/test_fixtures/table/table_baseline_mixed_with_top.html b/test_fixtures/table/table_baseline_mixed_with_top.html new file mode 100644 index 000000000..aebb45d25 --- /dev/null +++ b/test_fixtures/table/table_baseline_mixed_with_top.html @@ -0,0 +1,29 @@ + + + + + + + Only baseline cells participate: an align-content start cell keeps its content at the top + + + + +
+
+
+
+
HH
+
+
+
HH
+
+
+
HH
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_baseline_padding_shift.html b/test_fixtures/table/table_baseline_padding_shift.html new file mode 100644 index 000000000..6247cd5b8 --- /dev/null +++ b/test_fixtures/table/table_baseline_padding_shift.html @@ -0,0 +1,26 @@ + + + + + + + Default baseline alignment: cell with padding-top pulls the other cell's content down + + + + +
+
+
+
+
HH
+
+
+
HH
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_baseline_row_height_growth.html b/test_fixtures/table/table_baseline_row_height_growth.html new file mode 100644 index 000000000..941057276 --- /dev/null +++ b/test_fixtures/table/table_baseline_row_height_growth.html @@ -0,0 +1,26 @@ + + + + + + + Baseline alignment can make the row taller than any single cell + + + + +
+
+
+
+
HH
+
+
+
HH
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_baseline_table_in_flex.html b/test_fixtures/table/table_baseline_table_in_flex.html new file mode 100644 index 000000000..af062fcbb --- /dev/null +++ b/test_fixtures/table/table_baseline_table_in_flex.html @@ -0,0 +1,26 @@ + + + + + + + A table's baseline is the baseline of its first row, used by flex baseline alignment + + + + +
+
HH
+
+
+
+
+
HH
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_basic_cell_padding_border.html b/test_fixtures/table/table_basic_cell_padding_border.html new file mode 100644 index 000000000..0ae0148e8 --- /dev/null +++ b/test_fixtures/table/table_basic_cell_padding_border.html @@ -0,0 +1,21 @@ + + + + + + + Cell with padding and border + + + + +
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_basic_cell_text.html b/test_fixtures/table/table_basic_cell_text.html new file mode 100644 index 000000000..17dfab238 --- /dev/null +++ b/test_fixtures/table/table_basic_cell_text.html @@ -0,0 +1,21 @@ + + + + + + + Cell sized by its text content + + + + +
+
+
+
HH​HH
+
+
+
+ + + diff --git a/test_fixtures/table/table_basic_empty.html b/test_fixtures/table/table_basic_empty.html new file mode 100644 index 000000000..37de72f8b --- /dev/null +++ b/test_fixtures/table/table_basic_empty.html @@ -0,0 +1,15 @@ + + + + + + + Table with no rows + + + + +
+ + + diff --git a/test_fixtures/table/table_basic_fixed_size.html b/test_fixtures/table/table_basic_fixed_size.html new file mode 100644 index 000000000..ea056995c --- /dev/null +++ b/test_fixtures/table/table_basic_fixed_size.html @@ -0,0 +1,21 @@ + + + + + + + Table with an explicit width and height and one auto cell + + + + +
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_basic_single_cell.html b/test_fixtures/table/table_basic_single_cell.html new file mode 100644 index 000000000..abcdceec1 --- /dev/null +++ b/test_fixtures/table/table_basic_single_cell.html @@ -0,0 +1,21 @@ + + + + + + + Single row with a single fixed-size cell + + + + +
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_basic_single_row_three_cells.html b/test_fixtures/table/table_basic_single_row_three_cells.html new file mode 100644 index 000000000..a84265d48 --- /dev/null +++ b/test_fixtures/table/table_basic_single_row_three_cells.html @@ -0,0 +1,23 @@ + + + + + + + One row with three cells of differing fixed widths + + + + +
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_basic_two_by_two.html b/test_fixtures/table/table_basic_two_by_two.html new file mode 100644 index 000000000..2612527bf --- /dev/null +++ b/test_fixtures/table/table_basic_two_by_two.html @@ -0,0 +1,26 @@ + + + + + + + Two by two grid of equally sized cells + + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_colspan_auto_columns.html b/test_fixtures/table/table_colspan_auto_columns.html new file mode 100644 index 000000000..318bb92b1 --- /dev/null +++ b/test_fixtures/table/table_colspan_auto_columns.html @@ -0,0 +1,25 @@ + + + + + + + colspan 2 over two auto columns + + + + + + + + + + + + + + +
HHHHHH
HHHH
+ + + diff --git a/test_fixtures/table/table_colspan_fixed_columns.html b/test_fixtures/table/table_colspan_fixed_columns.html new file mode 100644 index 000000000..f4fd62dff --- /dev/null +++ b/test_fixtures/table/table_colspan_fixed_columns.html @@ -0,0 +1,25 @@ + + + + + + + colspan 2 over two fixed width columns + + + + + + + + + + + + + + +
+ + + diff --git a/test_fixtures/table/table_colspan_full_row.html b/test_fixtures/table/table_colspan_full_row.html new file mode 100644 index 000000000..0fe8acda4 --- /dev/null +++ b/test_fixtures/table/table_colspan_full_row.html @@ -0,0 +1,26 @@ + + + + + + + colspan covering every column of the table + + + + + + + + + + + + + + + +
HHHHHHHH
+ + + diff --git a/test_fixtures/table/table_colspan_over_active_rowspan.html b/test_fixtures/table/table_colspan_over_active_rowspan.html new file mode 100644 index 000000000..ee3a56957 --- /dev/null +++ b/test_fixtures/table/table_colspan_over_active_rowspan.html @@ -0,0 +1,29 @@ + + + + + + + Colspanning cell overlapping a cell that still spans later rows + + + + + + + + + + + + + + + + + + +
+ + + diff --git a/test_fixtures/table/table_colspan_percent_width.html b/test_fixtures/table/table_colspan_percent_width.html new file mode 100644 index 000000000..10299544a --- /dev/null +++ b/test_fixtures/table/table_colspan_percent_width.html @@ -0,0 +1,27 @@ + + + + + + + Percentage width on a colspanning cell constrains the columns it spans + + + + + + + + + + + + + + + + +
+ + + diff --git a/test_fixtures/table/table_colspan_two_of_three.html b/test_fixtures/table/table_colspan_two_of_three.html new file mode 100644 index 000000000..d37dfb2bf --- /dev/null +++ b/test_fixtures/table/table_colspan_two_of_three.html @@ -0,0 +1,27 @@ + + + + + + + colspan 2 over the first two of three columns + + + + + + + + + + + + + + + + +
+ + + diff --git a/test_fixtures/table/table_colspan_wider_than_columns.html b/test_fixtures/table/table_colspan_wider_than_columns.html new file mode 100644 index 000000000..bb9ef8ff2 --- /dev/null +++ b/test_fixtures/table/table_colspan_wider_than_columns.html @@ -0,0 +1,25 @@ + + + + + + + colspan cell wider than the sum of the spanned columns + + + + + + + + + + + + + + +
+ + + diff --git a/test_fixtures/table/table_colspan_with_border_spacing.html b/test_fixtures/table/table_colspan_with_border_spacing.html new file mode 100644 index 000000000..f5d762caf --- /dev/null +++ b/test_fixtures/table/table_colspan_with_border_spacing.html @@ -0,0 +1,25 @@ + + + + + + + colspan 2 with non-zero border-spacing + + + + + + + + + + + + + + +
+ + + diff --git a/test_fixtures/table/table_colspan_with_percent_column.html b/test_fixtures/table/table_colspan_with_percent_column.html new file mode 100644 index 000000000..5cc70ade5 --- /dev/null +++ b/test_fixtures/table/table_colspan_with_percent_column.html @@ -0,0 +1,25 @@ + + + + + + + colspan 2 over percentage width columns + + + + + + + + + + + + + + +
+ + + diff --git a/test_fixtures/table/table_column_width_auto_content.html b/test_fixtures/table/table_column_width_auto_content.html new file mode 100644 index 000000000..38a658c0c --- /dev/null +++ b/test_fixtures/table/table_column_width_auto_content.html @@ -0,0 +1,22 @@ + + + + + + + Auto columns sized by cells with different text lengths + + + + +
+
+
+
HH
+
HHHH
+
+
+
+ + + diff --git a/test_fixtures/table/table_column_width_auto_three_columns_text.html b/test_fixtures/table/table_column_width_auto_three_columns_text.html new file mode 100644 index 000000000..4ef317749 --- /dev/null +++ b/test_fixtures/table/table_column_width_auto_three_columns_text.html @@ -0,0 +1,23 @@ + + + + + + + Three auto columns each sized by their own text + + + + +
+
+
+
HH
+
HHHH
+
HHHHHH
+
+
+
+ + + diff --git a/test_fixtures/table/table_column_width_fixed_px.html b/test_fixtures/table/table_column_width_fixed_px.html new file mode 100644 index 000000000..de9e4759a --- /dev/null +++ b/test_fixtures/table/table_column_width_fixed_px.html @@ -0,0 +1,22 @@ + + + + + + + Columns sized by explicit pixel widths on cells + + + + +
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_column_width_max_across_rows.html b/test_fixtures/table/table_column_width_max_across_rows.html new file mode 100644 index 000000000..0aed598d0 --- /dev/null +++ b/test_fixtures/table/table_column_width_max_across_rows.html @@ -0,0 +1,26 @@ + + + + + + + Column width is the max of the cell widths in that column + + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_column_width_max_width.html b/test_fixtures/table/table_column_width_max_width.html new file mode 100644 index 000000000..286dfd983 --- /dev/null +++ b/test_fixtures/table/table_column_width_max_width.html @@ -0,0 +1,22 @@ + + + + + + + max-width on the table narrows the columns + + + + +
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_column_width_min_width.html b/test_fixtures/table/table_column_width_min_width.html new file mode 100644 index 000000000..1e34f326d --- /dev/null +++ b/test_fixtures/table/table_column_width_min_width.html @@ -0,0 +1,22 @@ + + + + + + + min-width on the table widens the columns + + + + +
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_column_width_mixed.html b/test_fixtures/table/table_column_width_mixed.html new file mode 100644 index 000000000..5e342e87b --- /dev/null +++ b/test_fixtures/table/table_column_width_mixed.html @@ -0,0 +1,23 @@ + + + + + + + Fixed, percentage and auto columns in one table + + + + +
+
+
+
+
+
HHHH
+
+
+
+ + + diff --git a/test_fixtures/table/table_column_width_percent.html b/test_fixtures/table/table_column_width_percent.html new file mode 100644 index 000000000..ff9026c30 --- /dev/null +++ b/test_fixtures/table/table_column_width_percent.html @@ -0,0 +1,22 @@ + + + + + + + Percentage cell widths against a fixed table width + + + + +
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_column_width_percent_and_auto_extra_space.html b/test_fixtures/table/table_column_width_percent_and_auto_extra_space.html new file mode 100644 index 000000000..3ea7134fa --- /dev/null +++ b/test_fixtures/table/table_column_width_percent_and_auto_extra_space.html @@ -0,0 +1,22 @@ + + + + + + + Percentage column beside an auto column with spare space + + + + +
+
+
+
+
HH
+
+
+
+ + + diff --git a/test_fixtures/table/table_column_width_table_narrower_than_max_content.html b/test_fixtures/table/table_column_width_table_narrower_than_max_content.html new file mode 100644 index 000000000..4622f3bc6 --- /dev/null +++ b/test_fixtures/table/table_column_width_table_narrower_than_max_content.html @@ -0,0 +1,22 @@ + + + + + + + Table narrower than max-content shrinks columns toward min-content + + + + +
+
+
+
HHHH​HHHH
+
HHHH​HHHH
+
+
+
+ + + diff --git a/test_fixtures/table/table_column_width_table_wider_than_content.html b/test_fixtures/table/table_column_width_table_wider_than_content.html new file mode 100644 index 000000000..a2686ec7e --- /dev/null +++ b/test_fixtures/table/table_column_width_table_wider_than_content.html @@ -0,0 +1,22 @@ + + + + + + + Extra table width distributed over fixed columns + + + + +
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_fixed_layout_auto_width.html b/test_fixtures/table/table_fixed_layout_auto_width.html new file mode 100644 index 000000000..5bed26cf4 --- /dev/null +++ b/test_fixtures/table/table_fixed_layout_auto_width.html @@ -0,0 +1,22 @@ + + + + + + table_fixed_layout_auto_width + + + + + + + + + + + + + +
+ + diff --git a/test_fixtures/table/table_fixed_layout_first_row_widths.html b/test_fixtures/table/table_fixed_layout_first_row_widths.html new file mode 100644 index 000000000..ca7fb93ef --- /dev/null +++ b/test_fixtures/table/table_fixed_layout_first_row_widths.html @@ -0,0 +1,26 @@ + + + + + + + Fixed layout takes column widths from the first row + + + + +
+
+
+
+
+
+
+
HHHHHHHH
+
HH
+
+
+
+ + + diff --git a/test_fixtures/table/table_fixed_layout_later_row_overflow.html b/test_fixtures/table/table_fixed_layout_later_row_overflow.html new file mode 100644 index 000000000..0b9295196 --- /dev/null +++ b/test_fixtures/table/table_fixed_layout_later_row_overflow.html @@ -0,0 +1,16 @@ + + + + + + table_fixed_layout_later_row_overflow + + + + + + + +
+ + diff --git a/test_fixtures/table/table_fixed_layout_missing_cells_in_first_row.html b/test_fixtures/table/table_fixed_layout_missing_cells_in_first_row.html new file mode 100644 index 000000000..d816e4305 --- /dev/null +++ b/test_fixtures/table/table_fixed_layout_missing_cells_in_first_row.html @@ -0,0 +1,27 @@ + + + + + + + Fixed layout where the first row has fewer cells than later rows + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_fixed_layout_overflow_content.html b/test_fixtures/table/table_fixed_layout_overflow_content.html new file mode 100644 index 000000000..0dc37681b --- /dev/null +++ b/test_fixtures/table/table_fixed_layout_overflow_content.html @@ -0,0 +1,26 @@ + + + + + + + Fixed layout with content wider than its column + + + + +
+
+
+
+
+
+
+
HHHH​HHHH
+
HH
+
+
+
+ + + diff --git a/test_fixtures/table/table_fixed_layout_percent_columns.html b/test_fixtures/table/table_fixed_layout_percent_columns.html new file mode 100644 index 000000000..484351c20 --- /dev/null +++ b/test_fixtures/table/table_fixed_layout_percent_columns.html @@ -0,0 +1,26 @@ + + + + + + + Fixed layout with percentage columns in the first row + + + + +
+
+
+
+
+
+
+
HH
+
HH
+
+
+
+ + + diff --git a/test_fixtures/table/table_fixed_layout_percent_over_remainder.html b/test_fixtures/table/table_fixed_layout_percent_over_remainder.html new file mode 100644 index 000000000..08cf1f6a7 --- /dev/null +++ b/test_fixtures/table/table_fixed_layout_percent_over_remainder.html @@ -0,0 +1,16 @@ + + + + + + table_fixed_layout_percent_over_remainder + + + + + + + +
+ + diff --git a/test_fixtures/table/table_fixed_layout_with_border_spacing.html b/test_fixtures/table/table_fixed_layout_with_border_spacing.html new file mode 100644 index 000000000..5dcbef951 --- /dev/null +++ b/test_fixtures/table/table_fixed_layout_with_border_spacing.html @@ -0,0 +1,26 @@ + + + + + + + Fixed layout combined with border-spacing + + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_height_over_definite_and_auto_rows.html b/test_fixtures/table/table_height_over_definite_and_auto_rows.html new file mode 100644 index 000000000..52d4fc801 --- /dev/null +++ b/test_fixtures/table/table_height_over_definite_and_auto_rows.html @@ -0,0 +1,18 @@ + + + + + + Table height spread over a definite and an auto row + + + + + + + + +
+ + + diff --git a/test_fixtures/table/table_hidden_cell.html b/test_fixtures/table/table_hidden_cell.html new file mode 100644 index 000000000..e0f7eb8e2 --- /dev/null +++ b/test_fixtures/table/table_hidden_cell.html @@ -0,0 +1,27 @@ + + + + + + + A cell with display none contributes no column, and the cells after it shift over + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_hidden_row.html b/test_fixtures/table/table_hidden_row.html new file mode 100644 index 000000000..b23b77be0 --- /dev/null +++ b/test_fixtures/table/table_hidden_row.html @@ -0,0 +1,27 @@ + + + + + + + A row with display none takes up no height and contributes no columns + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_hidden_row_group.html b/test_fixtures/table/table_hidden_row_group.html new file mode 100644 index 000000000..537147368 --- /dev/null +++ b/test_fixtures/table/table_hidden_row_group.html @@ -0,0 +1,28 @@ + + + + + + + A row group with display none takes its rows out of the table + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_intrinsic_flex_item_max_content.html b/test_fixtures/table/table_intrinsic_flex_item_max_content.html new file mode 100644 index 000000000..e678f9f1a --- /dev/null +++ b/test_fixtures/table/table_intrinsic_flex_item_max_content.html @@ -0,0 +1,24 @@ + + + + + + + Table as a flex item sized to max-content + + + + +
+
+
+
+
HHHH​HHHH
+
HH
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_intrinsic_flex_item_min_content.html b/test_fixtures/table/table_intrinsic_flex_item_min_content.html new file mode 100644 index 000000000..3982e28a9 --- /dev/null +++ b/test_fixtures/table/table_intrinsic_flex_item_min_content.html @@ -0,0 +1,23 @@ + + + + + + + Table as a flex item squeezed toward min-content + + + + +
+
+
+
+
HHHH​HHHH
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_intrinsic_flex_item_stretch.html b/test_fixtures/table/table_intrinsic_flex_item_stretch.html new file mode 100644 index 000000000..3356cdd3e --- /dev/null +++ b/test_fixtures/table/table_intrinsic_flex_item_stretch.html @@ -0,0 +1,24 @@ + + + + + + + Table stretched by a flex column container + + + + +
+
+
+
+
HH
+
HH
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_intrinsic_width_with_percent_column.html b/test_fixtures/table/table_intrinsic_width_with_percent_column.html new file mode 100644 index 000000000..0907cccbf --- /dev/null +++ b/test_fixtures/table/table_intrinsic_width_with_percent_column.html @@ -0,0 +1,18 @@ + + + + + + Max-content table width with a percentage column + + + + + + + + +
+ + + diff --git a/test_fixtures/table/table_nested_block_content_in_cell.html b/test_fixtures/table/table_nested_block_content_in_cell.html new file mode 100644 index 000000000..ca9a0d85a --- /dev/null +++ b/test_fixtures/table/table_nested_block_content_in_cell.html @@ -0,0 +1,24 @@ + + + + + + + Multiple block children inside a cell + + + + +
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_nested_table_in_cell.html b/test_fixtures/table/table_nested_table_in_cell.html new file mode 100644 index 000000000..cd0320477 --- /dev/null +++ b/test_fixtures/table/table_nested_table_in_cell.html @@ -0,0 +1,30 @@ + + + + + + + Table nested inside a table cell + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_nested_table_in_cell_fixed.html b/test_fixtures/table/table_nested_table_in_cell_fixed.html new file mode 100644 index 000000000..dbf8e766c --- /dev/null +++ b/test_fixtures/table/table_nested_table_in_cell_fixed.html @@ -0,0 +1,30 @@ + + + + + + + Full width nested table inside a fixed width cell + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_nested_table_in_flex_item.html b/test_fixtures/table/table_nested_table_in_flex_item.html new file mode 100644 index 000000000..8cc7c28b5 --- /dev/null +++ b/test_fixtures/table/table_nested_table_in_flex_item.html @@ -0,0 +1,26 @@ + + + + + + + Table as the child of a flex item + + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_nested_table_in_grid_area.html b/test_fixtures/table/table_nested_table_in_grid_area.html new file mode 100644 index 000000000..7dd3ede3c --- /dev/null +++ b/test_fixtures/table/table_nested_table_in_grid_area.html @@ -0,0 +1,24 @@ + + + + + + + Table placed in a grid area + + + + +
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_nested_two_levels.html b/test_fixtures/table/table_nested_two_levels.html new file mode 100644 index 000000000..fd286ff27 --- /dev/null +++ b/test_fixtures/table/table_nested_two_levels.html @@ -0,0 +1,37 @@ + + + + + + + Table nested two levels deep + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_percent_cell_in_percent_table.html b/test_fixtures/table/table_percent_cell_in_percent_table.html new file mode 100644 index 000000000..a7287866e --- /dev/null +++ b/test_fixtures/table/table_percent_cell_in_percent_table.html @@ -0,0 +1,24 @@ + + + + + + + Percentage columns inside a percentage width table + + + + +
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_percent_columns_exactly_100.html b/test_fixtures/table/table_percent_columns_exactly_100.html new file mode 100644 index 000000000..47f513775 --- /dev/null +++ b/test_fixtures/table/table_percent_columns_exactly_100.html @@ -0,0 +1,23 @@ + + + + + + + Percentage columns summing to exactly 100% + + + + +
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_percent_columns_over_100.html b/test_fixtures/table/table_percent_columns_over_100.html new file mode 100644 index 000000000..ad00d9735 --- /dev/null +++ b/test_fixtures/table/table_percent_columns_over_100.html @@ -0,0 +1,23 @@ + + + + + + + Percentage columns summing to more than 100% + + + + +
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_percent_columns_unconstrained_parent.html b/test_fixtures/table/table_percent_columns_unconstrained_parent.html new file mode 100644 index 000000000..490d1fcb4 --- /dev/null +++ b/test_fixtures/table/table_percent_columns_unconstrained_parent.html @@ -0,0 +1,22 @@ + + + + + + + Percentage columns with no definite table width + + + + +
+
+
+
HH
+
HH
+
+
+
+ + + diff --git a/test_fixtures/table/table_percent_columns_under_100.html b/test_fixtures/table/table_percent_columns_under_100.html new file mode 100644 index 000000000..60feade2b --- /dev/null +++ b/test_fixtures/table/table_percent_columns_under_100.html @@ -0,0 +1,23 @@ + + + + + + + Percentage columns summing to less than 100% + + + + +
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_percent_table_width_in_fixed_parent.html b/test_fixtures/table/table_percent_table_width_in_fixed_parent.html new file mode 100644 index 000000000..4da613877 --- /dev/null +++ b/test_fixtures/table/table_percent_table_width_in_fixed_parent.html @@ -0,0 +1,23 @@ + + + + + + + Percentage table width inside a fixed width block + + + + +
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_row_group_column_widths_across_groups.html b/test_fixtures/table/table_row_group_column_widths_across_groups.html new file mode 100644 index 000000000..df137b6d1 --- /dev/null +++ b/test_fixtures/table/table_row_group_column_widths_across_groups.html @@ -0,0 +1,28 @@ + + + + + + + Column widths taken across separate row groups + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_row_group_multiple.html b/test_fixtures/table/table_row_group_multiple.html new file mode 100644 index 000000000..1f89e590f --- /dev/null +++ b/test_fixtures/table/table_row_group_multiple.html @@ -0,0 +1,31 @@ + + + + + + + Three row groups stacked in one table + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_row_group_spacing.html b/test_fixtures/table/table_row_group_spacing.html new file mode 100644 index 000000000..984a72328 --- /dev/null +++ b/test_fixtures/table/table_row_group_spacing.html @@ -0,0 +1,26 @@ + + + + + + + Vertical border-spacing between rows of separate groups + + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_row_group_specified_height.html b/test_fixtures/table/table_row_group_specified_height.html new file mode 100644 index 000000000..a995730a3 --- /dev/null +++ b/test_fixtures/table/table_row_group_specified_height.html @@ -0,0 +1,18 @@ + + + + + + Row group with a specified height taller than its rows + + + + + + + + +
+ + + diff --git a/test_fixtures/table/table_row_group_thead_tbody.html b/test_fixtures/table/table_row_group_thead_tbody.html new file mode 100644 index 000000000..ea73f0d7d --- /dev/null +++ b/test_fixtures/table/table_row_group_thead_tbody.html @@ -0,0 +1,28 @@ + + + + + + + Header and body row groups + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_row_height_cell_padding.html b/test_fixtures/table/table_row_height_cell_padding.html new file mode 100644 index 000000000..44fd46320 --- /dev/null +++ b/test_fixtures/table/table_row_height_cell_padding.html @@ -0,0 +1,22 @@ + + + + + + + Cell padding contributes to the row height + + + + +
+
+
+
HH
+
HH
+
+
+
+ + + diff --git a/test_fixtures/table/table_row_height_explicit_cell.html b/test_fixtures/table/table_row_height_explicit_cell.html new file mode 100644 index 000000000..31e70b23b --- /dev/null +++ b/test_fixtures/table/table_row_height_explicit_cell.html @@ -0,0 +1,21 @@ + + + + + + + Explicit height on a single cell + + + + +
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_row_height_explicit_row.html b/test_fixtures/table/table_row_height_explicit_row.html new file mode 100644 index 000000000..ee1b6aef5 --- /dev/null +++ b/test_fixtures/table/table_row_height_explicit_row.html @@ -0,0 +1,22 @@ + + + + + + + Explicit height on the row + + + + +
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_row_height_percent_cell.html b/test_fixtures/table/table_row_height_percent_cell.html new file mode 100644 index 000000000..1b4ad5d1b --- /dev/null +++ b/test_fixtures/table/table_row_height_percent_cell.html @@ -0,0 +1,21 @@ + + + + + + + Percentage cell height against a fixed table height + + + + +
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_row_height_table_taller_than_content.html b/test_fixtures/table/table_row_height_table_taller_than_content.html new file mode 100644 index 000000000..e182d208a --- /dev/null +++ b/test_fixtures/table/table_row_height_table_taller_than_content.html @@ -0,0 +1,24 @@ + + + + + + + Extra table height distributed over the rows + + + + +
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_row_height_taller_row_and_spacing.html b/test_fixtures/table/table_row_height_taller_row_and_spacing.html new file mode 100644 index 000000000..d274f7fd4 --- /dev/null +++ b/test_fixtures/table/table_row_height_taller_row_and_spacing.html @@ -0,0 +1,24 @@ + + + + + + + Extra table height distributed with vertical border-spacing + + + + +
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_row_height_tallest_cell.html b/test_fixtures/table/table_row_height_tallest_cell.html new file mode 100644 index 000000000..955494273 --- /dev/null +++ b/test_fixtures/table/table_row_height_tallest_cell.html @@ -0,0 +1,22 @@ + + + + + + + Row height comes from the tallest cell + + + + +
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_row_percent_height.html b/test_fixtures/table/table_row_percent_height.html new file mode 100644 index 000000000..331245b5d --- /dev/null +++ b/test_fixtures/table/table_row_percent_height.html @@ -0,0 +1,18 @@ + + + + + + Row with a percentage height inside a fixed-height table + + + + + + + + +
+ + + diff --git a/test_fixtures/table/table_rowspan_across_row_groups.html b/test_fixtures/table/table_rowspan_across_row_groups.html new file mode 100644 index 000000000..7d1dd0599 --- /dev/null +++ b/test_fixtures/table/table_rowspan_across_row_groups.html @@ -0,0 +1,23 @@ + + + + + + Rowspan reaching past the end of its row group + + + + + + + + + + + + + +
+ + + diff --git a/test_fixtures/table/table_rowspan_basic.html b/test_fixtures/table/table_rowspan_basic.html new file mode 100644 index 000000000..ea0e536ea --- /dev/null +++ b/test_fixtures/table/table_rowspan_basic.html @@ -0,0 +1,25 @@ + + + + + + + rowspan 2 in a two by two table + + + + + + + + + + + + + + +
+ + + diff --git a/test_fixtures/table/table_rowspan_cell_baseline.html b/test_fixtures/table/table_rowspan_cell_baseline.html new file mode 100644 index 000000000..2f2eb57fe --- /dev/null +++ b/test_fixtures/table/table_rowspan_cell_baseline.html @@ -0,0 +1,26 @@ + + + + + + Rowspanning cell taking part in its first row baseline + + + +
+
+ + + + + + + + + + +
+
+ + + diff --git a/test_fixtures/table/table_rowspan_excess_over_empty_rows.html b/test_fixtures/table/table_rowspan_excess_over_empty_rows.html new file mode 100644 index 000000000..18ca7b55e --- /dev/null +++ b/test_fixtures/table/table_rowspan_excess_over_empty_rows.html @@ -0,0 +1,21 @@ + + + + + + Rowspanning cell taller than two empty rows + + + + + + + + + + + +
+ + + diff --git a/test_fixtures/table/table_rowspan_excess_uneven_rows.html b/test_fixtures/table/table_rowspan_excess_uneven_rows.html new file mode 100644 index 000000000..ebf6d53f5 --- /dev/null +++ b/test_fixtures/table/table_rowspan_excess_uneven_rows.html @@ -0,0 +1,25 @@ + + + + + + + Excess height from a rowspanning cell spread over rows of different heights + + + + + + + + + + + + + + +
+ + + diff --git a/test_fixtures/table/table_rowspan_full_column.html b/test_fixtures/table/table_rowspan_full_column.html new file mode 100644 index 000000000..4f02ef070 --- /dev/null +++ b/test_fixtures/table/table_rowspan_full_column.html @@ -0,0 +1,28 @@ + + + + + + + rowspan covering every row of the table + + + + + + + + + + + + + + + + + +
+ + + diff --git a/test_fixtures/table/table_rowspan_taller_than_rows.html b/test_fixtures/table/table_rowspan_taller_than_rows.html new file mode 100644 index 000000000..b8061f8f3 --- /dev/null +++ b/test_fixtures/table/table_rowspan_taller_than_rows.html @@ -0,0 +1,25 @@ + + + + + + + rowspan cell taller than the rows it spans + + + + + + + + + + + + + + +
+ + + diff --git a/test_fixtures/table/table_rowspan_three_rows.html b/test_fixtures/table/table_rowspan_three_rows.html new file mode 100644 index 000000000..a3c1fe6ee --- /dev/null +++ b/test_fixtures/table/table_rowspan_three_rows.html @@ -0,0 +1,28 @@ + + + + + + + rowspan 3 beside three single-row cells + + + + + + + + + + + + + + + + + +
+ + + diff --git a/test_fixtures/table/table_rowspan_with_colspan.html b/test_fixtures/table/table_rowspan_with_colspan.html new file mode 100644 index 000000000..abbec21b9 --- /dev/null +++ b/test_fixtures/table/table_rowspan_with_colspan.html @@ -0,0 +1,30 @@ + + + + + + + Cell spanning two rows and two columns + + + + + + + + + + + + + + + + + + + +
+ + + diff --git a/test_fixtures/table/table_spacing_both.html b/test_fixtures/table/table_spacing_both.html new file mode 100644 index 000000000..87001a319 --- /dev/null +++ b/test_fixtures/table/table_spacing_both.html @@ -0,0 +1,26 @@ + + + + + + + Horizontal and vertical border-spacing on a two by two table + + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_spacing_horizontal.html b/test_fixtures/table/table_spacing_horizontal.html new file mode 100644 index 000000000..0142c2778 --- /dev/null +++ b/test_fixtures/table/table_spacing_horizontal.html @@ -0,0 +1,22 @@ + + + + + + + Horizontal border-spacing between two columns + + + + +
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_spacing_single_cell.html b/test_fixtures/table/table_spacing_single_cell.html new file mode 100644 index 000000000..847e41ec7 --- /dev/null +++ b/test_fixtures/table/table_spacing_single_cell.html @@ -0,0 +1,21 @@ + + + + + + + border-spacing around a single cell + + + + +
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_spacing_three_columns.html b/test_fixtures/table/table_spacing_three_columns.html new file mode 100644 index 000000000..5918a549e --- /dev/null +++ b/test_fixtures/table/table_spacing_three_columns.html @@ -0,0 +1,23 @@ + + + + + + + border-spacing between three columns + + + + +
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_spacing_vertical.html b/test_fixtures/table/table_spacing_vertical.html new file mode 100644 index 000000000..9af29c9f8 --- /dev/null +++ b/test_fixtures/table/table_spacing_vertical.html @@ -0,0 +1,24 @@ + + + + + + + Vertical border-spacing between two rows + + + + +
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_spacing_with_border.html b/test_fixtures/table/table_spacing_with_border.html new file mode 100644 index 000000000..dde9c8c29 --- /dev/null +++ b/test_fixtures/table/table_spacing_with_border.html @@ -0,0 +1,26 @@ + + + + + + + border-spacing combined with a border on the table + + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + diff --git a/test_fixtures/table/table_spacing_with_padding.html b/test_fixtures/table/table_spacing_with_padding.html new file mode 100644 index 000000000..dede7670b --- /dev/null +++ b/test_fixtures/table/table_spacing_with_padding.html @@ -0,0 +1,26 @@ + + + + + + + border-spacing combined with padding on the table + + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + diff --git a/tests/xml.rs b/tests/xml.rs index f03fd8a0d..f64bbc99b 100644 --- a/tests/xml.rs +++ b/tests/xml.rs @@ -310,6 +310,13 @@ fn build_style(xnode: roxmltree::Node) -> taffy::Style { justify_content: maybe_parse(xnode.attribute("justify-content")), text_align: parse_or_default(xnode.attribute("text-align")), + table_layout: parse_or_default(xnode.attribute("table-layout")), + border_spacing: Size { + width: parse_or(xnode.attribute("border-spacing-x"), LengthPercentage::ZERO), + height: parse_or(xnode.attribute("border-spacing-y"), LengthPercentage::ZERO), + }, + colspan: parse_or(xnode.attribute("colspan"), 1), + rowspan: parse_or(xnode.attribute("rowspan"), 1), flex_direction: parse_or_default(xnode.attribute("flex-direction")), flex_wrap: parse_or_default(xnode.attribute("flex-wrap")), #[cfg(feature = "flexbox_balance")] diff --git a/tests/xml/mod.rs b/tests/xml/mod.rs index 6dbc3937e..77878f8bd 100644 --- a/tests/xml/mod.rs +++ b/tests/xml/mod.rs @@ -33257,3 +33257,2357 @@ mod leaf { crate::run_xml_test("leaf", "leaf_with_content_and_padding_border__content_box_rtl"); } } + +mod table { + #[cfg(feature = "table_layout")] + #[test] + fn table_align_baseline_padding__border_box_ltr() { + crate::run_xml_test("table", "table_align_baseline_padding__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_align_baseline_padding__content_box_ltr() { + crate::run_xml_test("table", "table_align_baseline_padding__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_align_baseline_padding__border_box_rtl() { + crate::run_xml_test("table", "table_align_baseline_padding__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_align_baseline_padding__content_box_rtl() { + crate::run_xml_test("table", "table_align_baseline_padding__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_align_middle_all__border_box_ltr() { + crate::run_xml_test("table", "table_align_middle_all__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_align_middle_all__content_box_ltr() { + crate::run_xml_test("table", "table_align_middle_all__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_align_middle_all__border_box_rtl() { + crate::run_xml_test("table", "table_align_middle_all__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_align_middle_all__content_box_rtl() { + crate::run_xml_test("table", "table_align_middle_all__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_align_top_with_row_height__border_box_ltr() { + crate::run_xml_test("table", "table_align_top_with_row_height__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_align_top_with_row_height__content_box_ltr() { + crate::run_xml_test("table", "table_align_top_with_row_height__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_align_top_with_row_height__border_box_rtl() { + crate::run_xml_test("table", "table_align_top_with_row_height__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_align_top_with_row_height__content_box_rtl() { + crate::run_xml_test("table", "table_align_top_with_row_height__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_align_vertical_mixed__border_box_ltr() { + crate::run_xml_test("table", "table_align_vertical_mixed__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_align_vertical_mixed__content_box_ltr() { + crate::run_xml_test("table", "table_align_vertical_mixed__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_align_vertical_mixed__border_box_rtl() { + crate::run_xml_test("table", "table_align_vertical_mixed__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_align_vertical_mixed__content_box_rtl() { + crate::run_xml_test("table", "table_align_vertical_mixed__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_auto_all_percent_surplus__border_box_ltr() { + crate::run_xml_test("table", "table_auto_all_percent_surplus__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_auto_all_percent_surplus__content_box_ltr() { + crate::run_xml_test("table", "table_auto_all_percent_surplus__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_auto_all_percent_surplus__border_box_rtl() { + crate::run_xml_test("table", "table_auto_all_percent_surplus__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_auto_all_percent_surplus__content_box_rtl() { + crate::run_xml_test("table", "table_auto_all_percent_surplus__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_auto_column_constrained_by_length__border_box_ltr() { + crate::run_xml_test("table", "table_auto_column_constrained_by_length__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_auto_column_constrained_by_length__content_box_ltr() { + crate::run_xml_test("table", "table_auto_column_constrained_by_length__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_auto_column_constrained_by_length__border_box_rtl() { + crate::run_xml_test("table", "table_auto_column_constrained_by_length__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_auto_column_constrained_by_length__content_box_rtl() { + crate::run_xml_test("table", "table_auto_column_constrained_by_length__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_auto_fixed_and_auto_column__border_box_ltr() { + crate::run_xml_test("table", "table_auto_fixed_and_auto_column__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_auto_fixed_and_auto_column__content_box_ltr() { + crate::run_xml_test("table", "table_auto_fixed_and_auto_column__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_auto_fixed_and_auto_column__border_box_rtl() { + crate::run_xml_test("table", "table_auto_fixed_and_auto_column__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_auto_fixed_and_auto_column__content_box_rtl() { + crate::run_xml_test("table", "table_auto_fixed_and_auto_column__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_auto_percent_column_over_min__border_box_ltr() { + crate::run_xml_test("table", "table_auto_percent_column_over_min__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_auto_percent_column_over_min__content_box_ltr() { + crate::run_xml_test("table", "table_auto_percent_column_over_min__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_auto_percent_column_over_min__border_box_rtl() { + crate::run_xml_test("table", "table_auto_percent_column_over_min__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_auto_percent_column_over_min__content_box_rtl() { + crate::run_xml_test("table", "table_auto_percent_column_over_min__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_empty_block_fallback__border_box_ltr() { + crate::run_xml_test("table", "table_baseline_empty_block_fallback__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_empty_block_fallback__content_box_ltr() { + crate::run_xml_test("table", "table_baseline_empty_block_fallback__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_empty_block_fallback__border_box_rtl() { + crate::run_xml_test("table", "table_baseline_empty_block_fallback__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_empty_block_fallback__content_box_rtl() { + crate::run_xml_test("table", "table_baseline_empty_block_fallback__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_fallback_end_padding__border_box_ltr() { + crate::run_xml_test("table", "table_baseline_fallback_end_padding__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_fallback_end_padding__content_box_ltr() { + crate::run_xml_test("table", "table_baseline_fallback_end_padding__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_fallback_end_padding__border_box_rtl() { + crate::run_xml_test("table", "table_baseline_fallback_end_padding__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_fallback_end_padding__content_box_rtl() { + crate::run_xml_test("table", "table_baseline_fallback_end_padding__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_mixed_with_top__border_box_ltr() { + crate::run_xml_test("table", "table_baseline_mixed_with_top__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_mixed_with_top__content_box_ltr() { + crate::run_xml_test("table", "table_baseline_mixed_with_top__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_mixed_with_top__border_box_rtl() { + crate::run_xml_test("table", "table_baseline_mixed_with_top__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_mixed_with_top__content_box_rtl() { + crate::run_xml_test("table", "table_baseline_mixed_with_top__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_padding_shift__border_box_ltr() { + crate::run_xml_test("table", "table_baseline_padding_shift__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_padding_shift__content_box_ltr() { + crate::run_xml_test("table", "table_baseline_padding_shift__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_padding_shift__border_box_rtl() { + crate::run_xml_test("table", "table_baseline_padding_shift__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_padding_shift__content_box_rtl() { + crate::run_xml_test("table", "table_baseline_padding_shift__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_row_height_growth__border_box_ltr() { + crate::run_xml_test("table", "table_baseline_row_height_growth__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_row_height_growth__content_box_ltr() { + crate::run_xml_test("table", "table_baseline_row_height_growth__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_row_height_growth__border_box_rtl() { + crate::run_xml_test("table", "table_baseline_row_height_growth__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_row_height_growth__content_box_rtl() { + crate::run_xml_test("table", "table_baseline_row_height_growth__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_table_in_flex__border_box_ltr() { + crate::run_xml_test("table", "table_baseline_table_in_flex__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_table_in_flex__content_box_ltr() { + crate::run_xml_test("table", "table_baseline_table_in_flex__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_table_in_flex__border_box_rtl() { + crate::run_xml_test("table", "table_baseline_table_in_flex__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_baseline_table_in_flex__content_box_rtl() { + crate::run_xml_test("table", "table_baseline_table_in_flex__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_cell_padding_border__border_box_ltr() { + crate::run_xml_test("table", "table_basic_cell_padding_border__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_cell_padding_border__content_box_ltr() { + crate::run_xml_test("table", "table_basic_cell_padding_border__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_cell_padding_border__border_box_rtl() { + crate::run_xml_test("table", "table_basic_cell_padding_border__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_cell_padding_border__content_box_rtl() { + crate::run_xml_test("table", "table_basic_cell_padding_border__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_cell_text__border_box_ltr() { + crate::run_xml_test("table", "table_basic_cell_text__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_cell_text__content_box_ltr() { + crate::run_xml_test("table", "table_basic_cell_text__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_cell_text__border_box_rtl() { + crate::run_xml_test("table", "table_basic_cell_text__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_cell_text__content_box_rtl() { + crate::run_xml_test("table", "table_basic_cell_text__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_empty__border_box_ltr() { + crate::run_xml_test("table", "table_basic_empty__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_empty__content_box_ltr() { + crate::run_xml_test("table", "table_basic_empty__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_empty__border_box_rtl() { + crate::run_xml_test("table", "table_basic_empty__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_empty__content_box_rtl() { + crate::run_xml_test("table", "table_basic_empty__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_fixed_size__border_box_ltr() { + crate::run_xml_test("table", "table_basic_fixed_size__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_fixed_size__content_box_ltr() { + crate::run_xml_test("table", "table_basic_fixed_size__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_fixed_size__border_box_rtl() { + crate::run_xml_test("table", "table_basic_fixed_size__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_fixed_size__content_box_rtl() { + crate::run_xml_test("table", "table_basic_fixed_size__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_single_cell__border_box_ltr() { + crate::run_xml_test("table", "table_basic_single_cell__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_single_cell__content_box_ltr() { + crate::run_xml_test("table", "table_basic_single_cell__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_single_cell__border_box_rtl() { + crate::run_xml_test("table", "table_basic_single_cell__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_single_cell__content_box_rtl() { + crate::run_xml_test("table", "table_basic_single_cell__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_single_row_three_cells__border_box_ltr() { + crate::run_xml_test("table", "table_basic_single_row_three_cells__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_single_row_three_cells__content_box_ltr() { + crate::run_xml_test("table", "table_basic_single_row_three_cells__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_single_row_three_cells__border_box_rtl() { + crate::run_xml_test("table", "table_basic_single_row_three_cells__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_single_row_three_cells__content_box_rtl() { + crate::run_xml_test("table", "table_basic_single_row_three_cells__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_two_by_two__border_box_ltr() { + crate::run_xml_test("table", "table_basic_two_by_two__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_two_by_two__content_box_ltr() { + crate::run_xml_test("table", "table_basic_two_by_two__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_two_by_two__border_box_rtl() { + crate::run_xml_test("table", "table_basic_two_by_two__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_basic_two_by_two__content_box_rtl() { + crate::run_xml_test("table", "table_basic_two_by_two__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_auto_columns__border_box_ltr() { + crate::run_xml_test("table", "table_colspan_auto_columns__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_auto_columns__content_box_ltr() { + crate::run_xml_test("table", "table_colspan_auto_columns__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_auto_columns__border_box_rtl() { + crate::run_xml_test("table", "table_colspan_auto_columns__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_auto_columns__content_box_rtl() { + crate::run_xml_test("table", "table_colspan_auto_columns__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_fixed_columns__border_box_ltr() { + crate::run_xml_test("table", "table_colspan_fixed_columns__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_fixed_columns__content_box_ltr() { + crate::run_xml_test("table", "table_colspan_fixed_columns__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_fixed_columns__border_box_rtl() { + crate::run_xml_test("table", "table_colspan_fixed_columns__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_fixed_columns__content_box_rtl() { + crate::run_xml_test("table", "table_colspan_fixed_columns__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_full_row__border_box_ltr() { + crate::run_xml_test("table", "table_colspan_full_row__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_full_row__content_box_ltr() { + crate::run_xml_test("table", "table_colspan_full_row__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_full_row__border_box_rtl() { + crate::run_xml_test("table", "table_colspan_full_row__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_full_row__content_box_rtl() { + crate::run_xml_test("table", "table_colspan_full_row__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_over_active_rowspan__border_box_ltr() { + crate::run_xml_test("table", "table_colspan_over_active_rowspan__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_over_active_rowspan__content_box_ltr() { + crate::run_xml_test("table", "table_colspan_over_active_rowspan__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_over_active_rowspan__border_box_rtl() { + crate::run_xml_test("table", "table_colspan_over_active_rowspan__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_over_active_rowspan__content_box_rtl() { + crate::run_xml_test("table", "table_colspan_over_active_rowspan__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_percent_width__border_box_ltr() { + crate::run_xml_test("table", "table_colspan_percent_width__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_percent_width__content_box_ltr() { + crate::run_xml_test("table", "table_colspan_percent_width__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_percent_width__border_box_rtl() { + crate::run_xml_test("table", "table_colspan_percent_width__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_percent_width__content_box_rtl() { + crate::run_xml_test("table", "table_colspan_percent_width__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_two_of_three__border_box_ltr() { + crate::run_xml_test("table", "table_colspan_two_of_three__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_two_of_three__content_box_ltr() { + crate::run_xml_test("table", "table_colspan_two_of_three__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_two_of_three__border_box_rtl() { + crate::run_xml_test("table", "table_colspan_two_of_three__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_two_of_three__content_box_rtl() { + crate::run_xml_test("table", "table_colspan_two_of_three__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_wider_than_columns__border_box_ltr() { + crate::run_xml_test("table", "table_colspan_wider_than_columns__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_wider_than_columns__content_box_ltr() { + crate::run_xml_test("table", "table_colspan_wider_than_columns__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_wider_than_columns__border_box_rtl() { + crate::run_xml_test("table", "table_colspan_wider_than_columns__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_wider_than_columns__content_box_rtl() { + crate::run_xml_test("table", "table_colspan_wider_than_columns__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_with_border_spacing__border_box_ltr() { + crate::run_xml_test("table", "table_colspan_with_border_spacing__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_with_border_spacing__content_box_ltr() { + crate::run_xml_test("table", "table_colspan_with_border_spacing__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_with_border_spacing__border_box_rtl() { + crate::run_xml_test("table", "table_colspan_with_border_spacing__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_with_border_spacing__content_box_rtl() { + crate::run_xml_test("table", "table_colspan_with_border_spacing__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_with_percent_column__border_box_ltr() { + crate::run_xml_test("table", "table_colspan_with_percent_column__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_with_percent_column__content_box_ltr() { + crate::run_xml_test("table", "table_colspan_with_percent_column__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_with_percent_column__border_box_rtl() { + crate::run_xml_test("table", "table_colspan_with_percent_column__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_colspan_with_percent_column__content_box_rtl() { + crate::run_xml_test("table", "table_colspan_with_percent_column__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_auto_content__border_box_ltr() { + crate::run_xml_test("table", "table_column_width_auto_content__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_auto_content__content_box_ltr() { + crate::run_xml_test("table", "table_column_width_auto_content__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_auto_content__border_box_rtl() { + crate::run_xml_test("table", "table_column_width_auto_content__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_auto_content__content_box_rtl() { + crate::run_xml_test("table", "table_column_width_auto_content__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_auto_three_columns_text__border_box_ltr() { + crate::run_xml_test("table", "table_column_width_auto_three_columns_text__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_auto_three_columns_text__content_box_ltr() { + crate::run_xml_test("table", "table_column_width_auto_three_columns_text__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_auto_three_columns_text__border_box_rtl() { + crate::run_xml_test("table", "table_column_width_auto_three_columns_text__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_auto_three_columns_text__content_box_rtl() { + crate::run_xml_test("table", "table_column_width_auto_three_columns_text__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_fixed_px__border_box_ltr() { + crate::run_xml_test("table", "table_column_width_fixed_px__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_fixed_px__content_box_ltr() { + crate::run_xml_test("table", "table_column_width_fixed_px__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_fixed_px__border_box_rtl() { + crate::run_xml_test("table", "table_column_width_fixed_px__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_fixed_px__content_box_rtl() { + crate::run_xml_test("table", "table_column_width_fixed_px__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_max_across_rows__border_box_ltr() { + crate::run_xml_test("table", "table_column_width_max_across_rows__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_max_across_rows__content_box_ltr() { + crate::run_xml_test("table", "table_column_width_max_across_rows__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_max_across_rows__border_box_rtl() { + crate::run_xml_test("table", "table_column_width_max_across_rows__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_max_across_rows__content_box_rtl() { + crate::run_xml_test("table", "table_column_width_max_across_rows__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_max_width__border_box_ltr() { + crate::run_xml_test("table", "table_column_width_max_width__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_max_width__content_box_ltr() { + crate::run_xml_test("table", "table_column_width_max_width__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_max_width__border_box_rtl() { + crate::run_xml_test("table", "table_column_width_max_width__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_max_width__content_box_rtl() { + crate::run_xml_test("table", "table_column_width_max_width__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_min_width__border_box_ltr() { + crate::run_xml_test("table", "table_column_width_min_width__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_min_width__content_box_ltr() { + crate::run_xml_test("table", "table_column_width_min_width__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_min_width__border_box_rtl() { + crate::run_xml_test("table", "table_column_width_min_width__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_min_width__content_box_rtl() { + crate::run_xml_test("table", "table_column_width_min_width__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_mixed__border_box_ltr() { + crate::run_xml_test("table", "table_column_width_mixed__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_mixed__content_box_ltr() { + crate::run_xml_test("table", "table_column_width_mixed__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_mixed__border_box_rtl() { + crate::run_xml_test("table", "table_column_width_mixed__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_mixed__content_box_rtl() { + crate::run_xml_test("table", "table_column_width_mixed__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_percent__border_box_ltr() { + crate::run_xml_test("table", "table_column_width_percent__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_percent__content_box_ltr() { + crate::run_xml_test("table", "table_column_width_percent__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_percent__border_box_rtl() { + crate::run_xml_test("table", "table_column_width_percent__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_percent__content_box_rtl() { + crate::run_xml_test("table", "table_column_width_percent__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_percent_and_auto_extra_space__border_box_ltr() { + crate::run_xml_test("table", "table_column_width_percent_and_auto_extra_space__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_percent_and_auto_extra_space__content_box_ltr() { + crate::run_xml_test("table", "table_column_width_percent_and_auto_extra_space__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_percent_and_auto_extra_space__border_box_rtl() { + crate::run_xml_test("table", "table_column_width_percent_and_auto_extra_space__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_percent_and_auto_extra_space__content_box_rtl() { + crate::run_xml_test("table", "table_column_width_percent_and_auto_extra_space__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_table_narrower_than_max_content__border_box_ltr() { + crate::run_xml_test("table", "table_column_width_table_narrower_than_max_content__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_table_narrower_than_max_content__content_box_ltr() { + crate::run_xml_test("table", "table_column_width_table_narrower_than_max_content__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_table_narrower_than_max_content__border_box_rtl() { + crate::run_xml_test("table", "table_column_width_table_narrower_than_max_content__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_table_narrower_than_max_content__content_box_rtl() { + crate::run_xml_test("table", "table_column_width_table_narrower_than_max_content__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_table_wider_than_content__border_box_ltr() { + crate::run_xml_test("table", "table_column_width_table_wider_than_content__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_table_wider_than_content__content_box_ltr() { + crate::run_xml_test("table", "table_column_width_table_wider_than_content__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_table_wider_than_content__border_box_rtl() { + crate::run_xml_test("table", "table_column_width_table_wider_than_content__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_column_width_table_wider_than_content__content_box_rtl() { + crate::run_xml_test("table", "table_column_width_table_wider_than_content__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_auto_width__border_box_ltr() { + crate::run_xml_test("table", "table_fixed_layout_auto_width__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_auto_width__content_box_ltr() { + crate::run_xml_test("table", "table_fixed_layout_auto_width__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_auto_width__border_box_rtl() { + crate::run_xml_test("table", "table_fixed_layout_auto_width__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_auto_width__content_box_rtl() { + crate::run_xml_test("table", "table_fixed_layout_auto_width__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_first_row_widths__border_box_ltr() { + crate::run_xml_test("table", "table_fixed_layout_first_row_widths__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_first_row_widths__content_box_ltr() { + crate::run_xml_test("table", "table_fixed_layout_first_row_widths__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_first_row_widths__border_box_rtl() { + crate::run_xml_test("table", "table_fixed_layout_first_row_widths__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_first_row_widths__content_box_rtl() { + crate::run_xml_test("table", "table_fixed_layout_first_row_widths__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_later_row_overflow__border_box_ltr() { + crate::run_xml_test("table", "table_fixed_layout_later_row_overflow__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_later_row_overflow__content_box_ltr() { + crate::run_xml_test("table", "table_fixed_layout_later_row_overflow__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_later_row_overflow__border_box_rtl() { + crate::run_xml_test("table", "table_fixed_layout_later_row_overflow__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_later_row_overflow__content_box_rtl() { + crate::run_xml_test("table", "table_fixed_layout_later_row_overflow__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_missing_cells_in_first_row__border_box_ltr() { + crate::run_xml_test("table", "table_fixed_layout_missing_cells_in_first_row__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_missing_cells_in_first_row__content_box_ltr() { + crate::run_xml_test("table", "table_fixed_layout_missing_cells_in_first_row__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_missing_cells_in_first_row__border_box_rtl() { + crate::run_xml_test("table", "table_fixed_layout_missing_cells_in_first_row__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_missing_cells_in_first_row__content_box_rtl() { + crate::run_xml_test("table", "table_fixed_layout_missing_cells_in_first_row__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_overflow_content__border_box_ltr() { + crate::run_xml_test("table", "table_fixed_layout_overflow_content__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_overflow_content__content_box_ltr() { + crate::run_xml_test("table", "table_fixed_layout_overflow_content__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_overflow_content__border_box_rtl() { + crate::run_xml_test("table", "table_fixed_layout_overflow_content__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_overflow_content__content_box_rtl() { + crate::run_xml_test("table", "table_fixed_layout_overflow_content__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_percent_columns__border_box_ltr() { + crate::run_xml_test("table", "table_fixed_layout_percent_columns__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_percent_columns__content_box_ltr() { + crate::run_xml_test("table", "table_fixed_layout_percent_columns__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_percent_columns__border_box_rtl() { + crate::run_xml_test("table", "table_fixed_layout_percent_columns__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_percent_columns__content_box_rtl() { + crate::run_xml_test("table", "table_fixed_layout_percent_columns__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_percent_over_remainder__border_box_ltr() { + crate::run_xml_test("table", "table_fixed_layout_percent_over_remainder__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_percent_over_remainder__content_box_ltr() { + crate::run_xml_test("table", "table_fixed_layout_percent_over_remainder__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_percent_over_remainder__border_box_rtl() { + crate::run_xml_test("table", "table_fixed_layout_percent_over_remainder__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_percent_over_remainder__content_box_rtl() { + crate::run_xml_test("table", "table_fixed_layout_percent_over_remainder__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_with_border_spacing__border_box_ltr() { + crate::run_xml_test("table", "table_fixed_layout_with_border_spacing__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_with_border_spacing__content_box_ltr() { + crate::run_xml_test("table", "table_fixed_layout_with_border_spacing__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_with_border_spacing__border_box_rtl() { + crate::run_xml_test("table", "table_fixed_layout_with_border_spacing__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_fixed_layout_with_border_spacing__content_box_rtl() { + crate::run_xml_test("table", "table_fixed_layout_with_border_spacing__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_height_over_definite_and_auto_rows__border_box_ltr() { + crate::run_xml_test("table", "table_height_over_definite_and_auto_rows__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_height_over_definite_and_auto_rows__content_box_ltr() { + crate::run_xml_test("table", "table_height_over_definite_and_auto_rows__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_height_over_definite_and_auto_rows__border_box_rtl() { + crate::run_xml_test("table", "table_height_over_definite_and_auto_rows__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_height_over_definite_and_auto_rows__content_box_rtl() { + crate::run_xml_test("table", "table_height_over_definite_and_auto_rows__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_hidden_cell__border_box_ltr() { + crate::run_xml_test("table", "table_hidden_cell__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_hidden_cell__content_box_ltr() { + crate::run_xml_test("table", "table_hidden_cell__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_hidden_cell__border_box_rtl() { + crate::run_xml_test("table", "table_hidden_cell__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_hidden_cell__content_box_rtl() { + crate::run_xml_test("table", "table_hidden_cell__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_hidden_row__border_box_ltr() { + crate::run_xml_test("table", "table_hidden_row__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_hidden_row__content_box_ltr() { + crate::run_xml_test("table", "table_hidden_row__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_hidden_row__border_box_rtl() { + crate::run_xml_test("table", "table_hidden_row__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_hidden_row__content_box_rtl() { + crate::run_xml_test("table", "table_hidden_row__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_hidden_row_group__border_box_ltr() { + crate::run_xml_test("table", "table_hidden_row_group__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_hidden_row_group__content_box_ltr() { + crate::run_xml_test("table", "table_hidden_row_group__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_hidden_row_group__border_box_rtl() { + crate::run_xml_test("table", "table_hidden_row_group__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_hidden_row_group__content_box_rtl() { + crate::run_xml_test("table", "table_hidden_row_group__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_intrinsic_flex_item_max_content__border_box_ltr() { + crate::run_xml_test("table", "table_intrinsic_flex_item_max_content__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_intrinsic_flex_item_max_content__content_box_ltr() { + crate::run_xml_test("table", "table_intrinsic_flex_item_max_content__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_intrinsic_flex_item_max_content__border_box_rtl() { + crate::run_xml_test("table", "table_intrinsic_flex_item_max_content__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_intrinsic_flex_item_max_content__content_box_rtl() { + crate::run_xml_test("table", "table_intrinsic_flex_item_max_content__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_intrinsic_flex_item_min_content__border_box_ltr() { + crate::run_xml_test("table", "table_intrinsic_flex_item_min_content__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_intrinsic_flex_item_min_content__content_box_ltr() { + crate::run_xml_test("table", "table_intrinsic_flex_item_min_content__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_intrinsic_flex_item_min_content__border_box_rtl() { + crate::run_xml_test("table", "table_intrinsic_flex_item_min_content__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_intrinsic_flex_item_min_content__content_box_rtl() { + crate::run_xml_test("table", "table_intrinsic_flex_item_min_content__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_intrinsic_flex_item_stretch__border_box_ltr() { + crate::run_xml_test("table", "table_intrinsic_flex_item_stretch__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_intrinsic_flex_item_stretch__content_box_ltr() { + crate::run_xml_test("table", "table_intrinsic_flex_item_stretch__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_intrinsic_flex_item_stretch__border_box_rtl() { + crate::run_xml_test("table", "table_intrinsic_flex_item_stretch__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_intrinsic_flex_item_stretch__content_box_rtl() { + crate::run_xml_test("table", "table_intrinsic_flex_item_stretch__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_intrinsic_width_with_percent_column__border_box_ltr() { + crate::run_xml_test("table", "table_intrinsic_width_with_percent_column__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_intrinsic_width_with_percent_column__content_box_ltr() { + crate::run_xml_test("table", "table_intrinsic_width_with_percent_column__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_intrinsic_width_with_percent_column__border_box_rtl() { + crate::run_xml_test("table", "table_intrinsic_width_with_percent_column__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_intrinsic_width_with_percent_column__content_box_rtl() { + crate::run_xml_test("table", "table_intrinsic_width_with_percent_column__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_block_content_in_cell__border_box_ltr() { + crate::run_xml_test("table", "table_nested_block_content_in_cell__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_block_content_in_cell__content_box_ltr() { + crate::run_xml_test("table", "table_nested_block_content_in_cell__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_block_content_in_cell__border_box_rtl() { + crate::run_xml_test("table", "table_nested_block_content_in_cell__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_block_content_in_cell__content_box_rtl() { + crate::run_xml_test("table", "table_nested_block_content_in_cell__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_table_in_cell__border_box_ltr() { + crate::run_xml_test("table", "table_nested_table_in_cell__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_table_in_cell__content_box_ltr() { + crate::run_xml_test("table", "table_nested_table_in_cell__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_table_in_cell__border_box_rtl() { + crate::run_xml_test("table", "table_nested_table_in_cell__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_table_in_cell__content_box_rtl() { + crate::run_xml_test("table", "table_nested_table_in_cell__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_table_in_cell_fixed__border_box_ltr() { + crate::run_xml_test("table", "table_nested_table_in_cell_fixed__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_table_in_cell_fixed__content_box_ltr() { + crate::run_xml_test("table", "table_nested_table_in_cell_fixed__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_table_in_cell_fixed__border_box_rtl() { + crate::run_xml_test("table", "table_nested_table_in_cell_fixed__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_table_in_cell_fixed__content_box_rtl() { + crate::run_xml_test("table", "table_nested_table_in_cell_fixed__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_table_in_flex_item__border_box_ltr() { + crate::run_xml_test("table", "table_nested_table_in_flex_item__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_table_in_flex_item__content_box_ltr() { + crate::run_xml_test("table", "table_nested_table_in_flex_item__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_table_in_flex_item__border_box_rtl() { + crate::run_xml_test("table", "table_nested_table_in_flex_item__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_table_in_flex_item__content_box_rtl() { + crate::run_xml_test("table", "table_nested_table_in_flex_item__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_table_in_grid_area__border_box_ltr() { + crate::run_xml_test("table", "table_nested_table_in_grid_area__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_table_in_grid_area__content_box_ltr() { + crate::run_xml_test("table", "table_nested_table_in_grid_area__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_table_in_grid_area__border_box_rtl() { + crate::run_xml_test("table", "table_nested_table_in_grid_area__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_table_in_grid_area__content_box_rtl() { + crate::run_xml_test("table", "table_nested_table_in_grid_area__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_two_levels__border_box_ltr() { + crate::run_xml_test("table", "table_nested_two_levels__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_two_levels__content_box_ltr() { + crate::run_xml_test("table", "table_nested_two_levels__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_two_levels__border_box_rtl() { + crate::run_xml_test("table", "table_nested_two_levels__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_nested_two_levels__content_box_rtl() { + crate::run_xml_test("table", "table_nested_two_levels__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_cell_in_percent_table__border_box_ltr() { + crate::run_xml_test("table", "table_percent_cell_in_percent_table__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_cell_in_percent_table__content_box_ltr() { + crate::run_xml_test("table", "table_percent_cell_in_percent_table__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_cell_in_percent_table__border_box_rtl() { + crate::run_xml_test("table", "table_percent_cell_in_percent_table__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_cell_in_percent_table__content_box_rtl() { + crate::run_xml_test("table", "table_percent_cell_in_percent_table__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_columns_exactly_100__border_box_ltr() { + crate::run_xml_test("table", "table_percent_columns_exactly_100__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_columns_exactly_100__content_box_ltr() { + crate::run_xml_test("table", "table_percent_columns_exactly_100__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_columns_exactly_100__border_box_rtl() { + crate::run_xml_test("table", "table_percent_columns_exactly_100__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_columns_exactly_100__content_box_rtl() { + crate::run_xml_test("table", "table_percent_columns_exactly_100__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_columns_over_100__border_box_ltr() { + crate::run_xml_test("table", "table_percent_columns_over_100__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_columns_over_100__content_box_ltr() { + crate::run_xml_test("table", "table_percent_columns_over_100__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_columns_over_100__border_box_rtl() { + crate::run_xml_test("table", "table_percent_columns_over_100__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_columns_over_100__content_box_rtl() { + crate::run_xml_test("table", "table_percent_columns_over_100__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_columns_unconstrained_parent__border_box_ltr() { + crate::run_xml_test("table", "table_percent_columns_unconstrained_parent__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_columns_unconstrained_parent__content_box_ltr() { + crate::run_xml_test("table", "table_percent_columns_unconstrained_parent__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_columns_unconstrained_parent__border_box_rtl() { + crate::run_xml_test("table", "table_percent_columns_unconstrained_parent__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_columns_unconstrained_parent__content_box_rtl() { + crate::run_xml_test("table", "table_percent_columns_unconstrained_parent__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_columns_under_100__border_box_ltr() { + crate::run_xml_test("table", "table_percent_columns_under_100__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_columns_under_100__content_box_ltr() { + crate::run_xml_test("table", "table_percent_columns_under_100__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_columns_under_100__border_box_rtl() { + crate::run_xml_test("table", "table_percent_columns_under_100__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_columns_under_100__content_box_rtl() { + crate::run_xml_test("table", "table_percent_columns_under_100__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_table_width_in_fixed_parent__border_box_ltr() { + crate::run_xml_test("table", "table_percent_table_width_in_fixed_parent__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_table_width_in_fixed_parent__content_box_ltr() { + crate::run_xml_test("table", "table_percent_table_width_in_fixed_parent__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_table_width_in_fixed_parent__border_box_rtl() { + crate::run_xml_test("table", "table_percent_table_width_in_fixed_parent__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_percent_table_width_in_fixed_parent__content_box_rtl() { + crate::run_xml_test("table", "table_percent_table_width_in_fixed_parent__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_group_column_widths_across_groups__border_box_ltr() { + crate::run_xml_test("table", "table_row_group_column_widths_across_groups__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_group_column_widths_across_groups__content_box_ltr() { + crate::run_xml_test("table", "table_row_group_column_widths_across_groups__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_group_column_widths_across_groups__border_box_rtl() { + crate::run_xml_test("table", "table_row_group_column_widths_across_groups__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_group_column_widths_across_groups__content_box_rtl() { + crate::run_xml_test("table", "table_row_group_column_widths_across_groups__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_group_multiple__border_box_ltr() { + crate::run_xml_test("table", "table_row_group_multiple__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_group_multiple__content_box_ltr() { + crate::run_xml_test("table", "table_row_group_multiple__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_group_multiple__border_box_rtl() { + crate::run_xml_test("table", "table_row_group_multiple__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_group_multiple__content_box_rtl() { + crate::run_xml_test("table", "table_row_group_multiple__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_group_spacing__border_box_ltr() { + crate::run_xml_test("table", "table_row_group_spacing__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_group_spacing__content_box_ltr() { + crate::run_xml_test("table", "table_row_group_spacing__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_group_spacing__border_box_rtl() { + crate::run_xml_test("table", "table_row_group_spacing__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_group_spacing__content_box_rtl() { + crate::run_xml_test("table", "table_row_group_spacing__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_group_specified_height__border_box_ltr() { + crate::run_xml_test("table", "table_row_group_specified_height__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_group_specified_height__content_box_ltr() { + crate::run_xml_test("table", "table_row_group_specified_height__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_group_specified_height__border_box_rtl() { + crate::run_xml_test("table", "table_row_group_specified_height__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_group_specified_height__content_box_rtl() { + crate::run_xml_test("table", "table_row_group_specified_height__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_group_thead_tbody__border_box_ltr() { + crate::run_xml_test("table", "table_row_group_thead_tbody__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_group_thead_tbody__content_box_ltr() { + crate::run_xml_test("table", "table_row_group_thead_tbody__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_group_thead_tbody__border_box_rtl() { + crate::run_xml_test("table", "table_row_group_thead_tbody__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_group_thead_tbody__content_box_rtl() { + crate::run_xml_test("table", "table_row_group_thead_tbody__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_cell_padding__border_box_ltr() { + crate::run_xml_test("table", "table_row_height_cell_padding__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_cell_padding__content_box_ltr() { + crate::run_xml_test("table", "table_row_height_cell_padding__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_cell_padding__border_box_rtl() { + crate::run_xml_test("table", "table_row_height_cell_padding__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_cell_padding__content_box_rtl() { + crate::run_xml_test("table", "table_row_height_cell_padding__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_explicit_cell__border_box_ltr() { + crate::run_xml_test("table", "table_row_height_explicit_cell__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_explicit_cell__content_box_ltr() { + crate::run_xml_test("table", "table_row_height_explicit_cell__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_explicit_cell__border_box_rtl() { + crate::run_xml_test("table", "table_row_height_explicit_cell__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_explicit_cell__content_box_rtl() { + crate::run_xml_test("table", "table_row_height_explicit_cell__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_explicit_row__border_box_ltr() { + crate::run_xml_test("table", "table_row_height_explicit_row__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_explicit_row__content_box_ltr() { + crate::run_xml_test("table", "table_row_height_explicit_row__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_explicit_row__border_box_rtl() { + crate::run_xml_test("table", "table_row_height_explicit_row__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_explicit_row__content_box_rtl() { + crate::run_xml_test("table", "table_row_height_explicit_row__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_percent_cell__border_box_ltr() { + crate::run_xml_test("table", "table_row_height_percent_cell__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_percent_cell__content_box_ltr() { + crate::run_xml_test("table", "table_row_height_percent_cell__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_percent_cell__border_box_rtl() { + crate::run_xml_test("table", "table_row_height_percent_cell__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_percent_cell__content_box_rtl() { + crate::run_xml_test("table", "table_row_height_percent_cell__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_table_taller_than_content__border_box_ltr() { + crate::run_xml_test("table", "table_row_height_table_taller_than_content__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_table_taller_than_content__content_box_ltr() { + crate::run_xml_test("table", "table_row_height_table_taller_than_content__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_table_taller_than_content__border_box_rtl() { + crate::run_xml_test("table", "table_row_height_table_taller_than_content__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_table_taller_than_content__content_box_rtl() { + crate::run_xml_test("table", "table_row_height_table_taller_than_content__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_taller_row_and_spacing__border_box_ltr() { + crate::run_xml_test("table", "table_row_height_taller_row_and_spacing__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_taller_row_and_spacing__content_box_ltr() { + crate::run_xml_test("table", "table_row_height_taller_row_and_spacing__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_taller_row_and_spacing__border_box_rtl() { + crate::run_xml_test("table", "table_row_height_taller_row_and_spacing__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_taller_row_and_spacing__content_box_rtl() { + crate::run_xml_test("table", "table_row_height_taller_row_and_spacing__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_tallest_cell__border_box_ltr() { + crate::run_xml_test("table", "table_row_height_tallest_cell__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_tallest_cell__content_box_ltr() { + crate::run_xml_test("table", "table_row_height_tallest_cell__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_tallest_cell__border_box_rtl() { + crate::run_xml_test("table", "table_row_height_tallest_cell__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_height_tallest_cell__content_box_rtl() { + crate::run_xml_test("table", "table_row_height_tallest_cell__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_percent_height__border_box_ltr() { + crate::run_xml_test("table", "table_row_percent_height__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_percent_height__content_box_ltr() { + crate::run_xml_test("table", "table_row_percent_height__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_percent_height__border_box_rtl() { + crate::run_xml_test("table", "table_row_percent_height__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_row_percent_height__content_box_rtl() { + crate::run_xml_test("table", "table_row_percent_height__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_across_row_groups__border_box_ltr() { + crate::run_xml_test("table", "table_rowspan_across_row_groups__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_across_row_groups__content_box_ltr() { + crate::run_xml_test("table", "table_rowspan_across_row_groups__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_across_row_groups__border_box_rtl() { + crate::run_xml_test("table", "table_rowspan_across_row_groups__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_across_row_groups__content_box_rtl() { + crate::run_xml_test("table", "table_rowspan_across_row_groups__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_basic__border_box_ltr() { + crate::run_xml_test("table", "table_rowspan_basic__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_basic__content_box_ltr() { + crate::run_xml_test("table", "table_rowspan_basic__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_basic__border_box_rtl() { + crate::run_xml_test("table", "table_rowspan_basic__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_basic__content_box_rtl() { + crate::run_xml_test("table", "table_rowspan_basic__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_cell_baseline__border_box_ltr() { + crate::run_xml_test("table", "table_rowspan_cell_baseline__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_cell_baseline__content_box_ltr() { + crate::run_xml_test("table", "table_rowspan_cell_baseline__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_cell_baseline__border_box_rtl() { + crate::run_xml_test("table", "table_rowspan_cell_baseline__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_cell_baseline__content_box_rtl() { + crate::run_xml_test("table", "table_rowspan_cell_baseline__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_excess_over_empty_rows__border_box_ltr() { + crate::run_xml_test("table", "table_rowspan_excess_over_empty_rows__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_excess_over_empty_rows__content_box_ltr() { + crate::run_xml_test("table", "table_rowspan_excess_over_empty_rows__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_excess_over_empty_rows__border_box_rtl() { + crate::run_xml_test("table", "table_rowspan_excess_over_empty_rows__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_excess_over_empty_rows__content_box_rtl() { + crate::run_xml_test("table", "table_rowspan_excess_over_empty_rows__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_excess_uneven_rows__border_box_ltr() { + crate::run_xml_test("table", "table_rowspan_excess_uneven_rows__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_excess_uneven_rows__content_box_ltr() { + crate::run_xml_test("table", "table_rowspan_excess_uneven_rows__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_excess_uneven_rows__border_box_rtl() { + crate::run_xml_test("table", "table_rowspan_excess_uneven_rows__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_excess_uneven_rows__content_box_rtl() { + crate::run_xml_test("table", "table_rowspan_excess_uneven_rows__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_full_column__border_box_ltr() { + crate::run_xml_test("table", "table_rowspan_full_column__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_full_column__content_box_ltr() { + crate::run_xml_test("table", "table_rowspan_full_column__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_full_column__border_box_rtl() { + crate::run_xml_test("table", "table_rowspan_full_column__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_full_column__content_box_rtl() { + crate::run_xml_test("table", "table_rowspan_full_column__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_taller_than_rows__border_box_ltr() { + crate::run_xml_test("table", "table_rowspan_taller_than_rows__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_taller_than_rows__content_box_ltr() { + crate::run_xml_test("table", "table_rowspan_taller_than_rows__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_taller_than_rows__border_box_rtl() { + crate::run_xml_test("table", "table_rowspan_taller_than_rows__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_taller_than_rows__content_box_rtl() { + crate::run_xml_test("table", "table_rowspan_taller_than_rows__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_three_rows__border_box_ltr() { + crate::run_xml_test("table", "table_rowspan_three_rows__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_three_rows__content_box_ltr() { + crate::run_xml_test("table", "table_rowspan_three_rows__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_three_rows__border_box_rtl() { + crate::run_xml_test("table", "table_rowspan_three_rows__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_three_rows__content_box_rtl() { + crate::run_xml_test("table", "table_rowspan_three_rows__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_with_colspan__border_box_ltr() { + crate::run_xml_test("table", "table_rowspan_with_colspan__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_with_colspan__content_box_ltr() { + crate::run_xml_test("table", "table_rowspan_with_colspan__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_with_colspan__border_box_rtl() { + crate::run_xml_test("table", "table_rowspan_with_colspan__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_rowspan_with_colspan__content_box_rtl() { + crate::run_xml_test("table", "table_rowspan_with_colspan__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_both__border_box_ltr() { + crate::run_xml_test("table", "table_spacing_both__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_both__content_box_ltr() { + crate::run_xml_test("table", "table_spacing_both__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_both__border_box_rtl() { + crate::run_xml_test("table", "table_spacing_both__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_both__content_box_rtl() { + crate::run_xml_test("table", "table_spacing_both__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_horizontal__border_box_ltr() { + crate::run_xml_test("table", "table_spacing_horizontal__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_horizontal__content_box_ltr() { + crate::run_xml_test("table", "table_spacing_horizontal__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_horizontal__border_box_rtl() { + crate::run_xml_test("table", "table_spacing_horizontal__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_horizontal__content_box_rtl() { + crate::run_xml_test("table", "table_spacing_horizontal__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_single_cell__border_box_ltr() { + crate::run_xml_test("table", "table_spacing_single_cell__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_single_cell__content_box_ltr() { + crate::run_xml_test("table", "table_spacing_single_cell__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_single_cell__border_box_rtl() { + crate::run_xml_test("table", "table_spacing_single_cell__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_single_cell__content_box_rtl() { + crate::run_xml_test("table", "table_spacing_single_cell__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_three_columns__border_box_ltr() { + crate::run_xml_test("table", "table_spacing_three_columns__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_three_columns__content_box_ltr() { + crate::run_xml_test("table", "table_spacing_three_columns__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_three_columns__border_box_rtl() { + crate::run_xml_test("table", "table_spacing_three_columns__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_three_columns__content_box_rtl() { + crate::run_xml_test("table", "table_spacing_three_columns__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_vertical__border_box_ltr() { + crate::run_xml_test("table", "table_spacing_vertical__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_vertical__content_box_ltr() { + crate::run_xml_test("table", "table_spacing_vertical__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_vertical__border_box_rtl() { + crate::run_xml_test("table", "table_spacing_vertical__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_vertical__content_box_rtl() { + crate::run_xml_test("table", "table_spacing_vertical__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_with_border__border_box_ltr() { + crate::run_xml_test("table", "table_spacing_with_border__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_with_border__content_box_ltr() { + crate::run_xml_test("table", "table_spacing_with_border__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_with_border__border_box_rtl() { + crate::run_xml_test("table", "table_spacing_with_border__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_with_border__content_box_rtl() { + crate::run_xml_test("table", "table_spacing_with_border__content_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_with_padding__border_box_ltr() { + crate::run_xml_test("table", "table_spacing_with_padding__border_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_with_padding__content_box_ltr() { + crate::run_xml_test("table", "table_spacing_with_padding__content_box_ltr"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_with_padding__border_box_rtl() { + crate::run_xml_test("table", "table_spacing_with_padding__border_box_rtl"); + } + + #[cfg(feature = "table_layout")] + #[test] + fn table_spacing_with_padding__content_box_rtl() { + crate::run_xml_test("table", "table_spacing_with_padding__content_box_rtl"); + } +} diff --git a/tests/xml/table/table_align_baseline_padding__border_box_ltr.xml b/tests/xml/table/table_align_baseline_padding__border_box_ltr.xml new file mode 100644 index 000000000..7cb0aa88e --- /dev/null +++ b/tests/xml/table/table_align_baseline_padding__border_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+ + HH + + + HH + +
+
+
+ + + + + + + + + + + +
diff --git a/tests/xml/table/table_align_baseline_padding__border_box_rtl.xml b/tests/xml/table/table_align_baseline_padding__border_box_rtl.xml new file mode 100644 index 000000000..6d923a800 --- /dev/null +++ b/tests/xml/table/table_align_baseline_padding__border_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+ + HH + + + HH + +
+
+
+ + + + + + + + + + + +
diff --git a/tests/xml/table/table_align_baseline_padding__content_box_ltr.xml b/tests/xml/table/table_align_baseline_padding__content_box_ltr.xml new file mode 100644 index 000000000..a491a8464 --- /dev/null +++ b/tests/xml/table/table_align_baseline_padding__content_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+ + HH + + + HH + +
+
+
+ + + + + + + + + + + +
diff --git a/tests/xml/table/table_align_baseline_padding__content_box_rtl.xml b/tests/xml/table/table_align_baseline_padding__content_box_rtl.xml new file mode 100644 index 000000000..aeb8f3f4c --- /dev/null +++ b/tests/xml/table/table_align_baseline_padding__content_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+ + HH + + + HH + +
+
+
+ + + + + + + + + + + +
diff --git a/tests/xml/table/table_align_middle_all__border_box_ltr.xml b/tests/xml/table/table_align_middle_all__border_box_ltr.xml new file mode 100644 index 000000000..91cb4ced5 --- /dev/null +++ b/tests/xml/table/table_align_middle_all__border_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_align_middle_all__border_box_rtl.xml b/tests/xml/table/table_align_middle_all__border_box_rtl.xml new file mode 100644 index 000000000..8f6fe5458 --- /dev/null +++ b/tests/xml/table/table_align_middle_all__border_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_align_middle_all__content_box_ltr.xml b/tests/xml/table/table_align_middle_all__content_box_ltr.xml new file mode 100644 index 000000000..c0222b473 --- /dev/null +++ b/tests/xml/table/table_align_middle_all__content_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_align_middle_all__content_box_rtl.xml b/tests/xml/table/table_align_middle_all__content_box_rtl.xml new file mode 100644 index 000000000..1cf946097 --- /dev/null +++ b/tests/xml/table/table_align_middle_all__content_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_align_top_with_row_height__border_box_ltr.xml b/tests/xml/table/table_align_top_with_row_height__border_box_ltr.xml new file mode 100644 index 000000000..68ca34434 --- /dev/null +++ b/tests/xml/table/table_align_top_with_row_height__border_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_align_top_with_row_height__border_box_rtl.xml b/tests/xml/table/table_align_top_with_row_height__border_box_rtl.xml new file mode 100644 index 000000000..4e1b50d2a --- /dev/null +++ b/tests/xml/table/table_align_top_with_row_height__border_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_align_top_with_row_height__content_box_ltr.xml b/tests/xml/table/table_align_top_with_row_height__content_box_ltr.xml new file mode 100644 index 000000000..54721c621 --- /dev/null +++ b/tests/xml/table/table_align_top_with_row_height__content_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_align_top_with_row_height__content_box_rtl.xml b/tests/xml/table/table_align_top_with_row_height__content_box_rtl.xml new file mode 100644 index 000000000..063232ea5 --- /dev/null +++ b/tests/xml/table/table_align_top_with_row_height__content_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_align_vertical_mixed__border_box_ltr.xml b/tests/xml/table/table_align_vertical_mixed__border_box_ltr.xml new file mode 100644 index 000000000..821bffb07 --- /dev/null +++ b/tests/xml/table/table_align_vertical_mixed__border_box_ltr.xml @@ -0,0 +1,37 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_align_vertical_mixed__border_box_rtl.xml b/tests/xml/table/table_align_vertical_mixed__border_box_rtl.xml new file mode 100644 index 000000000..3e0b5d3d3 --- /dev/null +++ b/tests/xml/table/table_align_vertical_mixed__border_box_rtl.xml @@ -0,0 +1,37 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_align_vertical_mixed__content_box_ltr.xml b/tests/xml/table/table_align_vertical_mixed__content_box_ltr.xml new file mode 100644 index 000000000..49e17f526 --- /dev/null +++ b/tests/xml/table/table_align_vertical_mixed__content_box_ltr.xml @@ -0,0 +1,37 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_align_vertical_mixed__content_box_rtl.xml b/tests/xml/table/table_align_vertical_mixed__content_box_rtl.xml new file mode 100644 index 000000000..70b18c65c --- /dev/null +++ b/tests/xml/table/table_align_vertical_mixed__content_box_rtl.xml @@ -0,0 +1,37 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_auto_all_percent_surplus__border_box_ltr.xml b/tests/xml/table/table_auto_all_percent_surplus__border_box_ltr.xml new file mode 100644 index 000000000..75f77cd7c --- /dev/null +++ b/tests/xml/table/table_auto_all_percent_surplus__border_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_auto_all_percent_surplus__border_box_rtl.xml b/tests/xml/table/table_auto_all_percent_surplus__border_box_rtl.xml new file mode 100644 index 000000000..06a08d900 --- /dev/null +++ b/tests/xml/table/table_auto_all_percent_surplus__border_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_auto_all_percent_surplus__content_box_ltr.xml b/tests/xml/table/table_auto_all_percent_surplus__content_box_ltr.xml new file mode 100644 index 000000000..e15465f04 --- /dev/null +++ b/tests/xml/table/table_auto_all_percent_surplus__content_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_auto_all_percent_surplus__content_box_rtl.xml b/tests/xml/table/table_auto_all_percent_surplus__content_box_rtl.xml new file mode 100644 index 000000000..7a627140d --- /dev/null +++ b/tests/xml/table/table_auto_all_percent_surplus__content_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_auto_column_constrained_by_length__border_box_ltr.xml b/tests/xml/table/table_auto_column_constrained_by_length__border_box_ltr.xml new file mode 100644 index 000000000..ca5e77641 --- /dev/null +++ b/tests/xml/table/table_auto_column_constrained_by_length__border_box_ltr.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+ + X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​ + +
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_auto_column_constrained_by_length__border_box_rtl.xml b/tests/xml/table/table_auto_column_constrained_by_length__border_box_rtl.xml new file mode 100644 index 000000000..2fcd13ec4 --- /dev/null +++ b/tests/xml/table/table_auto_column_constrained_by_length__border_box_rtl.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+ + X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​ + +
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_auto_column_constrained_by_length__content_box_ltr.xml b/tests/xml/table/table_auto_column_constrained_by_length__content_box_ltr.xml new file mode 100644 index 000000000..4bfab395a --- /dev/null +++ b/tests/xml/table/table_auto_column_constrained_by_length__content_box_ltr.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+ + X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​ + +
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_auto_column_constrained_by_length__content_box_rtl.xml b/tests/xml/table/table_auto_column_constrained_by_length__content_box_rtl.xml new file mode 100644 index 000000000..2d4ab4adc --- /dev/null +++ b/tests/xml/table/table_auto_column_constrained_by_length__content_box_rtl.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+ + X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​X​ + +
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_auto_fixed_and_auto_column__border_box_ltr.xml b/tests/xml/table/table_auto_fixed_and_auto_column__border_box_ltr.xml new file mode 100644 index 000000000..eb39e16b2 --- /dev/null +++ b/tests/xml/table/table_auto_fixed_and_auto_column__border_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_auto_fixed_and_auto_column__border_box_rtl.xml b/tests/xml/table/table_auto_fixed_and_auto_column__border_box_rtl.xml new file mode 100644 index 000000000..439172b91 --- /dev/null +++ b/tests/xml/table/table_auto_fixed_and_auto_column__border_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_auto_fixed_and_auto_column__content_box_ltr.xml b/tests/xml/table/table_auto_fixed_and_auto_column__content_box_ltr.xml new file mode 100644 index 000000000..c700b4ab9 --- /dev/null +++ b/tests/xml/table/table_auto_fixed_and_auto_column__content_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_auto_fixed_and_auto_column__content_box_rtl.xml b/tests/xml/table/table_auto_fixed_and_auto_column__content_box_rtl.xml new file mode 100644 index 000000000..f066c4cb0 --- /dev/null +++ b/tests/xml/table/table_auto_fixed_and_auto_column__content_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_auto_percent_column_over_min__border_box_ltr.xml b/tests/xml/table/table_auto_percent_column_over_min__border_box_ltr.xml new file mode 100644 index 000000000..c8ff970c6 --- /dev/null +++ b/tests/xml/table/table_auto_percent_column_over_min__border_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_auto_percent_column_over_min__border_box_rtl.xml b/tests/xml/table/table_auto_percent_column_over_min__border_box_rtl.xml new file mode 100644 index 000000000..4ec53ad00 --- /dev/null +++ b/tests/xml/table/table_auto_percent_column_over_min__border_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_auto_percent_column_over_min__content_box_ltr.xml b/tests/xml/table/table_auto_percent_column_over_min__content_box_ltr.xml new file mode 100644 index 000000000..69f09bf8c --- /dev/null +++ b/tests/xml/table/table_auto_percent_column_over_min__content_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_auto_percent_column_over_min__content_box_rtl.xml b/tests/xml/table/table_auto_percent_column_over_min__content_box_rtl.xml new file mode 100644 index 000000000..a19d01100 --- /dev/null +++ b/tests/xml/table/table_auto_percent_column_over_min__content_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_baseline_empty_block_fallback__border_box_ltr.xml b/tests/xml/table/table_baseline_empty_block_fallback__border_box_ltr.xml new file mode 100644 index 000000000..ec5732874 --- /dev/null +++ b/tests/xml/table/table_baseline_empty_block_fallback__border_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_baseline_empty_block_fallback__border_box_rtl.xml b/tests/xml/table/table_baseline_empty_block_fallback__border_box_rtl.xml new file mode 100644 index 000000000..d3d957223 --- /dev/null +++ b/tests/xml/table/table_baseline_empty_block_fallback__border_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_baseline_empty_block_fallback__content_box_ltr.xml b/tests/xml/table/table_baseline_empty_block_fallback__content_box_ltr.xml new file mode 100644 index 000000000..6c2019969 --- /dev/null +++ b/tests/xml/table/table_baseline_empty_block_fallback__content_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_baseline_empty_block_fallback__content_box_rtl.xml b/tests/xml/table/table_baseline_empty_block_fallback__content_box_rtl.xml new file mode 100644 index 000000000..0de006b14 --- /dev/null +++ b/tests/xml/table/table_baseline_empty_block_fallback__content_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_baseline_fallback_end_padding__border_box_ltr.xml b/tests/xml/table/table_baseline_fallback_end_padding__border_box_ltr.xml new file mode 100644 index 000000000..8b3d095a2 --- /dev/null +++ b/tests/xml/table/table_baseline_fallback_end_padding__border_box_ltr.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_baseline_fallback_end_padding__border_box_rtl.xml b/tests/xml/table/table_baseline_fallback_end_padding__border_box_rtl.xml new file mode 100644 index 000000000..2c7382a03 --- /dev/null +++ b/tests/xml/table/table_baseline_fallback_end_padding__border_box_rtl.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_baseline_fallback_end_padding__content_box_ltr.xml b/tests/xml/table/table_baseline_fallback_end_padding__content_box_ltr.xml new file mode 100644 index 000000000..d3330c1b1 --- /dev/null +++ b/tests/xml/table/table_baseline_fallback_end_padding__content_box_ltr.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_baseline_fallback_end_padding__content_box_rtl.xml b/tests/xml/table/table_baseline_fallback_end_padding__content_box_rtl.xml new file mode 100644 index 000000000..d9365a9aa --- /dev/null +++ b/tests/xml/table/table_baseline_fallback_end_padding__content_box_rtl.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_baseline_mixed_with_top__border_box_ltr.xml b/tests/xml/table/table_baseline_mixed_with_top__border_box_ltr.xml new file mode 100644 index 000000000..971201305 --- /dev/null +++ b/tests/xml/table/table_baseline_mixed_with_top__border_box_ltr.xml @@ -0,0 +1,43 @@ + + + +
+
+
+
+ + HH + +
+
+ + HH + +
+
+ + HH + +
+
+
+
+ + + + + + + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_baseline_mixed_with_top__border_box_rtl.xml b/tests/xml/table/table_baseline_mixed_with_top__border_box_rtl.xml new file mode 100644 index 000000000..ad04e5c06 --- /dev/null +++ b/tests/xml/table/table_baseline_mixed_with_top__border_box_rtl.xml @@ -0,0 +1,43 @@ + + + +
+
+
+
+ + HH + +
+
+ + HH + +
+
+ + HH + +
+
+
+
+ + + + + + + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_baseline_mixed_with_top__content_box_ltr.xml b/tests/xml/table/table_baseline_mixed_with_top__content_box_ltr.xml new file mode 100644 index 000000000..1e27d6e0f --- /dev/null +++ b/tests/xml/table/table_baseline_mixed_with_top__content_box_ltr.xml @@ -0,0 +1,43 @@ + + + +
+
+
+
+ + HH + +
+
+ + HH + +
+
+ + HH + +
+
+
+
+ + + + + + + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_baseline_mixed_with_top__content_box_rtl.xml b/tests/xml/table/table_baseline_mixed_with_top__content_box_rtl.xml new file mode 100644 index 000000000..589344dca --- /dev/null +++ b/tests/xml/table/table_baseline_mixed_with_top__content_box_rtl.xml @@ -0,0 +1,43 @@ + + + +
+
+
+
+ + HH + +
+
+ + HH + +
+
+ + HH + +
+
+
+
+ + + + + + + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_baseline_padding_shift__border_box_ltr.xml b/tests/xml/table/table_baseline_padding_shift__border_box_ltr.xml new file mode 100644 index 000000000..9cb85f33b --- /dev/null +++ b/tests/xml/table/table_baseline_padding_shift__border_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+ + HH + +
+
+ + HH + +
+
+
+
+ + + + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_baseline_padding_shift__border_box_rtl.xml b/tests/xml/table/table_baseline_padding_shift__border_box_rtl.xml new file mode 100644 index 000000000..40b373855 --- /dev/null +++ b/tests/xml/table/table_baseline_padding_shift__border_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+ + HH + +
+
+ + HH + +
+
+
+
+ + + + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_baseline_padding_shift__content_box_ltr.xml b/tests/xml/table/table_baseline_padding_shift__content_box_ltr.xml new file mode 100644 index 000000000..f545aa565 --- /dev/null +++ b/tests/xml/table/table_baseline_padding_shift__content_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+ + HH + +
+
+ + HH + +
+
+
+
+ + + + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_baseline_padding_shift__content_box_rtl.xml b/tests/xml/table/table_baseline_padding_shift__content_box_rtl.xml new file mode 100644 index 000000000..32cc5f022 --- /dev/null +++ b/tests/xml/table/table_baseline_padding_shift__content_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+ + HH + +
+
+ + HH + +
+
+
+
+ + + + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_baseline_row_height_growth__border_box_ltr.xml b/tests/xml/table/table_baseline_row_height_growth__border_box_ltr.xml new file mode 100644 index 000000000..916083fdc --- /dev/null +++ b/tests/xml/table/table_baseline_row_height_growth__border_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+ + HH + +
+
+ + HH + +
+
+
+
+ + + + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_baseline_row_height_growth__border_box_rtl.xml b/tests/xml/table/table_baseline_row_height_growth__border_box_rtl.xml new file mode 100644 index 000000000..9c7365766 --- /dev/null +++ b/tests/xml/table/table_baseline_row_height_growth__border_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+ + HH + +
+
+ + HH + +
+
+
+
+ + + + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_baseline_row_height_growth__content_box_ltr.xml b/tests/xml/table/table_baseline_row_height_growth__content_box_ltr.xml new file mode 100644 index 000000000..da14a6f36 --- /dev/null +++ b/tests/xml/table/table_baseline_row_height_growth__content_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+ + HH + +
+
+ + HH + +
+
+
+
+ + + + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_baseline_row_height_growth__content_box_rtl.xml b/tests/xml/table/table_baseline_row_height_growth__content_box_rtl.xml new file mode 100644 index 000000000..9d3cc5b5e --- /dev/null +++ b/tests/xml/table/table_baseline_row_height_growth__content_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+ + HH + +
+
+ + HH + +
+
+
+
+ + + + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_baseline_table_in_flex__border_box_ltr.xml b/tests/xml/table/table_baseline_table_in_flex__border_box_ltr.xml new file mode 100644 index 000000000..5b68dec46 --- /dev/null +++ b/tests/xml/table/table_baseline_table_in_flex__border_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+ + HH + +
+
+
+
+ + HH + +
+
+
+
+
+ + + + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_baseline_table_in_flex__border_box_rtl.xml b/tests/xml/table/table_baseline_table_in_flex__border_box_rtl.xml new file mode 100644 index 000000000..6b4d93896 --- /dev/null +++ b/tests/xml/table/table_baseline_table_in_flex__border_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+ + HH + +
+
+
+
+ + HH + +
+
+
+
+
+ + + + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_baseline_table_in_flex__content_box_ltr.xml b/tests/xml/table/table_baseline_table_in_flex__content_box_ltr.xml new file mode 100644 index 000000000..714632a38 --- /dev/null +++ b/tests/xml/table/table_baseline_table_in_flex__content_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+ + HH + +
+
+
+
+ + HH + +
+
+
+
+
+ + + + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_baseline_table_in_flex__content_box_rtl.xml b/tests/xml/table/table_baseline_table_in_flex__content_box_rtl.xml new file mode 100644 index 000000000..9a7576f0d --- /dev/null +++ b/tests/xml/table/table_baseline_table_in_flex__content_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+ + HH + +
+
+
+
+ + HH + +
+
+
+
+
+ + + + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_basic_cell_padding_border__border_box_ltr.xml b/tests/xml/table/table_basic_cell_padding_border__border_box_ltr.xml new file mode 100644 index 000000000..5a75d8925 --- /dev/null +++ b/tests/xml/table/table_basic_cell_padding_border__border_box_ltr.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_basic_cell_padding_border__border_box_rtl.xml b/tests/xml/table/table_basic_cell_padding_border__border_box_rtl.xml new file mode 100644 index 000000000..4b055cdfd --- /dev/null +++ b/tests/xml/table/table_basic_cell_padding_border__border_box_rtl.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_basic_cell_padding_border__content_box_ltr.xml b/tests/xml/table/table_basic_cell_padding_border__content_box_ltr.xml new file mode 100644 index 000000000..edc07f29d --- /dev/null +++ b/tests/xml/table/table_basic_cell_padding_border__content_box_ltr.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_basic_cell_padding_border__content_box_rtl.xml b/tests/xml/table/table_basic_cell_padding_border__content_box_rtl.xml new file mode 100644 index 000000000..e9748564b --- /dev/null +++ b/tests/xml/table/table_basic_cell_padding_border__content_box_rtl.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_basic_cell_text__border_box_ltr.xml b/tests/xml/table/table_basic_cell_text__border_box_ltr.xml new file mode 100644 index 000000000..db7ffe964 --- /dev/null +++ b/tests/xml/table/table_basic_cell_text__border_box_ltr.xml @@ -0,0 +1,23 @@ + + + +
+
+
+ + HH​HH + +
+
+
+ + + + + + + + + + +
diff --git a/tests/xml/table/table_basic_cell_text__border_box_rtl.xml b/tests/xml/table/table_basic_cell_text__border_box_rtl.xml new file mode 100644 index 000000000..4e63ba46f --- /dev/null +++ b/tests/xml/table/table_basic_cell_text__border_box_rtl.xml @@ -0,0 +1,23 @@ + + + +
+
+
+ + HH​HH + +
+
+
+ + + + + + + + + + +
diff --git a/tests/xml/table/table_basic_cell_text__content_box_ltr.xml b/tests/xml/table/table_basic_cell_text__content_box_ltr.xml new file mode 100644 index 000000000..e420c431b --- /dev/null +++ b/tests/xml/table/table_basic_cell_text__content_box_ltr.xml @@ -0,0 +1,23 @@ + + + +
+
+
+ + HH​HH + +
+
+
+ + + + + + + + + + +
diff --git a/tests/xml/table/table_basic_cell_text__content_box_rtl.xml b/tests/xml/table/table_basic_cell_text__content_box_rtl.xml new file mode 100644 index 000000000..f168fa132 --- /dev/null +++ b/tests/xml/table/table_basic_cell_text__content_box_rtl.xml @@ -0,0 +1,23 @@ + + + +
+
+
+ + HH​HH + +
+
+
+ + + + + + + + + + +
diff --git a/tests/xml/table/table_basic_empty__border_box_ltr.xml b/tests/xml/table/table_basic_empty__border_box_ltr.xml new file mode 100644 index 000000000..525b2eda3 --- /dev/null +++ b/tests/xml/table/table_basic_empty__border_box_ltr.xml @@ -0,0 +1,9 @@ + + + +
+ + + + + diff --git a/tests/xml/table/table_basic_empty__border_box_rtl.xml b/tests/xml/table/table_basic_empty__border_box_rtl.xml new file mode 100644 index 000000000..e61ec3913 --- /dev/null +++ b/tests/xml/table/table_basic_empty__border_box_rtl.xml @@ -0,0 +1,9 @@ + + + +
+ + + + + diff --git a/tests/xml/table/table_basic_empty__content_box_ltr.xml b/tests/xml/table/table_basic_empty__content_box_ltr.xml new file mode 100644 index 000000000..c192ceced --- /dev/null +++ b/tests/xml/table/table_basic_empty__content_box_ltr.xml @@ -0,0 +1,9 @@ + + + +
+ + + + + diff --git a/tests/xml/table/table_basic_empty__content_box_rtl.xml b/tests/xml/table/table_basic_empty__content_box_rtl.xml new file mode 100644 index 000000000..e295195ca --- /dev/null +++ b/tests/xml/table/table_basic_empty__content_box_rtl.xml @@ -0,0 +1,9 @@ + + + +
+ + + + + diff --git a/tests/xml/table/table_basic_fixed_size__border_box_ltr.xml b/tests/xml/table/table_basic_fixed_size__border_box_ltr.xml new file mode 100644 index 000000000..b0574f117 --- /dev/null +++ b/tests/xml/table/table_basic_fixed_size__border_box_ltr.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_basic_fixed_size__border_box_rtl.xml b/tests/xml/table/table_basic_fixed_size__border_box_rtl.xml new file mode 100644 index 000000000..1ec83ca35 --- /dev/null +++ b/tests/xml/table/table_basic_fixed_size__border_box_rtl.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_basic_fixed_size__content_box_ltr.xml b/tests/xml/table/table_basic_fixed_size__content_box_ltr.xml new file mode 100644 index 000000000..316e3c8da --- /dev/null +++ b/tests/xml/table/table_basic_fixed_size__content_box_ltr.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_basic_fixed_size__content_box_rtl.xml b/tests/xml/table/table_basic_fixed_size__content_box_rtl.xml new file mode 100644 index 000000000..2e5906ec7 --- /dev/null +++ b/tests/xml/table/table_basic_fixed_size__content_box_rtl.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_basic_single_cell__border_box_ltr.xml b/tests/xml/table/table_basic_single_cell__border_box_ltr.xml new file mode 100644 index 000000000..11ec984e8 --- /dev/null +++ b/tests/xml/table/table_basic_single_cell__border_box_ltr.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_basic_single_cell__border_box_rtl.xml b/tests/xml/table/table_basic_single_cell__border_box_rtl.xml new file mode 100644 index 000000000..c8af7f4b6 --- /dev/null +++ b/tests/xml/table/table_basic_single_cell__border_box_rtl.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_basic_single_cell__content_box_ltr.xml b/tests/xml/table/table_basic_single_cell__content_box_ltr.xml new file mode 100644 index 000000000..19329d156 --- /dev/null +++ b/tests/xml/table/table_basic_single_cell__content_box_ltr.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_basic_single_cell__content_box_rtl.xml b/tests/xml/table/table_basic_single_cell__content_box_rtl.xml new file mode 100644 index 000000000..349fcfb22 --- /dev/null +++ b/tests/xml/table/table_basic_single_cell__content_box_rtl.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_basic_single_row_three_cells__border_box_ltr.xml b/tests/xml/table/table_basic_single_row_three_cells__border_box_ltr.xml new file mode 100644 index 000000000..cad6a4663 --- /dev/null +++ b/tests/xml/table/table_basic_single_row_three_cells__border_box_ltr.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_basic_single_row_three_cells__border_box_rtl.xml b/tests/xml/table/table_basic_single_row_three_cells__border_box_rtl.xml new file mode 100644 index 000000000..c8158a9f2 --- /dev/null +++ b/tests/xml/table/table_basic_single_row_three_cells__border_box_rtl.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_basic_single_row_three_cells__content_box_ltr.xml b/tests/xml/table/table_basic_single_row_three_cells__content_box_ltr.xml new file mode 100644 index 000000000..b68413151 --- /dev/null +++ b/tests/xml/table/table_basic_single_row_three_cells__content_box_ltr.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_basic_single_row_three_cells__content_box_rtl.xml b/tests/xml/table/table_basic_single_row_three_cells__content_box_rtl.xml new file mode 100644 index 000000000..81deebad5 --- /dev/null +++ b/tests/xml/table/table_basic_single_row_three_cells__content_box_rtl.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_basic_two_by_two__border_box_ltr.xml b/tests/xml/table/table_basic_two_by_two__border_box_ltr.xml new file mode 100644 index 000000000..2753523c4 --- /dev/null +++ b/tests/xml/table/table_basic_two_by_two__border_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_basic_two_by_two__border_box_rtl.xml b/tests/xml/table/table_basic_two_by_two__border_box_rtl.xml new file mode 100644 index 000000000..cb35f014c --- /dev/null +++ b/tests/xml/table/table_basic_two_by_two__border_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_basic_two_by_two__content_box_ltr.xml b/tests/xml/table/table_basic_two_by_two__content_box_ltr.xml new file mode 100644 index 000000000..fcdea3dc0 --- /dev/null +++ b/tests/xml/table/table_basic_two_by_two__content_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_basic_two_by_two__content_box_rtl.xml b/tests/xml/table/table_basic_two_by_two__content_box_rtl.xml new file mode 100644 index 000000000..a46ac20fe --- /dev/null +++ b/tests/xml/table/table_basic_two_by_two__content_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_auto_columns__border_box_ltr.xml b/tests/xml/table/table_colspan_auto_columns__border_box_ltr.xml new file mode 100644 index 000000000..1da85c913 --- /dev/null +++ b/tests/xml/table/table_colspan_auto_columns__border_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+ + HHHHHH + +
+
+ + HH + + + HH + +
+
+
+ + + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_colspan_auto_columns__border_box_rtl.xml b/tests/xml/table/table_colspan_auto_columns__border_box_rtl.xml new file mode 100644 index 000000000..c7e026b8c --- /dev/null +++ b/tests/xml/table/table_colspan_auto_columns__border_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+ + HHHHHH + +
+
+ + HH + + + HH + +
+
+
+ + + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_colspan_auto_columns__content_box_ltr.xml b/tests/xml/table/table_colspan_auto_columns__content_box_ltr.xml new file mode 100644 index 000000000..a755e6b5a --- /dev/null +++ b/tests/xml/table/table_colspan_auto_columns__content_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+ + HHHHHH + +
+
+ + HH + + + HH + +
+
+
+ + + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_colspan_auto_columns__content_box_rtl.xml b/tests/xml/table/table_colspan_auto_columns__content_box_rtl.xml new file mode 100644 index 000000000..a141b1a0b --- /dev/null +++ b/tests/xml/table/table_colspan_auto_columns__content_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+ + HHHHHH + +
+
+ + HH + + + HH + +
+
+
+ + + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_colspan_fixed_columns__border_box_ltr.xml b/tests/xml/table/table_colspan_fixed_columns__border_box_ltr.xml new file mode 100644 index 000000000..a7ba050da --- /dev/null +++ b/tests/xml/table/table_colspan_fixed_columns__border_box_ltr.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_fixed_columns__border_box_rtl.xml b/tests/xml/table/table_colspan_fixed_columns__border_box_rtl.xml new file mode 100644 index 000000000..b123b6dbf --- /dev/null +++ b/tests/xml/table/table_colspan_fixed_columns__border_box_rtl.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_fixed_columns__content_box_ltr.xml b/tests/xml/table/table_colspan_fixed_columns__content_box_ltr.xml new file mode 100644 index 000000000..a85f79940 --- /dev/null +++ b/tests/xml/table/table_colspan_fixed_columns__content_box_ltr.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_fixed_columns__content_box_rtl.xml b/tests/xml/table/table_colspan_fixed_columns__content_box_rtl.xml new file mode 100644 index 000000000..03888781b --- /dev/null +++ b/tests/xml/table/table_colspan_fixed_columns__content_box_rtl.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_full_row__border_box_ltr.xml b/tests/xml/table/table_colspan_full_row__border_box_ltr.xml new file mode 100644 index 000000000..652219165 --- /dev/null +++ b/tests/xml/table/table_colspan_full_row__border_box_ltr.xml @@ -0,0 +1,33 @@ + + + +
+
+
+ + HHHHHHHH + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_full_row__border_box_rtl.xml b/tests/xml/table/table_colspan_full_row__border_box_rtl.xml new file mode 100644 index 000000000..718da32c4 --- /dev/null +++ b/tests/xml/table/table_colspan_full_row__border_box_rtl.xml @@ -0,0 +1,33 @@ + + + +
+
+
+ + HHHHHHHH + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_full_row__content_box_ltr.xml b/tests/xml/table/table_colspan_full_row__content_box_ltr.xml new file mode 100644 index 000000000..0b3080433 --- /dev/null +++ b/tests/xml/table/table_colspan_full_row__content_box_ltr.xml @@ -0,0 +1,33 @@ + + + +
+
+
+ + HHHHHHHH + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_full_row__content_box_rtl.xml b/tests/xml/table/table_colspan_full_row__content_box_rtl.xml new file mode 100644 index 000000000..6cdf9e1e5 --- /dev/null +++ b/tests/xml/table/table_colspan_full_row__content_box_rtl.xml @@ -0,0 +1,33 @@ + + + +
+
+
+ + HHHHHHHH + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_over_active_rowspan__border_box_ltr.xml b/tests/xml/table/table_colspan_over_active_rowspan__border_box_ltr.xml new file mode 100644 index 000000000..ffdd75ad1 --- /dev/null +++ b/tests/xml/table/table_colspan_over_active_rowspan__border_box_ltr.xml @@ -0,0 +1,37 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_over_active_rowspan__border_box_rtl.xml b/tests/xml/table/table_colspan_over_active_rowspan__border_box_rtl.xml new file mode 100644 index 000000000..8592e60ec --- /dev/null +++ b/tests/xml/table/table_colspan_over_active_rowspan__border_box_rtl.xml @@ -0,0 +1,37 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_over_active_rowspan__content_box_ltr.xml b/tests/xml/table/table_colspan_over_active_rowspan__content_box_ltr.xml new file mode 100644 index 000000000..766a6210d --- /dev/null +++ b/tests/xml/table/table_colspan_over_active_rowspan__content_box_ltr.xml @@ -0,0 +1,37 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_over_active_rowspan__content_box_rtl.xml b/tests/xml/table/table_colspan_over_active_rowspan__content_box_rtl.xml new file mode 100644 index 000000000..e88d95570 --- /dev/null +++ b/tests/xml/table/table_colspan_over_active_rowspan__content_box_rtl.xml @@ -0,0 +1,37 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_percent_width__border_box_ltr.xml b/tests/xml/table/table_colspan_percent_width__border_box_ltr.xml new file mode 100644 index 000000000..6533c5d64 --- /dev/null +++ b/tests/xml/table/table_colspan_percent_width__border_box_ltr.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_percent_width__border_box_rtl.xml b/tests/xml/table/table_colspan_percent_width__border_box_rtl.xml new file mode 100644 index 000000000..d4fbda54c --- /dev/null +++ b/tests/xml/table/table_colspan_percent_width__border_box_rtl.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_percent_width__content_box_ltr.xml b/tests/xml/table/table_colspan_percent_width__content_box_ltr.xml new file mode 100644 index 000000000..ec55d1d71 --- /dev/null +++ b/tests/xml/table/table_colspan_percent_width__content_box_ltr.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_percent_width__content_box_rtl.xml b/tests/xml/table/table_colspan_percent_width__content_box_rtl.xml new file mode 100644 index 000000000..e104ce154 --- /dev/null +++ b/tests/xml/table/table_colspan_percent_width__content_box_rtl.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_two_of_three__border_box_ltr.xml b/tests/xml/table/table_colspan_two_of_three__border_box_ltr.xml new file mode 100644 index 000000000..5a60440fc --- /dev/null +++ b/tests/xml/table/table_colspan_two_of_three__border_box_ltr.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_two_of_three__border_box_rtl.xml b/tests/xml/table/table_colspan_two_of_three__border_box_rtl.xml new file mode 100644 index 000000000..829d86d9d --- /dev/null +++ b/tests/xml/table/table_colspan_two_of_three__border_box_rtl.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_two_of_three__content_box_ltr.xml b/tests/xml/table/table_colspan_two_of_three__content_box_ltr.xml new file mode 100644 index 000000000..f254d21a7 --- /dev/null +++ b/tests/xml/table/table_colspan_two_of_three__content_box_ltr.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_two_of_three__content_box_rtl.xml b/tests/xml/table/table_colspan_two_of_three__content_box_rtl.xml new file mode 100644 index 000000000..3519bb34b --- /dev/null +++ b/tests/xml/table/table_colspan_two_of_three__content_box_rtl.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_wider_than_columns__border_box_ltr.xml b/tests/xml/table/table_colspan_wider_than_columns__border_box_ltr.xml new file mode 100644 index 000000000..b1da9394c --- /dev/null +++ b/tests/xml/table/table_colspan_wider_than_columns__border_box_ltr.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_wider_than_columns__border_box_rtl.xml b/tests/xml/table/table_colspan_wider_than_columns__border_box_rtl.xml new file mode 100644 index 000000000..db11e7bc4 --- /dev/null +++ b/tests/xml/table/table_colspan_wider_than_columns__border_box_rtl.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_wider_than_columns__content_box_ltr.xml b/tests/xml/table/table_colspan_wider_than_columns__content_box_ltr.xml new file mode 100644 index 000000000..5e01ead27 --- /dev/null +++ b/tests/xml/table/table_colspan_wider_than_columns__content_box_ltr.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_wider_than_columns__content_box_rtl.xml b/tests/xml/table/table_colspan_wider_than_columns__content_box_rtl.xml new file mode 100644 index 000000000..b5170bf39 --- /dev/null +++ b/tests/xml/table/table_colspan_wider_than_columns__content_box_rtl.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_with_border_spacing__border_box_ltr.xml b/tests/xml/table/table_colspan_with_border_spacing__border_box_ltr.xml new file mode 100644 index 000000000..c7b4cd083 --- /dev/null +++ b/tests/xml/table/table_colspan_with_border_spacing__border_box_ltr.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_with_border_spacing__border_box_rtl.xml b/tests/xml/table/table_colspan_with_border_spacing__border_box_rtl.xml new file mode 100644 index 000000000..567c3b64d --- /dev/null +++ b/tests/xml/table/table_colspan_with_border_spacing__border_box_rtl.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_with_border_spacing__content_box_ltr.xml b/tests/xml/table/table_colspan_with_border_spacing__content_box_ltr.xml new file mode 100644 index 000000000..f729ec61a --- /dev/null +++ b/tests/xml/table/table_colspan_with_border_spacing__content_box_ltr.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_with_border_spacing__content_box_rtl.xml b/tests/xml/table/table_colspan_with_border_spacing__content_box_rtl.xml new file mode 100644 index 000000000..48a01adb8 --- /dev/null +++ b/tests/xml/table/table_colspan_with_border_spacing__content_box_rtl.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_with_percent_column__border_box_ltr.xml b/tests/xml/table/table_colspan_with_percent_column__border_box_ltr.xml new file mode 100644 index 000000000..933fe42b7 --- /dev/null +++ b/tests/xml/table/table_colspan_with_percent_column__border_box_ltr.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_with_percent_column__border_box_rtl.xml b/tests/xml/table/table_colspan_with_percent_column__border_box_rtl.xml new file mode 100644 index 000000000..b2e224c19 --- /dev/null +++ b/tests/xml/table/table_colspan_with_percent_column__border_box_rtl.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_with_percent_column__content_box_ltr.xml b/tests/xml/table/table_colspan_with_percent_column__content_box_ltr.xml new file mode 100644 index 000000000..f395861c4 --- /dev/null +++ b/tests/xml/table/table_colspan_with_percent_column__content_box_ltr.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_colspan_with_percent_column__content_box_rtl.xml b/tests/xml/table/table_colspan_with_percent_column__content_box_rtl.xml new file mode 100644 index 000000000..57af240f1 --- /dev/null +++ b/tests/xml/table/table_colspan_with_percent_column__content_box_rtl.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_auto_content__border_box_ltr.xml b/tests/xml/table/table_column_width_auto_content__border_box_ltr.xml new file mode 100644 index 000000000..3f9b8069a --- /dev/null +++ b/tests/xml/table/table_column_width_auto_content__border_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+ + HH + + + HHHH + +
+
+
+ + + + + + + + + + + +
diff --git a/tests/xml/table/table_column_width_auto_content__border_box_rtl.xml b/tests/xml/table/table_column_width_auto_content__border_box_rtl.xml new file mode 100644 index 000000000..ac149332f --- /dev/null +++ b/tests/xml/table/table_column_width_auto_content__border_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+ + HH + + + HHHH + +
+
+
+ + + + + + + + + + + +
diff --git a/tests/xml/table/table_column_width_auto_content__content_box_ltr.xml b/tests/xml/table/table_column_width_auto_content__content_box_ltr.xml new file mode 100644 index 000000000..4e0b82397 --- /dev/null +++ b/tests/xml/table/table_column_width_auto_content__content_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+ + HH + + + HHHH + +
+
+
+ + + + + + + + + + + +
diff --git a/tests/xml/table/table_column_width_auto_content__content_box_rtl.xml b/tests/xml/table/table_column_width_auto_content__content_box_rtl.xml new file mode 100644 index 000000000..50e32fe97 --- /dev/null +++ b/tests/xml/table/table_column_width_auto_content__content_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+ + HH + + + HHHH + +
+
+
+ + + + + + + + + + + +
diff --git a/tests/xml/table/table_column_width_auto_three_columns_text__border_box_ltr.xml b/tests/xml/table/table_column_width_auto_three_columns_text__border_box_ltr.xml new file mode 100644 index 000000000..ad370c195 --- /dev/null +++ b/tests/xml/table/table_column_width_auto_three_columns_text__border_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+ + HH + + + HHHH + + + HHHHHH + +
+
+
+ + + + + + + + + + + + +
diff --git a/tests/xml/table/table_column_width_auto_three_columns_text__border_box_rtl.xml b/tests/xml/table/table_column_width_auto_three_columns_text__border_box_rtl.xml new file mode 100644 index 000000000..c33d6d372 --- /dev/null +++ b/tests/xml/table/table_column_width_auto_three_columns_text__border_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+ + HH + + + HHHH + + + HHHHHH + +
+
+
+ + + + + + + + + + + + +
diff --git a/tests/xml/table/table_column_width_auto_three_columns_text__content_box_ltr.xml b/tests/xml/table/table_column_width_auto_three_columns_text__content_box_ltr.xml new file mode 100644 index 000000000..c25c8072e --- /dev/null +++ b/tests/xml/table/table_column_width_auto_three_columns_text__content_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+ + HH + + + HHHH + + + HHHHHH + +
+
+
+ + + + + + + + + + + + +
diff --git a/tests/xml/table/table_column_width_auto_three_columns_text__content_box_rtl.xml b/tests/xml/table/table_column_width_auto_three_columns_text__content_box_rtl.xml new file mode 100644 index 000000000..c232d9c6a --- /dev/null +++ b/tests/xml/table/table_column_width_auto_three_columns_text__content_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+ + HH + + + HHHH + + + HHHHHH + +
+
+
+ + + + + + + + + + + + +
diff --git a/tests/xml/table/table_column_width_fixed_px__border_box_ltr.xml b/tests/xml/table/table_column_width_fixed_px__border_box_ltr.xml new file mode 100644 index 000000000..ee2233d15 --- /dev/null +++ b/tests/xml/table/table_column_width_fixed_px__border_box_ltr.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_fixed_px__border_box_rtl.xml b/tests/xml/table/table_column_width_fixed_px__border_box_rtl.xml new file mode 100644 index 000000000..6c8bbf5d3 --- /dev/null +++ b/tests/xml/table/table_column_width_fixed_px__border_box_rtl.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_fixed_px__content_box_ltr.xml b/tests/xml/table/table_column_width_fixed_px__content_box_ltr.xml new file mode 100644 index 000000000..6e6ffdf64 --- /dev/null +++ b/tests/xml/table/table_column_width_fixed_px__content_box_ltr.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_fixed_px__content_box_rtl.xml b/tests/xml/table/table_column_width_fixed_px__content_box_rtl.xml new file mode 100644 index 000000000..632fb0bff --- /dev/null +++ b/tests/xml/table/table_column_width_fixed_px__content_box_rtl.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_max_across_rows__border_box_ltr.xml b/tests/xml/table/table_column_width_max_across_rows__border_box_ltr.xml new file mode 100644 index 000000000..9110d74a7 --- /dev/null +++ b/tests/xml/table/table_column_width_max_across_rows__border_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_max_across_rows__border_box_rtl.xml b/tests/xml/table/table_column_width_max_across_rows__border_box_rtl.xml new file mode 100644 index 000000000..4e2cfea0e --- /dev/null +++ b/tests/xml/table/table_column_width_max_across_rows__border_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_max_across_rows__content_box_ltr.xml b/tests/xml/table/table_column_width_max_across_rows__content_box_ltr.xml new file mode 100644 index 000000000..fe444adf4 --- /dev/null +++ b/tests/xml/table/table_column_width_max_across_rows__content_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_max_across_rows__content_box_rtl.xml b/tests/xml/table/table_column_width_max_across_rows__content_box_rtl.xml new file mode 100644 index 000000000..dc65e77eb --- /dev/null +++ b/tests/xml/table/table_column_width_max_across_rows__content_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_max_width__border_box_ltr.xml b/tests/xml/table/table_column_width_max_width__border_box_ltr.xml new file mode 100644 index 000000000..f72ef5544 --- /dev/null +++ b/tests/xml/table/table_column_width_max_width__border_box_ltr.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_max_width__border_box_rtl.xml b/tests/xml/table/table_column_width_max_width__border_box_rtl.xml new file mode 100644 index 000000000..4167dacac --- /dev/null +++ b/tests/xml/table/table_column_width_max_width__border_box_rtl.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_max_width__content_box_ltr.xml b/tests/xml/table/table_column_width_max_width__content_box_ltr.xml new file mode 100644 index 000000000..ef8d2e1ed --- /dev/null +++ b/tests/xml/table/table_column_width_max_width__content_box_ltr.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_max_width__content_box_rtl.xml b/tests/xml/table/table_column_width_max_width__content_box_rtl.xml new file mode 100644 index 000000000..051106240 --- /dev/null +++ b/tests/xml/table/table_column_width_max_width__content_box_rtl.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_min_width__border_box_ltr.xml b/tests/xml/table/table_column_width_min_width__border_box_ltr.xml new file mode 100644 index 000000000..a3b268634 --- /dev/null +++ b/tests/xml/table/table_column_width_min_width__border_box_ltr.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_min_width__border_box_rtl.xml b/tests/xml/table/table_column_width_min_width__border_box_rtl.xml new file mode 100644 index 000000000..923d7ab1c --- /dev/null +++ b/tests/xml/table/table_column_width_min_width__border_box_rtl.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_min_width__content_box_ltr.xml b/tests/xml/table/table_column_width_min_width__content_box_ltr.xml new file mode 100644 index 000000000..f1106983d --- /dev/null +++ b/tests/xml/table/table_column_width_min_width__content_box_ltr.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_min_width__content_box_rtl.xml b/tests/xml/table/table_column_width_min_width__content_box_rtl.xml new file mode 100644 index 000000000..7353d025c --- /dev/null +++ b/tests/xml/table/table_column_width_min_width__content_box_rtl.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_mixed__border_box_ltr.xml b/tests/xml/table/table_column_width_mixed__border_box_ltr.xml new file mode 100644 index 000000000..d69d90d7f --- /dev/null +++ b/tests/xml/table/table_column_width_mixed__border_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+ + HHHH + +
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_mixed__border_box_rtl.xml b/tests/xml/table/table_column_width_mixed__border_box_rtl.xml new file mode 100644 index 000000000..6c154505d --- /dev/null +++ b/tests/xml/table/table_column_width_mixed__border_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+ + HHHH + +
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_mixed__content_box_ltr.xml b/tests/xml/table/table_column_width_mixed__content_box_ltr.xml new file mode 100644 index 000000000..375f9bcf1 --- /dev/null +++ b/tests/xml/table/table_column_width_mixed__content_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+ + HHHH + +
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_mixed__content_box_rtl.xml b/tests/xml/table/table_column_width_mixed__content_box_rtl.xml new file mode 100644 index 000000000..b6f07a7e8 --- /dev/null +++ b/tests/xml/table/table_column_width_mixed__content_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+ + HHHH + +
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_percent__border_box_ltr.xml b/tests/xml/table/table_column_width_percent__border_box_ltr.xml new file mode 100644 index 000000000..80b42f7d1 --- /dev/null +++ b/tests/xml/table/table_column_width_percent__border_box_ltr.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_percent__border_box_rtl.xml b/tests/xml/table/table_column_width_percent__border_box_rtl.xml new file mode 100644 index 000000000..94ff398db --- /dev/null +++ b/tests/xml/table/table_column_width_percent__border_box_rtl.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_percent__content_box_ltr.xml b/tests/xml/table/table_column_width_percent__content_box_ltr.xml new file mode 100644 index 000000000..4da300e24 --- /dev/null +++ b/tests/xml/table/table_column_width_percent__content_box_ltr.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_percent__content_box_rtl.xml b/tests/xml/table/table_column_width_percent__content_box_rtl.xml new file mode 100644 index 000000000..dcb20ce4a --- /dev/null +++ b/tests/xml/table/table_column_width_percent__content_box_rtl.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_percent_and_auto_extra_space__border_box_ltr.xml b/tests/xml/table/table_column_width_percent_and_auto_extra_space__border_box_ltr.xml new file mode 100644 index 000000000..f65b7b300 --- /dev/null +++ b/tests/xml/table/table_column_width_percent_and_auto_extra_space__border_box_ltr.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+ + HH + +
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_percent_and_auto_extra_space__border_box_rtl.xml b/tests/xml/table/table_column_width_percent_and_auto_extra_space__border_box_rtl.xml new file mode 100644 index 000000000..a4ce8f916 --- /dev/null +++ b/tests/xml/table/table_column_width_percent_and_auto_extra_space__border_box_rtl.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+ + HH + +
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_percent_and_auto_extra_space__content_box_ltr.xml b/tests/xml/table/table_column_width_percent_and_auto_extra_space__content_box_ltr.xml new file mode 100644 index 000000000..ecb421280 --- /dev/null +++ b/tests/xml/table/table_column_width_percent_and_auto_extra_space__content_box_ltr.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+ + HH + +
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_percent_and_auto_extra_space__content_box_rtl.xml b/tests/xml/table/table_column_width_percent_and_auto_extra_space__content_box_rtl.xml new file mode 100644 index 000000000..f631f7300 --- /dev/null +++ b/tests/xml/table/table_column_width_percent_and_auto_extra_space__content_box_rtl.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+ + HH + +
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_table_narrower_than_max_content__border_box_ltr.xml b/tests/xml/table/table_column_width_table_narrower_than_max_content__border_box_ltr.xml new file mode 100644 index 000000000..f2f6065c8 --- /dev/null +++ b/tests/xml/table/table_column_width_table_narrower_than_max_content__border_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+ + HHHH​HHHH + + + HHHH​HHHH + +
+
+
+ + + + + + + + + + + +
diff --git a/tests/xml/table/table_column_width_table_narrower_than_max_content__border_box_rtl.xml b/tests/xml/table/table_column_width_table_narrower_than_max_content__border_box_rtl.xml new file mode 100644 index 000000000..19961e8d5 --- /dev/null +++ b/tests/xml/table/table_column_width_table_narrower_than_max_content__border_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+ + HHHH​HHHH + + + HHHH​HHHH + +
+
+
+ + + + + + + + + + + +
diff --git a/tests/xml/table/table_column_width_table_narrower_than_max_content__content_box_ltr.xml b/tests/xml/table/table_column_width_table_narrower_than_max_content__content_box_ltr.xml new file mode 100644 index 000000000..f29679c5e --- /dev/null +++ b/tests/xml/table/table_column_width_table_narrower_than_max_content__content_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+ + HHHH​HHHH + + + HHHH​HHHH + +
+
+
+ + + + + + + + + + + +
diff --git a/tests/xml/table/table_column_width_table_narrower_than_max_content__content_box_rtl.xml b/tests/xml/table/table_column_width_table_narrower_than_max_content__content_box_rtl.xml new file mode 100644 index 000000000..23a22fc53 --- /dev/null +++ b/tests/xml/table/table_column_width_table_narrower_than_max_content__content_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+ + HHHH​HHHH + + + HHHH​HHHH + +
+
+
+ + + + + + + + + + + +
diff --git a/tests/xml/table/table_column_width_table_wider_than_content__border_box_ltr.xml b/tests/xml/table/table_column_width_table_wider_than_content__border_box_ltr.xml new file mode 100644 index 000000000..4a03a6883 --- /dev/null +++ b/tests/xml/table/table_column_width_table_wider_than_content__border_box_ltr.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_table_wider_than_content__border_box_rtl.xml b/tests/xml/table/table_column_width_table_wider_than_content__border_box_rtl.xml new file mode 100644 index 000000000..9cb5f5432 --- /dev/null +++ b/tests/xml/table/table_column_width_table_wider_than_content__border_box_rtl.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_table_wider_than_content__content_box_ltr.xml b/tests/xml/table/table_column_width_table_wider_than_content__content_box_ltr.xml new file mode 100644 index 000000000..e1dd656b4 --- /dev/null +++ b/tests/xml/table/table_column_width_table_wider_than_content__content_box_ltr.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_column_width_table_wider_than_content__content_box_rtl.xml b/tests/xml/table/table_column_width_table_wider_than_content__content_box_rtl.xml new file mode 100644 index 000000000..8bf0d159c --- /dev/null +++ b/tests/xml/table/table_column_width_table_wider_than_content__content_box_rtl.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_auto_width__border_box_ltr.xml b/tests/xml/table/table_fixed_layout_auto_width__border_box_ltr.xml new file mode 100644 index 000000000..ef6016e89 --- /dev/null +++ b/tests/xml/table/table_fixed_layout_auto_width__border_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_auto_width__border_box_rtl.xml b/tests/xml/table/table_fixed_layout_auto_width__border_box_rtl.xml new file mode 100644 index 000000000..c077a54f5 --- /dev/null +++ b/tests/xml/table/table_fixed_layout_auto_width__border_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_auto_width__content_box_ltr.xml b/tests/xml/table/table_fixed_layout_auto_width__content_box_ltr.xml new file mode 100644 index 000000000..59e3fe652 --- /dev/null +++ b/tests/xml/table/table_fixed_layout_auto_width__content_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_auto_width__content_box_rtl.xml b/tests/xml/table/table_fixed_layout_auto_width__content_box_rtl.xml new file mode 100644 index 000000000..922c6b9cc --- /dev/null +++ b/tests/xml/table/table_fixed_layout_auto_width__content_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_first_row_widths__border_box_ltr.xml b/tests/xml/table/table_fixed_layout_first_row_widths__border_box_ltr.xml new file mode 100644 index 000000000..94858bccb --- /dev/null +++ b/tests/xml/table/table_fixed_layout_first_row_widths__border_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+ + HHHHHHHH + + + HH + +
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_first_row_widths__border_box_rtl.xml b/tests/xml/table/table_fixed_layout_first_row_widths__border_box_rtl.xml new file mode 100644 index 000000000..be90bfd48 --- /dev/null +++ b/tests/xml/table/table_fixed_layout_first_row_widths__border_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+ + HHHHHHHH + + + HH + +
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_first_row_widths__content_box_ltr.xml b/tests/xml/table/table_fixed_layout_first_row_widths__content_box_ltr.xml new file mode 100644 index 000000000..503911ac4 --- /dev/null +++ b/tests/xml/table/table_fixed_layout_first_row_widths__content_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+ + HHHHHHHH + + + HH + +
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_first_row_widths__content_box_rtl.xml b/tests/xml/table/table_fixed_layout_first_row_widths__content_box_rtl.xml new file mode 100644 index 000000000..8bc4b6f80 --- /dev/null +++ b/tests/xml/table/table_fixed_layout_first_row_widths__content_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+ + HHHHHHHH + + + HH + +
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_later_row_overflow__border_box_ltr.xml b/tests/xml/table/table_fixed_layout_later_row_overflow__border_box_ltr.xml new file mode 100644 index 000000000..605f8a343 --- /dev/null +++ b/tests/xml/table/table_fixed_layout_later_row_overflow__border_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_later_row_overflow__border_box_rtl.xml b/tests/xml/table/table_fixed_layout_later_row_overflow__border_box_rtl.xml new file mode 100644 index 000000000..0a3baed75 --- /dev/null +++ b/tests/xml/table/table_fixed_layout_later_row_overflow__border_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_later_row_overflow__content_box_ltr.xml b/tests/xml/table/table_fixed_layout_later_row_overflow__content_box_ltr.xml new file mode 100644 index 000000000..e6609bb92 --- /dev/null +++ b/tests/xml/table/table_fixed_layout_later_row_overflow__content_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_later_row_overflow__content_box_rtl.xml b/tests/xml/table/table_fixed_layout_later_row_overflow__content_box_rtl.xml new file mode 100644 index 000000000..17ff1a4bd --- /dev/null +++ b/tests/xml/table/table_fixed_layout_later_row_overflow__content_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_missing_cells_in_first_row__border_box_ltr.xml b/tests/xml/table/table_fixed_layout_missing_cells_in_first_row__border_box_ltr.xml new file mode 100644 index 000000000..6394d9ee7 --- /dev/null +++ b/tests/xml/table/table_fixed_layout_missing_cells_in_first_row__border_box_ltr.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_missing_cells_in_first_row__border_box_rtl.xml b/tests/xml/table/table_fixed_layout_missing_cells_in_first_row__border_box_rtl.xml new file mode 100644 index 000000000..01f11a74d --- /dev/null +++ b/tests/xml/table/table_fixed_layout_missing_cells_in_first_row__border_box_rtl.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_missing_cells_in_first_row__content_box_ltr.xml b/tests/xml/table/table_fixed_layout_missing_cells_in_first_row__content_box_ltr.xml new file mode 100644 index 000000000..5918cbfa1 --- /dev/null +++ b/tests/xml/table/table_fixed_layout_missing_cells_in_first_row__content_box_ltr.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_missing_cells_in_first_row__content_box_rtl.xml b/tests/xml/table/table_fixed_layout_missing_cells_in_first_row__content_box_rtl.xml new file mode 100644 index 000000000..ef32bb315 --- /dev/null +++ b/tests/xml/table/table_fixed_layout_missing_cells_in_first_row__content_box_rtl.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_overflow_content__border_box_ltr.xml b/tests/xml/table/table_fixed_layout_overflow_content__border_box_ltr.xml new file mode 100644 index 000000000..1dac413f9 --- /dev/null +++ b/tests/xml/table/table_fixed_layout_overflow_content__border_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+ + HHHH​HHHH + + + HH + +
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_overflow_content__border_box_rtl.xml b/tests/xml/table/table_fixed_layout_overflow_content__border_box_rtl.xml new file mode 100644 index 000000000..2a026d8be --- /dev/null +++ b/tests/xml/table/table_fixed_layout_overflow_content__border_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+ + HHHH​HHHH + + + HH + +
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_overflow_content__content_box_ltr.xml b/tests/xml/table/table_fixed_layout_overflow_content__content_box_ltr.xml new file mode 100644 index 000000000..c819e99b8 --- /dev/null +++ b/tests/xml/table/table_fixed_layout_overflow_content__content_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+ + HHHH​HHHH + + + HH + +
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_overflow_content__content_box_rtl.xml b/tests/xml/table/table_fixed_layout_overflow_content__content_box_rtl.xml new file mode 100644 index 000000000..2a4139cff --- /dev/null +++ b/tests/xml/table/table_fixed_layout_overflow_content__content_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+ + HHHH​HHHH + + + HH + +
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_percent_columns__border_box_ltr.xml b/tests/xml/table/table_fixed_layout_percent_columns__border_box_ltr.xml new file mode 100644 index 000000000..b14041110 --- /dev/null +++ b/tests/xml/table/table_fixed_layout_percent_columns__border_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+ + HH + + + HH + +
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_percent_columns__border_box_rtl.xml b/tests/xml/table/table_fixed_layout_percent_columns__border_box_rtl.xml new file mode 100644 index 000000000..9dcd1862f --- /dev/null +++ b/tests/xml/table/table_fixed_layout_percent_columns__border_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+ + HH + + + HH + +
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_percent_columns__content_box_ltr.xml b/tests/xml/table/table_fixed_layout_percent_columns__content_box_ltr.xml new file mode 100644 index 000000000..231820173 --- /dev/null +++ b/tests/xml/table/table_fixed_layout_percent_columns__content_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+ + HH + + + HH + +
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_percent_columns__content_box_rtl.xml b/tests/xml/table/table_fixed_layout_percent_columns__content_box_rtl.xml new file mode 100644 index 000000000..949d2c2e7 --- /dev/null +++ b/tests/xml/table/table_fixed_layout_percent_columns__content_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+ + HH + + + HH + +
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_percent_over_remainder__border_box_ltr.xml b/tests/xml/table/table_fixed_layout_percent_over_remainder__border_box_ltr.xml new file mode 100644 index 000000000..74bd78aae --- /dev/null +++ b/tests/xml/table/table_fixed_layout_percent_over_remainder__border_box_ltr.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_percent_over_remainder__border_box_rtl.xml b/tests/xml/table/table_fixed_layout_percent_over_remainder__border_box_rtl.xml new file mode 100644 index 000000000..07d1b5d9d --- /dev/null +++ b/tests/xml/table/table_fixed_layout_percent_over_remainder__border_box_rtl.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_percent_over_remainder__content_box_ltr.xml b/tests/xml/table/table_fixed_layout_percent_over_remainder__content_box_ltr.xml new file mode 100644 index 000000000..81f091690 --- /dev/null +++ b/tests/xml/table/table_fixed_layout_percent_over_remainder__content_box_ltr.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_percent_over_remainder__content_box_rtl.xml b/tests/xml/table/table_fixed_layout_percent_over_remainder__content_box_rtl.xml new file mode 100644 index 000000000..db550f8e4 --- /dev/null +++ b/tests/xml/table/table_fixed_layout_percent_over_remainder__content_box_rtl.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_with_border_spacing__border_box_ltr.xml b/tests/xml/table/table_fixed_layout_with_border_spacing__border_box_ltr.xml new file mode 100644 index 000000000..781b41aed --- /dev/null +++ b/tests/xml/table/table_fixed_layout_with_border_spacing__border_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_with_border_spacing__border_box_rtl.xml b/tests/xml/table/table_fixed_layout_with_border_spacing__border_box_rtl.xml new file mode 100644 index 000000000..20ea402e2 --- /dev/null +++ b/tests/xml/table/table_fixed_layout_with_border_spacing__border_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_with_border_spacing__content_box_ltr.xml b/tests/xml/table/table_fixed_layout_with_border_spacing__content_box_ltr.xml new file mode 100644 index 000000000..db955752e --- /dev/null +++ b/tests/xml/table/table_fixed_layout_with_border_spacing__content_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_fixed_layout_with_border_spacing__content_box_rtl.xml b/tests/xml/table/table_fixed_layout_with_border_spacing__content_box_rtl.xml new file mode 100644 index 000000000..cb77522a2 --- /dev/null +++ b/tests/xml/table/table_fixed_layout_with_border_spacing__content_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_height_over_definite_and_auto_rows__border_box_ltr.xml b/tests/xml/table/table_height_over_definite_and_auto_rows__border_box_ltr.xml new file mode 100644 index 000000000..b9e1c5a1f --- /dev/null +++ b/tests/xml/table/table_height_over_definite_and_auto_rows__border_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_height_over_definite_and_auto_rows__border_box_rtl.xml b/tests/xml/table/table_height_over_definite_and_auto_rows__border_box_rtl.xml new file mode 100644 index 000000000..fdffa9f99 --- /dev/null +++ b/tests/xml/table/table_height_over_definite_and_auto_rows__border_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_height_over_definite_and_auto_rows__content_box_ltr.xml b/tests/xml/table/table_height_over_definite_and_auto_rows__content_box_ltr.xml new file mode 100644 index 000000000..e8f7cd486 --- /dev/null +++ b/tests/xml/table/table_height_over_definite_and_auto_rows__content_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_height_over_definite_and_auto_rows__content_box_rtl.xml b/tests/xml/table/table_height_over_definite_and_auto_rows__content_box_rtl.xml new file mode 100644 index 000000000..77f794ca2 --- /dev/null +++ b/tests/xml/table/table_height_over_definite_and_auto_rows__content_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_hidden_cell__border_box_ltr.xml b/tests/xml/table/table_hidden_cell__border_box_ltr.xml new file mode 100644 index 000000000..d3d56b67e --- /dev/null +++ b/tests/xml/table/table_hidden_cell__border_box_ltr.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_hidden_cell__border_box_rtl.xml b/tests/xml/table/table_hidden_cell__border_box_rtl.xml new file mode 100644 index 000000000..6d2173f54 --- /dev/null +++ b/tests/xml/table/table_hidden_cell__border_box_rtl.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_hidden_cell__content_box_ltr.xml b/tests/xml/table/table_hidden_cell__content_box_ltr.xml new file mode 100644 index 000000000..c97beee4c --- /dev/null +++ b/tests/xml/table/table_hidden_cell__content_box_ltr.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_hidden_cell__content_box_rtl.xml b/tests/xml/table/table_hidden_cell__content_box_rtl.xml new file mode 100644 index 000000000..a1324b58d --- /dev/null +++ b/tests/xml/table/table_hidden_cell__content_box_rtl.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_hidden_row__border_box_ltr.xml b/tests/xml/table/table_hidden_row__border_box_ltr.xml new file mode 100644 index 000000000..0c5f19b8c --- /dev/null +++ b/tests/xml/table/table_hidden_row__border_box_ltr.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_hidden_row__border_box_rtl.xml b/tests/xml/table/table_hidden_row__border_box_rtl.xml new file mode 100644 index 000000000..0cad6605f --- /dev/null +++ b/tests/xml/table/table_hidden_row__border_box_rtl.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_hidden_row__content_box_ltr.xml b/tests/xml/table/table_hidden_row__content_box_ltr.xml new file mode 100644 index 000000000..cf96d07c0 --- /dev/null +++ b/tests/xml/table/table_hidden_row__content_box_ltr.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_hidden_row__content_box_rtl.xml b/tests/xml/table/table_hidden_row__content_box_rtl.xml new file mode 100644 index 000000000..97c6747be --- /dev/null +++ b/tests/xml/table/table_hidden_row__content_box_rtl.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_hidden_row_group__border_box_ltr.xml b/tests/xml/table/table_hidden_row_group__border_box_ltr.xml new file mode 100644 index 000000000..d0940153c --- /dev/null +++ b/tests/xml/table/table_hidden_row_group__border_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_hidden_row_group__border_box_rtl.xml b/tests/xml/table/table_hidden_row_group__border_box_rtl.xml new file mode 100644 index 000000000..ae28fca05 --- /dev/null +++ b/tests/xml/table/table_hidden_row_group__border_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_hidden_row_group__content_box_ltr.xml b/tests/xml/table/table_hidden_row_group__content_box_ltr.xml new file mode 100644 index 000000000..344b46205 --- /dev/null +++ b/tests/xml/table/table_hidden_row_group__content_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_hidden_row_group__content_box_rtl.xml b/tests/xml/table/table_hidden_row_group__content_box_rtl.xml new file mode 100644 index 000000000..6e86e1642 --- /dev/null +++ b/tests/xml/table/table_hidden_row_group__content_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_intrinsic_flex_item_max_content__border_box_ltr.xml b/tests/xml/table/table_intrinsic_flex_item_max_content__border_box_ltr.xml new file mode 100644 index 000000000..c3994f586 --- /dev/null +++ b/tests/xml/table/table_intrinsic_flex_item_max_content__border_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+ + HHHH​HHHH + + + HH + +
+
+
+
+ + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_intrinsic_flex_item_max_content__border_box_rtl.xml b/tests/xml/table/table_intrinsic_flex_item_max_content__border_box_rtl.xml new file mode 100644 index 000000000..764176c4a --- /dev/null +++ b/tests/xml/table/table_intrinsic_flex_item_max_content__border_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+ + HHHH​HHHH + + + HH + +
+
+
+
+ + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_intrinsic_flex_item_max_content__content_box_ltr.xml b/tests/xml/table/table_intrinsic_flex_item_max_content__content_box_ltr.xml new file mode 100644 index 000000000..3fe2664f8 --- /dev/null +++ b/tests/xml/table/table_intrinsic_flex_item_max_content__content_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+ + HHHH​HHHH + + + HH + +
+
+
+
+ + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_intrinsic_flex_item_max_content__content_box_rtl.xml b/tests/xml/table/table_intrinsic_flex_item_max_content__content_box_rtl.xml new file mode 100644 index 000000000..81cbee4a3 --- /dev/null +++ b/tests/xml/table/table_intrinsic_flex_item_max_content__content_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+ + HHHH​HHHH + + + HH + +
+
+
+
+ + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_intrinsic_flex_item_min_content__border_box_ltr.xml b/tests/xml/table/table_intrinsic_flex_item_min_content__border_box_ltr.xml new file mode 100644 index 000000000..ce18c8d0c --- /dev/null +++ b/tests/xml/table/table_intrinsic_flex_item_min_content__border_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+ + HHHH​HHHH + +
+
+
+
+ + + + + + + + + + + + +
diff --git a/tests/xml/table/table_intrinsic_flex_item_min_content__border_box_rtl.xml b/tests/xml/table/table_intrinsic_flex_item_min_content__border_box_rtl.xml new file mode 100644 index 000000000..1093c572e --- /dev/null +++ b/tests/xml/table/table_intrinsic_flex_item_min_content__border_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+ + HHHH​HHHH + +
+
+
+
+ + + + + + + + + + + + +
diff --git a/tests/xml/table/table_intrinsic_flex_item_min_content__content_box_ltr.xml b/tests/xml/table/table_intrinsic_flex_item_min_content__content_box_ltr.xml new file mode 100644 index 000000000..0fa99a84c --- /dev/null +++ b/tests/xml/table/table_intrinsic_flex_item_min_content__content_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+ + HHHH​HHHH + +
+
+
+
+ + + + + + + + + + + + +
diff --git a/tests/xml/table/table_intrinsic_flex_item_min_content__content_box_rtl.xml b/tests/xml/table/table_intrinsic_flex_item_min_content__content_box_rtl.xml new file mode 100644 index 000000000..5962bcfbe --- /dev/null +++ b/tests/xml/table/table_intrinsic_flex_item_min_content__content_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+ + HHHH​HHHH + +
+
+
+
+ + + + + + + + + + + + +
diff --git a/tests/xml/table/table_intrinsic_flex_item_stretch__border_box_ltr.xml b/tests/xml/table/table_intrinsic_flex_item_stretch__border_box_ltr.xml new file mode 100644 index 000000000..9097f5661 --- /dev/null +++ b/tests/xml/table/table_intrinsic_flex_item_stretch__border_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+ + HH + + + HH + +
+
+
+
+ + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_intrinsic_flex_item_stretch__border_box_rtl.xml b/tests/xml/table/table_intrinsic_flex_item_stretch__border_box_rtl.xml new file mode 100644 index 000000000..d9c3d31ed --- /dev/null +++ b/tests/xml/table/table_intrinsic_flex_item_stretch__border_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+ + HH + + + HH + +
+
+
+
+ + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_intrinsic_flex_item_stretch__content_box_ltr.xml b/tests/xml/table/table_intrinsic_flex_item_stretch__content_box_ltr.xml new file mode 100644 index 000000000..ac8d9992c --- /dev/null +++ b/tests/xml/table/table_intrinsic_flex_item_stretch__content_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+ + HH + + + HH + +
+
+
+
+ + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_intrinsic_flex_item_stretch__content_box_rtl.xml b/tests/xml/table/table_intrinsic_flex_item_stretch__content_box_rtl.xml new file mode 100644 index 000000000..daed325b2 --- /dev/null +++ b/tests/xml/table/table_intrinsic_flex_item_stretch__content_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+ + HH + + + HH + +
+
+
+
+ + + + + + + + + + + + + +
diff --git a/tests/xml/table/table_intrinsic_width_with_percent_column__border_box_ltr.xml b/tests/xml/table/table_intrinsic_width_with_percent_column__border_box_ltr.xml new file mode 100644 index 000000000..8b6ef891c --- /dev/null +++ b/tests/xml/table/table_intrinsic_width_with_percent_column__border_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_intrinsic_width_with_percent_column__border_box_rtl.xml b/tests/xml/table/table_intrinsic_width_with_percent_column__border_box_rtl.xml new file mode 100644 index 000000000..2761754b4 --- /dev/null +++ b/tests/xml/table/table_intrinsic_width_with_percent_column__border_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_intrinsic_width_with_percent_column__content_box_ltr.xml b/tests/xml/table/table_intrinsic_width_with_percent_column__content_box_ltr.xml new file mode 100644 index 000000000..a5b5e453f --- /dev/null +++ b/tests/xml/table/table_intrinsic_width_with_percent_column__content_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_intrinsic_width_with_percent_column__content_box_rtl.xml b/tests/xml/table/table_intrinsic_width_with_percent_column__content_box_rtl.xml new file mode 100644 index 000000000..c1a92269b --- /dev/null +++ b/tests/xml/table/table_intrinsic_width_with_percent_column__content_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_block_content_in_cell__border_box_ltr.xml b/tests/xml/table/table_nested_block_content_in_cell__border_box_ltr.xml new file mode 100644 index 000000000..21ac719e5 --- /dev/null +++ b/tests/xml/table/table_nested_block_content_in_cell__border_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_block_content_in_cell__border_box_rtl.xml b/tests/xml/table/table_nested_block_content_in_cell__border_box_rtl.xml new file mode 100644 index 000000000..aa480dd92 --- /dev/null +++ b/tests/xml/table/table_nested_block_content_in_cell__border_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_block_content_in_cell__content_box_ltr.xml b/tests/xml/table/table_nested_block_content_in_cell__content_box_ltr.xml new file mode 100644 index 000000000..ef5e33fe2 --- /dev/null +++ b/tests/xml/table/table_nested_block_content_in_cell__content_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_block_content_in_cell__content_box_rtl.xml b/tests/xml/table/table_nested_block_content_in_cell__content_box_rtl.xml new file mode 100644 index 000000000..f1dc207d6 --- /dev/null +++ b/tests/xml/table/table_nested_block_content_in_cell__content_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_table_in_cell__border_box_ltr.xml b/tests/xml/table/table_nested_table_in_cell__border_box_ltr.xml new file mode 100644 index 000000000..46465c926 --- /dev/null +++ b/tests/xml/table/table_nested_table_in_cell__border_box_ltr.xml @@ -0,0 +1,39 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_table_in_cell__border_box_rtl.xml b/tests/xml/table/table_nested_table_in_cell__border_box_rtl.xml new file mode 100644 index 000000000..36b4de9c9 --- /dev/null +++ b/tests/xml/table/table_nested_table_in_cell__border_box_rtl.xml @@ -0,0 +1,39 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_table_in_cell__content_box_ltr.xml b/tests/xml/table/table_nested_table_in_cell__content_box_ltr.xml new file mode 100644 index 000000000..84e0dfcbe --- /dev/null +++ b/tests/xml/table/table_nested_table_in_cell__content_box_ltr.xml @@ -0,0 +1,39 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_table_in_cell__content_box_rtl.xml b/tests/xml/table/table_nested_table_in_cell__content_box_rtl.xml new file mode 100644 index 000000000..6d82cf88a --- /dev/null +++ b/tests/xml/table/table_nested_table_in_cell__content_box_rtl.xml @@ -0,0 +1,39 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_table_in_cell_fixed__border_box_ltr.xml b/tests/xml/table/table_nested_table_in_cell_fixed__border_box_ltr.xml new file mode 100644 index 000000000..e6dd22a88 --- /dev/null +++ b/tests/xml/table/table_nested_table_in_cell_fixed__border_box_ltr.xml @@ -0,0 +1,39 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_table_in_cell_fixed__border_box_rtl.xml b/tests/xml/table/table_nested_table_in_cell_fixed__border_box_rtl.xml new file mode 100644 index 000000000..fcd64811a --- /dev/null +++ b/tests/xml/table/table_nested_table_in_cell_fixed__border_box_rtl.xml @@ -0,0 +1,39 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_table_in_cell_fixed__content_box_ltr.xml b/tests/xml/table/table_nested_table_in_cell_fixed__content_box_ltr.xml new file mode 100644 index 000000000..8a88ebd70 --- /dev/null +++ b/tests/xml/table/table_nested_table_in_cell_fixed__content_box_ltr.xml @@ -0,0 +1,39 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_table_in_cell_fixed__content_box_rtl.xml b/tests/xml/table/table_nested_table_in_cell_fixed__content_box_rtl.xml new file mode 100644 index 000000000..cbcd95d27 --- /dev/null +++ b/tests/xml/table/table_nested_table_in_cell_fixed__content_box_rtl.xml @@ -0,0 +1,39 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_table_in_flex_item__border_box_ltr.xml b/tests/xml/table/table_nested_table_in_flex_item__border_box_ltr.xml new file mode 100644 index 000000000..6458e931f --- /dev/null +++ b/tests/xml/table/table_nested_table_in_flex_item__border_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_table_in_flex_item__border_box_rtl.xml b/tests/xml/table/table_nested_table_in_flex_item__border_box_rtl.xml new file mode 100644 index 000000000..44daac8ac --- /dev/null +++ b/tests/xml/table/table_nested_table_in_flex_item__border_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_table_in_flex_item__content_box_ltr.xml b/tests/xml/table/table_nested_table_in_flex_item__content_box_ltr.xml new file mode 100644 index 000000000..768d28390 --- /dev/null +++ b/tests/xml/table/table_nested_table_in_flex_item__content_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_table_in_flex_item__content_box_rtl.xml b/tests/xml/table/table_nested_table_in_flex_item__content_box_rtl.xml new file mode 100644 index 000000000..0cfe33c02 --- /dev/null +++ b/tests/xml/table/table_nested_table_in_flex_item__content_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_table_in_grid_area__border_box_ltr.xml b/tests/xml/table/table_nested_table_in_grid_area__border_box_ltr.xml new file mode 100644 index 000000000..9942f3edb --- /dev/null +++ b/tests/xml/table/table_nested_table_in_grid_area__border_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_table_in_grid_area__border_box_rtl.xml b/tests/xml/table/table_nested_table_in_grid_area__border_box_rtl.xml new file mode 100644 index 000000000..4e76cf34f --- /dev/null +++ b/tests/xml/table/table_nested_table_in_grid_area__border_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_table_in_grid_area__content_box_ltr.xml b/tests/xml/table/table_nested_table_in_grid_area__content_box_ltr.xml new file mode 100644 index 000000000..ac73425af --- /dev/null +++ b/tests/xml/table/table_nested_table_in_grid_area__content_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_table_in_grid_area__content_box_rtl.xml b/tests/xml/table/table_nested_table_in_grid_area__content_box_rtl.xml new file mode 100644 index 000000000..964acee46 --- /dev/null +++ b/tests/xml/table/table_nested_table_in_grid_area__content_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_two_levels__border_box_ltr.xml b/tests/xml/table/table_nested_two_levels__border_box_ltr.xml new file mode 100644 index 000000000..b8b446cfd --- /dev/null +++ b/tests/xml/table/table_nested_two_levels__border_box_ltr.xml @@ -0,0 +1,53 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_two_levels__border_box_rtl.xml b/tests/xml/table/table_nested_two_levels__border_box_rtl.xml new file mode 100644 index 000000000..f721ae6b4 --- /dev/null +++ b/tests/xml/table/table_nested_two_levels__border_box_rtl.xml @@ -0,0 +1,53 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_two_levels__content_box_ltr.xml b/tests/xml/table/table_nested_two_levels__content_box_ltr.xml new file mode 100644 index 000000000..17d07742a --- /dev/null +++ b/tests/xml/table/table_nested_two_levels__content_box_ltr.xml @@ -0,0 +1,53 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_nested_two_levels__content_box_rtl.xml b/tests/xml/table/table_nested_two_levels__content_box_rtl.xml new file mode 100644 index 000000000..99b1d588f --- /dev/null +++ b/tests/xml/table/table_nested_two_levels__content_box_rtl.xml @@ -0,0 +1,53 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_percent_cell_in_percent_table__border_box_ltr.xml b/tests/xml/table/table_percent_cell_in_percent_table__border_box_ltr.xml new file mode 100644 index 000000000..3927b11b3 --- /dev/null +++ b/tests/xml/table/table_percent_cell_in_percent_table__border_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_percent_cell_in_percent_table__border_box_rtl.xml b/tests/xml/table/table_percent_cell_in_percent_table__border_box_rtl.xml new file mode 100644 index 000000000..654adda4b --- /dev/null +++ b/tests/xml/table/table_percent_cell_in_percent_table__border_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_percent_cell_in_percent_table__content_box_ltr.xml b/tests/xml/table/table_percent_cell_in_percent_table__content_box_ltr.xml new file mode 100644 index 000000000..d20f6c4c1 --- /dev/null +++ b/tests/xml/table/table_percent_cell_in_percent_table__content_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_percent_cell_in_percent_table__content_box_rtl.xml b/tests/xml/table/table_percent_cell_in_percent_table__content_box_rtl.xml new file mode 100644 index 000000000..45b6d692e --- /dev/null +++ b/tests/xml/table/table_percent_cell_in_percent_table__content_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_percent_columns_exactly_100__border_box_ltr.xml b/tests/xml/table/table_percent_columns_exactly_100__border_box_ltr.xml new file mode 100644 index 000000000..634ca7707 --- /dev/null +++ b/tests/xml/table/table_percent_columns_exactly_100__border_box_ltr.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_percent_columns_exactly_100__border_box_rtl.xml b/tests/xml/table/table_percent_columns_exactly_100__border_box_rtl.xml new file mode 100644 index 000000000..48a8c6fd0 --- /dev/null +++ b/tests/xml/table/table_percent_columns_exactly_100__border_box_rtl.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_percent_columns_exactly_100__content_box_ltr.xml b/tests/xml/table/table_percent_columns_exactly_100__content_box_ltr.xml new file mode 100644 index 000000000..b9687c1c7 --- /dev/null +++ b/tests/xml/table/table_percent_columns_exactly_100__content_box_ltr.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_percent_columns_exactly_100__content_box_rtl.xml b/tests/xml/table/table_percent_columns_exactly_100__content_box_rtl.xml new file mode 100644 index 000000000..4d3a69e66 --- /dev/null +++ b/tests/xml/table/table_percent_columns_exactly_100__content_box_rtl.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_percent_columns_over_100__border_box_ltr.xml b/tests/xml/table/table_percent_columns_over_100__border_box_ltr.xml new file mode 100644 index 000000000..e2e2be4b0 --- /dev/null +++ b/tests/xml/table/table_percent_columns_over_100__border_box_ltr.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_percent_columns_over_100__border_box_rtl.xml b/tests/xml/table/table_percent_columns_over_100__border_box_rtl.xml new file mode 100644 index 000000000..2f9c83cbb --- /dev/null +++ b/tests/xml/table/table_percent_columns_over_100__border_box_rtl.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_percent_columns_over_100__content_box_ltr.xml b/tests/xml/table/table_percent_columns_over_100__content_box_ltr.xml new file mode 100644 index 000000000..5e3ec807e --- /dev/null +++ b/tests/xml/table/table_percent_columns_over_100__content_box_ltr.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_percent_columns_over_100__content_box_rtl.xml b/tests/xml/table/table_percent_columns_over_100__content_box_rtl.xml new file mode 100644 index 000000000..e03904f52 --- /dev/null +++ b/tests/xml/table/table_percent_columns_over_100__content_box_rtl.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_percent_columns_unconstrained_parent__border_box_ltr.xml b/tests/xml/table/table_percent_columns_unconstrained_parent__border_box_ltr.xml new file mode 100644 index 000000000..29071251b --- /dev/null +++ b/tests/xml/table/table_percent_columns_unconstrained_parent__border_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+ + HH + + + HH + +
+
+
+ + + + + + + + + + + +
diff --git a/tests/xml/table/table_percent_columns_unconstrained_parent__border_box_rtl.xml b/tests/xml/table/table_percent_columns_unconstrained_parent__border_box_rtl.xml new file mode 100644 index 000000000..0e474cc07 --- /dev/null +++ b/tests/xml/table/table_percent_columns_unconstrained_parent__border_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+ + HH + + + HH + +
+
+
+ + + + + + + + + + + +
diff --git a/tests/xml/table/table_percent_columns_unconstrained_parent__content_box_ltr.xml b/tests/xml/table/table_percent_columns_unconstrained_parent__content_box_ltr.xml new file mode 100644 index 000000000..3cdd3dafd --- /dev/null +++ b/tests/xml/table/table_percent_columns_unconstrained_parent__content_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+ + HH + + + HH + +
+
+
+ + + + + + + + + + + +
diff --git a/tests/xml/table/table_percent_columns_unconstrained_parent__content_box_rtl.xml b/tests/xml/table/table_percent_columns_unconstrained_parent__content_box_rtl.xml new file mode 100644 index 000000000..468bc1ba9 --- /dev/null +++ b/tests/xml/table/table_percent_columns_unconstrained_parent__content_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+ + HH + + + HH + +
+
+
+ + + + + + + + + + + +
diff --git a/tests/xml/table/table_percent_columns_under_100__border_box_ltr.xml b/tests/xml/table/table_percent_columns_under_100__border_box_ltr.xml new file mode 100644 index 000000000..263de5d20 --- /dev/null +++ b/tests/xml/table/table_percent_columns_under_100__border_box_ltr.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_percent_columns_under_100__border_box_rtl.xml b/tests/xml/table/table_percent_columns_under_100__border_box_rtl.xml new file mode 100644 index 000000000..9ff4fc088 --- /dev/null +++ b/tests/xml/table/table_percent_columns_under_100__border_box_rtl.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_percent_columns_under_100__content_box_ltr.xml b/tests/xml/table/table_percent_columns_under_100__content_box_ltr.xml new file mode 100644 index 000000000..053733433 --- /dev/null +++ b/tests/xml/table/table_percent_columns_under_100__content_box_ltr.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_percent_columns_under_100__content_box_rtl.xml b/tests/xml/table/table_percent_columns_under_100__content_box_rtl.xml new file mode 100644 index 000000000..daa64a3a1 --- /dev/null +++ b/tests/xml/table/table_percent_columns_under_100__content_box_rtl.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_percent_table_width_in_fixed_parent__border_box_ltr.xml b/tests/xml/table/table_percent_table_width_in_fixed_parent__border_box_ltr.xml new file mode 100644 index 000000000..4152a834e --- /dev/null +++ b/tests/xml/table/table_percent_table_width_in_fixed_parent__border_box_ltr.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_percent_table_width_in_fixed_parent__border_box_rtl.xml b/tests/xml/table/table_percent_table_width_in_fixed_parent__border_box_rtl.xml new file mode 100644 index 000000000..5ab2257af --- /dev/null +++ b/tests/xml/table/table_percent_table_width_in_fixed_parent__border_box_rtl.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_percent_table_width_in_fixed_parent__content_box_ltr.xml b/tests/xml/table/table_percent_table_width_in_fixed_parent__content_box_ltr.xml new file mode 100644 index 000000000..ccc60d915 --- /dev/null +++ b/tests/xml/table/table_percent_table_width_in_fixed_parent__content_box_ltr.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_percent_table_width_in_fixed_parent__content_box_rtl.xml b/tests/xml/table/table_percent_table_width_in_fixed_parent__content_box_rtl.xml new file mode 100644 index 000000000..2a192b129 --- /dev/null +++ b/tests/xml/table/table_percent_table_width_in_fixed_parent__content_box_rtl.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_group_column_widths_across_groups__border_box_ltr.xml b/tests/xml/table/table_row_group_column_widths_across_groups__border_box_ltr.xml new file mode 100644 index 000000000..819e3d278 --- /dev/null +++ b/tests/xml/table/table_row_group_column_widths_across_groups__border_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_group_column_widths_across_groups__border_box_rtl.xml b/tests/xml/table/table_row_group_column_widths_across_groups__border_box_rtl.xml new file mode 100644 index 000000000..307a2d639 --- /dev/null +++ b/tests/xml/table/table_row_group_column_widths_across_groups__border_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_group_column_widths_across_groups__content_box_ltr.xml b/tests/xml/table/table_row_group_column_widths_across_groups__content_box_ltr.xml new file mode 100644 index 000000000..ebacfc155 --- /dev/null +++ b/tests/xml/table/table_row_group_column_widths_across_groups__content_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_group_column_widths_across_groups__content_box_rtl.xml b/tests/xml/table/table_row_group_column_widths_across_groups__content_box_rtl.xml new file mode 100644 index 000000000..369e16031 --- /dev/null +++ b/tests/xml/table/table_row_group_column_widths_across_groups__content_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_group_multiple__border_box_ltr.xml b/tests/xml/table/table_row_group_multiple__border_box_ltr.xml new file mode 100644 index 000000000..de530eb22 --- /dev/null +++ b/tests/xml/table/table_row_group_multiple__border_box_ltr.xml @@ -0,0 +1,41 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_group_multiple__border_box_rtl.xml b/tests/xml/table/table_row_group_multiple__border_box_rtl.xml new file mode 100644 index 000000000..9cf97d602 --- /dev/null +++ b/tests/xml/table/table_row_group_multiple__border_box_rtl.xml @@ -0,0 +1,41 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_group_multiple__content_box_ltr.xml b/tests/xml/table/table_row_group_multiple__content_box_ltr.xml new file mode 100644 index 000000000..711cc63dd --- /dev/null +++ b/tests/xml/table/table_row_group_multiple__content_box_ltr.xml @@ -0,0 +1,41 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_group_multiple__content_box_rtl.xml b/tests/xml/table/table_row_group_multiple__content_box_rtl.xml new file mode 100644 index 000000000..4295f4e9f --- /dev/null +++ b/tests/xml/table/table_row_group_multiple__content_box_rtl.xml @@ -0,0 +1,41 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_group_spacing__border_box_ltr.xml b/tests/xml/table/table_row_group_spacing__border_box_ltr.xml new file mode 100644 index 000000000..1d101af6e --- /dev/null +++ b/tests/xml/table/table_row_group_spacing__border_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_group_spacing__border_box_rtl.xml b/tests/xml/table/table_row_group_spacing__border_box_rtl.xml new file mode 100644 index 000000000..4cf7c3434 --- /dev/null +++ b/tests/xml/table/table_row_group_spacing__border_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_group_spacing__content_box_ltr.xml b/tests/xml/table/table_row_group_spacing__content_box_ltr.xml new file mode 100644 index 000000000..46ace94f7 --- /dev/null +++ b/tests/xml/table/table_row_group_spacing__content_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_group_spacing__content_box_rtl.xml b/tests/xml/table/table_row_group_spacing__content_box_rtl.xml new file mode 100644 index 000000000..0fffd00df --- /dev/null +++ b/tests/xml/table/table_row_group_spacing__content_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_group_specified_height__border_box_ltr.xml b/tests/xml/table/table_row_group_specified_height__border_box_ltr.xml new file mode 100644 index 000000000..3c426b7d0 --- /dev/null +++ b/tests/xml/table/table_row_group_specified_height__border_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_group_specified_height__border_box_rtl.xml b/tests/xml/table/table_row_group_specified_height__border_box_rtl.xml new file mode 100644 index 000000000..f2db760a2 --- /dev/null +++ b/tests/xml/table/table_row_group_specified_height__border_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_group_specified_height__content_box_ltr.xml b/tests/xml/table/table_row_group_specified_height__content_box_ltr.xml new file mode 100644 index 000000000..2b2e34362 --- /dev/null +++ b/tests/xml/table/table_row_group_specified_height__content_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_group_specified_height__content_box_rtl.xml b/tests/xml/table/table_row_group_specified_height__content_box_rtl.xml new file mode 100644 index 000000000..615368ffa --- /dev/null +++ b/tests/xml/table/table_row_group_specified_height__content_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_group_thead_tbody__border_box_ltr.xml b/tests/xml/table/table_row_group_thead_tbody__border_box_ltr.xml new file mode 100644 index 000000000..119daba31 --- /dev/null +++ b/tests/xml/table/table_row_group_thead_tbody__border_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_group_thead_tbody__border_box_rtl.xml b/tests/xml/table/table_row_group_thead_tbody__border_box_rtl.xml new file mode 100644 index 000000000..c33938d89 --- /dev/null +++ b/tests/xml/table/table_row_group_thead_tbody__border_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_group_thead_tbody__content_box_ltr.xml b/tests/xml/table/table_row_group_thead_tbody__content_box_ltr.xml new file mode 100644 index 000000000..7381fc2f8 --- /dev/null +++ b/tests/xml/table/table_row_group_thead_tbody__content_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_group_thead_tbody__content_box_rtl.xml b/tests/xml/table/table_row_group_thead_tbody__content_box_rtl.xml new file mode 100644 index 000000000..fb3312d21 --- /dev/null +++ b/tests/xml/table/table_row_group_thead_tbody__content_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_cell_padding__border_box_ltr.xml b/tests/xml/table/table_row_height_cell_padding__border_box_ltr.xml new file mode 100644 index 000000000..de872600c --- /dev/null +++ b/tests/xml/table/table_row_height_cell_padding__border_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+ + HH + + + HH + +
+
+
+ + + + + + + + + + + +
diff --git a/tests/xml/table/table_row_height_cell_padding__border_box_rtl.xml b/tests/xml/table/table_row_height_cell_padding__border_box_rtl.xml new file mode 100644 index 000000000..7059098df --- /dev/null +++ b/tests/xml/table/table_row_height_cell_padding__border_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+ + HH + + + HH + +
+
+
+ + + + + + + + + + + +
diff --git a/tests/xml/table/table_row_height_cell_padding__content_box_ltr.xml b/tests/xml/table/table_row_height_cell_padding__content_box_ltr.xml new file mode 100644 index 000000000..3aa75c104 --- /dev/null +++ b/tests/xml/table/table_row_height_cell_padding__content_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+ + HH + + + HH + +
+
+
+ + + + + + + + + + + +
diff --git a/tests/xml/table/table_row_height_cell_padding__content_box_rtl.xml b/tests/xml/table/table_row_height_cell_padding__content_box_rtl.xml new file mode 100644 index 000000000..3c2a3d71a --- /dev/null +++ b/tests/xml/table/table_row_height_cell_padding__content_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+ + HH + + + HH + +
+
+
+ + + + + + + + + + + +
diff --git a/tests/xml/table/table_row_height_explicit_cell__border_box_ltr.xml b/tests/xml/table/table_row_height_explicit_cell__border_box_ltr.xml new file mode 100644 index 000000000..b6dd6515e --- /dev/null +++ b/tests/xml/table/table_row_height_explicit_cell__border_box_ltr.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_explicit_cell__border_box_rtl.xml b/tests/xml/table/table_row_height_explicit_cell__border_box_rtl.xml new file mode 100644 index 000000000..2f5d06222 --- /dev/null +++ b/tests/xml/table/table_row_height_explicit_cell__border_box_rtl.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_explicit_cell__content_box_ltr.xml b/tests/xml/table/table_row_height_explicit_cell__content_box_ltr.xml new file mode 100644 index 000000000..664fadedd --- /dev/null +++ b/tests/xml/table/table_row_height_explicit_cell__content_box_ltr.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_explicit_cell__content_box_rtl.xml b/tests/xml/table/table_row_height_explicit_cell__content_box_rtl.xml new file mode 100644 index 000000000..a0f31f7a1 --- /dev/null +++ b/tests/xml/table/table_row_height_explicit_cell__content_box_rtl.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_explicit_row__border_box_ltr.xml b/tests/xml/table/table_row_height_explicit_row__border_box_ltr.xml new file mode 100644 index 000000000..996136451 --- /dev/null +++ b/tests/xml/table/table_row_height_explicit_row__border_box_ltr.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_explicit_row__border_box_rtl.xml b/tests/xml/table/table_row_height_explicit_row__border_box_rtl.xml new file mode 100644 index 000000000..c2f4cdc6c --- /dev/null +++ b/tests/xml/table/table_row_height_explicit_row__border_box_rtl.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_explicit_row__content_box_ltr.xml b/tests/xml/table/table_row_height_explicit_row__content_box_ltr.xml new file mode 100644 index 000000000..17dfe0cc7 --- /dev/null +++ b/tests/xml/table/table_row_height_explicit_row__content_box_ltr.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_explicit_row__content_box_rtl.xml b/tests/xml/table/table_row_height_explicit_row__content_box_rtl.xml new file mode 100644 index 000000000..55add1130 --- /dev/null +++ b/tests/xml/table/table_row_height_explicit_row__content_box_rtl.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_percent_cell__border_box_ltr.xml b/tests/xml/table/table_row_height_percent_cell__border_box_ltr.xml new file mode 100644 index 000000000..a83f5d4c9 --- /dev/null +++ b/tests/xml/table/table_row_height_percent_cell__border_box_ltr.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_percent_cell__border_box_rtl.xml b/tests/xml/table/table_row_height_percent_cell__border_box_rtl.xml new file mode 100644 index 000000000..0a5d70565 --- /dev/null +++ b/tests/xml/table/table_row_height_percent_cell__border_box_rtl.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_percent_cell__content_box_ltr.xml b/tests/xml/table/table_row_height_percent_cell__content_box_ltr.xml new file mode 100644 index 000000000..e7ae1e1b7 --- /dev/null +++ b/tests/xml/table/table_row_height_percent_cell__content_box_ltr.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_percent_cell__content_box_rtl.xml b/tests/xml/table/table_row_height_percent_cell__content_box_rtl.xml new file mode 100644 index 000000000..bf762bd5d --- /dev/null +++ b/tests/xml/table/table_row_height_percent_cell__content_box_rtl.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_table_taller_than_content__border_box_ltr.xml b/tests/xml/table/table_row_height_table_taller_than_content__border_box_ltr.xml new file mode 100644 index 000000000..d0f127b09 --- /dev/null +++ b/tests/xml/table/table_row_height_table_taller_than_content__border_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_table_taller_than_content__border_box_rtl.xml b/tests/xml/table/table_row_height_table_taller_than_content__border_box_rtl.xml new file mode 100644 index 000000000..e2a61e481 --- /dev/null +++ b/tests/xml/table/table_row_height_table_taller_than_content__border_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_table_taller_than_content__content_box_ltr.xml b/tests/xml/table/table_row_height_table_taller_than_content__content_box_ltr.xml new file mode 100644 index 000000000..35ced7408 --- /dev/null +++ b/tests/xml/table/table_row_height_table_taller_than_content__content_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_table_taller_than_content__content_box_rtl.xml b/tests/xml/table/table_row_height_table_taller_than_content__content_box_rtl.xml new file mode 100644 index 000000000..9b2d8463e --- /dev/null +++ b/tests/xml/table/table_row_height_table_taller_than_content__content_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_taller_row_and_spacing__border_box_ltr.xml b/tests/xml/table/table_row_height_taller_row_and_spacing__border_box_ltr.xml new file mode 100644 index 000000000..c0bc30a2e --- /dev/null +++ b/tests/xml/table/table_row_height_taller_row_and_spacing__border_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_taller_row_and_spacing__border_box_rtl.xml b/tests/xml/table/table_row_height_taller_row_and_spacing__border_box_rtl.xml new file mode 100644 index 000000000..781e4670f --- /dev/null +++ b/tests/xml/table/table_row_height_taller_row_and_spacing__border_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_taller_row_and_spacing__content_box_ltr.xml b/tests/xml/table/table_row_height_taller_row_and_spacing__content_box_ltr.xml new file mode 100644 index 000000000..7cdb8cb50 --- /dev/null +++ b/tests/xml/table/table_row_height_taller_row_and_spacing__content_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_taller_row_and_spacing__content_box_rtl.xml b/tests/xml/table/table_row_height_taller_row_and_spacing__content_box_rtl.xml new file mode 100644 index 000000000..7a3027158 --- /dev/null +++ b/tests/xml/table/table_row_height_taller_row_and_spacing__content_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_tallest_cell__border_box_ltr.xml b/tests/xml/table/table_row_height_tallest_cell__border_box_ltr.xml new file mode 100644 index 000000000..8a3ccf0f0 --- /dev/null +++ b/tests/xml/table/table_row_height_tallest_cell__border_box_ltr.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_tallest_cell__border_box_rtl.xml b/tests/xml/table/table_row_height_tallest_cell__border_box_rtl.xml new file mode 100644 index 000000000..4883e38a6 --- /dev/null +++ b/tests/xml/table/table_row_height_tallest_cell__border_box_rtl.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_tallest_cell__content_box_ltr.xml b/tests/xml/table/table_row_height_tallest_cell__content_box_ltr.xml new file mode 100644 index 000000000..83aaaf49c --- /dev/null +++ b/tests/xml/table/table_row_height_tallest_cell__content_box_ltr.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_row_height_tallest_cell__content_box_rtl.xml b/tests/xml/table/table_row_height_tallest_cell__content_box_rtl.xml new file mode 100644 index 000000000..e3872bd6a --- /dev/null +++ b/tests/xml/table/table_row_height_tallest_cell__content_box_rtl.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_row_percent_height__border_box_ltr.xml b/tests/xml/table/table_row_percent_height__border_box_ltr.xml new file mode 100644 index 000000000..763adf47c --- /dev/null +++ b/tests/xml/table/table_row_percent_height__border_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_percent_height__border_box_rtl.xml b/tests/xml/table/table_row_percent_height__border_box_rtl.xml new file mode 100644 index 000000000..31c205d65 --- /dev/null +++ b/tests/xml/table/table_row_percent_height__border_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_percent_height__content_box_ltr.xml b/tests/xml/table/table_row_percent_height__content_box_ltr.xml new file mode 100644 index 000000000..3b5c6a791 --- /dev/null +++ b/tests/xml/table/table_row_percent_height__content_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_row_percent_height__content_box_rtl.xml b/tests/xml/table/table_row_percent_height__content_box_rtl.xml new file mode 100644 index 000000000..4ac0c92c6 --- /dev/null +++ b/tests/xml/table/table_row_percent_height__content_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_across_row_groups__border_box_ltr.xml b/tests/xml/table/table_rowspan_across_row_groups__border_box_ltr.xml new file mode 100644 index 000000000..d6cc772c7 --- /dev/null +++ b/tests/xml/table/table_rowspan_across_row_groups__border_box_ltr.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_across_row_groups__border_box_rtl.xml b/tests/xml/table/table_rowspan_across_row_groups__border_box_rtl.xml new file mode 100644 index 000000000..a2de740fa --- /dev/null +++ b/tests/xml/table/table_rowspan_across_row_groups__border_box_rtl.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_across_row_groups__content_box_ltr.xml b/tests/xml/table/table_rowspan_across_row_groups__content_box_ltr.xml new file mode 100644 index 000000000..412ae87ad --- /dev/null +++ b/tests/xml/table/table_rowspan_across_row_groups__content_box_ltr.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_across_row_groups__content_box_rtl.xml b/tests/xml/table/table_rowspan_across_row_groups__content_box_rtl.xml new file mode 100644 index 000000000..68eed8b9e --- /dev/null +++ b/tests/xml/table/table_rowspan_across_row_groups__content_box_rtl.xml @@ -0,0 +1,33 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_basic__border_box_ltr.xml b/tests/xml/table/table_rowspan_basic__border_box_ltr.xml new file mode 100644 index 000000000..92157723c --- /dev/null +++ b/tests/xml/table/table_rowspan_basic__border_box_ltr.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_basic__border_box_rtl.xml b/tests/xml/table/table_rowspan_basic__border_box_rtl.xml new file mode 100644 index 000000000..610808bba --- /dev/null +++ b/tests/xml/table/table_rowspan_basic__border_box_rtl.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_basic__content_box_ltr.xml b/tests/xml/table/table_rowspan_basic__content_box_ltr.xml new file mode 100644 index 000000000..704a7acfd --- /dev/null +++ b/tests/xml/table/table_rowspan_basic__content_box_ltr.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_basic__content_box_rtl.xml b/tests/xml/table/table_rowspan_basic__content_box_rtl.xml new file mode 100644 index 000000000..fb52b3670 --- /dev/null +++ b/tests/xml/table/table_rowspan_basic__content_box_rtl.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_cell_baseline__border_box_ltr.xml b/tests/xml/table/table_rowspan_cell_baseline__border_box_ltr.xml new file mode 100644 index 000000000..422088d28 --- /dev/null +++ b/tests/xml/table/table_rowspan_cell_baseline__border_box_ltr.xml @@ -0,0 +1,47 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_cell_baseline__border_box_rtl.xml b/tests/xml/table/table_rowspan_cell_baseline__border_box_rtl.xml new file mode 100644 index 000000000..dc14b1b4e --- /dev/null +++ b/tests/xml/table/table_rowspan_cell_baseline__border_box_rtl.xml @@ -0,0 +1,47 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_cell_baseline__content_box_ltr.xml b/tests/xml/table/table_rowspan_cell_baseline__content_box_ltr.xml new file mode 100644 index 000000000..a7d7fc7ab --- /dev/null +++ b/tests/xml/table/table_rowspan_cell_baseline__content_box_ltr.xml @@ -0,0 +1,47 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_cell_baseline__content_box_rtl.xml b/tests/xml/table/table_rowspan_cell_baseline__content_box_rtl.xml new file mode 100644 index 000000000..af5775e45 --- /dev/null +++ b/tests/xml/table/table_rowspan_cell_baseline__content_box_rtl.xml @@ -0,0 +1,47 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_excess_over_empty_rows__border_box_ltr.xml b/tests/xml/table/table_rowspan_excess_over_empty_rows__border_box_ltr.xml new file mode 100644 index 000000000..ae1ee64d4 --- /dev/null +++ b/tests/xml/table/table_rowspan_excess_over_empty_rows__border_box_ltr.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_excess_over_empty_rows__border_box_rtl.xml b/tests/xml/table/table_rowspan_excess_over_empty_rows__border_box_rtl.xml new file mode 100644 index 000000000..4292f1677 --- /dev/null +++ b/tests/xml/table/table_rowspan_excess_over_empty_rows__border_box_rtl.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_excess_over_empty_rows__content_box_ltr.xml b/tests/xml/table/table_rowspan_excess_over_empty_rows__content_box_ltr.xml new file mode 100644 index 000000000..c6246f6ac --- /dev/null +++ b/tests/xml/table/table_rowspan_excess_over_empty_rows__content_box_ltr.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_excess_over_empty_rows__content_box_rtl.xml b/tests/xml/table/table_rowspan_excess_over_empty_rows__content_box_rtl.xml new file mode 100644 index 000000000..deee555fc --- /dev/null +++ b/tests/xml/table/table_rowspan_excess_over_empty_rows__content_box_rtl.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_excess_uneven_rows__border_box_ltr.xml b/tests/xml/table/table_rowspan_excess_uneven_rows__border_box_ltr.xml new file mode 100644 index 000000000..d45c5c1f4 --- /dev/null +++ b/tests/xml/table/table_rowspan_excess_uneven_rows__border_box_ltr.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_excess_uneven_rows__border_box_rtl.xml b/tests/xml/table/table_rowspan_excess_uneven_rows__border_box_rtl.xml new file mode 100644 index 000000000..cbc862035 --- /dev/null +++ b/tests/xml/table/table_rowspan_excess_uneven_rows__border_box_rtl.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_excess_uneven_rows__content_box_ltr.xml b/tests/xml/table/table_rowspan_excess_uneven_rows__content_box_ltr.xml new file mode 100644 index 000000000..c9be6a31c --- /dev/null +++ b/tests/xml/table/table_rowspan_excess_uneven_rows__content_box_ltr.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_excess_uneven_rows__content_box_rtl.xml b/tests/xml/table/table_rowspan_excess_uneven_rows__content_box_rtl.xml new file mode 100644 index 000000000..51099c039 --- /dev/null +++ b/tests/xml/table/table_rowspan_excess_uneven_rows__content_box_rtl.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_full_column__border_box_ltr.xml b/tests/xml/table/table_rowspan_full_column__border_box_ltr.xml new file mode 100644 index 000000000..0de3fb64b --- /dev/null +++ b/tests/xml/table/table_rowspan_full_column__border_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_full_column__border_box_rtl.xml b/tests/xml/table/table_rowspan_full_column__border_box_rtl.xml new file mode 100644 index 000000000..2d45578da --- /dev/null +++ b/tests/xml/table/table_rowspan_full_column__border_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_full_column__content_box_ltr.xml b/tests/xml/table/table_rowspan_full_column__content_box_ltr.xml new file mode 100644 index 000000000..f6e7bc5d7 --- /dev/null +++ b/tests/xml/table/table_rowspan_full_column__content_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_full_column__content_box_rtl.xml b/tests/xml/table/table_rowspan_full_column__content_box_rtl.xml new file mode 100644 index 000000000..a68592c4b --- /dev/null +++ b/tests/xml/table/table_rowspan_full_column__content_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_taller_than_rows__border_box_ltr.xml b/tests/xml/table/table_rowspan_taller_than_rows__border_box_ltr.xml new file mode 100644 index 000000000..a768b571f --- /dev/null +++ b/tests/xml/table/table_rowspan_taller_than_rows__border_box_ltr.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_taller_than_rows__border_box_rtl.xml b/tests/xml/table/table_rowspan_taller_than_rows__border_box_rtl.xml new file mode 100644 index 000000000..47f829812 --- /dev/null +++ b/tests/xml/table/table_rowspan_taller_than_rows__border_box_rtl.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_taller_than_rows__content_box_ltr.xml b/tests/xml/table/table_rowspan_taller_than_rows__content_box_ltr.xml new file mode 100644 index 000000000..79d2bba9f --- /dev/null +++ b/tests/xml/table/table_rowspan_taller_than_rows__content_box_ltr.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_taller_than_rows__content_box_rtl.xml b/tests/xml/table/table_rowspan_taller_than_rows__content_box_rtl.xml new file mode 100644 index 000000000..eaff9fccd --- /dev/null +++ b/tests/xml/table/table_rowspan_taller_than_rows__content_box_rtl.xml @@ -0,0 +1,29 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_three_rows__border_box_ltr.xml b/tests/xml/table/table_rowspan_three_rows__border_box_ltr.xml new file mode 100644 index 000000000..13a3645ea --- /dev/null +++ b/tests/xml/table/table_rowspan_three_rows__border_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_three_rows__border_box_rtl.xml b/tests/xml/table/table_rowspan_three_rows__border_box_rtl.xml new file mode 100644 index 000000000..198b50684 --- /dev/null +++ b/tests/xml/table/table_rowspan_three_rows__border_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_three_rows__content_box_ltr.xml b/tests/xml/table/table_rowspan_three_rows__content_box_ltr.xml new file mode 100644 index 000000000..131deaf13 --- /dev/null +++ b/tests/xml/table/table_rowspan_three_rows__content_box_ltr.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_three_rows__content_box_rtl.xml b/tests/xml/table/table_rowspan_three_rows__content_box_rtl.xml new file mode 100644 index 000000000..37d2a9627 --- /dev/null +++ b/tests/xml/table/table_rowspan_three_rows__content_box_rtl.xml @@ -0,0 +1,35 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_with_colspan__border_box_ltr.xml b/tests/xml/table/table_rowspan_with_colspan__border_box_ltr.xml new file mode 100644 index 000000000..b2da4459c --- /dev/null +++ b/tests/xml/table/table_rowspan_with_colspan__border_box_ltr.xml @@ -0,0 +1,39 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_with_colspan__border_box_rtl.xml b/tests/xml/table/table_rowspan_with_colspan__border_box_rtl.xml new file mode 100644 index 000000000..54c948691 --- /dev/null +++ b/tests/xml/table/table_rowspan_with_colspan__border_box_rtl.xml @@ -0,0 +1,39 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_with_colspan__content_box_ltr.xml b/tests/xml/table/table_rowspan_with_colspan__content_box_ltr.xml new file mode 100644 index 000000000..eea2affe3 --- /dev/null +++ b/tests/xml/table/table_rowspan_with_colspan__content_box_ltr.xml @@ -0,0 +1,39 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_rowspan_with_colspan__content_box_rtl.xml b/tests/xml/table/table_rowspan_with_colspan__content_box_rtl.xml new file mode 100644 index 000000000..3953c8974 --- /dev/null +++ b/tests/xml/table/table_rowspan_with_colspan__content_box_rtl.xml @@ -0,0 +1,39 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_both__border_box_ltr.xml b/tests/xml/table/table_spacing_both__border_box_ltr.xml new file mode 100644 index 000000000..13e4fa60d --- /dev/null +++ b/tests/xml/table/table_spacing_both__border_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_both__border_box_rtl.xml b/tests/xml/table/table_spacing_both__border_box_rtl.xml new file mode 100644 index 000000000..0a9d83e4a --- /dev/null +++ b/tests/xml/table/table_spacing_both__border_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_both__content_box_ltr.xml b/tests/xml/table/table_spacing_both__content_box_ltr.xml new file mode 100644 index 000000000..4b2816284 --- /dev/null +++ b/tests/xml/table/table_spacing_both__content_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_both__content_box_rtl.xml b/tests/xml/table/table_spacing_both__content_box_rtl.xml new file mode 100644 index 000000000..07d81e031 --- /dev/null +++ b/tests/xml/table/table_spacing_both__content_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_horizontal__border_box_ltr.xml b/tests/xml/table/table_spacing_horizontal__border_box_ltr.xml new file mode 100644 index 000000000..a94d5b83b --- /dev/null +++ b/tests/xml/table/table_spacing_horizontal__border_box_ltr.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_horizontal__border_box_rtl.xml b/tests/xml/table/table_spacing_horizontal__border_box_rtl.xml new file mode 100644 index 000000000..9f991bc9a --- /dev/null +++ b/tests/xml/table/table_spacing_horizontal__border_box_rtl.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_horizontal__content_box_ltr.xml b/tests/xml/table/table_spacing_horizontal__content_box_ltr.xml new file mode 100644 index 000000000..2bb648173 --- /dev/null +++ b/tests/xml/table/table_spacing_horizontal__content_box_ltr.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_horizontal__content_box_rtl.xml b/tests/xml/table/table_spacing_horizontal__content_box_rtl.xml new file mode 100644 index 000000000..26e143d78 --- /dev/null +++ b/tests/xml/table/table_spacing_horizontal__content_box_rtl.xml @@ -0,0 +1,23 @@ + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_single_cell__border_box_ltr.xml b/tests/xml/table/table_spacing_single_cell__border_box_ltr.xml new file mode 100644 index 000000000..cced75d3e --- /dev/null +++ b/tests/xml/table/table_spacing_single_cell__border_box_ltr.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_single_cell__border_box_rtl.xml b/tests/xml/table/table_spacing_single_cell__border_box_rtl.xml new file mode 100644 index 000000000..29edebcaa --- /dev/null +++ b/tests/xml/table/table_spacing_single_cell__border_box_rtl.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_single_cell__content_box_ltr.xml b/tests/xml/table/table_spacing_single_cell__content_box_ltr.xml new file mode 100644 index 000000000..ec1f1ea61 --- /dev/null +++ b/tests/xml/table/table_spacing_single_cell__content_box_ltr.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_single_cell__content_box_rtl.xml b/tests/xml/table/table_spacing_single_cell__content_box_rtl.xml new file mode 100644 index 000000000..b6b691fbf --- /dev/null +++ b/tests/xml/table/table_spacing_single_cell__content_box_rtl.xml @@ -0,0 +1,21 @@ + + + +
+
+
+
+
+
+
+ + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_three_columns__border_box_ltr.xml b/tests/xml/table/table_spacing_three_columns__border_box_ltr.xml new file mode 100644 index 000000000..1034bc71f --- /dev/null +++ b/tests/xml/table/table_spacing_three_columns__border_box_ltr.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_three_columns__border_box_rtl.xml b/tests/xml/table/table_spacing_three_columns__border_box_rtl.xml new file mode 100644 index 000000000..04b207d96 --- /dev/null +++ b/tests/xml/table/table_spacing_three_columns__border_box_rtl.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_three_columns__content_box_ltr.xml b/tests/xml/table/table_spacing_three_columns__content_box_ltr.xml new file mode 100644 index 000000000..85021745d --- /dev/null +++ b/tests/xml/table/table_spacing_three_columns__content_box_ltr.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_three_columns__content_box_rtl.xml b/tests/xml/table/table_spacing_three_columns__content_box_rtl.xml new file mode 100644 index 000000000..3aeea3c42 --- /dev/null +++ b/tests/xml/table/table_spacing_three_columns__content_box_rtl.xml @@ -0,0 +1,25 @@ + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_vertical__border_box_ltr.xml b/tests/xml/table/table_spacing_vertical__border_box_ltr.xml new file mode 100644 index 000000000..cb6c59b67 --- /dev/null +++ b/tests/xml/table/table_spacing_vertical__border_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_vertical__border_box_rtl.xml b/tests/xml/table/table_spacing_vertical__border_box_rtl.xml new file mode 100644 index 000000000..1669eadfd --- /dev/null +++ b/tests/xml/table/table_spacing_vertical__border_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_vertical__content_box_ltr.xml b/tests/xml/table/table_spacing_vertical__content_box_ltr.xml new file mode 100644 index 000000000..d7124dfd6 --- /dev/null +++ b/tests/xml/table/table_spacing_vertical__content_box_ltr.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_vertical__content_box_rtl.xml b/tests/xml/table/table_spacing_vertical__content_box_rtl.xml new file mode 100644 index 000000000..0505d902d --- /dev/null +++ b/tests/xml/table/table_spacing_vertical__content_box_rtl.xml @@ -0,0 +1,27 @@ + + + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_with_border__border_box_ltr.xml b/tests/xml/table/table_spacing_with_border__border_box_ltr.xml new file mode 100644 index 000000000..0da2a4672 --- /dev/null +++ b/tests/xml/table/table_spacing_with_border__border_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_with_border__border_box_rtl.xml b/tests/xml/table/table_spacing_with_border__border_box_rtl.xml new file mode 100644 index 000000000..225c67d4a --- /dev/null +++ b/tests/xml/table/table_spacing_with_border__border_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_with_border__content_box_ltr.xml b/tests/xml/table/table_spacing_with_border__content_box_ltr.xml new file mode 100644 index 000000000..054734161 --- /dev/null +++ b/tests/xml/table/table_spacing_with_border__content_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_with_border__content_box_rtl.xml b/tests/xml/table/table_spacing_with_border__content_box_rtl.xml new file mode 100644 index 000000000..f073b5e74 --- /dev/null +++ b/tests/xml/table/table_spacing_with_border__content_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_with_padding__border_box_ltr.xml b/tests/xml/table/table_spacing_with_padding__border_box_ltr.xml new file mode 100644 index 000000000..557ce2375 --- /dev/null +++ b/tests/xml/table/table_spacing_with_padding__border_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_with_padding__border_box_rtl.xml b/tests/xml/table/table_spacing_with_padding__border_box_rtl.xml new file mode 100644 index 000000000..ccc08c0ed --- /dev/null +++ b/tests/xml/table/table_spacing_with_padding__border_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_with_padding__content_box_ltr.xml b/tests/xml/table/table_spacing_with_padding__content_box_ltr.xml new file mode 100644 index 000000000..ad43b7817 --- /dev/null +++ b/tests/xml/table/table_spacing_with_padding__content_box_ltr.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/xml/table/table_spacing_with_padding__content_box_rtl.xml b/tests/xml/table/table_spacing_with_padding__content_box_rtl.xml new file mode 100644 index 000000000..7381fa13f --- /dev/null +++ b/tests/xml/table/table_spacing_with_padding__content_box_rtl.xml @@ -0,0 +1,31 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + +