Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(40)

Unified Diff: third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm_test.cc

Issue 2772503004: [LayoutNG] Add NGInlineBreakToken and back of NGInlineLayoutAlgorithm (Closed)
Patch Set: Resolved merge conflicts Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm_test.cc
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_text_layout_algorithm_test.cc b/third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm_test.cc
similarity index 70%
rename from third_party/WebKit/Source/core/layout/ng/ng_text_layout_algorithm_test.cc
rename to third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm_test.cc
index 9db02e121b6d550a73c5a7a6e9dfd0bfb3ae7bd6..3fe5ddcba1540a994e4d1bc832a860e435bcd2b4 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_text_layout_algorithm_test.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm_test.cc
@@ -6,6 +6,9 @@
#include "core/dom/TagCollection.h"
#include "core/layout/line/InlineTextBox.h"
+#include "core/layout/ng/layout_ng_block_flow.h"
+#include "core/layout/ng/ng_block_break_token.h"
+#include "core/layout/ng/ng_constraint_space_builder.h"
#include "core/layout/ng/ng_inline_node.h"
#include "core/layout/ng/ng_physical_line_box_fragment.h"
#include "core/layout/ng/ng_physical_text_fragment.h"
@@ -15,11 +18,70 @@
namespace blink {
namespace {
-class NGTextLayoutAlgorithmTest : public NGBaseLayoutAlgorithmTest {};
+class NGInlineLayoutAlgorithmTest : public NGBaseLayoutAlgorithmTest {};
+
+TEST_F(NGInlineLayoutAlgorithmTest, BreakToken) {
+ loadAhem();
+ setBodyInnerHTML(R"HTML(
+ <!DOCTYPE html>
+ <style>
+ html {
+ font: 10px/1 Ahem;
+ }
+ #container {
+ width: 50px; height: 20px;
+ }
+ </style>
+ <div id=container>123 456 789</div>
+ )HTML");
+
+ // Perform 1st Layout.
+ LayoutNGBlockFlow* block_flow =
+ toLayoutNGBlockFlow(getLayoutObjectByElementId("container"));
+ NGInlineNode* inline_node =
+ new NGInlineNode(block_flow->firstChild(), block_flow);
+ RefPtr<NGConstraintSpace> constraint_space =
+ NGConstraintSpaceBuilder(NGWritingMode::kHorizontalTopBottom)
+ .SetAvailableSize({LayoutUnit(50), LayoutUnit(20)})
+ .ToConstraintSpace(NGWritingMode::kHorizontalTopBottom);
+ RefPtr<NGLayoutResult> layout_result =
+ inline_node->Layout(constraint_space.get(), nullptr);
+ auto* wrapper =
+ toNGPhysicalBoxFragment(layout_result->PhysicalFragment().get());
+
+ // Test that the anonymous wrapper has 2 line boxes, and both have unfinished
+ // break tokens.
+ EXPECT_EQ(2u, wrapper->Children().size());
+ auto* line1 = toNGPhysicalLineBoxFragment(wrapper->Children()[0].get());
+ EXPECT_FALSE(line1->BreakToken()->IsFinished());
+ auto* line2 = toNGPhysicalLineBoxFragment(wrapper->Children()[1].get());
+ EXPECT_FALSE(line2->BreakToken()->IsFinished());
+
+ // Test that the wrapper has the break token from the last line as its child.
+ auto* wrapper_break_token = toNGBlockBreakToken(wrapper->BreakToken());
+ EXPECT_EQ(wrapper_break_token->ChildBreakTokens()[0], line2->BreakToken());
+ EXPECT_FALSE(wrapper_break_token->IsFinished());
+
+ // Perform 2nd layout with the break token from the 2nd line.
+ RefPtr<NGLayoutResult> layout_result2 =
+ inline_node->Layout(constraint_space.get(), line2->BreakToken());
+ auto* wrapper2 =
+ toNGPhysicalBoxFragment(layout_result2->PhysicalFragment().get());
+
+ // Test that the anonymous wrapper has 1 line boxes, and has a finished break
+ // token.
+ EXPECT_EQ(1u, wrapper2->Children().size());
+ auto* line3 = toNGPhysicalLineBoxFragment(wrapper2->Children()[0].get());
+ EXPECT_TRUE(line3->BreakToken()->IsFinished());
+
+ // Test that the wrapper has the break token without children.
+ auto* wrapper2_break_token = toNGBlockBreakToken(wrapper2->BreakToken());
+ EXPECT_EQ(0u, wrapper2_break_token->ChildBreakTokens().size());
+}
// Verifies that text can flow correctly around floats that were positioned
// before the inline block.
-TEST_F(NGTextLayoutAlgorithmTest, TextFloatsAroundFloatsBefore) {
+TEST_F(NGInlineLayoutAlgorithmTest, TextFloatsAroundFloatsBefore) {
setBodyInnerHTML(R"HTML(
<!DOCTYPE html>
<style>
@@ -96,7 +158,7 @@ TEST_F(NGTextLayoutAlgorithmTest, TextFloatsAroundFloatsBefore) {
// Verifies that text correctly flows around the inline float that fits on
// the same text line.
-TEST_F(NGTextLayoutAlgorithmTest, TextFloatsAroundInlineFloatThatFitsOnLine) {
+TEST_F(NGInlineLayoutAlgorithmTest, TextFloatsAroundInlineFloatThatFitsOnLine) {
setBodyInnerHTML(R"HTML(
<!DOCTYPE html>
<style>
@@ -133,7 +195,7 @@ TEST_F(NGTextLayoutAlgorithmTest, TextFloatsAroundInlineFloatThatFitsOnLine) {
// Verifies that the inline float got pushed to the next line if it doesn't
// fit the current line.
-TEST_F(NGTextLayoutAlgorithmTest,
+TEST_F(NGInlineLayoutAlgorithmTest,
TextFloatsAroundInlineFloatThatDoesNotFitOnLine) {
setBodyInnerHTML(R"HTML(
<!DOCTYPE html>
@@ -170,7 +232,7 @@ TEST_F(NGTextLayoutAlgorithmTest,
// Verifies that if an inline float pushed to the next line then all others
// following inline floats positioned with respect to the float's top edge
// alignment rule.
-TEST_F(NGTextLayoutAlgorithmTest,
+TEST_F(NGInlineLayoutAlgorithmTest,
FloatsArePositionedWithRespectToTopEdgeAlignmentRule) {
setBodyInnerHTML(R"HTML(
<!DOCTYPE html>

Powered by Google App Engine
This is Rietveld 408576698