OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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_block_node.h" | 5 #include "core/layout/ng/ng_block_node.h" |
6 | 6 |
7 #include "core/layout/LayoutTestHelper.h" | 7 #include "core/layout/LayoutTestHelper.h" |
8 #include "core/layout/ng/ng_box_fragment.h" | 8 #include "core/layout/ng/ng_box_fragment.h" |
9 #include "core/layout/ng/ng_min_max_content_size.h" | 9 #include "core/layout/ng/ng_min_max_content_size.h" |
10 #include "core/style/ComputedStyle.h" | 10 #include "core/style/ComputedStyle.h" |
11 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
12 | 12 |
13 namespace blink { | 13 namespace blink { |
14 namespace { | 14 namespace { |
15 class NGBlockNodeForTest : public RenderingTest { | 15 class NGBlockNodeForTest : public RenderingTest { |
16 public: | 16 public: |
17 NGBlockNodeForTest() { RuntimeEnabledFeatures::setLayoutNGEnabled(true); } | 17 NGBlockNodeForTest() { RuntimeEnabledFeatures::setLayoutNGEnabled(true); } |
18 ~NGBlockNodeForTest() { RuntimeEnabledFeatures::setLayoutNGEnabled(false); }; | 18 ~NGBlockNodeForTest() { RuntimeEnabledFeatures::setLayoutNGEnabled(false); }; |
19 }; | 19 }; |
20 | 20 |
21 TEST_F(NGBlockNodeForTest, ChildInlineAndBlock) { | 21 TEST_F(NGBlockNodeForTest, ChildInlineAndBlock) { |
22 SetBodyInnerHTML(R"HTML( | 22 SetBodyInnerHTML(R"HTML( |
23 <!DOCTYPE html> | 23 <!DOCTYPE html> |
24 <div id=container>Hello!<div></div></div> | 24 <div id=container>Hello!<div></div></div> |
25 )HTML"); | 25 )HTML"); |
26 NGBlockNode* container = | 26 NGBlockNode container(ToLayoutBox(GetLayoutObjectByElementId("container"))); |
27 new NGBlockNode(GetLayoutObjectByElementId("container")); | 27 NGLayoutInputNode child1 = container.FirstChild(); |
28 NGLayoutInputNode* child1 = container->FirstChild(); | 28 EXPECT_TRUE(child1 && child1.IsBlock()); |
29 EXPECT_TRUE(child1 && child1->IsBlock()); | 29 NGLayoutInputNode child2 = child1.NextSibling(); |
30 NGLayoutInputNode* child2 = child1->NextSibling(); | 30 EXPECT_TRUE(child2 && child2.IsBlock()); |
31 EXPECT_TRUE(child2 && child2->IsBlock()); | 31 NGLayoutInputNode child3 = child2.NextSibling(); |
32 NGLayoutInputNode* child3 = child2->NextSibling(); | |
33 EXPECT_EQ(child3, nullptr); | 32 EXPECT_EQ(child3, nullptr); |
34 } | 33 } |
35 | 34 |
36 TEST_F(NGBlockNodeForTest, ChildBlockAndInline) { | 35 TEST_F(NGBlockNodeForTest, ChildBlockAndInline) { |
37 SetBodyInnerHTML(R"HTML( | 36 SetBodyInnerHTML(R"HTML( |
38 <!DOCTYPE html> | 37 <!DOCTYPE html> |
39 <div id=container><div></div>Hello!</div> | 38 <div id=container><div></div>Hello!</div> |
40 )HTML"); | 39 )HTML"); |
41 NGBlockNode* container = | 40 NGBlockNode container(ToLayoutBox(GetLayoutObjectByElementId("container"))); |
42 new NGBlockNode(GetLayoutObjectByElementId("container")); | 41 NGLayoutInputNode child1 = container.FirstChild(); |
43 NGLayoutInputNode* child1 = container->FirstChild(); | 42 EXPECT_TRUE(child1 && child1.IsBlock()); |
44 EXPECT_TRUE(child1 && child1->IsBlock()); | 43 NGLayoutInputNode child2 = child1.NextSibling(); |
45 NGLayoutInputNode* child2 = child1->NextSibling(); | 44 EXPECT_TRUE(child2 && child2.IsBlock()); |
46 EXPECT_TRUE(child2 && child2->IsBlock()); | 45 NGLayoutInputNode child3 = child2.NextSibling(); |
47 NGLayoutInputNode* child3 = child2->NextSibling(); | |
48 EXPECT_EQ(child3, nullptr); | 46 EXPECT_EQ(child3, nullptr); |
49 } | 47 } |
50 | 48 |
51 TEST_F(NGBlockNodeForTest, ChildFloatBeforeBlock) { | 49 TEST_F(NGBlockNodeForTest, ChildFloatBeforeBlock) { |
52 SetBodyInnerHTML(R"HTML( | 50 SetBodyInnerHTML(R"HTML( |
53 <!DOCTYPE html> | 51 <!DOCTYPE html> |
54 <style> | 52 <style> |
55 float { float: left; } | 53 float { float: left; } |
56 </style> | 54 </style> |
57 <div id=container><float></float><div></div></div> | 55 <div id=container><float></float><div></div></div> |
58 )HTML"); | 56 )HTML"); |
59 NGBlockNode* container = | 57 NGBlockNode container(ToLayoutBox(GetLayoutObjectByElementId("container"))); |
60 new NGBlockNode(GetLayoutObjectByElementId("container")); | 58 NGLayoutInputNode child1 = container.FirstChild(); |
61 NGLayoutInputNode* child1 = container->FirstChild(); | 59 EXPECT_TRUE(child1 && child1.IsBlock()); |
62 EXPECT_TRUE(child1 && child1->IsBlock()); | 60 NGLayoutInputNode child2 = child1.NextSibling(); |
63 NGLayoutInputNode* child2 = child1->NextSibling(); | 61 EXPECT_TRUE(child2 && child2.IsBlock()); |
64 EXPECT_TRUE(child2 && child2->IsBlock()); | 62 NGLayoutInputNode child3 = child2.NextSibling(); |
65 NGLayoutInputNode* child3 = child2->NextSibling(); | |
66 EXPECT_EQ(child3, nullptr); | 63 EXPECT_EQ(child3, nullptr); |
67 } | 64 } |
68 | 65 |
69 TEST_F(NGBlockNodeForTest, ChildFloatBeforeInline) { | 66 TEST_F(NGBlockNodeForTest, ChildFloatBeforeInline) { |
70 SetBodyInnerHTML(R"HTML( | 67 SetBodyInnerHTML(R"HTML( |
71 <!DOCTYPE html> | 68 <!DOCTYPE html> |
72 <style> | 69 <style> |
73 float { float: left; } | 70 float { float: left; } |
74 </style> | 71 </style> |
75 <div id=container><float></float>Hello!</div> | 72 <div id=container><float></float>Hello!</div> |
76 )HTML"); | 73 )HTML"); |
77 NGBlockNode* container = | 74 NGBlockNode container(ToLayoutBox(GetLayoutObjectByElementId("container"))); |
78 new NGBlockNode(GetLayoutObjectByElementId("container")); | 75 NGLayoutInputNode child1 = container.FirstChild(); |
79 NGLayoutInputNode* child1 = container->FirstChild(); | 76 EXPECT_TRUE(child1 && child1.IsBlock()); |
80 EXPECT_TRUE(child1 && child1->IsBlock()); | 77 NGLayoutInputNode child2 = child1.NextSibling(); |
81 NGLayoutInputNode* child2 = child1->NextSibling(); | 78 EXPECT_TRUE(child2 && child2.IsBlock()); |
82 EXPECT_TRUE(child2 && child2->IsBlock()); | |
83 } | 79 } |
84 | 80 |
85 TEST_F(NGBlockNodeForTest, ChildFloatAfterInline) { | 81 TEST_F(NGBlockNodeForTest, ChildFloatAfterInline) { |
86 SetBodyInnerHTML(R"HTML( | 82 SetBodyInnerHTML(R"HTML( |
87 <!DOCTYPE html> | 83 <!DOCTYPE html> |
88 <style> | 84 <style> |
89 float { float: left; } | 85 float { float: left; } |
90 </style> | 86 </style> |
91 <div id=container>Hello<float></float></div> | 87 <div id=container>Hello<float></float></div> |
92 )HTML"); | 88 )HTML"); |
93 NGBlockNode* container = | 89 NGBlockNode container(ToLayoutBox(GetLayoutObjectByElementId("container"))); |
94 new NGBlockNode(GetLayoutObjectByElementId("container")); | 90 NGLayoutInputNode child1 = container.FirstChild(); |
95 NGLayoutInputNode* child1 = container->FirstChild(); | 91 EXPECT_TRUE(child1 && child1.IsInline()); |
96 EXPECT_TRUE(child1 && child1->IsInline()); | 92 NGLayoutInputNode child2 = child1.NextSibling(); |
97 NGLayoutInputNode* child2 = child1->NextSibling(); | |
98 EXPECT_EQ(child2, nullptr); | 93 EXPECT_EQ(child2, nullptr); |
99 } | 94 } |
100 | 95 |
101 TEST_F(NGBlockNodeForTest, ChildFloatOnly) { | 96 TEST_F(NGBlockNodeForTest, ChildFloatOnly) { |
102 SetBodyInnerHTML(R"HTML( | 97 SetBodyInnerHTML(R"HTML( |
103 <!DOCTYPE html> | 98 <!DOCTYPE html> |
104 <style> | 99 <style> |
105 float { float: left; } | 100 float { float: left; } |
106 </style> | 101 </style> |
107 <div id=container><float></float></div> | 102 <div id=container><float></float></div> |
108 )HTML"); | 103 )HTML"); |
109 NGBlockNode* container = | 104 NGBlockNode container(ToLayoutBox(GetLayoutObjectByElementId("container"))); |
110 new NGBlockNode(GetLayoutObjectByElementId("container")); | 105 NGLayoutInputNode child1 = container.FirstChild(); |
111 NGLayoutInputNode* child1 = container->FirstChild(); | 106 EXPECT_TRUE(child1 && child1.IsBlock()); |
112 EXPECT_TRUE(child1 && child1->IsBlock()); | 107 NGLayoutInputNode child2 = child1.NextSibling(); |
113 NGLayoutInputNode* child2 = child1->NextSibling(); | |
114 EXPECT_EQ(child2, nullptr); | 108 EXPECT_EQ(child2, nullptr); |
115 } | 109 } |
116 | 110 |
117 TEST_F(NGBlockNodeForTest, ChildFloatWithSpaces) { | 111 TEST_F(NGBlockNodeForTest, ChildFloatWithSpaces) { |
118 SetBodyInnerHTML(R"HTML( | 112 SetBodyInnerHTML(R"HTML( |
119 <!DOCTYPE html> | 113 <!DOCTYPE html> |
120 <style> | 114 <style> |
121 float { float: left; } | 115 float { float: left; } |
122 </style> | 116 </style> |
123 <div id=container> | 117 <div id=container> |
124 <float></float> | 118 <float></float> |
125 </div> | 119 </div> |
126 )HTML"); | 120 )HTML"); |
127 NGBlockNode* container = | 121 NGBlockNode container(ToLayoutBox(GetLayoutObjectByElementId("container"))); |
128 new NGBlockNode(GetLayoutObjectByElementId("container")); | 122 NGLayoutInputNode child1 = container.FirstChild(); |
129 NGLayoutInputNode* child1 = container->FirstChild(); | 123 EXPECT_TRUE(child1 && child1.IsBlock()); |
130 EXPECT_TRUE(child1 && child1->IsBlock()); | 124 NGLayoutInputNode child2 = child1.NextSibling(); |
131 NGLayoutInputNode* child2 = child1->NextSibling(); | |
132 EXPECT_EQ(child2, nullptr); | 125 EXPECT_EQ(child2, nullptr); |
133 } | 126 } |
134 | 127 |
135 TEST_F(NGBlockNodeForTest, ChildOofBeforeInline) { | 128 TEST_F(NGBlockNodeForTest, ChildOofBeforeInline) { |
136 SetBodyInnerHTML(R"HTML( | 129 SetBodyInnerHTML(R"HTML( |
137 <!DOCTYPE html> | 130 <!DOCTYPE html> |
138 <style> | 131 <style> |
139 oof { position: absolute; } | 132 oof { position: absolute; } |
140 </style> | 133 </style> |
141 <div id=container><oof></oof>Hello!</div> | 134 <div id=container><oof></oof>Hello!</div> |
142 )HTML"); | 135 )HTML"); |
143 NGBlockNode* container = | 136 NGBlockNode container(ToLayoutBox(GetLayoutObjectByElementId("container"))); |
144 new NGBlockNode(GetLayoutObjectByElementId("container")); | 137 NGLayoutInputNode child1 = container.FirstChild(); |
145 NGLayoutInputNode* child1 = container->FirstChild(); | 138 EXPECT_TRUE(child1 && child1.IsBlock()); |
146 EXPECT_TRUE(child1 && child1->IsBlock()); | 139 NGLayoutInputNode child2 = child1.NextSibling(); |
147 NGLayoutInputNode* child2 = child1->NextSibling(); | 140 EXPECT_TRUE(child2 && child2.IsBlock()); |
148 EXPECT_TRUE(child2 && child2->IsBlock()); | |
149 } | 141 } |
150 | 142 |
151 TEST_F(NGBlockNodeForTest, ChildOofAfterInline) { | 143 TEST_F(NGBlockNodeForTest, ChildOofAfterInline) { |
152 SetBodyInnerHTML(R"HTML( | 144 SetBodyInnerHTML(R"HTML( |
153 <!DOCTYPE html> | 145 <!DOCTYPE html> |
154 <style> | 146 <style> |
155 oof { position: absolute; } | 147 oof { position: absolute; } |
156 </style> | 148 </style> |
157 <div id=container>Hello!<oof></oof></div> | 149 <div id=container>Hello!<oof></oof></div> |
158 )HTML"); | 150 )HTML"); |
159 NGBlockNode* container = | 151 NGBlockNode container(ToLayoutBox(GetLayoutObjectByElementId("container"))); |
160 new NGBlockNode(GetLayoutObjectByElementId("container")); | 152 NGLayoutInputNode child1 = container.FirstChild(); |
161 NGLayoutInputNode* child1 = container->FirstChild(); | 153 EXPECT_TRUE(child1 && child1.IsInline()); |
162 EXPECT_TRUE(child1 && child1->IsInline()); | 154 NGLayoutInputNode child2 = child1.NextSibling(); |
163 NGLayoutInputNode* child2 = child1->NextSibling(); | |
164 EXPECT_EQ(child2, nullptr); | 155 EXPECT_EQ(child2, nullptr); |
165 } | 156 } |
166 | 157 |
167 TEST_F(NGBlockNodeForTest, MinAndMaxContent) { | 158 TEST_F(NGBlockNodeForTest, MinAndMaxContent) { |
168 SetBodyInnerHTML(R"HTML( | 159 SetBodyInnerHTML(R"HTML( |
169 <div id="box" > | 160 <div id="box" > |
170 <div id="first_child" style="width:30px"> | 161 <div id="first_child" style="width:30px"> |
171 </div> | 162 </div> |
172 </div> | 163 </div> |
173 )HTML"); | 164 )HTML"); |
174 const int kWidth = 30; | 165 const int kWidth = 30; |
175 | 166 |
176 NGBlockNode* box = new NGBlockNode(GetLayoutObjectByElementId("box")); | 167 NGBlockNode box(ToLayoutBox(GetLayoutObjectByElementId("box"))); |
177 MinMaxContentSize sizes = box->ComputeMinMaxContentSize(); | 168 MinMaxContentSize sizes = box.ComputeMinMaxContentSize(); |
178 EXPECT_EQ(LayoutUnit(kWidth), sizes.min_content); | 169 EXPECT_EQ(LayoutUnit(kWidth), sizes.min_content); |
179 EXPECT_EQ(LayoutUnit(kWidth), sizes.max_content); | 170 EXPECT_EQ(LayoutUnit(kWidth), sizes.max_content); |
180 } | 171 } |
181 } // namespace | 172 } // namespace |
182 } // namespace blink | 173 } // namespace blink |
OLD | NEW |