diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor_test.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor_test.cc | 122 |
1 files changed, 85 insertions, 37 deletions
diff --git a/chromium/third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor_test.cc b/chromium/third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor_test.cc index 8ded96613d1..8398da81ecb 100644 --- a/chromium/third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor_test.cc +++ b/chromium/third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor_test.cc @@ -53,7 +53,7 @@ class NGInlineCursorTest : public NGLayoutTest, Vector<const NGPaintFragment*> backwards; for (NGInlineBackwardCursor cursor(start); cursor; cursor.MoveToPreviousSibling()) - backwards.push_back(cursor.CurrentPaintFragment()); + backwards.push_back(cursor.Current().PaintFragment()); backwards.Reverse(); EXPECT_THAT(backwards, forwards); return; @@ -65,16 +65,16 @@ class NGInlineCursorTest : public NGLayoutTest, Vector<const NGFragmentItem*> backwards; for (NGInlineBackwardCursor cursor(start); cursor; cursor.MoveToPreviousSibling()) - backwards.push_back(cursor.CurrentItem()); + backwards.push_back(cursor.Current().Item()); backwards.Reverse(); EXPECT_THAT(backwards, forwards); } String ToDebugString(const NGInlineCursor& cursor) { - if (cursor.IsLineBox()) + if (cursor.Current().IsLineBox()) return "#linebox"; - if (cursor.IsGeneratedTextType()) { + if (cursor.Current().IsGeneratedTextType()) { StringBuilder result; result.Append("#'"); result.Append(cursor.CurrentText()); @@ -82,10 +82,11 @@ class NGInlineCursorTest : public NGLayoutTest, return result.ToString(); } - if (cursor.IsText()) + if (cursor.Current().IsText()) return cursor.CurrentText().ToString().StripWhiteSpace(); - if (const LayoutObject* layout_object = cursor.CurrentLayoutObject()) { + if (const LayoutObject* layout_object = + cursor.Current().GetLayoutObject()) { if (const Element* element = DynamicTo<Element>(layout_object->GetNode())) { if (const AtomicString& id = element->GetIdAttribute()) @@ -100,18 +101,22 @@ class NGInlineCursorTest : public NGLayoutTest, Vector<String> ToDebugStringListWithBidiLevel(const NGInlineCursor& start) { Vector<String> list; - for (NGInlineCursor cursor(start); cursor; cursor.MoveToNext()) + for (NGInlineCursor cursor(start); cursor; cursor.MoveToNext()) { + // Inline boxes do not have bidi level. + if (cursor.Current().IsInlineBox()) + continue; list.push_back(ToDebugStringWithBidiLevel(cursor)); + } return list; } String ToDebugStringWithBidiLevel(const NGInlineCursor& cursor) { - if (!cursor.IsText() && !cursor.IsAtomicInline()) + if (!cursor.Current().IsText() && !cursor.Current().IsAtomicInline()) return ToDebugString(cursor); StringBuilder result; result.Append(ToDebugString(cursor)); result.Append(':'); - result.AppendNumber(cursor.CurrentBidiLevel()); + result.AppendNumber(cursor.Current().BidiLevel()); return result.ToString(); } }; @@ -126,8 +131,8 @@ TEST_P(NGInlineCursorTest, BidiLevelInlineBoxLTR) { "<div id=root dir=ltr>" "abc<b id=def>def</b><bdo dir=rtl><b id=ghi>GHI</b></bdo>jkl</div>"); Vector<String> list = ToDebugStringListWithBidiLevel(cursor); - EXPECT_THAT(list, ElementsAre("#linebox", "abc:0", "#def:0", - "LayoutInline BDO", "#ghi:1", "jkl:0")); + EXPECT_THAT(list, + ElementsAre("#linebox", "abc:0", "#def:0", "#ghi:1", "jkl:0")); } TEST_P(NGInlineCursorTest, BidiLevelInlineBoxRTL) { @@ -136,8 +141,8 @@ TEST_P(NGInlineCursorTest, BidiLevelInlineBoxRTL) { "<div id=root dir=rtl>" "abc<b id=def>def</b><bdo dir=rtl><b id=ghi>GHI</b></bdo>jkl</div>"); Vector<String> list = ToDebugStringListWithBidiLevel(cursor); - EXPECT_THAT(list, ElementsAre("#linebox", "LayoutInline BDO", "#ghi:3", - "jkl:2", "#def:1", "abc:2")); + EXPECT_THAT(list, + ElementsAre("#linebox", "#ghi:3", "jkl:2", "#def:1", "abc:2")); } TEST_P(NGInlineCursorTest, BidiLevelSimpleLTR) { @@ -163,7 +168,7 @@ TEST_P(NGInlineCursorTest, BidiLevelSimpleRTL) { TEST_P(NGInlineCursorTest, GetLayoutBlockFlowWithScopedCursor) { NGInlineCursor line = SetupCursor("<div id=root>line1<br>line2</div>"); - ASSERT_TRUE(line.IsLineBox()) << line; + ASSERT_TRUE(line.Current().IsLineBox()) << line; NGInlineCursor cursor = line.CursorForDescendants(); EXPECT_EQ(line.GetLayoutBlockFlow(), cursor.GetLayoutBlockFlow()); } @@ -175,11 +180,11 @@ TEST_P(NGInlineCursorTest, ContainingLine) { SetupCursor("<div id=root>abc<a id=target>def</a>ghi<br>xyz</div>"); const LayoutBlockFlow& block_flow = *cursor.GetLayoutBlockFlow(); NGInlineCursor line1(cursor); - ASSERT_TRUE(line1.IsLineBox()); + ASSERT_TRUE(line1.Current().IsLineBox()); NGInlineCursor line2(line1); line2.MoveToNextSibling(); - ASSERT_TRUE(line2.IsLineBox()); + ASSERT_TRUE(line2.Current().IsLineBox()); cursor.MoveTo(*block_flow.FirstChild()); cursor.MoveToContainingLine(); @@ -212,9 +217,14 @@ TEST_P(NGInlineCursorTest, CulledInlineWithAtomicInline) { list.push_back(ToDebugString(cursor)); cursor.MoveToNextForSameLayoutObject(); } - EXPECT_THAT(list, ElementsAre("abc", "ABC", "", "XYZ", "xyz")); + if (RuntimeEnabledFeatures::LayoutNGFragmentItemEnabled()) + EXPECT_THAT(list, ElementsAre("#culled", "#culled")); + else + EXPECT_THAT(list, ElementsAre("abc", "ABC", "", "XYZ", "xyz")); } +// We should not have float:right fragment, because it isn't in-flow in +// an inline formatting context. // For https://crbug.com/1026022 TEST_P(NGInlineCursorTest, CulledInlineWithFloat) { SetBodyInnerHTML( @@ -228,23 +238,27 @@ TEST_P(NGInlineCursorTest, CulledInlineWithFloat) { list.push_back(ToDebugString(cursor)); cursor.MoveToNextForSameLayoutObject(); } - EXPECT_THAT(list, ElementsAre("abc", "xyz")) - << "We should not have float:right fragment, because it isn't in-flow in " - "an inline formatting context."; + if (RuntimeEnabledFeatures::LayoutNGFragmentItemEnabled()) + EXPECT_THAT(list, ElementsAre("#culled")); + else + EXPECT_THAT(list, ElementsAre("abc", "xyz")); } TEST_P(NGInlineCursorTest, CulledInlineWithRoot) { - NGInlineCursor cursor = - SetupCursor("<div id=root><a><b>abc</b><br><i>xyz</i></a></div>"); - const LayoutInline& layout_inline = - ToLayoutInline(*cursor.GetLayoutBlockFlow()->FirstChild()); - cursor.MoveTo(layout_inline); + NGInlineCursor cursor = SetupCursor(R"HTML( + <div id="root"><a id="a"><b>abc</b><br><i>xyz</i></a></div> + )HTML"); + const LayoutObject* layout_inline_a = GetLayoutObjectByElementId("a"); + cursor.MoveTo(*layout_inline_a); Vector<String> list; while (cursor) { list.push_back(ToDebugString(cursor)); cursor.MoveToNextForSameLayoutObject(); } - EXPECT_THAT(list, ElementsAre("abc", "", "xyz")); + if (RuntimeEnabledFeatures::LayoutNGFragmentItemEnabled()) + EXPECT_THAT(list, ElementsAre("#a", "#a")); + else + EXPECT_THAT(list, ElementsAre("abc", "", "xyz")); } TEST_P(NGInlineCursorTest, CulledInlineWithoutRoot) { @@ -259,7 +273,10 @@ TEST_P(NGInlineCursorTest, CulledInlineWithoutRoot) { list.push_back(ToDebugString(cursor)); cursor.MoveToNextForSameLayoutObject(); } - EXPECT_THAT(list, ElementsAre("abc", "", "xyz")); + if (RuntimeEnabledFeatures::LayoutNGFragmentItemEnabled()) + EXPECT_THAT(list, ElementsAre("#a", "#a")); + else + EXPECT_THAT(list, ElementsAre("abc", "", "xyz")); } TEST_P(NGInlineCursorTest, FirstChild) { @@ -367,6 +384,17 @@ TEST_P(NGInlineCursorTest, FirstLastLogicalLeafWithImages) { EXPECT_EQ("#last", ToDebugString(last_logical_leaf)); } +TEST_P(NGInlineCursorTest, IsEmptyLineBox) { + InsertStyleElement("b { margin-bottom: 1px; }"); + NGInlineCursor cursor = SetupCursor("<div id=root>abc<br><b></b></div>"); + + EXPECT_FALSE(cursor.Current().IsEmptyLineBox()) + << "'abc\\n' is in non-empty line box."; + cursor.MoveToNextLine(); + EXPECT_TRUE(cursor.Current().IsEmptyLineBox()) + << "<b></b> with margin produces empty line box."; +} + TEST_P(NGInlineCursorTest, LastChild) { // TDOO(yosin): Remove <style> once NGFragmentItem don't do culled inline. InsertStyleElement("a, b { background: gray; }"); @@ -431,11 +459,27 @@ TEST_P(NGInlineCursorTest, NextWithEllipsis) { EXPECT_THAT(list, ElementsAre("#linebox", "abcdefghi", "abcd", u"#'\u2026'")); } +TEST_P(NGInlineCursorTest, NextWithEllipsisInlineBoxOnly) { + LoadAhem(); + InsertStyleElement( + "#root {" + "font: 10px/1 Ahem;" + "width: 5ch;" + "overflow: hidden;" + "text-overflow: ellipsis;" + "}" + "span { border: solid 10ch blue; }"); + NGInlineCursor cursor = SetupCursor("<div id=root><span></span></div>"); + Vector<String> list = ToDebugStringList(cursor); + EXPECT_THAT(list, ElementsAre("#linebox", "LayoutInline SPAN")); +} + TEST_P(NGInlineCursorTest, NextWithListItem) { NGInlineCursor cursor = SetupCursor("<ul><li id=root>abc</li></ul>"); Vector<String> list = ToDebugStringList(cursor); - EXPECT_THAT(list, - ElementsAre("LayoutNGListMarker (anonymous)", "#linebox", "abc")); + EXPECT_THAT(list, ElementsAre("LayoutNGOutsideListMarker ::marker", + "#linebox", "abc")); + EXPECT_EQ(GetLayoutObjectByElementId("root"), cursor.GetLayoutBlockFlow()); } TEST_P(NGInlineCursorTest, NextWithSoftHyphens) { @@ -546,12 +590,12 @@ TEST_P(NGInlineCursorTest, NextInlineLeafIgnoringLineBreak) { TEST_P(NGInlineCursorTest, NextLine) { NGInlineCursor cursor = SetupCursor("<div id=root>abc<br>xyz</div>"); NGInlineCursor line1(cursor); - while (line1 && !line1.IsLineBox()) + while (line1 && !line1.Current().IsLineBox()) line1.MoveToNext(); ASSERT_TRUE(line1.IsNotNull()); NGInlineCursor line2(line1); line2.MoveToNext(); - while (line2 && !line2.IsLineBox()) + while (line2 && !line2.Current().IsLineBox()) line2.MoveToNext(); ASSERT_NE(line1, line2); @@ -576,6 +620,10 @@ TEST_P(NGInlineCursorTest, NextWithInlineBox) { SetupCursor("<div id=root>abc<b id=ib>def</b>xyz</div>"); Vector<String> list = ToDebugStringList(cursor); EXPECT_THAT(list, ElementsAre("#linebox", "abc", "#ib", "xyz")); + + NGInlineCursor cursor2; + cursor2.MoveTo(*GetElementById("ib")->firstChild()->GetLayoutObject()); + EXPECT_EQ(GetLayoutObjectByElementId("ib"), cursor2.GetLayoutBlockFlow()); } TEST_P(NGInlineCursorTest, NextForSameLayoutObject) { @@ -594,10 +642,10 @@ TEST_P(NGInlineCursorTest, Sibling) { InsertStyleElement("a, b { background: gray; }"); NGInlineCursor cursor = SetupCursor("<div id=root>abc<a>DEF<b>GHI</b></a>xyz</div>"); + TestPrevoiusSibling(cursor.CursorForDescendants()); cursor.MoveToFirstChild(); // go to "abc" Vector<String> list = SiblingsToDebugStringList(cursor); EXPECT_THAT(list, ElementsAre("abc", "LayoutInline A", "xyz")); - TestPrevoiusSibling(cursor); } TEST_P(NGInlineCursorTest, Sibling2) { @@ -606,10 +654,10 @@ TEST_P(NGInlineCursorTest, Sibling2) { NGInlineCursor cursor = SetupCursor("<div id=root><a>abc<b>def</b>xyz</a></div>"); cursor.MoveToFirstChild(); // go to <a>abc</a> + TestPrevoiusSibling(cursor.CursorForDescendants()); cursor.MoveToFirstChild(); // go to "abc" Vector<String> list = SiblingsToDebugStringList(cursor); EXPECT_THAT(list, ElementsAre("abc", "LayoutInline B", "xyz")); - TestPrevoiusSibling(cursor); } TEST_P(NGInlineCursorTest, NextSkippingChildren) { @@ -741,12 +789,12 @@ TEST_P(NGInlineCursorTest, PreviousInlineLeafOnLineFromLayoutText) { TEST_P(NGInlineCursorTest, PreviousLine) { NGInlineCursor cursor = SetupCursor("<div id=root>abc<br>xyz</div>"); NGInlineCursor line1(cursor); - while (line1 && !line1.IsLineBox()) + while (line1 && !line1.Current().IsLineBox()) line1.MoveToNext(); ASSERT_TRUE(line1.IsNotNull()); NGInlineCursor line2(line1); line2.MoveToNext(); - while (line2 && !line2.IsLineBox()) + while (line2 && !line2.Current().IsLineBox()) line2.MoveToNext(); ASSERT_NE(line1, line2); @@ -784,9 +832,9 @@ TEST_P(NGInlineCursorTest, CursorForDescendants) { LayoutBlockFlow* block_flow = To<LayoutBlockFlow>(GetLayoutObjectByElementId("root")); NGInlineCursor cursor(*block_flow); - EXPECT_TRUE(cursor.IsLineBox()); + EXPECT_TRUE(cursor.Current().IsLineBox()); cursor.MoveToNext(); - EXPECT_TRUE(cursor.IsText()); + EXPECT_TRUE(cursor.Current().IsText()); EXPECT_THAT(ToDebugStringList(cursor.CursorForDescendants()), ElementsAre()); cursor.MoveToNext(); EXPECT_EQ(ToDebugString(cursor), "#span1"); |