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

Side by Side Diff: ui/gfx/render_text_unittest.cc

Issue 16051006: ui/gfx: Use base::string16 now that string16 was moved into base namespace. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 6 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 unified diff | Download patch
« no previous file with comments | « ui/gfx/render_text.cc ('k') | ui/gfx/text_utils.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « ui/gfx/render_text.cc ('k') | ui/gfx/text_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698