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_inline_node.h" | 5 #include "core/layout/ng/ng_inline_node.h" |
6 | 6 |
7 #include "core/layout/ng/ng_constraint_space.h" | 7 #include "core/layout/ng/ng_constraint_space.h" |
8 #include "core/layout/ng/ng_constraint_space_builder.h" | 8 #include "core/layout/ng/ng_constraint_space_builder.h" |
9 #include "core/layout/ng/ng_fragment_builder.h" | 9 #include "core/layout/ng/ng_fragment_builder.h" |
10 #include "core/layout/ng/ng_physical_box_fragment.h" | 10 #include "core/layout/ng/ng_physical_box_fragment.h" |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 EXPECT_EQ(start, item.StartOffset()); \ | 83 EXPECT_EQ(start, item.StartOffset()); \ |
84 EXPECT_EQ(end, item.EndOffset()); \ | 84 EXPECT_EQ(end, item.EndOffset()); \ |
85 EXPECT_EQ(direction, item.Direction()) | 85 EXPECT_EQ(direction, item.Direction()) |
86 | 86 |
87 TEST_F(NGInlineNodeTest, SegmentASCII) { | 87 TEST_F(NGInlineNodeTest, SegmentASCII) { |
88 NGInlineNodeForTest* node = new NGInlineNodeForTest(style_.get()); | 88 NGInlineNodeForTest* node = new NGInlineNodeForTest(style_.get()); |
89 node->Append("Hello"); | 89 node->Append("Hello"); |
90 node->SegmentText(); | 90 node->SegmentText(); |
91 Vector<NGLayoutInlineItem>& items = node->Items(); | 91 Vector<NGLayoutInlineItem>& items = node->Items(); |
92 ASSERT_EQ(1u, items.size()); | 92 ASSERT_EQ(1u, items.size()); |
93 TEST_ITEM_OFFSET_DIR(items[0], 0u, 5u, TextDirection::Ltr); | 93 TEST_ITEM_OFFSET_DIR(items[0], 0u, 5u, TextDirection::kLtr); |
94 } | 94 } |
95 | 95 |
96 TEST_F(NGInlineNodeTest, SegmentHebrew) { | 96 TEST_F(NGInlineNodeTest, SegmentHebrew) { |
97 NGInlineNodeForTest* node = new NGInlineNodeForTest(style_.get()); | 97 NGInlineNodeForTest* node = new NGInlineNodeForTest(style_.get()); |
98 node->Append(u"\u05E2\u05D1\u05E8\u05D9\u05EA"); | 98 node->Append(u"\u05E2\u05D1\u05E8\u05D9\u05EA"); |
99 node->SegmentText(); | 99 node->SegmentText(); |
100 ASSERT_EQ(1u, node->Items().size()); | 100 ASSERT_EQ(1u, node->Items().size()); |
101 Vector<NGLayoutInlineItem>& items = node->Items(); | 101 Vector<NGLayoutInlineItem>& items = node->Items(); |
102 ASSERT_EQ(1u, items.size()); | 102 ASSERT_EQ(1u, items.size()); |
103 TEST_ITEM_OFFSET_DIR(items[0], 0u, 5u, TextDirection::Rtl); | 103 TEST_ITEM_OFFSET_DIR(items[0], 0u, 5u, TextDirection::kRtl); |
104 } | 104 } |
105 | 105 |
106 TEST_F(NGInlineNodeTest, SegmentSplit1To2) { | 106 TEST_F(NGInlineNodeTest, SegmentSplit1To2) { |
107 NGInlineNodeForTest* node = new NGInlineNodeForTest(style_.get()); | 107 NGInlineNodeForTest* node = new NGInlineNodeForTest(style_.get()); |
108 node->Append(u"Hello \u05E2\u05D1\u05E8\u05D9\u05EA"); | 108 node->Append(u"Hello \u05E2\u05D1\u05E8\u05D9\u05EA"); |
109 node->SegmentText(); | 109 node->SegmentText(); |
110 ASSERT_EQ(2u, node->Items().size()); | 110 ASSERT_EQ(2u, node->Items().size()); |
111 Vector<NGLayoutInlineItem>& items = node->Items(); | 111 Vector<NGLayoutInlineItem>& items = node->Items(); |
112 ASSERT_EQ(2u, items.size()); | 112 ASSERT_EQ(2u, items.size()); |
113 TEST_ITEM_OFFSET_DIR(items[0], 0u, 6u, TextDirection::Ltr); | 113 TEST_ITEM_OFFSET_DIR(items[0], 0u, 6u, TextDirection::kLtr); |
114 TEST_ITEM_OFFSET_DIR(items[1], 6u, 11u, TextDirection::Rtl); | 114 TEST_ITEM_OFFSET_DIR(items[1], 6u, 11u, TextDirection::kRtl); |
115 } | 115 } |
116 | 116 |
117 TEST_F(NGInlineNodeTest, SegmentSplit3To4) { | 117 TEST_F(NGInlineNodeTest, SegmentSplit3To4) { |
118 NGInlineNodeForTest* node = new NGInlineNodeForTest(style_.get()); | 118 NGInlineNodeForTest* node = new NGInlineNodeForTest(style_.get()); |
119 node->Append("Hel"); | 119 node->Append("Hel"); |
120 node->Append(u"lo \u05E2"); | 120 node->Append(u"lo \u05E2"); |
121 node->Append(u"\u05D1\u05E8\u05D9\u05EA"); | 121 node->Append(u"\u05D1\u05E8\u05D9\u05EA"); |
122 node->SegmentText(); | 122 node->SegmentText(); |
123 Vector<NGLayoutInlineItem>& items = node->Items(); | 123 Vector<NGLayoutInlineItem>& items = node->Items(); |
124 ASSERT_EQ(4u, items.size()); | 124 ASSERT_EQ(4u, items.size()); |
125 TEST_ITEM_OFFSET_DIR(items[0], 0u, 3u, TextDirection::Ltr); | 125 TEST_ITEM_OFFSET_DIR(items[0], 0u, 3u, TextDirection::kLtr); |
126 TEST_ITEM_OFFSET_DIR(items[1], 3u, 6u, TextDirection::Ltr); | 126 TEST_ITEM_OFFSET_DIR(items[1], 3u, 6u, TextDirection::kLtr); |
127 TEST_ITEM_OFFSET_DIR(items[2], 6u, 7u, TextDirection::Rtl); | 127 TEST_ITEM_OFFSET_DIR(items[2], 6u, 7u, TextDirection::kRtl); |
128 TEST_ITEM_OFFSET_DIR(items[3], 7u, 11u, TextDirection::Rtl); | 128 TEST_ITEM_OFFSET_DIR(items[3], 7u, 11u, TextDirection::kRtl); |
129 } | 129 } |
130 | 130 |
131 TEST_F(NGInlineNodeTest, SegmentBidiOverride) { | 131 TEST_F(NGInlineNodeTest, SegmentBidiOverride) { |
132 NGInlineNodeForTest* node = new NGInlineNodeForTest(style_.get()); | 132 NGInlineNodeForTest* node = new NGInlineNodeForTest(style_.get()); |
133 node->Append("Hello "); | 133 node->Append("Hello "); |
134 node->Append(rightToLeftOverrideCharacter); | 134 node->Append(rightToLeftOverrideCharacter); |
135 node->Append("ABC"); | 135 node->Append("ABC"); |
136 node->Append(popDirectionalFormattingCharacter); | 136 node->Append(popDirectionalFormattingCharacter); |
137 node->SegmentText(); | 137 node->SegmentText(); |
138 Vector<NGLayoutInlineItem>& items = node->Items(); | 138 Vector<NGLayoutInlineItem>& items = node->Items(); |
139 ASSERT_EQ(4u, items.size()); | 139 ASSERT_EQ(4u, items.size()); |
140 TEST_ITEM_OFFSET_DIR(items[0], 0u, 6u, TextDirection::Ltr); | 140 TEST_ITEM_OFFSET_DIR(items[0], 0u, 6u, TextDirection::kLtr); |
141 TEST_ITEM_OFFSET_DIR(items[1], 6u, 7u, TextDirection::Rtl); | 141 TEST_ITEM_OFFSET_DIR(items[1], 6u, 7u, TextDirection::kRtl); |
142 TEST_ITEM_OFFSET_DIR(items[2], 7u, 10u, TextDirection::Rtl); | 142 TEST_ITEM_OFFSET_DIR(items[2], 7u, 10u, TextDirection::kRtl); |
143 TEST_ITEM_OFFSET_DIR(items[3], 10u, 11u, TextDirection::Ltr); | 143 TEST_ITEM_OFFSET_DIR(items[3], 10u, 11u, TextDirection::kLtr); |
144 } | 144 } |
145 | 145 |
146 static NGInlineNodeForTest* CreateBidiIsolateNode(const ComputedStyle* style) { | 146 static NGInlineNodeForTest* CreateBidiIsolateNode(const ComputedStyle* style) { |
147 NGInlineNodeForTest* node = new NGInlineNodeForTest(style); | 147 NGInlineNodeForTest* node = new NGInlineNodeForTest(style); |
148 node->Append("Hello ", style); | 148 node->Append("Hello ", style); |
149 node->Append(rightToLeftIsolateCharacter); | 149 node->Append(rightToLeftIsolateCharacter); |
150 node->Append(u"\u05E2\u05D1\u05E8\u05D9\u05EA ", style); | 150 node->Append(u"\u05E2\u05D1\u05E8\u05D9\u05EA ", style); |
151 node->Append(leftToRightIsolateCharacter); | 151 node->Append(leftToRightIsolateCharacter); |
152 node->Append("A", style); | 152 node->Append("A", style); |
153 node->Append(popDirectionalIsolateCharacter); | 153 node->Append(popDirectionalIsolateCharacter); |
154 node->Append(u"\u05E2\u05D1\u05E8\u05D9\u05EA", style); | 154 node->Append(u"\u05E2\u05D1\u05E8\u05D9\u05EA", style); |
155 node->Append(popDirectionalIsolateCharacter); | 155 node->Append(popDirectionalIsolateCharacter); |
156 node->Append(" World", style); | 156 node->Append(" World", style); |
157 node->SegmentText(); | 157 node->SegmentText(); |
158 return node; | 158 return node; |
159 } | 159 } |
160 | 160 |
161 TEST_F(NGInlineNodeTest, SegmentBidiIsolate) { | 161 TEST_F(NGInlineNodeTest, SegmentBidiIsolate) { |
162 NGInlineNodeForTest* node = CreateBidiIsolateNode(style_.get()); | 162 NGInlineNodeForTest* node = CreateBidiIsolateNode(style_.get()); |
163 Vector<NGLayoutInlineItem>& items = node->Items(); | 163 Vector<NGLayoutInlineItem>& items = node->Items(); |
164 ASSERT_EQ(9u, items.size()); | 164 ASSERT_EQ(9u, items.size()); |
165 TEST_ITEM_OFFSET_DIR(items[0], 0u, 6u, TextDirection::Ltr); | 165 TEST_ITEM_OFFSET_DIR(items[0], 0u, 6u, TextDirection::kLtr); |
166 TEST_ITEM_OFFSET_DIR(items[1], 6u, 7u, TextDirection::Ltr); | 166 TEST_ITEM_OFFSET_DIR(items[1], 6u, 7u, TextDirection::kLtr); |
167 TEST_ITEM_OFFSET_DIR(items[2], 7u, 13u, TextDirection::Rtl); | 167 TEST_ITEM_OFFSET_DIR(items[2], 7u, 13u, TextDirection::kRtl); |
168 TEST_ITEM_OFFSET_DIR(items[3], 13u, 14u, TextDirection::Rtl); | 168 TEST_ITEM_OFFSET_DIR(items[3], 13u, 14u, TextDirection::kRtl); |
169 TEST_ITEM_OFFSET_DIR(items[4], 14u, 15u, TextDirection::Ltr); | 169 TEST_ITEM_OFFSET_DIR(items[4], 14u, 15u, TextDirection::kLtr); |
170 TEST_ITEM_OFFSET_DIR(items[5], 15u, 16u, TextDirection::Rtl); | 170 TEST_ITEM_OFFSET_DIR(items[5], 15u, 16u, TextDirection::kRtl); |
171 TEST_ITEM_OFFSET_DIR(items[6], 16u, 21u, TextDirection::Rtl); | 171 TEST_ITEM_OFFSET_DIR(items[6], 16u, 21u, TextDirection::kRtl); |
172 TEST_ITEM_OFFSET_DIR(items[7], 21u, 22u, TextDirection::Ltr); | 172 TEST_ITEM_OFFSET_DIR(items[7], 21u, 22u, TextDirection::kLtr); |
173 TEST_ITEM_OFFSET_DIR(items[8], 22u, 28u, TextDirection::Ltr); | 173 TEST_ITEM_OFFSET_DIR(items[8], 22u, 28u, TextDirection::kLtr); |
174 } | 174 } |
175 | 175 |
176 #define TEST_TEXT_FRAGMENT(fragment, node, start_index, end_index, dir) \ | 176 #define TEST_TEXT_FRAGMENT(fragment, node, start_index, end_index, dir) \ |
177 EXPECT_EQ(node, fragment->Node()); \ | 177 EXPECT_EQ(node, fragment->Node()); \ |
178 EXPECT_EQ(start_index, fragment->StartIndex()); \ | 178 EXPECT_EQ(start_index, fragment->StartIndex()); \ |
179 EXPECT_EQ(end_index, fragment->EndIndex()); \ | 179 EXPECT_EQ(end_index, fragment->EndIndex()); \ |
180 EXPECT_EQ(dir, node->Items()[fragment->StartIndex()].Direction()) | 180 EXPECT_EQ(dir, node->Items()[fragment->StartIndex()].Direction()) |
181 | 181 |
182 TEST_F(NGInlineNodeTest, CreateLineBidiIsolate) { | 182 TEST_F(NGInlineNodeTest, CreateLineBidiIsolate) { |
183 NGInlineNodeForTest* node = CreateBidiIsolateNode(style_.get()); | 183 NGInlineNodeForTest* node = CreateBidiIsolateNode(style_.get()); |
184 HeapVector<Member<const NGPhysicalTextFragment>> fragments; | 184 HeapVector<Member<const NGPhysicalTextFragment>> fragments; |
185 CreateLine(node, &fragments); | 185 CreateLine(node, &fragments); |
186 ASSERT_EQ(5u, fragments.size()); | 186 ASSERT_EQ(5u, fragments.size()); |
187 TEST_TEXT_FRAGMENT(fragments[0], node, 0u, 1u, TextDirection::Ltr); | 187 TEST_TEXT_FRAGMENT(fragments[0], node, 0u, 1u, TextDirection::kLtr); |
188 TEST_TEXT_FRAGMENT(fragments[1], node, 6u, 7u, TextDirection::Rtl); | 188 TEST_TEXT_FRAGMENT(fragments[1], node, 6u, 7u, TextDirection::kRtl); |
189 TEST_TEXT_FRAGMENT(fragments[2], node, 4u, 5u, TextDirection::Ltr); | 189 TEST_TEXT_FRAGMENT(fragments[2], node, 4u, 5u, TextDirection::kLtr); |
190 TEST_TEXT_FRAGMENT(fragments[3], node, 2u, 3u, TextDirection::Rtl); | 190 TEST_TEXT_FRAGMENT(fragments[3], node, 2u, 3u, TextDirection::kRtl); |
191 TEST_TEXT_FRAGMENT(fragments[4], node, 8u, 9u, TextDirection::Ltr); | 191 TEST_TEXT_FRAGMENT(fragments[4], node, 8u, 9u, TextDirection::kLtr); |
192 } | 192 } |
193 | 193 |
194 } // namespace blink | 194 } // namespace blink |
OLD | NEW |