| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/layout/ng/ng_base_layout_algorithm_test.h" | 5 #include "core/layout/ng/ng_base_layout_algorithm_test.h" |
| 6 | 6 |
| 7 #include "core/dom/TagCollection.h" | 7 #include "core/dom/TagCollection.h" |
| 8 #include "core/layout/line/InlineTextBox.h" | 8 #include "core/layout/line/InlineTextBox.h" |
| 9 #include "core/layout/ng/ng_inline_node.h" | 9 #include "core/layout/ng/ng_inline_node.h" |
| 10 #include "core/layout/ng/ng_physical_line_box_fragment.h" |
| 10 #include "core/layout/ng/ng_physical_text_fragment.h" | 11 #include "core/layout/ng/ng_physical_text_fragment.h" |
| 11 #include "platform/geometry/LayoutPoint.h" | 12 #include "platform/geometry/LayoutPoint.h" |
| 12 #include "platform/geometry/LayoutRect.h" | 13 #include "platform/geometry/LayoutRect.h" |
| 13 | 14 |
| 14 namespace blink { | 15 namespace blink { |
| 15 namespace { | 16 namespace { |
| 16 | 17 |
| 17 class NGTextLayoutAlgorithmTest : public NGBaseLayoutAlgorithmTest {}; | 18 class NGTextLayoutAlgorithmTest : public NGBaseLayoutAlgorithmTest {}; |
| 18 | 19 |
| 19 // Verifies that text can flow correctly around floats that were positioned | 20 // Verifies that text can flow correctly around floats that were positioned |
| (...skipping 29 matching lines...) Expand all Loading... |
| 49 )HTML"); | 50 )HTML"); |
| 50 // ** Run LayoutNG algorithm ** | 51 // ** Run LayoutNG algorithm ** |
| 51 RefPtr<NGConstraintSpace> space; | 52 RefPtr<NGConstraintSpace> space; |
| 52 RefPtr<NGPhysicalBoxFragment> html_fragment; | 53 RefPtr<NGPhysicalBoxFragment> html_fragment; |
| 53 std::tie(html_fragment, space) = RunBlockLayoutAlgorithmForElement( | 54 std::tie(html_fragment, space) = RunBlockLayoutAlgorithmForElement( |
| 54 document().getElementsByTagName("html")->item(0)); | 55 document().getElementsByTagName("html")->item(0)); |
| 55 auto* body_fragment = | 56 auto* body_fragment = |
| 56 toNGPhysicalBoxFragment(html_fragment->Children()[0].get()); | 57 toNGPhysicalBoxFragment(html_fragment->Children()[0].get()); |
| 57 auto* container_fragment = | 58 auto* container_fragment = |
| 58 toNGPhysicalBoxFragment(body_fragment->Children()[0].get()); | 59 toNGPhysicalBoxFragment(body_fragment->Children()[0].get()); |
| 59 auto* text_fragments_wrapper = | 60 auto* line_box_fragments_wrapper = |
| 60 toNGPhysicalBoxFragment(container_fragment->Children()[0].get()); | 61 toNGPhysicalBoxFragment(container_fragment->Children()[0].get()); |
| 62 Vector<NGPhysicalTextFragment*> text_fragments; |
| 63 for (const auto& child : line_box_fragments_wrapper->Children()) { |
| 64 auto* line_box = toNGPhysicalLineBoxFragment(child.get()); |
| 65 EXPECT_EQ(1u, line_box->Children().size()); |
| 66 for (const auto& text : line_box->Children()) |
| 67 text_fragments.push_back(toNGPhysicalTextFragment(text.get())); |
| 68 } |
| 61 | 69 |
| 62 LayoutText* layout_text = | 70 LayoutText* layout_text = |
| 63 toLayoutText(getLayoutObjectByElementId("text")->slowFirstChild()); | 71 toLayoutText(getLayoutObjectByElementId("text")->slowFirstChild()); |
| 64 ASSERT(layout_text->hasTextBoxes()); | 72 ASSERT(layout_text->hasTextBoxes()); |
| 65 | 73 |
| 66 ASSERT_EQ(4UL, text_fragments_wrapper->Children().size()); | 74 ASSERT_EQ(4UL, text_fragments.size()); |
| 67 | 75 |
| 68 auto* text_fragment1 = | 76 auto* text_fragment1 = text_fragments[0]; |
| 69 toNGPhysicalTextFragment(text_fragments_wrapper->Children()[0].get()); | |
| 70 // 40 = #left-float1' width 30 + #left-float2 10 | 77 // 40 = #left-float1' width 30 + #left-float2 10 |
| 71 EXPECT_EQ(LayoutUnit(40), text_fragment1->LeftOffset()); | 78 EXPECT_EQ(LayoutUnit(40), text_fragment1->LeftOffset()); |
| 72 EXPECT_EQ("The quick ", text_fragment1->Text()); | 79 EXPECT_EQ("The quick ", text_fragment1->Text()); |
| 73 InlineTextBox* inline_text_box1 = layout_text->firstTextBox(); | 80 InlineTextBox* inline_text_box1 = layout_text->firstTextBox(); |
| 74 EXPECT_EQ(LayoutUnit(40), inline_text_box1->x()); | 81 EXPECT_EQ(LayoutUnit(40), inline_text_box1->x()); |
| 75 | 82 |
| 76 auto* text_fragment2 = | 83 auto* text_fragment2 = text_fragments[1]; |
| 77 toNGPhysicalTextFragment(text_fragments_wrapper->Children()[1].get()); | |
| 78 // 40 = #left-float1' width 30 | 84 // 40 = #left-float1' width 30 |
| 79 EXPECT_EQ(LayoutUnit(30), text_fragment2->LeftOffset()); | 85 EXPECT_EQ(LayoutUnit(30), text_fragment2->LeftOffset()); |
| 80 EXPECT_EQ("brown fox ", text_fragment2->Text()); | 86 EXPECT_EQ("brown fox ", text_fragment2->Text()); |
| 81 InlineTextBox* inline_text_box2 = inline_text_box1->nextTextBox(); | 87 InlineTextBox* inline_text_box2 = inline_text_box1->nextTextBox(); |
| 82 EXPECT_EQ(LayoutUnit(30), inline_text_box2->x()); | 88 EXPECT_EQ(LayoutUnit(30), inline_text_box2->x()); |
| 83 | 89 |
| 84 auto* text_fragment3 = | 90 auto* text_fragment3 = text_fragments[2]; |
| 85 toNGPhysicalTextFragment(text_fragments_wrapper->Children()[2].get()); | |
| 86 EXPECT_EQ(LayoutUnit(), text_fragment3->LeftOffset()); | 91 EXPECT_EQ(LayoutUnit(), text_fragment3->LeftOffset()); |
| 87 EXPECT_EQ("jumps over the lazy ", text_fragment3->Text()); | 92 EXPECT_EQ("jumps over the lazy ", text_fragment3->Text()); |
| 88 InlineTextBox* inline_text_box3 = inline_text_box2->nextTextBox(); | 93 InlineTextBox* inline_text_box3 = inline_text_box2->nextTextBox(); |
| 89 EXPECT_EQ(LayoutUnit(), inline_text_box3->x()); | 94 EXPECT_EQ(LayoutUnit(), inline_text_box3->x()); |
| 90 } | 95 } |
| 91 | 96 |
| 92 // Verifies that text correctly flows around the inline float that fits on | 97 // Verifies that text correctly flows around the inline float that fits on |
| 93 // the same text line. | 98 // the same text line. |
| 94 TEST_F(NGTextLayoutAlgorithmTest, TextFloatsAroundInlineFloatThatFitsOnLine) { | 99 TEST_F(NGTextLayoutAlgorithmTest, TextFloatsAroundInlineFloatThatFitsOnLine) { |
| 95 setBodyInnerHTML(R"HTML( | 100 setBodyInnerHTML(R"HTML( |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 198 Element* narrow_float = document().getElementById("left-narrow"); | 203 Element* narrow_float = document().getElementById("left-narrow"); |
| 199 // 160 float-wide's width + 8 body's margin. | 204 // 160 float-wide's width + 8 body's margin. |
| 200 EXPECT_EQ(160 + 8, narrow_float->offsetLeft()); | 205 EXPECT_EQ(160 + 8, narrow_float->offsetLeft()); |
| 201 | 206 |
| 202 // On the same line. | 207 // On the same line. |
| 203 EXPECT_EQ(wide_float->offsetTop(), narrow_float->offsetTop()); | 208 EXPECT_EQ(wide_float->offsetTop(), narrow_float->offsetTop()); |
| 204 } | 209 } |
| 205 | 210 |
| 206 } // namespace | 211 } // namespace |
| 207 } // namespace blink | 212 } // namespace blink |
| OLD | NEW |