diff --git a/components/layout_2020/display_list/mod.rs b/components/layout_2020/display_list/mod.rs index 4807d54d923..78d6e6ff903 100644 --- a/components/layout_2020/display_list/mod.rs +++ b/components/layout_2020/display_list/mod.rs @@ -282,7 +282,11 @@ impl Fragment { .translate(containing_block.origin.to_vector()); let mut baseline_origin = rect.origin.clone(); baseline_origin.y += Length::from(fragment.font_metrics.ascent); - let glyphs = glyphs(&fragment.glyphs, baseline_origin); + let glyphs = glyphs( + &fragment.glyphs, + baseline_origin, + fragment.justification_adjustment, + ); if glyphs.is_empty() { return; } @@ -760,6 +764,7 @@ fn rgba(color: AbsoluteColor) -> wr::ColorF { fn glyphs( glyph_runs: &[Arc], mut origin: PhysicalPoint, + justification_adjustment: Length, ) -> Vec { use gfx_traits::ByteIndex; use range::Range; @@ -778,6 +783,8 @@ fn glyphs( point, }; glyphs.push(glyph); + } else { + origin.x += justification_adjustment; } origin.x += Length::from(glyph.advance()); } diff --git a/components/layout_2020/flow/inline.rs b/components/layout_2020/flow/inline.rs index 7d950807da4..2b99cd63cde 100644 --- a/components/layout_2020/flow/inline.rs +++ b/components/layout_2020/flow/inline.rs @@ -20,6 +20,7 @@ use style::properties::ComputedValues; use style::values::computed::Length; use style::values::generics::text::LineHeight; use style::values::specified::text::{TextAlignKeyword, TextDecorationLine}; +use style::values::specified::TextJustify; use style::Zero; use webrender_api::FontInstanceKey; use xi_unicode::{linebreak_property, LineBreakLeafIter}; @@ -134,6 +135,9 @@ struct LineUnderConstruction { /// The LineItems for the current line under construction that have already /// been committed to this line. line_items: Vec, + + /// The number of justification opportunities in this line. + justification_opportunities: usize, } impl LineUnderConstruction { @@ -146,6 +150,7 @@ impl LineUnderConstruction { has_floats_waiting_to_be_placed: false, placement_among_floats: OnceCell::new(), line_items: Vec::new(), + justification_opportunities: 0, } } @@ -160,6 +165,23 @@ impl LineUnderConstruction { self.placement_among_floats.take(); let _ = self.placement_among_floats.set(new_placement); } + + /// Trim the trailing whitespace in this line and return the width of the whitespace trimmed. + fn trim_trailing_whitespace(&mut self) -> Length { + // From : + // > 3. A sequence of collapsible spaces at the end of a line is removed, + // > as well as any trailing U+1680   OGHAM SPACE MARK whose white-space + // > property is normal, nowrap, or pre-line. + let mut whitespace_trimmed = Length::zero(); + let mut spaces_trimmed = 0; + for item in self.line_items.iter_mut().rev() { + if !item.trim_whitespace_at_end(&mut whitespace_trimmed, &mut spaces_trimmed) { + break; + } + } + self.justification_opportunities -= spaces_trimmed; + whitespace_trimmed + } } /// The current unbreakable segment under construction for an inline formatting context. @@ -183,6 +205,9 @@ struct UnbreakableSegmentUnderConstruction { /// The inline size of any trailing whitespace in this segment. trailing_whitespace_size: Length, + + /// The number of justification opportunities in this unbreakable segment. + justification_opportunities: usize, } impl UnbreakableSegmentUnderConstruction { @@ -193,6 +218,7 @@ impl UnbreakableSegmentUnderConstruction { inline_box_hierarchy_depth: None, has_content: false, trailing_whitespace_size: Length::zero(), + justification_opportunities: 0, } } @@ -203,6 +229,7 @@ impl UnbreakableSegmentUnderConstruction { self.inline_box_hierarchy_depth = None; self.has_content = false; self.trailing_whitespace_size = Length::zero(); + self.justification_opportunities = 0; } /// Push a single line item to this segment. In addition, record the inline box @@ -228,12 +255,14 @@ impl UnbreakableSegmentUnderConstruction { /// This prevents whitespace from being added to the beginning of a line. fn trim_leading_whitespace(&mut self) { let mut whitespace_trimmed = Length::zero(); + let mut spaces_trimmed = 0; for item in self.line_items.iter_mut() { - if !item.trim_whitespace_at_start(&mut whitespace_trimmed) { + if !item.trim_whitespace_at_start(&mut whitespace_trimmed, &mut spaces_trimmed) { break; } } self.size.inline -= whitespace_trimmed; + self.justification_opportunities -= spaces_trimmed; } /// Prepare this segment for placement on a new and empty line. This happens when the @@ -494,29 +523,38 @@ impl<'a, 'b> InlineFormattingContextState<'a, 'b> { } } + fn finish_last_line(&mut self) { + // We are at the end of the IFC, and we need to do a few things to make sure that + // the current segment is committed and that the final line is finished. + // + // A soft wrap opportunity makes it so the current segment is placed on a new line + // if it doesn't fit on the current line under construction. + self.process_soft_wrap_opportunity(); + + // `process_soft_line_wrap_opportunity` does not commit the segment to a line if + // there is no line wrapping, so this forces the segment into the current line. + self.commit_current_segment_to_line(); + + // This has the effect of preventing the application of `text-align: justify` to + // this line because no justification opportunities means no justification. + self.current_line.justification_opportunities = 0; + + // Finally we finish the line itself and convert all of the LineItems into + // fragments. + self.finish_current_line_and_reset(); + } + /// Finish layout of all inline boxes for the current line. This will gather all /// [`LineItem`]s and turn them into [`Fragment`]s, then reset the /// [`InlineFormattingContextState`] preparing it for laying out a new line. fn finish_current_line_and_reset(&mut self) { - let mut line_items = std::mem::take(&mut self.current_line.line_items); + let whitespace_trimmed = self.current_line.trim_trailing_whitespace(); + let (inline_start_position, justification_adjustment) = self + .calculate_current_line_inline_start_and_justification_adjustment(whitespace_trimmed); - // From : - // > 3. A sequence of collapsible spaces at the end of a line is removed, - // > as well as any trailing U+1680   OGHAM SPACE MARK whose white-space - // > property is normal, nowrap, or pre-line. - let mut whitespace_trimmed = Length::zero(); - for item in line_items.iter_mut().rev() { - if !item.trim_whitespace_at_end(&mut whitespace_trimmed) { - break; - } - } - - let inline_start_position = - self.calculate_inline_start_for_current_line(self.containing_block, whitespace_trimmed); let block_start_position = self .current_line .line_block_start_considering_placement_among_floats(); - let had_inline_advance = self.current_line.inline_position != self.current_line.start_position.inline; @@ -537,6 +575,7 @@ impl<'a, 'b> InlineFormattingContextState<'a, 'b> { sequential_layout_state.advance_block_position(increment); } + let mut line_items = std::mem::take(&mut self.current_line.line_items); if self.current_line.has_floats_waiting_to_be_placed { place_pending_floats(self, &mut line_items); } @@ -547,6 +586,7 @@ impl<'a, 'b> InlineFormattingContextState<'a, 'b> { ifc_containing_block: self.containing_block, positioning_context: &mut self.positioning_context, line_block_start: block_start_position, + justification_adjustment, }; let positioning_context_length = state.positioning_context.len(); @@ -597,22 +637,24 @@ impl<'a, 'b> InlineFormattingContextState<'a, 'b> { /// Given the amount of whitespace trimmed from the line and taking into consideration /// the `text-align` property, calculate where the line under construction starts in - /// the inline axis. - fn calculate_inline_start_for_current_line( + /// the inline axis as well as the adjustment needed for every justification opportunity + /// to account for `text-align: justify`. + fn calculate_current_line_inline_start_and_justification_adjustment( &self, - containing_block: &ContainingBlock, whitespace_trimmed: Length, - ) -> Length { + ) -> (Length, Length) { enum TextAlign { Start, Center, End, } - let line_left_is_inline_start = containing_block + let line_left_is_inline_start = self + .containing_block .style .writing_mode .line_left_is_inline_start(); - let text_align = match containing_block.style.clone_text_align() { + let text_align_keyword = self.containing_block.style.clone_text_align(); + let text_align = match text_align_keyword { TextAlignKeyword::Start => TextAlign::Start, TextAlignKeyword::Center => TextAlign::Center, TextAlignKeyword::End => TextAlign::End, @@ -630,10 +672,7 @@ impl<'a, 'b> InlineFormattingContextState<'a, 'b> { TextAlign::Start } }, - TextAlignKeyword::Justify => { - // TODO: Add support for justfied text. - TextAlign::Start - }, + TextAlignKeyword::Justify => TextAlign::Start, TextAlignKeyword::ServoCenter | TextAlignKeyword::ServoLeft | TextAlignKeyword::ServoRight => { @@ -658,12 +697,29 @@ impl<'a, 'b> InlineFormattingContextState<'a, 'b> { // line box." let text_indent = self.current_line.start_position.inline; let line_length = self.current_line.inline_position - whitespace_trimmed - text_indent; - line_start + + let adjusted_line_start = line_start + match text_align { TextAlign::Start => text_indent, TextAlign::End => (available_space - line_length).max(text_indent), TextAlign::Center => (available_space - line_length + text_indent) / 2., - } + }; + + // Calculate the justification adjustment. This is simply the remaining space on the line, + // dividided by the number of justficiation opportunities that we recorded when building + // the line. + let num_justification_opportunities = self.current_line.justification_opportunities as f32; + let text_justify = self.containing_block.style.clone_text_justify(); + let justification_adjustment = match (text_align_keyword, text_justify) { + // `text-justify: none` should disable text justification. + // TODO: Handle more `text-justify` values. + (TextAlignKeyword::Justify, TextJustify::None) => Length::zero(), + (TextAlignKeyword::Justify, _) if num_justification_opportunities > 0. => { + (available_space - line_length) / num_justification_opportunities + }, + _ => Length::zero(), + }; + + (adjusted_line_start, justification_adjustment) } fn place_float_fragment(&mut self, fragment: &mut BoxFragment) { @@ -908,6 +964,10 @@ impl<'a, 'b> InlineFormattingContextState<'a, 'b> { self.current_line_segment.trailing_whitespace_size = inline_advance; } + if glyph_store.is_whitespace() { + self.current_line_segment.justification_opportunities += 1; + } + match self.current_line_segment.line_items.last_mut() { Some(LineItem::TextRun(text_run)) => { debug_assert!(font_key == text_run.font_key); @@ -1012,6 +1072,8 @@ impl<'a, 'b> InlineFormattingContextState<'a, 'b> { self.current_line.max_block_size = self .current_line_max_block_size() .max(self.current_line_segment.size.block); + self.current_line.justification_opportunities += + self.current_line_segment.justification_opportunities; let line_inline_size_without_trailing_whitespace = self.current_line.inline_position - self.current_line_segment.trailing_whitespace_size; @@ -1334,20 +1396,7 @@ impl InlineFormattingContext { } } - // We are at the end of the IFC, and we need to do a few things to make sure that - // the current segment is committed and that the final line is finished. - // - // A soft wrap opportunity makes it so the current segment is placed on a new line - // if it doesn't fit on the current line under construction. - ifc.process_soft_wrap_opportunity(); - - // `process_soft_line_wrap_opportunity` does not commit the segment to a line if - // there is no line wrapping, so this forces the segment into the current line. - ifc.commit_current_segment_to_line(); - - // Finally we finish the line itself and convert all of the LineItems into - // fragments. - ifc.finish_current_line_and_reset(); + ifc.finish_last_line(); let mut collapsible_margins_in_children = CollapsedBlockMargins::zero(); let content_block_size = ifc.current_line.start_position.block; @@ -1818,6 +1867,10 @@ struct LineItemLayoutState<'a> { ifc_containing_block: &'a ContainingBlock<'a>, positioning_context: &'a mut PositioningContext, line_block_start: Length, + + /// The amount of space to add to each justification opportunity in order to implement + /// `text-align: justify`. + justification_adjustment: Length, } fn layout_line_items( @@ -1882,9 +1935,15 @@ enum LineItem { } impl LineItem { - fn trim_whitespace_at_end(&mut self, whitespace_trimmed: &mut Length) -> bool { + fn trim_whitespace_at_end( + &mut self, + whitespace_trimmed: &mut Length, + spaces_trimmed: &mut usize, + ) -> bool { match self { - LineItem::TextRun(ref mut item) => item.trim_whitespace_at_end(whitespace_trimmed), + LineItem::TextRun(ref mut item) => { + item.trim_whitespace_at_end(whitespace_trimmed, spaces_trimmed) + }, LineItem::StartInlineBox(_) => true, LineItem::EndInlineBox => true, LineItem::Atomic(_) => false, @@ -1893,9 +1952,15 @@ impl LineItem { } } - fn trim_whitespace_at_start(&mut self, whitespace_trimmed: &mut Length) -> bool { + fn trim_whitespace_at_start( + &mut self, + whitespace_trimmed: &mut Length, + spaces_trimmed: &mut usize, + ) -> bool { match self { - LineItem::TextRun(ref mut item) => item.trim_whitespace_at_start(whitespace_trimmed), + LineItem::TextRun(ref mut item) => { + item.trim_whitespace_at_start(whitespace_trimmed, spaces_trimmed) + }, LineItem::StartInlineBox(_) => true, LineItem::EndInlineBox => true, LineItem::Atomic(_) => false, @@ -1968,7 +2033,11 @@ fn line_height_from_style(layout_context: &LayoutContext, style: &ComputedValues } impl TextRunLineItem { - fn trim_whitespace_at_end(&mut self, whitespace_trimmed: &mut Length) -> bool { + fn trim_whitespace_at_end( + &mut self, + whitespace_trimmed: &mut Length, + spaces_trimmed: &mut usize, + ) -> bool { if self .parent_style .get_inherited_text() @@ -1986,6 +2055,7 @@ impl TextRunLineItem { .map(|offset_from_end| self.text.len() - offset_from_end); let first_whitespace_index = index_of_last_non_whitespace.unwrap_or(0); + *spaces_trimmed += self.text.len() - first_whitespace_index; *whitespace_trimmed += self .text .drain(first_whitespace_index..) @@ -1996,7 +2066,11 @@ impl TextRunLineItem { index_of_last_non_whitespace.is_none() } - fn trim_whitespace_at_start(&mut self, whitespace_trimmed: &mut Length) -> bool { + fn trim_whitespace_at_start( + &mut self, + whitespace_trimmed: &mut Length, + spaces_trimmed: &mut usize, + ) -> bool { if self .parent_style .get_inherited_text() @@ -2011,6 +2085,8 @@ impl TextRunLineItem { .iter() .position(|glyph| !glyph.is_whitespace()) .unwrap_or(self.text.len()); + + *spaces_trimmed += index_of_first_non_whitespace; *whitespace_trimmed += self .text .drain(0..index_of_first_non_whitespace) @@ -2030,11 +2106,23 @@ impl TextRunLineItem { return None; } - let inline_advance: Length = self + let mut number_of_justification_opportunities = 0; + let mut inline_advance: Length = self .text .iter() - .map(|glyph_store| Length::from(glyph_store.total_advance())) + .map(|glyph_store| { + if glyph_store.is_whitespace() { + number_of_justification_opportunities += 1 + } + Length::from(glyph_store.total_advance()) + }) .sum(); + + if !state.justification_adjustment.is_zero() { + inline_advance += + state.justification_adjustment * number_of_justification_opportunities as f32; + } + let rect = LogicalRect { start_corner: LogicalVec2 { block: Length::zero(), @@ -2055,6 +2143,7 @@ impl TextRunLineItem { font_key: self.font_key, glyphs: self.text, text_decoration_line: self.text_decoration_line, + justification_adjustment: state.justification_adjustment, }) } } @@ -2115,6 +2204,7 @@ impl InlineBoxLineItem { ifc_containing_block: state.ifc_containing_block, positioning_context: nested_positioning_context, line_block_start: state.line_block_start, + justification_adjustment: state.justification_adjustment, }; let mut saw_end = false; diff --git a/components/layout_2020/fragment_tree/fragment.rs b/components/layout_2020/fragment_tree/fragment.rs index c8456ba6bbc..56e7c3a5a9e 100644 --- a/components/layout_2020/fragment_tree/fragment.rs +++ b/components/layout_2020/fragment_tree/fragment.rs @@ -85,8 +85,12 @@ pub(crate) struct TextFragment { #[serde(skip_serializing)] pub font_key: FontInstanceKey, pub glyphs: Vec>, + /// A flag that represents the _used_ value of the text-decoration property. pub text_decoration_line: TextDecorationLine, + + /// Extra space to add for each justification opportunity. + pub justification_adjustment: Length, } #[derive(Serialize)] diff --git a/components/style/properties/longhands/inherited_text.mako.rs b/components/style/properties/longhands/inherited_text.mako.rs index 8bb3c6355a9..578bfa5f30b 100644 --- a/components/style/properties/longhands/inherited_text.mako.rs +++ b/components/style/properties/longhands/inherited_text.mako.rs @@ -102,7 +102,6 @@ ${helpers.predefined_type( "TextJustify", "computed::TextJustify::Auto", engines="gecko servo", - servo_pref="layout.legacy_layout", animation_value_type="discrete", spec="https://drafts.csswg.org/css-text/#propdef-text-justify", servo_restyle_damage="rebuild_and_reflow", diff --git a/tests/wpt/meta/css/CSS2/text/text-align-white-space-002.xht.ini b/tests/wpt/meta/css/CSS2/text/text-align-white-space-002.xht.ini deleted file mode 100644 index fefeef6ff93..00000000000 --- a/tests/wpt/meta/css/CSS2/text/text-align-white-space-002.xht.ini +++ /dev/null @@ -1,2 +0,0 @@ -[text-align-white-space-002.xht] - expected: FAIL diff --git a/tests/wpt/meta/css/CSS2/text/word-spacing-justify-001.xht.ini b/tests/wpt/meta/css/CSS2/text/word-spacing-justify-001.xht.ini deleted file mode 100644 index 373c9869d6b..00000000000 --- a/tests/wpt/meta/css/CSS2/text/word-spacing-justify-001.xht.ini +++ /dev/null @@ -1,2 +0,0 @@ -[word-spacing-justify-001.xht] - expected: FAIL diff --git a/tests/wpt/meta/css/css-text/inheritance.html.ini b/tests/wpt/meta/css/css-text/inheritance.html.ini index fe48e832022..786f2217d0f 100644 --- a/tests/wpt/meta/css/css-text/inheritance.html.ini +++ b/tests/wpt/meta/css/css-text/inheritance.html.ini @@ -35,9 +35,6 @@ [Property text-align-last inherits] expected: FAIL - [Property text-justify inherits] - expected: FAIL - [Property text-wrap has initial value wrap] expected: FAIL @@ -50,9 +47,6 @@ [Property overflow-wrap inherits] expected: FAIL - [Property text-justify has initial value auto] - expected: FAIL - [Property text-transform has initial value none] expected: FAIL diff --git a/tests/wpt/meta/css/css-text/parsing/text-justify-computed-legacy.html.ini b/tests/wpt/meta/css/css-text/parsing/text-justify-computed-legacy.html.ini deleted file mode 100644 index 210a79f60ac..00000000000 --- a/tests/wpt/meta/css/css-text/parsing/text-justify-computed-legacy.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[text-justify-computed-legacy.html] - [Property text-justify value 'distribute'] - expected: FAIL diff --git a/tests/wpt/meta/css/css-text/parsing/text-justify-computed.html.ini b/tests/wpt/meta/css/css-text/parsing/text-justify-computed.html.ini deleted file mode 100644 index c71fa322ff7..00000000000 --- a/tests/wpt/meta/css/css-text/parsing/text-justify-computed.html.ini +++ /dev/null @@ -1,12 +0,0 @@ -[text-justify-computed.html] - [Property text-justify value 'auto'] - expected: FAIL - - [Property text-justify value 'none'] - expected: FAIL - - [Property text-justify value 'inter-word'] - expected: FAIL - - [Property text-justify value 'inter-character'] - expected: FAIL diff --git a/tests/wpt/meta/css/css-text/parsing/text-justify-valid.html.ini b/tests/wpt/meta/css/css-text/parsing/text-justify-valid.html.ini deleted file mode 100644 index 21136318681..00000000000 --- a/tests/wpt/meta/css/css-text/parsing/text-justify-valid.html.ini +++ /dev/null @@ -1,12 +0,0 @@ -[text-justify-valid.html] - [e.style['text-justify'\] = "auto" should set the property value] - expected: FAIL - - [e.style['text-justify'\] = "none" should set the property value] - expected: FAIL - - [e.style['text-justify'\] = "inter-word" should set the property value] - expected: FAIL - - [e.style['text-justify'\] = "inter-character" should set the property value] - expected: FAIL diff --git a/tests/wpt/meta/css/css-text/text-align/text-align-justify-002.html.ini b/tests/wpt/meta/css/css-text/text-align/text-align-justify-002.html.ini deleted file mode 100644 index 73f59794398..00000000000 --- a/tests/wpt/meta/css/css-text/text-align/text-align-justify-002.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[text-align-justify-002.html] - expected: FAIL diff --git a/tests/wpt/meta/css/css-text/text-align/text-align-justify-004.html.ini b/tests/wpt/meta/css/css-text/text-align/text-align-justify-004.html.ini deleted file mode 100644 index 71011df0f58..00000000000 --- a/tests/wpt/meta/css/css-text/text-align/text-align-justify-004.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[text-align-justify-004.html] - expected: FAIL diff --git a/tests/wpt/meta/css/css-text/text-align/text-align-justify-006.html.ini b/tests/wpt/meta/css/css-text/text-align/text-align-justify-006.html.ini deleted file mode 100644 index a5f6ec8ff14..00000000000 --- a/tests/wpt/meta/css/css-text/text-align/text-align-justify-006.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[text-align-justify-006.html] - expected: FAIL diff --git a/tests/wpt/meta/css/css-text/text-align/text-align-justify-tabs-001.html.ini b/tests/wpt/meta/css/css-text/text-align/text-align-justify-tabs-001.html.ini new file mode 100644 index 00000000000..47a2b23a988 --- /dev/null +++ b/tests/wpt/meta/css/css-text/text-align/text-align-justify-tabs-001.html.ini @@ -0,0 +1,2 @@ +[text-align-justify-tabs-001.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-text/text-justify/distribute-alias.tentative.html.ini b/tests/wpt/meta/css/css-text/text-justify/distribute-alias.tentative.html.ini deleted file mode 100644 index 053373e177d..00000000000 --- a/tests/wpt/meta/css/css-text/text-justify/distribute-alias.tentative.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[distribute-alias.tentative.html] - [text-justify: distribute is a parse-time alias of inter-character] - expected: FAIL diff --git a/tests/wpt/meta/css/css-text/text-justify/text-justify-interpolation.html.ini b/tests/wpt/meta/css/css-text/text-justify/text-justify-interpolation.html.ini index c85bcb589a4..4c5ce7f2e32 100644 --- a/tests/wpt/meta/css/css-text/text-justify/text-justify-interpolation.html.ini +++ b/tests/wpt/meta/css/css-text/text-justify/text-justify-interpolation.html.ini @@ -1,22 +1,4 @@ [text-justify-interpolation.html] - [CSS Transitions: property from [auto\] to [inter-word\] at (-0.3) should be [inter-word\]] - expected: FAIL - - [CSS Transitions: property from [auto\] to [inter-word\] at (0) should be [inter-word\]] - expected: FAIL - - [CSS Transitions: property from [auto\] to [inter-word\] at (0.3) should be [inter-word\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [auto\] to [inter-word\] at (-0.3) should be [inter-word\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [auto\] to [inter-word\] at (0) should be [inter-word\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [auto\] to [inter-word\] at (0.3) should be [inter-word\]] - expected: FAIL - [Web Animations: property from [auto\] to [inter-word\] at (-0.3) should be [auto\]] expected: FAIL @@ -38,69 +20,6 @@ [Web Animations: property from [auto\] to [inter-word\] at (1.5) should be [inter-word\]] expected: FAIL - [CSS Transitions: property from [auto\] to [inter-character\] at (-0.3) should be [inter-character\]] - expected: FAIL - - [CSS Transitions: property from [auto\] to [inter-character\] at (0) should be [inter-character\]] - expected: FAIL - - [CSS Transitions: property from [auto\] to [inter-character\] at (0.3) should be [inter-character\]] - expected: FAIL - - [CSS Transitions: property from [auto\] to [inter-character\] at (0.5) should be [inter-character\]] - expected: FAIL - - [CSS Transitions: property from [auto\] to [inter-character\] at (0.6) should be [inter-character\]] - expected: FAIL - - [CSS Transitions: property from [auto\] to [inter-character\] at (1) should be [inter-character\]] - expected: FAIL - - [CSS Transitions: property from [auto\] to [inter-character\] at (1.5) should be [inter-character\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [auto\] to [inter-character\] at (-0.3) should be [inter-character\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [auto\] to [inter-character\] at (0) should be [inter-character\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [auto\] to [inter-character\] at (0.3) should be [inter-character\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [auto\] to [inter-character\] at (0.5) should be [inter-character\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [auto\] to [inter-character\] at (0.6) should be [inter-character\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [auto\] to [inter-character\] at (1) should be [inter-character\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [auto\] to [inter-character\] at (1.5) should be [inter-character\]] - expected: FAIL - - [CSS Animations: property from [auto\] to [inter-character\] at (-0.3) should be [auto\]] - expected: FAIL - - [CSS Animations: property from [auto\] to [inter-character\] at (0) should be [auto\]] - expected: FAIL - - [CSS Animations: property from [auto\] to [inter-character\] at (0.3) should be [auto\]] - expected: FAIL - - [CSS Animations: property from [auto\] to [inter-character\] at (0.5) should be [inter-character\]] - expected: FAIL - - [CSS Animations: property from [auto\] to [inter-character\] at (0.6) should be [inter-character\]] - expected: FAIL - - [CSS Animations: property from [auto\] to [inter-character\] at (1) should be [inter-character\]] - expected: FAIL - - [CSS Animations: property from [auto\] to [inter-character\] at (1.5) should be [inter-character\]] - expected: FAIL - [Web Animations: property from [auto\] to [inter-character\] at (-0.3) should be [auto\]] expected: FAIL @@ -122,69 +41,6 @@ [Web Animations: property from [auto\] to [inter-character\] at (1.5) should be [inter-character\]] expected: FAIL - [CSS Transitions: property from [inter-character\] to [distribute\] at (-0.3) should be [distribute\]] - expected: FAIL - - [CSS Transitions: property from [inter-character\] to [distribute\] at (0) should be [distribute\]] - expected: FAIL - - [CSS Transitions: property from [inter-character\] to [distribute\] at (0.3) should be [distribute\]] - expected: FAIL - - [CSS Transitions: property from [inter-character\] to [distribute\] at (0.5) should be [distribute\]] - expected: FAIL - - [CSS Transitions: property from [inter-character\] to [distribute\] at (0.6) should be [distribute\]] - expected: FAIL - - [CSS Transitions: property from [inter-character\] to [distribute\] at (1) should be [distribute\]] - expected: FAIL - - [CSS Transitions: property from [inter-character\] to [distribute\] at (1.5) should be [distribute\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [inter-character\] to [distribute\] at (-0.3) should be [distribute\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [inter-character\] to [distribute\] at (0) should be [distribute\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [inter-character\] to [distribute\] at (0.3) should be [distribute\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [inter-character\] to [distribute\] at (0.5) should be [distribute\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [inter-character\] to [distribute\] at (0.6) should be [distribute\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [inter-character\] to [distribute\] at (1) should be [distribute\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [inter-character\] to [distribute\] at (1.5) should be [distribute\]] - expected: FAIL - - [CSS Animations: property from [inter-character\] to [distribute\] at (-0.3) should be [inter-character\]] - expected: FAIL - - [CSS Animations: property from [inter-character\] to [distribute\] at (0) should be [inter-character\]] - expected: FAIL - - [CSS Animations: property from [inter-character\] to [distribute\] at (0.3) should be [inter-character\]] - expected: FAIL - - [CSS Animations: property from [inter-character\] to [distribute\] at (0.5) should be [distribute\]] - expected: FAIL - - [CSS Animations: property from [inter-character\] to [distribute\] at (0.6) should be [distribute\]] - expected: FAIL - - [CSS Animations: property from [inter-character\] to [distribute\] at (1) should be [distribute\]] - expected: FAIL - - [CSS Animations: property from [inter-character\] to [distribute\] at (1.5) should be [distribute\]] - expected: FAIL - [Web Animations: property from [inter-character\] to [distribute\] at (-0.3) should be [inter-character\]] expected: FAIL @@ -206,69 +62,6 @@ [Web Animations: property from [inter-character\] to [distribute\] at (1.5) should be [distribute\]] expected: FAIL - [CSS Transitions: property from [inter-word\] to [distribute\] at (-0.3) should be [distribute\]] - expected: FAIL - - [CSS Transitions: property from [inter-word\] to [distribute\] at (0) should be [distribute\]] - expected: FAIL - - [CSS Transitions: property from [inter-word\] to [distribute\] at (0.3) should be [distribute\]] - expected: FAIL - - [CSS Transitions: property from [inter-word\] to [distribute\] at (0.5) should be [distribute\]] - expected: FAIL - - [CSS Transitions: property from [inter-word\] to [distribute\] at (0.6) should be [distribute\]] - expected: FAIL - - [CSS Transitions: property from [inter-word\] to [distribute\] at (1) should be [distribute\]] - expected: FAIL - - [CSS Transitions: property from [inter-word\] to [distribute\] at (1.5) should be [distribute\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [inter-word\] to [distribute\] at (-0.3) should be [distribute\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [inter-word\] to [distribute\] at (0) should be [distribute\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [inter-word\] to [distribute\] at (0.3) should be [distribute\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [inter-word\] to [distribute\] at (0.5) should be [distribute\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [inter-word\] to [distribute\] at (0.6) should be [distribute\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [inter-word\] to [distribute\] at (1) should be [distribute\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [inter-word\] to [distribute\] at (1.5) should be [distribute\]] - expected: FAIL - - [CSS Animations: property from [inter-word\] to [distribute\] at (-0.3) should be [inter-word\]] - expected: FAIL - - [CSS Animations: property from [inter-word\] to [distribute\] at (0) should be [inter-word\]] - expected: FAIL - - [CSS Animations: property from [inter-word\] to [distribute\] at (0.3) should be [inter-word\]] - expected: FAIL - - [CSS Animations: property from [inter-word\] to [distribute\] at (0.5) should be [distribute\]] - expected: FAIL - - [CSS Animations: property from [inter-word\] to [distribute\] at (0.6) should be [distribute\]] - expected: FAIL - - [CSS Animations: property from [inter-word\] to [distribute\] at (1) should be [distribute\]] - expected: FAIL - - [CSS Animations: property from [inter-word\] to [distribute\] at (1.5) should be [distribute\]] - expected: FAIL - [Web Animations: property from [inter-word\] to [distribute\] at (-0.3) should be [inter-word\]] expected: FAIL @@ -290,69 +83,6 @@ [Web Animations: property from [inter-word\] to [distribute\] at (1.5) should be [distribute\]] expected: FAIL - [CSS Transitions: property from [distribute\] to [none\] at (-0.3) should be [none\]] - expected: FAIL - - [CSS Transitions: property from [distribute\] to [none\] at (0) should be [none\]] - expected: FAIL - - [CSS Transitions: property from [distribute\] to [none\] at (0.3) should be [none\]] - expected: FAIL - - [CSS Transitions: property from [distribute\] to [none\] at (0.5) should be [none\]] - expected: FAIL - - [CSS Transitions: property from [distribute\] to [none\] at (0.6) should be [none\]] - expected: FAIL - - [CSS Transitions: property from [distribute\] to [none\] at (1) should be [none\]] - expected: FAIL - - [CSS Transitions: property from [distribute\] to [none\] at (1.5) should be [none\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [distribute\] to [none\] at (-0.3) should be [none\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [distribute\] to [none\] at (0) should be [none\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [distribute\] to [none\] at (0.3) should be [none\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [distribute\] to [none\] at (0.5) should be [none\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [distribute\] to [none\] at (0.6) should be [none\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [distribute\] to [none\] at (1) should be [none\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [distribute\] to [none\] at (1.5) should be [none\]] - expected: FAIL - - [CSS Animations: property from [distribute\] to [none\] at (-0.3) should be [distribute\]] - expected: FAIL - - [CSS Animations: property from [distribute\] to [none\] at (0) should be [distribute\]] - expected: FAIL - - [CSS Animations: property from [distribute\] to [none\] at (0.3) should be [distribute\]] - expected: FAIL - - [CSS Animations: property from [distribute\] to [none\] at (0.5) should be [none\]] - expected: FAIL - - [CSS Animations: property from [distribute\] to [none\] at (0.6) should be [none\]] - expected: FAIL - - [CSS Animations: property from [distribute\] to [none\] at (1) should be [none\]] - expected: FAIL - - [CSS Animations: property from [distribute\] to [none\] at (1.5) should be [none\]] - expected: FAIL - [Web Animations: property from [distribute\] to [none\] at (-0.3) should be [distribute\]] expected: FAIL @@ -383,51 +113,6 @@ [CSS Transitions: property from [auto\] to [inter-word\] at (0.3) should be [auto\]] expected: FAIL - [CSS Transitions: property from [auto\] to [inter-word\] at (0.5) should be [inter-word\]] - expected: FAIL - - [CSS Transitions: property from [auto\] to [inter-word\] at (0.6) should be [inter-word\]] - expected: FAIL - - [CSS Transitions: property from [auto\] to [inter-word\] at (1) should be [inter-word\]] - expected: FAIL - - [CSS Transitions: property from [auto\] to [inter-word\] at (1.5) should be [inter-word\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [auto\] to [inter-word\] at (0.5) should be [inter-word\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [auto\] to [inter-word\] at (0.6) should be [inter-word\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [auto\] to [inter-word\] at (1) should be [inter-word\]] - expected: FAIL - - [CSS Transitions with transition: all: property from [auto\] to [inter-word\] at (1.5) should be [inter-word\]] - expected: FAIL - - [CSS Animations: property from [auto\] to [inter-word\] at (-0.3) should be [auto\]] - expected: FAIL - - [CSS Animations: property from [auto\] to [inter-word\] at (0) should be [auto\]] - expected: FAIL - - [CSS Animations: property from [auto\] to [inter-word\] at (0.3) should be [auto\]] - expected: FAIL - - [CSS Animations: property from [auto\] to [inter-word\] at (0.5) should be [inter-word\]] - expected: FAIL - - [CSS Animations: property from [auto\] to [inter-word\] at (0.6) should be [inter-word\]] - expected: FAIL - - [CSS Animations: property from [auto\] to [inter-word\] at (1) should be [inter-word\]] - expected: FAIL - - [CSS Animations: property from [auto\] to [inter-word\] at (1.5) should be [inter-word\]] - expected: FAIL - [CSS Transitions: property from [auto\] to [inter-character\] at (-0.3) should be [auto\]] expected: FAIL diff --git a/tests/wpt/mozilla/meta/css/text_align_complex_a.html.ini b/tests/wpt/mozilla/meta/css/text_align_complex_a.html.ini deleted file mode 100644 index 124794a9e9e..00000000000 --- a/tests/wpt/mozilla/meta/css/text_align_complex_a.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[text_align_complex_a.html] - expected: FAIL diff --git a/tests/wpt/mozilla/meta/css/text_align_justify_a.html.ini b/tests/wpt/mozilla/meta/css/text_align_justify_a.html.ini deleted file mode 100644 index 74eb25787f1..00000000000 --- a/tests/wpt/mozilla/meta/css/text_align_justify_a.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[text_align_justify_a.html] - expected: FAIL