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