OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "ui/gfx/render_text.h" | 5 #include "ui/gfx/render_text.h" |
6 | 6 |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 #include "ui/gfx/break_list.h" | 10 #include "ui/gfx/break_list.h" |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 rt_linux->EnsureLayout(); | 186 rt_linux->EnsureLayout(); |
187 PangoAttrList* attributes = pango_layout_get_attributes(rt_linux->layout_); | 187 PangoAttrList* attributes = pango_layout_get_attributes(rt_linux->layout_); |
188 PangoAttrIterator* iter = pango_attr_list_get_iterator(attributes); | 188 PangoAttrIterator* iter = pango_attr_list_get_iterator(attributes); |
189 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { | 189 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { |
190 pango_attr_iterator_range(iter, &start, &end); | 190 pango_attr_iterator_range(iter, &start, &end); |
191 EXPECT_EQ(cases[i].start, start); | 191 EXPECT_EQ(cases[i].start, start); |
192 EXPECT_EQ(cases[i].end, end); | 192 EXPECT_EQ(cases[i].end, end); |
193 PangoFontDescription* font = pango_font_description_new(); | 193 PangoFontDescription* font = pango_font_description_new(); |
194 pango_attr_iterator_get_font(iter, font, NULL, NULL); | 194 pango_attr_iterator_get_font(iter, font, NULL, NULL); |
195 char* description_string = pango_font_description_to_string(font); | 195 char* description_string = pango_font_description_to_string(font); |
196 const string16 desc = ASCIIToUTF16(description_string); | 196 const base::string16 desc = ASCIIToUTF16(description_string); |
197 const bool bold = desc.find(ASCIIToUTF16("Bold")) != std::string::npos; | 197 const bool bold = desc.find(ASCIIToUTF16("Bold")) != std::string::npos; |
198 EXPECT_EQ(cases[i].bold, bold); | 198 EXPECT_EQ(cases[i].bold, bold); |
199 const bool italic = desc.find(ASCIIToUTF16("Italic")) != std::string::npos; | 199 const bool italic = desc.find(ASCIIToUTF16("Italic")) != std::string::npos; |
200 EXPECT_EQ(cases[i].italic, italic); | 200 EXPECT_EQ(cases[i].italic, italic); |
201 pango_attr_iterator_next(iter); | 201 pango_attr_iterator_next(iter); |
202 pango_font_description_free(font); | 202 pango_font_description_free(font); |
203 g_free(description_string); | 203 g_free(description_string); |
204 } | 204 } |
205 EXPECT_FALSE(pango_attr_iterator_next(iter)); | 205 EXPECT_FALSE(pango_attr_iterator_next(iter)); |
206 pango_attr_iterator_destroy(iter); | 206 pango_attr_iterator_destroy(iter); |
207 } | 207 } |
208 #endif | 208 #endif |
209 | 209 |
210 // TODO(asvitkine): Cursor movements tests disabled on Mac because RenderTextMac | 210 // TODO(asvitkine): Cursor movements tests disabled on Mac because RenderTextMac |
211 // does not implement this yet. http://crbug.com/131618 | 211 // does not implement this yet. http://crbug.com/131618 |
212 #if !defined(OS_MACOSX) | 212 #if !defined(OS_MACOSX) |
213 void TestVisualCursorMotionInObscuredField(RenderText* render_text, | 213 void TestVisualCursorMotionInObscuredField(RenderText* render_text, |
214 const string16& text, | 214 const base::string16& text, |
215 bool select) { | 215 bool select) { |
216 ASSERT_TRUE(render_text->obscured()); | 216 ASSERT_TRUE(render_text->obscured()); |
217 render_text->SetText(text); | 217 render_text->SetText(text); |
218 int len = text.length(); | 218 int len = text.length(); |
219 render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, select); | 219 render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, select); |
220 EXPECT_EQ(SelectionModel(ui::Range(select ? 0 : len, len), CURSOR_FORWARD), | 220 EXPECT_EQ(SelectionModel(ui::Range(select ? 0 : len, len), CURSOR_FORWARD), |
221 render_text->selection_model()); | 221 render_text->selection_model()); |
222 render_text->MoveCursor(LINE_BREAK, CURSOR_LEFT, select); | 222 render_text->MoveCursor(LINE_BREAK, CURSOR_LEFT, select); |
223 EXPECT_EQ(SelectionModel(0, CURSOR_BACKWARD), render_text->selection_model()); | 223 EXPECT_EQ(SelectionModel(0, CURSOR_BACKWARD), render_text->selection_model()); |
224 for (int j = 1; j <= len; ++j) { | 224 for (int j = 1; j <= len; ++j) { |
225 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, select); | 225 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, select); |
226 EXPECT_EQ(SelectionModel(ui::Range(select ? 0 : j, j), CURSOR_BACKWARD), | 226 EXPECT_EQ(SelectionModel(ui::Range(select ? 0 : j, j), CURSOR_BACKWARD), |
227 render_text->selection_model()); | 227 render_text->selection_model()); |
228 } | 228 } |
229 for (int j = len - 1; j >= 0; --j) { | 229 for (int j = len - 1; j >= 0; --j) { |
230 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, select); | 230 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, select); |
231 EXPECT_EQ(SelectionModel(ui::Range(select ? 0 : j, j), CURSOR_FORWARD), | 231 EXPECT_EQ(SelectionModel(ui::Range(select ? 0 : j, j), CURSOR_FORWARD), |
232 render_text->selection_model()); | 232 render_text->selection_model()); |
233 } | 233 } |
234 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, select); | 234 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, select); |
235 EXPECT_EQ(SelectionModel(ui::Range(select ? 0 : len, len), CURSOR_FORWARD), | 235 EXPECT_EQ(SelectionModel(ui::Range(select ? 0 : len, len), CURSOR_FORWARD), |
236 render_text->selection_model()); | 236 render_text->selection_model()); |
237 render_text->MoveCursor(WORD_BREAK, CURSOR_LEFT, select); | 237 render_text->MoveCursor(WORD_BREAK, CURSOR_LEFT, select); |
238 EXPECT_EQ(SelectionModel(0, CURSOR_BACKWARD), render_text->selection_model()); | 238 EXPECT_EQ(SelectionModel(0, CURSOR_BACKWARD), render_text->selection_model()); |
239 } | 239 } |
240 | 240 |
241 TEST_F(RenderTextTest, ObscuredText) { | 241 TEST_F(RenderTextTest, ObscuredText) { |
242 const string16 seuss = ASCIIToUTF16("hop on pop"); | 242 const base::string16 seuss = ASCIIToUTF16("hop on pop"); |
243 const string16 no_seuss = ASCIIToUTF16("**********"); | 243 const base::string16 no_seuss = ASCIIToUTF16("**********"); |
244 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 244 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
245 | 245 |
246 // GetLayoutText() returns asterisks when the obscured bit is set. | 246 // GetLayoutText() returns asterisks when the obscured bit is set. |
247 render_text->SetText(seuss); | 247 render_text->SetText(seuss); |
248 render_text->SetObscured(true); | 248 render_text->SetObscured(true); |
249 EXPECT_EQ(seuss, render_text->text()); | 249 EXPECT_EQ(seuss, render_text->text()); |
250 EXPECT_EQ(no_seuss, render_text->GetLayoutText()); | 250 EXPECT_EQ(no_seuss, render_text->GetLayoutText()); |
251 render_text->SetObscured(false); | 251 render_text->SetObscured(false); |
252 EXPECT_EQ(seuss, render_text->text()); | 252 EXPECT_EQ(seuss, render_text->text()); |
253 EXPECT_EQ(seuss, render_text->GetLayoutText()); | 253 EXPECT_EQ(seuss, render_text->GetLayoutText()); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 EXPECT_EQ(render_text->GetStringSize().width(), | 288 EXPECT_EQ(render_text->GetStringSize().width(), |
289 static_cast<int>(render_text->GetGlyphBounds(0U).length())); | 289 static_cast<int>(render_text->GetGlyphBounds(0U).length())); |
290 | 290 |
291 // Cursoring is independent of underlying characters when text is obscured. | 291 // Cursoring is independent of underlying characters when text is obscured. |
292 const wchar_t* const texts[] = { | 292 const wchar_t* const texts[] = { |
293 kWeak, kLtr, kLtrRtl, kLtrRtlLtr, kRtl, kRtlLtr, kRtlLtrRtl, | 293 kWeak, kLtr, kLtrRtl, kLtrRtlLtr, kRtl, kRtlLtr, kRtlLtrRtl, |
294 L"hop on pop", // Check LTR word boundaries. | 294 L"hop on pop", // Check LTR word boundaries. |
295 L"\x05d0\x05d1 \x05d0\x05d2 \x05d1\x05d2", // Check RTL word boundaries. | 295 L"\x05d0\x05d1 \x05d0\x05d2 \x05d1\x05d2", // Check RTL word boundaries. |
296 }; | 296 }; |
297 for (size_t i = 0; i < arraysize(texts); ++i) { | 297 for (size_t i = 0; i < arraysize(texts); ++i) { |
298 string16 text = WideToUTF16(texts[i]); | 298 base::string16 text = WideToUTF16(texts[i]); |
299 TestVisualCursorMotionInObscuredField(render_text.get(), text, false); | 299 TestVisualCursorMotionInObscuredField(render_text.get(), text, false); |
300 TestVisualCursorMotionInObscuredField(render_text.get(), text, true); | 300 TestVisualCursorMotionInObscuredField(render_text.get(), text, true); |
301 } | 301 } |
302 } | 302 } |
303 | 303 |
304 TEST_F(RenderTextTest, RevealObscuredText) { | 304 TEST_F(RenderTextTest, RevealObscuredText) { |
305 const string16 seuss = ASCIIToUTF16("hop on pop"); | 305 const base::string16 seuss = ASCIIToUTF16("hop on pop"); |
306 const string16 no_seuss = ASCIIToUTF16("**********"); | 306 const base::string16 no_seuss = ASCIIToUTF16("**********"); |
307 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 307 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
308 | 308 |
309 render_text->SetText(seuss); | 309 render_text->SetText(seuss); |
310 render_text->SetObscured(true); | 310 render_text->SetObscured(true); |
311 EXPECT_EQ(seuss, render_text->text()); | 311 EXPECT_EQ(seuss, render_text->text()); |
312 EXPECT_EQ(no_seuss, render_text->GetLayoutText()); | 312 EXPECT_EQ(no_seuss, render_text->GetLayoutText()); |
313 | 313 |
314 // Valid reveal index and new revealed index clears previous one. | 314 // Valid reveal index and new revealed index clears previous one. |
315 render_text->RenderText::SetObscuredRevealIndex(0); | 315 render_text->RenderText::SetObscuredRevealIndex(0); |
316 EXPECT_EQ(ASCIIToUTF16("h*********"), render_text->GetLayoutText()); | 316 EXPECT_EQ(ASCIIToUTF16("h*********"), render_text->GetLayoutText()); |
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
609 EXPECT_EQ(2U, render_text->cursor_position()); | 609 EXPECT_EQ(2U, render_text->cursor_position()); |
610 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); | 610 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); |
611 EXPECT_EQ(0U, render_text->cursor_position()); | 611 EXPECT_EQ(0U, render_text->cursor_position()); |
612 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); | 612 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); |
613 EXPECT_EQ(0U, render_text->cursor_position()); | 613 EXPECT_EQ(0U, render_text->cursor_position()); |
614 } | 614 } |
615 #endif | 615 #endif |
616 | 616 |
617 TEST_F(RenderTextTest, GraphemePositions) { | 617 TEST_F(RenderTextTest, GraphemePositions) { |
618 // LTR 2-character grapheme, LTR abc, LTR 2-character grapheme. | 618 // LTR 2-character grapheme, LTR abc, LTR 2-character grapheme. |
619 const string16 kText1 = WideToUTF16(L"\x0915\x093f"L"abc"L"\x0915\x093f"); | 619 const base::string16 kText1 = |
| 620 WideToUTF16(L"\x0915\x093f"L"abc"L"\x0915\x093f"); |
620 | 621 |
621 // LTR ab, LTR 2-character grapheme, LTR cd. | 622 // LTR ab, LTR 2-character grapheme, LTR cd. |
622 const string16 kText2 = WideToUTF16(L"ab"L"\x0915\x093f"L"cd"); | 623 const base::string16 kText2 = WideToUTF16(L"ab"L"\x0915\x093f"L"cd"); |
623 | 624 |
624 // The below is 'MUSICAL SYMBOL G CLEF', which is represented in UTF-16 as | 625 // The below is 'MUSICAL SYMBOL G CLEF', which is represented in UTF-16 as |
625 // two characters forming the surrogate pair 0x0001D11E. | 626 // two characters forming the surrogate pair 0x0001D11E. |
626 const std::string kSurrogate = "\xF0\x9D\x84\x9E"; | 627 const std::string kSurrogate = "\xF0\x9D\x84\x9E"; |
627 | 628 |
628 // LTR ab, UTF16 surrogate pair, LTR cd. | 629 // LTR ab, UTF16 surrogate pair, LTR cd. |
629 const string16 kText3 = UTF8ToUTF16("ab" + kSurrogate + "cd"); | 630 const base::string16 kText3 = UTF8ToUTF16("ab" + kSurrogate + "cd"); |
630 | 631 |
631 struct { | 632 struct { |
632 string16 text; | 633 base::string16 text; |
633 size_t index; | 634 size_t index; |
634 size_t expected_previous; | 635 size_t expected_previous; |
635 size_t expected_next; | 636 size_t expected_next; |
636 } cases[] = { | 637 } cases[] = { |
637 { string16(), 0, 0, 0 }, | 638 { base::string16(), 0, 0, 0 }, |
638 { string16(), 1, 0, 0 }, | 639 { base::string16(), 1, 0, 0 }, |
639 { string16(), 50, 0, 0 }, | 640 { base::string16(), 50, 0, 0 }, |
640 { kText1, 0, 0, 2 }, | 641 { kText1, 0, 0, 2 }, |
641 { kText1, 1, 0, 2 }, | 642 { kText1, 1, 0, 2 }, |
642 { kText1, 2, 0, 3 }, | 643 { kText1, 2, 0, 3 }, |
643 { kText1, 3, 2, 4 }, | 644 { kText1, 3, 2, 4 }, |
644 { kText1, 4, 3, 5 }, | 645 { kText1, 4, 3, 5 }, |
645 { kText1, 5, 4, 7 }, | 646 { kText1, 5, 4, 7 }, |
646 { kText1, 6, 5, 7 }, | 647 { kText1, 6, 5, 7 }, |
647 { kText1, 7, 5, 7 }, | 648 { kText1, 7, 5, 7 }, |
648 { kText1, 8, 7, 7 }, | 649 { kText1, 8, 7, 7 }, |
649 { kText1, 50, 7, 7 }, | 650 { kText1, 50, 7, 7 }, |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
685 | 686 |
686 size_t previous = render_text->IndexOfAdjacentGrapheme(cases[i].index, | 687 size_t previous = render_text->IndexOfAdjacentGrapheme(cases[i].index, |
687 CURSOR_BACKWARD); | 688 CURSOR_BACKWARD); |
688 EXPECT_EQ(cases[i].expected_previous, previous); | 689 EXPECT_EQ(cases[i].expected_previous, previous); |
689 EXPECT_TRUE(render_text->IsCursorablePosition(previous)); | 690 EXPECT_TRUE(render_text->IsCursorablePosition(previous)); |
690 } | 691 } |
691 } | 692 } |
692 | 693 |
693 TEST_F(RenderTextTest, EdgeSelectionModels) { | 694 TEST_F(RenderTextTest, EdgeSelectionModels) { |
694 // Simple Latin text. | 695 // Simple Latin text. |
695 const string16 kLatin = WideToUTF16(L"abc"); | 696 const base::string16 kLatin = WideToUTF16(L"abc"); |
696 // LTR 2-character grapheme. | 697 // LTR 2-character grapheme. |
697 const string16 kLTRGrapheme = WideToUTF16(L"\x0915\x093f"); | 698 const base::string16 kLTRGrapheme = WideToUTF16(L"\x0915\x093f"); |
698 // LTR 2-character grapheme, LTR a, LTR 2-character grapheme. | 699 // LTR 2-character grapheme, LTR a, LTR 2-character grapheme. |
699 const string16 kHindiLatin = WideToUTF16(L"\x0915\x093f"L"a"L"\x0915\x093f"); | 700 const base::string16 kHindiLatin = |
| 701 WideToUTF16(L"\x0915\x093f"L"a"L"\x0915\x093f"); |
700 // RTL 2-character grapheme. | 702 // RTL 2-character grapheme. |
701 const string16 kRTLGrapheme = WideToUTF16(L"\x05e0\x05b8"); | 703 const base::string16 kRTLGrapheme = WideToUTF16(L"\x05e0\x05b8"); |
702 // RTL 2-character grapheme, LTR a, RTL 2-character grapheme. | 704 // RTL 2-character grapheme, LTR a, RTL 2-character grapheme. |
703 const string16 kHebrewLatin = WideToUTF16(L"\x05e0\x05b8"L"a"L"\x05e0\x05b8"); | 705 const base::string16 kHebrewLatin = |
| 706 WideToUTF16(L"\x05e0\x05b8"L"a"L"\x05e0\x05b8"); |
704 | 707 |
705 struct { | 708 struct { |
706 string16 text; | 709 base::string16 text; |
707 base::i18n::TextDirection expected_text_direction; | 710 base::i18n::TextDirection expected_text_direction; |
708 } cases[] = { | 711 } cases[] = { |
709 { string16(), base::i18n::LEFT_TO_RIGHT }, | 712 { base::string16(), base::i18n::LEFT_TO_RIGHT }, |
710 { kLatin, base::i18n::LEFT_TO_RIGHT }, | 713 { kLatin, base::i18n::LEFT_TO_RIGHT }, |
711 { kLTRGrapheme, base::i18n::LEFT_TO_RIGHT }, | 714 { kLTRGrapheme, base::i18n::LEFT_TO_RIGHT }, |
712 { kHindiLatin, base::i18n::LEFT_TO_RIGHT }, | 715 { kHindiLatin, base::i18n::LEFT_TO_RIGHT }, |
713 { kRTLGrapheme, base::i18n::RIGHT_TO_LEFT }, | 716 { kRTLGrapheme, base::i18n::RIGHT_TO_LEFT }, |
714 { kHebrewLatin, base::i18n::RIGHT_TO_LEFT }, | 717 { kHebrewLatin, base::i18n::RIGHT_TO_LEFT }, |
715 }; | 718 }; |
716 | 719 |
717 // TODO(asvitkine): Disable tests that fail on XP bots due to lack of complete | 720 // TODO(asvitkine): Disable tests that fail on XP bots due to lack of complete |
718 // font support for some scripts - http://crbug.com/106450 | 721 // font support for some scripts - http://crbug.com/106450 |
719 #if defined(OS_WIN) | 722 #if defined(OS_WIN) |
(...skipping 23 matching lines...) Expand all Loading... |
743 // Ensure that SelectAll respects the |reversed| argument regardless of | 746 // Ensure that SelectAll respects the |reversed| argument regardless of |
744 // application locale and text content directionality. | 747 // application locale and text content directionality. |
745 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 748 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
746 const SelectionModel expected_reversed(ui::Range(3, 0), CURSOR_FORWARD); | 749 const SelectionModel expected_reversed(ui::Range(3, 0), CURSOR_FORWARD); |
747 const SelectionModel expected_forwards(ui::Range(0, 3), CURSOR_BACKWARD); | 750 const SelectionModel expected_forwards(ui::Range(0, 3), CURSOR_BACKWARD); |
748 const bool was_rtl = base::i18n::IsRTL(); | 751 const bool was_rtl = base::i18n::IsRTL(); |
749 | 752 |
750 for (size_t i = 0; i < 2; ++i) { | 753 for (size_t i = 0; i < 2; ++i) { |
751 SetRTL(!base::i18n::IsRTL()); | 754 SetRTL(!base::i18n::IsRTL()); |
752 // Test that an empty string produces an empty selection model. | 755 // Test that an empty string produces an empty selection model. |
753 render_text->SetText(string16()); | 756 render_text->SetText(base::string16()); |
754 EXPECT_EQ(render_text->selection_model(), SelectionModel()); | 757 EXPECT_EQ(render_text->selection_model(), SelectionModel()); |
755 | 758 |
756 // Test the weak, LTR, RTL, and Bidi string cases. | 759 // Test the weak, LTR, RTL, and Bidi string cases. |
757 for (size_t j = 0; j < ARRAYSIZE_UNSAFE(cases); j++) { | 760 for (size_t j = 0; j < ARRAYSIZE_UNSAFE(cases); j++) { |
758 render_text->SetText(WideToUTF16(cases[j])); | 761 render_text->SetText(WideToUTF16(cases[j])); |
759 render_text->SelectAll(false); | 762 render_text->SelectAll(false); |
760 EXPECT_EQ(render_text->selection_model(), expected_forwards); | 763 EXPECT_EQ(render_text->selection_model(), expected_forwards); |
761 render_text->SelectAll(true); | 764 render_text->SelectAll(true); |
762 EXPECT_EQ(render_text->selection_model(), expected_reversed); | 765 EXPECT_EQ(render_text->selection_model(), expected_reversed); |
763 } | 766 } |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
978 } | 981 } |
979 | 982 |
980 // TODO(asvitkine): This test fails because PlatformFontMac uses point font | 983 // TODO(asvitkine): This test fails because PlatformFontMac uses point font |
981 // sizes instead of pixel sizes like other implementations. | 984 // sizes instead of pixel sizes like other implementations. |
982 #if !defined(OS_MACOSX) | 985 #if !defined(OS_MACOSX) |
983 TEST_F(RenderTextTest, StringSizeEmptyString) { | 986 TEST_F(RenderTextTest, StringSizeEmptyString) { |
984 const Font font; | 987 const Font font; |
985 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 988 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
986 render_text->SetFont(font); | 989 render_text->SetFont(font); |
987 | 990 |
988 render_text->SetText(string16()); | 991 render_text->SetText(base::string16()); |
989 EXPECT_EQ(font.GetHeight(), render_text->GetStringSize().height()); | 992 EXPECT_EQ(font.GetHeight(), render_text->GetStringSize().height()); |
990 EXPECT_EQ(0, render_text->GetStringSize().width()); | 993 EXPECT_EQ(0, render_text->GetStringSize().width()); |
991 | 994 |
992 render_text->SetText(UTF8ToUTF16(" ")); | 995 render_text->SetText(UTF8ToUTF16(" ")); |
993 EXPECT_EQ(font.GetHeight(), render_text->GetStringSize().height()); | 996 EXPECT_EQ(font.GetHeight(), render_text->GetStringSize().height()); |
994 } | 997 } |
995 #endif // !defined(OS_MACOSX) | 998 #endif // !defined(OS_MACOSX) |
996 | 999 |
997 TEST_F(RenderTextTest, SetFont) { | 1000 TEST_F(RenderTextTest, SetFont) { |
998 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1001 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
(...skipping 15 matching lines...) Expand all Loading... |
1014 EXPECT_GT(bold_width, plain_width); | 1017 EXPECT_GT(bold_width, plain_width); |
1015 | 1018 |
1016 // Now, apply a plain style over the first word only. | 1019 // Now, apply a plain style over the first word only. |
1017 render_text->ApplyStyle(gfx::BOLD, false, ui::Range(0, 5)); | 1020 render_text->ApplyStyle(gfx::BOLD, false, ui::Range(0, 5)); |
1018 const int plain_bold_width = render_text->GetStringSize().width(); | 1021 const int plain_bold_width = render_text->GetStringSize().width(); |
1019 EXPECT_GT(plain_bold_width, plain_width); | 1022 EXPECT_GT(plain_bold_width, plain_width); |
1020 EXPECT_LT(plain_bold_width, bold_width); | 1023 EXPECT_LT(plain_bold_width, bold_width); |
1021 } | 1024 } |
1022 | 1025 |
1023 TEST_F(RenderTextTest, StringSizeHeight) { | 1026 TEST_F(RenderTextTest, StringSizeHeight) { |
1024 string16 cases[] = { | 1027 base::string16 cases[] = { |
1025 WideToUTF16(L"Hello World!"), // English | 1028 WideToUTF16(L"Hello World!"), // English |
1026 WideToUTF16(L"\x6328\x62f6"), // Japanese | 1029 WideToUTF16(L"\x6328\x62f6"), // Japanese |
1027 WideToUTF16(L"\x0915\x093f"), // Hindi | 1030 WideToUTF16(L"\x0915\x093f"), // Hindi |
1028 WideToUTF16(L"\x05e0\x05b8"), // Hebrew | 1031 WideToUTF16(L"\x05e0\x05b8"), // Hebrew |
1029 }; | 1032 }; |
1030 | 1033 |
1031 Font default_font; | 1034 Font default_font; |
1032 Font larger_font = default_font.DeriveFont(24, default_font.GetStyle()); | 1035 Font larger_font = default_font.DeriveFont(24, default_font.GetStyle()); |
1033 EXPECT_GT(larger_font.GetHeight(), default_font.GetHeight()); | 1036 EXPECT_GT(larger_font.GetHeight(), default_font.GetHeight()); |
1034 | 1037 |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1142 TEST_F(RenderTextTest, SameFontForParentheses) { | 1145 TEST_F(RenderTextTest, SameFontForParentheses) { |
1143 struct { | 1146 struct { |
1144 const char16 left_char; | 1147 const char16 left_char; |
1145 const char16 right_char; | 1148 const char16 right_char; |
1146 } punctuation_pairs[] = { | 1149 } punctuation_pairs[] = { |
1147 { '(', ')' }, | 1150 { '(', ')' }, |
1148 { '{', '}' }, | 1151 { '{', '}' }, |
1149 { '<', '>' }, | 1152 { '<', '>' }, |
1150 }; | 1153 }; |
1151 struct { | 1154 struct { |
1152 string16 text; | 1155 base::string16 text; |
1153 } cases[] = { | 1156 } cases[] = { |
1154 // English(English) | 1157 // English(English) |
1155 { WideToUTF16(L"Hello World(a)") }, | 1158 { WideToUTF16(L"Hello World(a)") }, |
1156 // English(English)English | 1159 // English(English)English |
1157 { WideToUTF16(L"Hello World(a)Hello World") }, | 1160 { WideToUTF16(L"Hello World(a)Hello World") }, |
1158 | 1161 |
1159 // Japanese(English) | 1162 // Japanese(English) |
1160 { WideToUTF16(L"\x6328\x62f6(a)") }, | 1163 { WideToUTF16(L"\x6328\x62f6(a)") }, |
1161 // Japanese(English)Japanese | 1164 // Japanese(English)Japanese |
1162 { WideToUTF16(L"\x6328\x62f6(a)\x6328\x62f6") }, | 1165 { WideToUTF16(L"\x6328\x62f6(a)\x6328\x62f6") }, |
(...skipping 10 matching lines...) Expand all Loading... |
1173 // Hebrew(English) | 1176 // Hebrew(English) |
1174 { WideToUTF16(L"\x05e0\x05b8(a)") }, | 1177 { WideToUTF16(L"\x05e0\x05b8(a)") }, |
1175 // Hebrew(English)Hebrew | 1178 // Hebrew(English)Hebrew |
1176 { WideToUTF16(L"\x05e0\x05b8(a)\x05e0\x05b8") }, | 1179 { WideToUTF16(L"\x05e0\x05b8(a)\x05e0\x05b8") }, |
1177 // English(Hebrew)English | 1180 // English(Hebrew)English |
1178 { WideToUTF16(L"Hello World(\x05e0\x05b8)Hello World") }, | 1181 { WideToUTF16(L"Hello World(\x05e0\x05b8)Hello World") }, |
1179 }; | 1182 }; |
1180 | 1183 |
1181 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1184 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1182 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { | 1185 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { |
1183 string16 text = cases[i].text; | 1186 base::string16 text = cases[i].text; |
1184 const size_t start_paren_char_index = text.find('('); | 1187 const size_t start_paren_char_index = text.find('('); |
1185 ASSERT_NE(string16::npos, start_paren_char_index); | 1188 ASSERT_NE(base::string16::npos, start_paren_char_index); |
1186 const size_t end_paren_char_index = text.find(')'); | 1189 const size_t end_paren_char_index = text.find(')'); |
1187 ASSERT_NE(string16::npos, end_paren_char_index); | 1190 ASSERT_NE(base::string16::npos, end_paren_char_index); |
1188 | 1191 |
1189 for (size_t j = 0; j < ARRAYSIZE_UNSAFE(punctuation_pairs); ++j) { | 1192 for (size_t j = 0; j < ARRAYSIZE_UNSAFE(punctuation_pairs); ++j) { |
1190 text[start_paren_char_index] = punctuation_pairs[j].left_char; | 1193 text[start_paren_char_index] = punctuation_pairs[j].left_char; |
1191 text[end_paren_char_index] = punctuation_pairs[j].right_char; | 1194 text[end_paren_char_index] = punctuation_pairs[j].right_char; |
1192 render_text->SetText(text); | 1195 render_text->SetText(text); |
1193 | 1196 |
1194 const std::vector<RenderText::FontSpan> spans = | 1197 const std::vector<RenderText::FontSpan> spans = |
1195 render_text->GetFontSpansForTesting(); | 1198 render_text->GetFontSpansForTesting(); |
1196 | 1199 |
1197 int start_paren_span_index = -1; | 1200 int start_paren_span_index = -1; |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1378 EXPECT_EQ(render_text->display_rect().width() - width - 1, | 1381 EXPECT_EQ(render_text->display_rect().width() - width - 1, |
1379 render_text->GetUpdatedCursorBounds().x()); | 1382 render_text->GetUpdatedCursorBounds().x()); |
1380 | 1383 |
1381 // Reset the application default text direction to LTR. | 1384 // Reset the application default text direction to LTR. |
1382 SetRTL(was_rtl); | 1385 SetRTL(was_rtl); |
1383 EXPECT_EQ(was_rtl, base::i18n::IsRTL()); | 1386 EXPECT_EQ(was_rtl, base::i18n::IsRTL()); |
1384 } | 1387 } |
1385 #endif // !defined(OS_MACOSX) | 1388 #endif // !defined(OS_MACOSX) |
1386 | 1389 |
1387 } // namespace gfx | 1390 } // namespace gfx |
OLD | NEW |