layout2020 (flexbox): Implement start, end, and space-evenly content alignment (#31724)

* Upgrade to stylo 6faedad

* Implement start, end, space-evenly content alignment + fix others

Update test expectations for content alignment fixes

Revert test expectations that are still generating the old results in CI

Update layout2013 test expectation for content alignment

Update content alignment fallback to use safe alignment

Implement fallback alignment

Update content alignment with recent spec changes
This commit is contained in:
Nico Burns 2024-04-29 11:17:11 +12:00 committed by GitHub
parent 02b3dd0b61
commit 1d6be62454
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
26 changed files with 179 additions and 219 deletions

26
Cargo.lock generated
View file

@ -1206,7 +1206,7 @@ dependencies = [
[[package]]
name = "derive_common"
version = "0.0.1"
source = "git+https://github.com/servo/stylo?branch=2024-04-16#81a55acca3f274fce0e365d567c4e7c4cb350d22"
source = "git+https://github.com/servo/stylo?rev=6faedad67ac2e320b51ac72a165b0ceb52caf918#6faedad67ac2e320b51ac72a165b0ceb52caf918"
dependencies = [
"darling",
"proc-macro2",
@ -3550,7 +3550,7 @@ dependencies = [
[[package]]
name = "malloc_size_of"
version = "0.0.1"
source = "git+https://github.com/servo/stylo?branch=2024-04-16#81a55acca3f274fce0e365d567c4e7c4cb350d22"
source = "git+https://github.com/servo/stylo?rev=6faedad67ac2e320b51ac72a165b0ceb52caf918#6faedad67ac2e320b51ac72a165b0ceb52caf918"
dependencies = [
"accountable-refcell",
"app_units",
@ -5168,7 +5168,7 @@ dependencies = [
[[package]]
name = "selectors"
version = "0.24.0"
source = "git+https://github.com/servo/stylo?branch=2024-04-16#81a55acca3f274fce0e365d567c4e7c4cb350d22"
source = "git+https://github.com/servo/stylo?rev=6faedad67ac2e320b51ac72a165b0ceb52caf918#6faedad67ac2e320b51ac72a165b0ceb52caf918"
dependencies = [
"bitflags 2.5.0",
"cssparser",
@ -5456,7 +5456,7 @@ dependencies = [
[[package]]
name = "servo_arc"
version = "0.2.0"
source = "git+https://github.com/servo/stylo?branch=2024-04-16#81a55acca3f274fce0e365d567c4e7c4cb350d22"
source = "git+https://github.com/servo/stylo?rev=6faedad67ac2e320b51ac72a165b0ceb52caf918#6faedad67ac2e320b51ac72a165b0ceb52caf918"
dependencies = [
"nodrop",
"serde",
@ -5466,7 +5466,7 @@ dependencies = [
[[package]]
name = "servo_atoms"
version = "0.0.1"
source = "git+https://github.com/servo/stylo?branch=2024-04-16#81a55acca3f274fce0e365d567c4e7c4cb350d22"
source = "git+https://github.com/servo/stylo?rev=6faedad67ac2e320b51ac72a165b0ceb52caf918#6faedad67ac2e320b51ac72a165b0ceb52caf918"
dependencies = [
"string_cache",
"string_cache_codegen",
@ -5664,7 +5664,7 @@ checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
[[package]]
name = "size_of_test"
version = "0.0.1"
source = "git+https://github.com/servo/stylo?branch=2024-04-16#81a55acca3f274fce0e365d567c4e7c4cb350d22"
source = "git+https://github.com/servo/stylo?rev=6faedad67ac2e320b51ac72a165b0ceb52caf918#6faedad67ac2e320b51ac72a165b0ceb52caf918"
dependencies = [
"static_assertions",
]
@ -5789,7 +5789,7 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
[[package]]
name = "static_prefs"
version = "0.1.0"
source = "git+https://github.com/servo/stylo?branch=2024-04-16#81a55acca3f274fce0e365d567c4e7c4cb350d22"
source = "git+https://github.com/servo/stylo?rev=6faedad67ac2e320b51ac72a165b0ceb52caf918#6faedad67ac2e320b51ac72a165b0ceb52caf918"
[[package]]
name = "strict-num"
@ -5826,7 +5826,7 @@ dependencies = [
[[package]]
name = "style"
version = "0.0.1"
source = "git+https://github.com/servo/stylo?branch=2024-04-16#81a55acca3f274fce0e365d567c4e7c4cb350d22"
source = "git+https://github.com/servo/stylo?rev=6faedad67ac2e320b51ac72a165b0ceb52caf918#6faedad67ac2e320b51ac72a165b0ceb52caf918"
dependencies = [
"app_units",
"arrayvec",
@ -5885,7 +5885,7 @@ dependencies = [
[[package]]
name = "style_config"
version = "0.0.1"
source = "git+https://github.com/servo/stylo?branch=2024-04-16#81a55acca3f274fce0e365d567c4e7c4cb350d22"
source = "git+https://github.com/servo/stylo?rev=6faedad67ac2e320b51ac72a165b0ceb52caf918#6faedad67ac2e320b51ac72a165b0ceb52caf918"
dependencies = [
"lazy_static",
]
@ -5893,7 +5893,7 @@ dependencies = [
[[package]]
name = "style_derive"
version = "0.0.1"
source = "git+https://github.com/servo/stylo?branch=2024-04-16#81a55acca3f274fce0e365d567c4e7c4cb350d22"
source = "git+https://github.com/servo/stylo?rev=6faedad67ac2e320b51ac72a165b0ceb52caf918#6faedad67ac2e320b51ac72a165b0ceb52caf918"
dependencies = [
"darling",
"derive_common",
@ -5924,7 +5924,7 @@ dependencies = [
[[package]]
name = "style_traits"
version = "0.0.1"
source = "git+https://github.com/servo/stylo?branch=2024-04-16#81a55acca3f274fce0e365d567c4e7c4cb350d22"
source = "git+https://github.com/servo/stylo?rev=6faedad67ac2e320b51ac72a165b0ceb52caf918#6faedad67ac2e320b51ac72a165b0ceb52caf918"
dependencies = [
"app_units",
"bitflags 2.5.0",
@ -6287,7 +6287,7 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "to_shmem"
version = "0.0.1"
source = "git+https://github.com/servo/stylo?branch=2024-04-16#81a55acca3f274fce0e365d567c4e7c4cb350d22"
source = "git+https://github.com/servo/stylo?rev=6faedad67ac2e320b51ac72a165b0ceb52caf918#6faedad67ac2e320b51ac72a165b0ceb52caf918"
dependencies = [
"cssparser",
"servo_arc",
@ -6300,7 +6300,7 @@ dependencies = [
[[package]]
name = "to_shmem_derive"
version = "0.0.1"
source = "git+https://github.com/servo/stylo?branch=2024-04-16#81a55acca3f274fce0e365d567c4e7c4cb350d22"
source = "git+https://github.com/servo/stylo?rev=6faedad67ac2e320b51ac72a165b0ceb52caf918#6faedad67ac2e320b51ac72a165b0ceb52caf918"
dependencies = [
"darling",
"derive_common",

View file

@ -64,7 +64,7 @@ keyboard-types = "0.6"
lazy_static = "1.4"
libc = "0.2"
log = "0.4"
malloc_size_of = { git = "https://github.com/servo/stylo", branch = "2024-04-16", features = ["servo"] }
malloc_size_of = { git = "https://github.com/servo/stylo", rev = "6faedad67ac2e320b51ac72a165b0ceb52caf918", features = ["servo"] }
malloc_size_of_derive = "0.1"
mime = "0.3.13"
mime_guess = "2.0.3"
@ -87,31 +87,31 @@ rustls = { version = "0.21.12", features = ["dangerous_configuration"] }
rustls-pemfile = "1.0.4"
script_layout_interface = { path = "components/shared/script_layout" }
script_traits = { path = "components/shared/script" }
selectors = { git = "https://github.com/servo/stylo", branch = "2024-04-16" }
selectors = { git = "https://github.com/servo/stylo", rev = "6faedad67ac2e320b51ac72a165b0ceb52caf918" }
serde = "1.0.198"
serde_bytes = "0.11"
serde_json = "1.0"
servo-media = { git = "https://github.com/servo/media" }
servo-media-dummy = { git = "https://github.com/servo/media" }
servo-media-gstreamer = { git = "https://github.com/servo/media" }
servo_arc = { git = "https://github.com/servo/stylo", branch = "2024-04-16" }
servo_atoms = { git = "https://github.com/servo/stylo", branch = "2024-04-16" }
size_of_test = { git = "https://github.com/servo/stylo", branch = "2024-04-16" }
servo_arc = { git = "https://github.com/servo/stylo", rev = "6faedad67ac2e320b51ac72a165b0ceb52caf918" }
servo_atoms = { git = "https://github.com/servo/stylo", rev = "6faedad67ac2e320b51ac72a165b0ceb52caf918" }
size_of_test = { git = "https://github.com/servo/stylo", rev = "6faedad67ac2e320b51ac72a165b0ceb52caf918" }
smallbitvec = "2.5.3"
smallvec = "1.13"
sparkle = "0.1.26"
string_cache = "0.8"
string_cache_codegen = "0.5"
style = { git = "https://github.com/servo/stylo", branch = "2024-04-16", features = ["servo"] }
style_config = { git = "https://github.com/servo/stylo", branch = "2024-04-16" }
style_traits = { git = "https://github.com/servo/stylo", branch = "2024-04-16", features = ["servo"] }
style = { git = "https://github.com/servo/stylo", rev = "6faedad67ac2e320b51ac72a165b0ceb52caf918", features = ["servo"] }
style_config = { git = "https://github.com/servo/stylo", rev = "6faedad67ac2e320b51ac72a165b0ceb52caf918" }
style_traits = { git = "https://github.com/servo/stylo", rev = "6faedad67ac2e320b51ac72a165b0ceb52caf918", features = ["servo"] }
# NOTE: the sm-angle feature only 2024-03-01rms!
surfman = { version = "0.9", features = ["chains", "sm-angle", "sm-angle-default"] }
syn = { version = "2", default-features = false, features = ["clone-impls", "derive", "parsing"] }
synstructure = "0.13"
thin-vec = "0.2.13"
time = "0.1.41"
to_shmem = { git = "https://github.com/servo/stylo", branch = "2024-04-16" }
to_shmem = { git = "https://github.com/servo/stylo", rev = "6faedad67ac2e320b51ac72a165b0ceb52caf918" }
tokio = "1"
tokio-rustls = "0.24"
tungstenite = "0.20"

View file

@ -48,6 +48,8 @@ struct FlexContext<'a> {
container_min_cross_size: Length,
container_max_cross_size: Option<Length>,
flex_axis: FlexAxis,
flex_direction_is_reversed: bool,
flex_wrap_reverse: bool,
main_start_cross_start_sides_are: MainStartCrossStart,
container_definite_inner_size: FlexRelativeVec2<Option<Length>>,
align_content: AlignContent,
@ -218,6 +220,10 @@ impl FlexContainer {
FlexWrap::Wrap | FlexWrap::WrapReverse => false,
};
let flex_axis = FlexAxis::from(flex_direction);
let flex_direction_is_reversed = match flex_direction {
FlexDirection::Row | FlexDirection::Column => false,
FlexDirection::RowReverse | FlexDirection::ColumnReverse => true,
};
let flex_wrap_reverse = match flex_wrap {
FlexWrap::Nowrap | FlexWrap::Wrap => false,
FlexWrap::WrapReverse => true,
@ -234,6 +240,8 @@ impl FlexContainer {
container_max_cross_size,
container_is_single_line,
flex_axis,
flex_direction_is_reversed,
flex_wrap_reverse,
align_content,
align_items,
justify_content,
@ -297,25 +305,80 @@ impl FlexContainer {
// Align all flex lines per `align-content`.
let line_count = flex_lines.len();
let mut cross_start_position_cursor = Length::zero();
let mut line_interval = Length::zero();
let line_interval = match flex_context.container_definite_inner_size.cross {
Some(cross_size) if line_count >= 2 => {
if let Some(cross_size) = flex_context.container_definite_inner_size.cross {
let free_space = cross_size - content_cross_size;
let layout_is_flex_reversed = flex_context.flex_wrap_reverse;
cross_start_position_cursor = match flex_context.align_content {
AlignContent::Center => free_space / 2.0,
AlignContent::SpaceAround => free_space / (line_count * 2) as CSSFloat,
AlignContent::FlexEnd => free_space,
_ => Length::zero(),
// Implement fallback alignment.
//
// In addition to the spec at https://www.w3.org/TR/css-align-3/ this implementation follows
// the resolution of https://github.com/w3c/csswg-drafts/issues/10154
let resolved_align_content: AlignContent = {
// Inital values from the style system
let mut resolved_align_content = flex_context.align_content;
let mut is_safe = false; // FIXME: retrieve from style system
// Fallback occurs in two cases:
// 1. If there is only a single item being aligned and alignment is a distributed alignment keyword
// https://www.w3.org/TR/css-align-3/#distribution-values
if line_count <= 1 || free_space <= Length::zero() {
(resolved_align_content, is_safe) = match resolved_align_content {
AlignContent::Stretch => (AlignContent::FlexStart, true),
AlignContent::SpaceBetween => (AlignContent::FlexStart, true),
AlignContent::SpaceAround => (AlignContent::Center, true),
AlignContent::SpaceEvenly => (AlignContent::Center, true),
_ => (resolved_align_content, is_safe),
}
};
match flex_context.align_content {
AlignContent::SpaceBetween => free_space / (line_count - 1) as CSSFloat,
AlignContent::SpaceAround => free_space / line_count as CSSFloat,
_ => Length::zero(),
// 2. If free space is negative the "safe" alignment variants all fallback to Start alignment
if free_space <= Length::zero() && is_safe {
resolved_align_content = AlignContent::Start;
}
resolved_align_content
};
// Implement "unsafe" alignment. "safe" alignment is handled by the fallback process above.
cross_start_position_cursor = match resolved_align_content {
AlignContent::Start => Length::zero(),
AlignContent::FlexStart => {
if layout_is_flex_reversed {
free_space
} else {
Length::zero()
}
},
_ => Length::zero(),
AlignContent::End => free_space,
AlignContent::FlexEnd => {
if layout_is_flex_reversed {
Length::zero()
} else {
free_space
}
},
AlignContent::Center => free_space / 2.0,
AlignContent::Stretch => Length::zero(),
AlignContent::SpaceBetween => Length::zero(),
AlignContent::SpaceAround => (free_space / line_count as CSSFloat) / 2.0,
AlignContent::SpaceEvenly => free_space / (line_count + 1) as CSSFloat,
};
// TODO: Implement gap property
line_interval = /*gap + */ match resolved_align_content {
AlignContent::Start => Length::zero(),
AlignContent::FlexStart => Length::zero(),
AlignContent::End => Length::zero(),
AlignContent::FlexEnd => Length::zero(),
AlignContent::Center => Length::zero(),
AlignContent::Stretch => Length::zero(),
AlignContent::SpaceBetween => free_space / (line_count - 1) as CSSFloat,
AlignContent::SpaceAround => free_space / line_count as CSSFloat,
AlignContent::SpaceEvenly => free_space / (line_count + 1) as CSSFloat,
};
};
let line_cross_start_positions = flex_lines
@ -698,7 +761,7 @@ impl FlexLine<'_> {
flex_context: &mut FlexContext,
container_main_size: Length,
) -> FlexLineLayoutResult {
let (item_used_main_sizes, remaining_free_space) =
let (item_used_main_sizes, mut free_space) =
self.resolve_flexible_lengths(container_main_size);
// https://drafts.csswg.org/css-flexbox/#algo-cross-item
@ -757,35 +820,82 @@ impl FlexLine<'_> {
// Distribute any remaining free space
// https://drafts.csswg.org/css-flexbox/#algo-main-align
let (item_main_margins, free_space_distributed) =
self.resolve_auto_main_margins(remaining_free_space);
self.resolve_auto_main_margins(free_space);
if free_space_distributed {
free_space = Length::zero();
}
// Align the items along the main-axis per justify-content.
let item_count = self.items.len();
let main_start_position = if free_space_distributed {
Length::zero()
} else {
match flex_context.justify_content {
JustifyContent::FlexEnd => remaining_free_space,
JustifyContent::Center => remaining_free_space / 2.0,
JustifyContent::SpaceAround => remaining_free_space / (item_count * 2) as CSSFloat,
_ => Length::zero(),
let layout_is_flex_reversed = flex_context.flex_direction_is_reversed;
// Implement fallback alignment.
//
// In addition to the spec at https://www.w3.org/TR/css-align-3/ this implementation follows
// the resolution of https://github.com/w3c/csswg-drafts/issues/10154
let resolved_justify_content: JustifyContent = {
// Inital values from the style system
let mut resolved_justify_content = flex_context.justify_content;
let mut is_safe = false; // FIXME: retrieve from style system
// Fallback occurs in two cases:
// 1. If there is only a single item being aligned and alignment is a distributed alignment keyword
// https://www.w3.org/TR/css-align-3/#distribution-values
if item_count <= 1 || free_space <= Length::zero() {
(resolved_justify_content, is_safe) = match resolved_justify_content {
JustifyContent::Stretch => (JustifyContent::FlexStart, true),
JustifyContent::SpaceBetween => (JustifyContent::FlexStart, true),
JustifyContent::SpaceAround => (JustifyContent::Center, true),
JustifyContent::SpaceEvenly => (JustifyContent::Center, true),
_ => (resolved_justify_content, is_safe),
}
};
let item_main_interval = if free_space_distributed {
Length::zero()
} else {
match flex_context.justify_content {
JustifyContent::SpaceBetween => {
if item_count > 1 {
remaining_free_space / (item_count - 1) as CSSFloat
// 2. If free space is negative the "safe" alignment variants all fallback to Start alignment
if free_space <= Length::zero() && is_safe {
resolved_justify_content = JustifyContent::Start;
}
resolved_justify_content
};
// Implement "unsafe" alignment. "safe" alignment is handled by the fallback process above.
let main_start_position = match resolved_justify_content {
JustifyContent::Start => Length::zero(),
JustifyContent::FlexStart => {
if layout_is_flex_reversed {
free_space
} else {
Length::zero()
}
},
JustifyContent::SpaceAround => remaining_free_space / item_count as CSSFloat,
_ => Length::zero(),
JustifyContent::End => free_space,
JustifyContent::FlexEnd => {
if layout_is_flex_reversed {
Length::zero()
} else {
free_space
}
},
JustifyContent::Center => free_space / 2.0,
JustifyContent::Stretch => Length::zero(),
JustifyContent::SpaceBetween => Length::zero(),
JustifyContent::SpaceAround => (free_space / item_count as CSSFloat) / 2.0,
JustifyContent::SpaceEvenly => free_space / (item_count + 1) as CSSFloat,
};
// TODO: Implement gap property
let item_main_interval = /*gap + */ match resolved_justify_content {
JustifyContent::Start => Length::zero(),
JustifyContent::FlexStart => Length::zero(),
JustifyContent::End => Length::zero(),
JustifyContent::FlexEnd => Length::zero(),
JustifyContent::Center => Length::zero(),
JustifyContent::Stretch => Length::zero(),
JustifyContent::SpaceBetween => free_space / (item_count - 1) as CSSFloat,
JustifyContent::SpaceAround => free_space / item_count as CSSFloat,
JustifyContent::SpaceEvenly => free_space / (item_count + 1) as CSSFloat,
};
// https://drafts.csswg.org/css-flexbox/#algo-cross-margins

View file

@ -14,24 +14,14 @@
[Checking align-content: last baseline]
expected: FAIL
[Checking align-content: start]
expected: FAIL
[Checking align-content: unsafe flex-start]
expected: FAIL
[Checking align-content: unsafe end]
expected: FAIL
[Checking align-content: end]
expected: FAIL
[Checking align-content: space-evenly]
expected: FAIL
[Checking align-content: safe center]
expected: FAIL
[Checking align-content: normal]
expected: FAIL

View file

@ -14,24 +14,14 @@
[Checking align-content: last baseline]
expected: FAIL
[Checking align-content: start]
expected: FAIL
[Checking align-content: unsafe flex-start]
expected: FAIL
[Checking align-content: unsafe end]
expected: FAIL
[Checking align-content: end]
expected: FAIL
[Checking align-content: space-evenly]
expected: FAIL
[Checking align-content: safe center]
expected: FAIL
[Checking align-content: normal]
expected: FAIL

View file

@ -1,10 +1,6 @@
[parse-align-content-005.html]
[Test the value 'inherit' overrides current value ('end')]
expected: FAIL
[Test the value 'inherit' overrides current value ('unsafe center')]
expected: FAIL
[Test the value 'inherit' overrides current value ('safe start')]
expected: FAIL

View file

@ -1,13 +1,7 @@
[parse-justify-content-001.html]
[Checking justify-content: start]
expected: FAIL
[Checking justify-content: safe center]
expected: FAIL
[Checking justify-content: end]
expected: FAIL
[Checking justify-content: left]
expected: FAIL
@ -20,9 +14,6 @@
[Checking justify-content: safe end]
expected: FAIL
[Checking justify-content: space-evenly]
expected: FAIL
[Checking justify-content: safe flex-end]
expected: FAIL
@ -31,4 +22,3 @@
[Checking justify-content: unsafe end]
expected: FAIL

View file

@ -1,13 +1,7 @@
[parse-justify-content-003.html]
[Checking justify-content: start]
expected: FAIL
[Checking justify-content: safe center]
expected: FAIL
[Checking justify-content: end]
expected: FAIL
[Checking justify-content: left]
expected: FAIL
@ -20,9 +14,6 @@
[Checking justify-content: safe end]
expected: FAIL
[Checking justify-content: space-evenly]
expected: FAIL
[Checking justify-content: safe flex-end]
expected: FAIL
@ -31,4 +22,3 @@
[Checking justify-content: unsafe end]
expected: FAIL

View file

@ -1,10 +1,6 @@
[parse-justify-content-005.html]
[Test the value 'inherit' overrides current value ('end')]
expected: FAIL
[Test the value 'inherit' overrides current value ('safe left')]
expected: FAIL
[Test the value 'inherit' overrides current value ('unsafe center')]
expected: FAIL

View file

@ -1,22 +0,0 @@
[place-content-shorthand-004.html]
[Verify fallback values are invalid]
expected: FAIL
[Verify numeric values are invalid]
expected: FAIL
[Verify 'auto' values are invalid]
expected: FAIL
[Verify self-position values are invalid]
expected: FAIL
[Verify <baseline-position> values are invalid for the justify-content property]
expected: FAIL
[Verify empty declaration is invalid]
expected: FAIL
[Verify 'left' and 'right' values are invalid for block/cross axis alignment]
expected: FAIL

View file

@ -17,9 +17,6 @@
[Property justify-content has initial value normal]
expected: FAIL
[Property justify-content does not inherit]
expected: FAIL
[Property align-content does not inherit]
expected: FAIL
@ -46,4 +43,3 @@
[Property column-gap does not inherit]
expected: FAIL

View file

@ -35,15 +35,5 @@
[Property align-content value 'normal']
expected: FAIL
[Property align-content value 'space-evenly']
expected: FAIL
[Property align-content value 'safe flex-start']
expected: FAIL
[Property align-content value 'start']
expected: FAIL
[Property align-content value 'end']
expected: FAIL

View file

@ -5,24 +5,14 @@
[e.style['align-content'\] = "unsafe end" should set the property value]
expected: FAIL
[e.style['align-content'\] = "end" should set the property value]
expected: FAIL
[e.style['align-content'\] = "normal" should set the property value]
expected: FAIL
[e.style['align-content'\] = "baseline" should set the property value]
expected: FAIL
[e.style['align-content'\] = "space-evenly" should set the property value]
expected: FAIL
[e.style['align-content'\] = "start" should set the property value]
expected: FAIL
[e.style['align-content'\] = "safe flex-start" should set the property value]
expected: FAIL
[e.style['align-content'\] = "last baseline" should set the property value]
expected: FAIL

View file

@ -23,12 +23,6 @@
[Property justify-content value 'safe flex-start' computes to 'safe flex-start']
expected: FAIL
[Property justify-content value 'start']
expected: FAIL
[Property justify-content value 'end']
expected: FAIL
[Property justify-content value 'unsafe end']
expected: FAIL
@ -41,9 +35,5 @@
[Property justify-content value 'safe flex-start']
expected: FAIL
[Property justify-content value 'space-evenly']
expected: FAIL
[Property justify-content value 'left']
expected: FAIL

View file

@ -2,24 +2,14 @@
[e.style['justify-content'\] = "unsafe right" should set the property value]
expected: FAIL
[e.style['justify-content'\] = "start" should set the property value]
expected: FAIL
[e.style['justify-content'\] = "normal" should set the property value]
expected: FAIL
[e.style['justify-content'\] = "unsafe end" should set the property value]
expected: FAIL
[e.style['justify-content'\] = "space-evenly" should set the property value]
expected: FAIL
[e.style['justify-content'\] = "end" should set the property value]
expected: FAIL
[e.style['justify-content'\] = "safe flex-start" should set the property value]
expected: FAIL
[e.style['justify-content'\] = "left" should set the property value]
expected: FAIL

View file

@ -5,9 +5,6 @@
[.flexitem 2]
expected: FAIL
[.flexitem 4]
expected: FAIL
[.flexitem 5]
expected: FAIL

View file

@ -7,15 +7,3 @@
[.default, .verticalWriting 9]
expected: FAIL
[.default, .verticalWriting 5]
expected: FAIL
[.default, .verticalWriting 6]
expected: FAIL
[.default, .verticalWriting 3]
expected: FAIL
[.default, .verticalWriting 2]
expected: FAIL

View file

@ -1,7 +1,4 @@
[align-content-wrap-003.html]
[.flexbox 6]
expected: FAIL
[.flexbox 1]
expected: FAIL
@ -11,12 +8,6 @@
[.flexbox 8]
expected: FAIL
[.flexbox 12]
expected: FAIL
[.flexbox 11]
expected: FAIL
[.flexbox 34]
expected: FAIL
@ -59,12 +50,6 @@
[.flexbox 22]
expected: FAIL
[.flexbox 21]
expected: FAIL
[.flexbox 20]
expected: FAIL
[.flexbox 44]
expected: FAIL

View file

@ -5,6 +5,12 @@
[.flexitem 2]
expected: FAIL
[.flexitem 3]
expected: FAIL
[.flexitem 4]
expected: FAIL
[.flexitem 5]
expected: FAIL

View file

@ -1,2 +0,0 @@
[flexbox-justify-content-horiz-002.xhtml]
expected: FAIL

View file

@ -1,2 +0,0 @@
[flexbox-justify-content-horiz-004.xhtml]
expected: FAIL

View file

@ -5,15 +5,15 @@
[.container > div 2]
expected: FAIL
[.container > div 4]
expected: FAIL
[.container > div 5]
expected: FAIL
[.container > div 7]
expected: FAIL
[.container > div 8]
expected: FAIL
[.container > div 9]
expected: FAIL

View file

@ -1,2 +0,0 @@
[flexbox_justifycontent-spacearound-negative.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[flexbox_justifycontent-spacebetween-negative.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[flexbox_justifycontent-start-rtl.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[flexbox_justifycontent-start.html]
expected: FAIL