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 <limits.h> | 7 #include <limits.h> |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 | 10 |
11 #include <algorithm> | 11 #include <algorithm> |
| 12 #include <memory> |
12 | 13 |
13 #include "base/format_macros.h" | 14 #include "base/format_macros.h" |
14 #include "base/i18n/break_iterator.h" | 15 #include "base/i18n/break_iterator.h" |
15 #include "base/macros.h" | 16 #include "base/macros.h" |
16 #include "base/memory/scoped_ptr.h" | |
17 #include "base/strings/string_split.h" | 17 #include "base/strings/string_split.h" |
18 #include "base/strings/string_util.h" | 18 #include "base/strings/string_util.h" |
19 #include "base/strings/stringprintf.h" | 19 #include "base/strings/stringprintf.h" |
20 #include "base/strings/utf_string_conversions.h" | 20 #include "base/strings/utf_string_conversions.h" |
21 #include "build/build_config.h" | 21 #include "build/build_config.h" |
22 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
23 #include "third_party/skia/include/core/SkSurface.h" | 23 #include "third_party/skia/include/core/SkSurface.h" |
24 #include "ui/gfx/break_list.h" | 24 #include "ui/gfx/break_list.h" |
25 #include "ui/gfx/canvas.h" | 25 #include "ui/gfx/canvas.h" |
26 #include "ui/gfx/color_utils.h" | 26 #include "ui/gfx/color_utils.h" |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 | 235 |
236 DISALLOW_COPY_AND_ASSIGN(TestRectangleBuffer); | 236 DISALLOW_COPY_AND_ASSIGN(TestRectangleBuffer); |
237 }; | 237 }; |
238 | 238 |
239 } // namespace | 239 } // namespace |
240 | 240 |
241 using RenderTextTest = testing::Test; | 241 using RenderTextTest = testing::Test; |
242 | 242 |
243 TEST_F(RenderTextTest, DefaultStyles) { | 243 TEST_F(RenderTextTest, DefaultStyles) { |
244 // Check the default styles applied to new instances and adjusted text. | 244 // Check the default styles applied to new instances and adjusted text. |
245 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 245 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
246 EXPECT_TRUE(render_text->text().empty()); | 246 EXPECT_TRUE(render_text->text().empty()); |
247 const wchar_t* const cases[] = { kWeak, kLtr, L"Hello", kRtl, L"", L"" }; | 247 const wchar_t* const cases[] = { kWeak, kLtr, L"Hello", kRtl, L"", L"" }; |
248 for (size_t i = 0; i < arraysize(cases); ++i) { | 248 for (size_t i = 0; i < arraysize(cases); ++i) { |
249 EXPECT_TRUE(render_text->colors().EqualsValueForTesting(SK_ColorBLACK)); | 249 EXPECT_TRUE(render_text->colors().EqualsValueForTesting(SK_ColorBLACK)); |
250 EXPECT_TRUE( | 250 EXPECT_TRUE( |
251 render_text->baselines().EqualsValueForTesting(NORMAL_BASELINE)); | 251 render_text->baselines().EqualsValueForTesting(NORMAL_BASELINE)); |
252 for (size_t style = 0; style < NUM_TEXT_STYLES; ++style) | 252 for (size_t style = 0; style < NUM_TEXT_STYLES; ++style) |
253 EXPECT_TRUE(render_text->styles()[style].EqualsValueForTesting(false)); | 253 EXPECT_TRUE(render_text->styles()[style].EqualsValueForTesting(false)); |
254 render_text->SetText(WideToUTF16(cases[i])); | 254 render_text->SetText(WideToUTF16(cases[i])); |
255 } | 255 } |
256 } | 256 } |
257 | 257 |
258 TEST_F(RenderTextTest, SetStyles) { | 258 TEST_F(RenderTextTest, SetStyles) { |
259 // Ensure custom default styles persist across setting and clearing text. | 259 // Ensure custom default styles persist across setting and clearing text. |
260 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 260 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
261 const SkColor color = SK_ColorRED; | 261 const SkColor color = SK_ColorRED; |
262 render_text->SetColor(color); | 262 render_text->SetColor(color); |
263 render_text->SetBaselineStyle(SUPERSCRIPT); | 263 render_text->SetBaselineStyle(SUPERSCRIPT); |
264 render_text->SetStyle(BOLD, true); | 264 render_text->SetStyle(BOLD, true); |
265 render_text->SetStyle(UNDERLINE, false); | 265 render_text->SetStyle(UNDERLINE, false); |
266 const wchar_t* const cases[] = { kWeak, kLtr, L"Hello", kRtl, L"", L"" }; | 266 const wchar_t* const cases[] = { kWeak, kLtr, L"Hello", kRtl, L"", L"" }; |
267 for (size_t i = 0; i < arraysize(cases); ++i) { | 267 for (size_t i = 0; i < arraysize(cases); ++i) { |
268 EXPECT_TRUE(render_text->colors().EqualsValueForTesting(color)); | 268 EXPECT_TRUE(render_text->colors().EqualsValueForTesting(color)); |
269 EXPECT_TRUE(render_text->baselines().EqualsValueForTesting(SUPERSCRIPT)); | 269 EXPECT_TRUE(render_text->baselines().EqualsValueForTesting(SUPERSCRIPT)); |
270 EXPECT_TRUE(render_text->styles()[BOLD].EqualsValueForTesting(true)); | 270 EXPECT_TRUE(render_text->styles()[BOLD].EqualsValueForTesting(true)); |
271 EXPECT_TRUE(render_text->styles()[UNDERLINE].EqualsValueForTesting(false)); | 271 EXPECT_TRUE(render_text->styles()[UNDERLINE].EqualsValueForTesting(false)); |
272 render_text->SetText(WideToUTF16(cases[i])); | 272 render_text->SetText(WideToUTF16(cases[i])); |
273 | 273 |
274 // Ensure custom default styles can be applied after text has been set. | 274 // Ensure custom default styles can be applied after text has been set. |
275 if (i == 1) | 275 if (i == 1) |
276 render_text->SetStyle(STRIKE, true); | 276 render_text->SetStyle(STRIKE, true); |
277 if (i >= 1) | 277 if (i >= 1) |
278 EXPECT_TRUE(render_text->styles()[STRIKE].EqualsValueForTesting(true)); | 278 EXPECT_TRUE(render_text->styles()[STRIKE].EqualsValueForTesting(true)); |
279 } | 279 } |
280 } | 280 } |
281 | 281 |
282 TEST_F(RenderTextTest, ApplyStyles) { | 282 TEST_F(RenderTextTest, ApplyStyles) { |
283 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 283 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
284 render_text->SetText(ASCIIToUTF16("012345678")); | 284 render_text->SetText(ASCIIToUTF16("012345678")); |
285 | 285 |
286 // Apply a ranged color and style and check the resulting breaks. | 286 // Apply a ranged color and style and check the resulting breaks. |
287 render_text->ApplyColor(SK_ColorRED, Range(1, 4)); | 287 render_text->ApplyColor(SK_ColorRED, Range(1, 4)); |
288 render_text->ApplyBaselineStyle(SUPERIOR, Range(2, 4)); | 288 render_text->ApplyBaselineStyle(SUPERIOR, Range(2, 4)); |
289 render_text->ApplyStyle(BOLD, true, Range(2, 5)); | 289 render_text->ApplyStyle(BOLD, true, Range(2, 5)); |
290 std::vector<std::pair<size_t, SkColor> > expected_color; | 290 std::vector<std::pair<size_t, SkColor> > expected_color; |
291 expected_color.push_back(std::pair<size_t, SkColor>(0, SK_ColorBLACK)); | 291 expected_color.push_back(std::pair<size_t, SkColor>(0, SK_ColorBLACK)); |
292 expected_color.push_back(std::pair<size_t, SkColor>(1, SK_ColorRED)); | 292 expected_color.push_back(std::pair<size_t, SkColor>(1, SK_ColorRED)); |
293 expected_color.push_back(std::pair<size_t, SkColor>(4, SK_ColorBLACK)); | 293 expected_color.push_back(std::pair<size_t, SkColor>(4, SK_ColorBLACK)); |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
370 std::vector<std::pair<size_t, bool> > expected_underline; | 370 std::vector<std::pair<size_t, bool> > expected_underline; |
371 expected_underline.push_back(std::pair<size_t, bool>(0, false)); | 371 expected_underline.push_back(std::pair<size_t, bool>(0, false)); |
372 expected_underline.push_back(std::pair<size_t, bool>(1, true)); | 372 expected_underline.push_back(std::pair<size_t, bool>(1, true)); |
373 expected_underline.push_back(std::pair<size_t, bool>(6, false)); | 373 expected_underline.push_back(std::pair<size_t, bool>(6, false)); |
374 EXPECT_TRUE(render_text->styles()[UNDERLINE].EqualsForTesting( | 374 EXPECT_TRUE(render_text->styles()[UNDERLINE].EqualsForTesting( |
375 expected_underline)); | 375 expected_underline)); |
376 #endif // !defined(OS_MACOSX) | 376 #endif // !defined(OS_MACOSX) |
377 } | 377 } |
378 | 378 |
379 TEST_F(RenderTextTest, AppendTextKeepsStyles) { | 379 TEST_F(RenderTextTest, AppendTextKeepsStyles) { |
380 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 380 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
381 // Setup basic functionality. | 381 // Setup basic functionality. |
382 render_text->SetText(ASCIIToUTF16("abc")); | 382 render_text->SetText(ASCIIToUTF16("abc")); |
383 render_text->ApplyColor(SK_ColorRED, Range(0, 1)); | 383 render_text->ApplyColor(SK_ColorRED, Range(0, 1)); |
384 render_text->ApplyBaselineStyle(SUPERSCRIPT, Range(1, 2)); | 384 render_text->ApplyBaselineStyle(SUPERSCRIPT, Range(1, 2)); |
385 render_text->ApplyStyle(UNDERLINE, true, Range(2, 3)); | 385 render_text->ApplyStyle(UNDERLINE, true, Range(2, 3)); |
386 // Verify basic functionality. | 386 // Verify basic functionality. |
387 std::vector<std::pair<size_t, SkColor>> expected_color; | 387 std::vector<std::pair<size_t, SkColor>> expected_color; |
388 expected_color.push_back(std::pair<size_t, SkColor>(0, SK_ColorRED)); | 388 expected_color.push_back(std::pair<size_t, SkColor>(0, SK_ColorRED)); |
389 expected_color.push_back(std::pair<size_t, SkColor>(1, SK_ColorBLACK)); | 389 expected_color.push_back(std::pair<size_t, SkColor>(1, SK_ColorBLACK)); |
390 EXPECT_TRUE(render_text->colors().EqualsForTesting(expected_color)); | 390 EXPECT_TRUE(render_text->colors().EqualsForTesting(expected_color)); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
435 render_text->selection_model()); | 435 render_text->selection_model()); |
436 render_text->MoveCursor(WORD_BREAK, CURSOR_LEFT, select); | 436 render_text->MoveCursor(WORD_BREAK, CURSOR_LEFT, select); |
437 EXPECT_EQ(SelectionModel(0, CURSOR_BACKWARD), render_text->selection_model()); | 437 EXPECT_EQ(SelectionModel(0, CURSOR_BACKWARD), render_text->selection_model()); |
438 } | 438 } |
439 | 439 |
440 // TODO(asvitkine): RenderTextMac cursor movements. http://crbug.com/131618 | 440 // TODO(asvitkine): RenderTextMac cursor movements. http://crbug.com/131618 |
441 #if !defined(OS_MACOSX) | 441 #if !defined(OS_MACOSX) |
442 TEST_F(RenderTextTest, ObscuredText) { | 442 TEST_F(RenderTextTest, ObscuredText) { |
443 const base::string16 seuss = ASCIIToUTF16("hop on pop"); | 443 const base::string16 seuss = ASCIIToUTF16("hop on pop"); |
444 const base::string16 no_seuss = ASCIIToUTF16("**********"); | 444 const base::string16 no_seuss = ASCIIToUTF16("**********"); |
445 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 445 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
446 | 446 |
447 // GetLayoutText() returns asterisks when the obscured bit is set. | 447 // GetLayoutText() returns asterisks when the obscured bit is set. |
448 render_text->SetText(seuss); | 448 render_text->SetText(seuss); |
449 render_text->SetObscured(true); | 449 render_text->SetObscured(true); |
450 EXPECT_EQ(seuss, render_text->text()); | 450 EXPECT_EQ(seuss, render_text->text()); |
451 EXPECT_EQ(no_seuss, render_text->GetDisplayText()); | 451 EXPECT_EQ(no_seuss, render_text->GetDisplayText()); |
452 render_text->SetObscured(false); | 452 render_text->SetObscured(false); |
453 EXPECT_EQ(seuss, render_text->text()); | 453 EXPECT_EQ(seuss, render_text->text()); |
454 EXPECT_EQ(seuss, render_text->GetDisplayText()); | 454 EXPECT_EQ(seuss, render_text->GetDisplayText()); |
455 | 455 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
499 base::string16 text = WideToUTF16(texts[i]); | 499 base::string16 text = WideToUTF16(texts[i]); |
500 TestVisualCursorMotionInObscuredField(render_text.get(), text, false); | 500 TestVisualCursorMotionInObscuredField(render_text.get(), text, false); |
501 TestVisualCursorMotionInObscuredField(render_text.get(), text, true); | 501 TestVisualCursorMotionInObscuredField(render_text.get(), text, true); |
502 } | 502 } |
503 } | 503 } |
504 #endif // !defined(OS_MACOSX) | 504 #endif // !defined(OS_MACOSX) |
505 | 505 |
506 TEST_F(RenderTextTest, RevealObscuredText) { | 506 TEST_F(RenderTextTest, RevealObscuredText) { |
507 const base::string16 seuss = ASCIIToUTF16("hop on pop"); | 507 const base::string16 seuss = ASCIIToUTF16("hop on pop"); |
508 const base::string16 no_seuss = ASCIIToUTF16("**********"); | 508 const base::string16 no_seuss = ASCIIToUTF16("**********"); |
509 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 509 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
510 | 510 |
511 render_text->SetText(seuss); | 511 render_text->SetText(seuss); |
512 render_text->SetObscured(true); | 512 render_text->SetObscured(true); |
513 EXPECT_EQ(seuss, render_text->text()); | 513 EXPECT_EQ(seuss, render_text->text()); |
514 EXPECT_EQ(no_seuss, render_text->GetDisplayText()); | 514 EXPECT_EQ(no_seuss, render_text->GetDisplayText()); |
515 | 515 |
516 // Valid reveal index and new revealed index clears previous one. | 516 // Valid reveal index and new revealed index clears previous one. |
517 render_text->RenderText::SetObscuredRevealIndex(0); | 517 render_text->RenderText::SetObscuredRevealIndex(0); |
518 EXPECT_EQ(ASCIIToUTF16("h*********"), render_text->GetDisplayText()); | 518 EXPECT_EQ(ASCIIToUTF16("h*********"), render_text->GetDisplayText()); |
519 render_text->RenderText::SetObscuredRevealIndex(1); | 519 render_text->RenderText::SetObscuredRevealIndex(1); |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
621 // U+05E9 U+05BC U+05C1 U+05B8 forms a four-character compound glyph. Again, | 621 // U+05E9 U+05BC U+05C1 U+05B8 forms a four-character compound glyph. Again, |
622 // it should be either fully elided, or not elided at all. If completely | 622 // it should be either fully elided, or not elided at all. If completely |
623 // elided, an LTR Mark (U+200E) should be added. | 623 // elided, an LTR Mark (U+200E) should be added. |
624 { L"0\x05e9\x05bc\x05c1\x05b8", L"0\x05e9\x05bc\x05c1\x05b8", false }, | 624 { L"0\x05e9\x05bc\x05c1\x05b8", L"0\x05e9\x05bc\x05c1\x05b8", false }, |
625 { L"0\x05e9\x05bc\x05c1\x05b8", L"0\x2026\x200E" , true }, | 625 { L"0\x05e9\x05bc\x05c1\x05b8", L"0\x2026\x200E" , true }, |
626 { L"01\x05e9\x05bc\x05c1\x05b8", L"01\x2026\x200E" , true }, | 626 { L"01\x05e9\x05bc\x05c1\x05b8", L"01\x2026\x200E" , true }, |
627 { L"012\x05e9\x05bc\x05c1\x05b8", L"012\x2026\x200E" , true }, | 627 { L"012\x05e9\x05bc\x05c1\x05b8", L"012\x2026\x200E" , true }, |
628 { L"012\xF0\x9D\x84\x9E", L"012\xF0\x2026" , true }, | 628 { L"012\xF0\x9D\x84\x9E", L"012\xF0\x2026" , true }, |
629 }; | 629 }; |
630 | 630 |
631 scoped_ptr<RenderText> expected_render_text(RenderText::CreateInstance()); | 631 std::unique_ptr<RenderText> expected_render_text( |
| 632 RenderText::CreateInstance()); |
632 expected_render_text->SetFontList(FontList("serif, Sans serif, 12px")); | 633 expected_render_text->SetFontList(FontList("serif, Sans serif, 12px")); |
633 expected_render_text->SetDisplayRect(Rect(0, 0, 9999, 100)); | 634 expected_render_text->SetDisplayRect(Rect(0, 0, 9999, 100)); |
634 | 635 |
635 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 636 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
636 render_text->SetFontList(FontList("serif, Sans serif, 12px")); | 637 render_text->SetFontList(FontList("serif, Sans serif, 12px")); |
637 render_text->SetElideBehavior(ELIDE_TAIL); | 638 render_text->SetElideBehavior(ELIDE_TAIL); |
638 | 639 |
639 for (size_t i = 0; i < arraysize(cases); i++) { | 640 for (size_t i = 0; i < arraysize(cases); i++) { |
640 SCOPED_TRACE(base::StringPrintf("Testing cases[%" PRIuS "] '%ls'", i, | 641 SCOPED_TRACE(base::StringPrintf("Testing cases[%" PRIuS "] '%ls'", i, |
641 cases[i].text)); | 642 cases[i].text)); |
642 | 643 |
643 // Compute expected width | 644 // Compute expected width |
644 expected_render_text->SetText(WideToUTF16(cases[i].display_text)); | 645 expected_render_text->SetText(WideToUTF16(cases[i].display_text)); |
645 int expected_width = expected_render_text->GetContentWidth(); | 646 int expected_width = expected_render_text->GetContentWidth(); |
646 | 647 |
647 base::string16 input = WideToUTF16(cases[i].text); | 648 base::string16 input = WideToUTF16(cases[i].text); |
648 // Extend the input text to ensure that it is wider than the display_text, | 649 // Extend the input text to ensure that it is wider than the display_text, |
649 // and so it will get elided. | 650 // and so it will get elided. |
650 if (cases[i].elision_expected) | 651 if (cases[i].elision_expected) |
651 input.append(WideToUTF16(L" MMMMMMMMMMM")); | 652 input.append(WideToUTF16(L" MMMMMMMMMMM")); |
652 render_text->SetText(input); | 653 render_text->SetText(input); |
653 render_text->SetDisplayRect(Rect(0, 0, expected_width, 100)); | 654 render_text->SetDisplayRect(Rect(0, 0, expected_width, 100)); |
654 EXPECT_EQ(input, render_text->text()); | 655 EXPECT_EQ(input, render_text->text()); |
655 EXPECT_EQ(WideToUTF16(cases[i].display_text), | 656 EXPECT_EQ(WideToUTF16(cases[i].display_text), |
656 render_text->GetDisplayText()); | 657 render_text->GetDisplayText()); |
657 expected_render_text->SetText(base::string16()); | 658 expected_render_text->SetText(base::string16()); |
658 } | 659 } |
659 } | 660 } |
660 | 661 |
661 TEST_F(RenderTextTest, ElidedObscuredText) { | 662 TEST_F(RenderTextTest, ElidedObscuredText) { |
662 scoped_ptr<RenderText> expected_render_text(RenderText::CreateInstance()); | 663 std::unique_ptr<RenderText> expected_render_text( |
| 664 RenderText::CreateInstance()); |
663 expected_render_text->SetFontList(FontList("serif, Sans serif, 12px")); | 665 expected_render_text->SetFontList(FontList("serif, Sans serif, 12px")); |
664 expected_render_text->SetDisplayRect(Rect(0, 0, 9999, 100)); | 666 expected_render_text->SetDisplayRect(Rect(0, 0, 9999, 100)); |
665 expected_render_text->SetText(WideToUTF16(L"**\x2026")); | 667 expected_render_text->SetText(WideToUTF16(L"**\x2026")); |
666 | 668 |
667 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 669 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
668 render_text->SetFontList(FontList("serif, Sans serif, 12px")); | 670 render_text->SetFontList(FontList("serif, Sans serif, 12px")); |
669 render_text->SetElideBehavior(ELIDE_TAIL); | 671 render_text->SetElideBehavior(ELIDE_TAIL); |
670 render_text->SetDisplayRect( | 672 render_text->SetDisplayRect( |
671 Rect(0, 0, expected_render_text->GetContentWidth(), 100)); | 673 Rect(0, 0, expected_render_text->GetContentWidth(), 100)); |
672 render_text->SetObscured(true); | 674 render_text->SetObscured(true); |
673 render_text->SetText(WideToUTF16(L"abcdef")); | 675 render_text->SetText(WideToUTF16(L"abcdef")); |
674 EXPECT_EQ(WideToUTF16(L"abcdef"), render_text->text()); | 676 EXPECT_EQ(WideToUTF16(L"abcdef"), render_text->text()); |
675 EXPECT_EQ(WideToUTF16(L"**\x2026"), render_text->GetDisplayText()); | 677 EXPECT_EQ(WideToUTF16(L"**\x2026"), render_text->GetDisplayText()); |
676 } | 678 } |
677 #endif // !defined(OS_MACOSX) | 679 #endif // !defined(OS_MACOSX) |
678 | 680 |
679 TEST_F(RenderTextTest, ElidedEmail) { | 681 TEST_F(RenderTextTest, ElidedEmail) { |
680 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 682 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
681 render_text->SetText(ASCIIToUTF16("test@example.com")); | 683 render_text->SetText(ASCIIToUTF16("test@example.com")); |
682 const gfx::Size size = render_text->GetStringSize(); | 684 const gfx::Size size = render_text->GetStringSize(); |
683 | 685 |
684 const base::string16 long_email = | 686 const base::string16 long_email = |
685 ASCIIToUTF16("longemailaddresstest@example.com"); | 687 ASCIIToUTF16("longemailaddresstest@example.com"); |
686 render_text->SetText(long_email); | 688 render_text->SetText(long_email); |
687 render_text->SetElideBehavior(ELIDE_EMAIL); | 689 render_text->SetElideBehavior(ELIDE_EMAIL); |
688 render_text->SetDisplayRect(gfx::Rect(size)); | 690 render_text->SetDisplayRect(gfx::Rect(size)); |
689 EXPECT_GE(size.width(), render_text->GetStringSize().width()); | 691 EXPECT_GE(size.width(), render_text->GetStringSize().width()); |
690 EXPECT_GT(long_email.size(), render_text->GetDisplayText().size()); | 692 EXPECT_GT(long_email.size(), render_text->GetDisplayText().size()); |
(...skipping 27 matching lines...) Expand all Loading... |
718 // Surrogate pairs should be truncated reasonably enough. | 720 // Surrogate pairs should be truncated reasonably enough. |
719 { L"0123\x0915\x093f", L"0123\x2026" }, | 721 { L"0123\x0915\x093f", L"0123\x2026" }, |
720 { L"0\x05e9\x05bc\x05c1\x05b8", L"0\x05e9\x05bc\x05c1\x05b8" }, | 722 { L"0\x05e9\x05bc\x05c1\x05b8", L"0\x05e9\x05bc\x05c1\x05b8" }, |
721 { L"01\x05e9\x05bc\x05c1\x05b8", L"01\x05e9\x05bc\x2026" }, | 723 { L"01\x05e9\x05bc\x05c1\x05b8", L"01\x05e9\x05bc\x2026" }, |
722 { L"012\x05e9\x05bc\x05c1\x05b8", L"012\x05e9\x2026" }, | 724 { L"012\x05e9\x05bc\x05c1\x05b8", L"012\x05e9\x2026" }, |
723 { L"0123\x05e9\x05bc\x05c1\x05b8", L"0123\x2026" }, | 725 { L"0123\x05e9\x05bc\x05c1\x05b8", L"0123\x2026" }, |
724 { L"01234\x05e9\x05bc\x05c1\x05b8", L"0123\x2026" }, | 726 { L"01234\x05e9\x05bc\x05c1\x05b8", L"0123\x2026" }, |
725 { L"012\xF0\x9D\x84\x9E", L"012\xF0\x2026" }, | 727 { L"012\xF0\x9D\x84\x9E", L"012\xF0\x2026" }, |
726 }; | 728 }; |
727 | 729 |
728 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 730 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
729 render_text->set_truncate_length(5); | 731 render_text->set_truncate_length(5); |
730 for (size_t i = 0; i < arraysize(cases); i++) { | 732 for (size_t i = 0; i < arraysize(cases); i++) { |
731 render_text->SetText(WideToUTF16(cases[i].text)); | 733 render_text->SetText(WideToUTF16(cases[i].text)); |
732 EXPECT_EQ(WideToUTF16(cases[i].text), render_text->text()); | 734 EXPECT_EQ(WideToUTF16(cases[i].text), render_text->text()); |
733 EXPECT_EQ(WideToUTF16(cases[i].display_text), render_text->GetDisplayText()) | 735 EXPECT_EQ(WideToUTF16(cases[i].display_text), render_text->GetDisplayText()) |
734 << "For case " << i << ": " << cases[i].text; | 736 << "For case " << i << ": " << cases[i].text; |
735 } | 737 } |
736 } | 738 } |
737 | 739 |
738 TEST_F(RenderTextTest, TruncatedObscuredText) { | 740 TEST_F(RenderTextTest, TruncatedObscuredText) { |
739 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 741 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
740 render_text->set_truncate_length(3); | 742 render_text->set_truncate_length(3); |
741 render_text->SetObscured(true); | 743 render_text->SetObscured(true); |
742 render_text->SetText(WideToUTF16(L"abcdef")); | 744 render_text->SetText(WideToUTF16(L"abcdef")); |
743 EXPECT_EQ(WideToUTF16(L"abcdef"), render_text->text()); | 745 EXPECT_EQ(WideToUTF16(L"abcdef"), render_text->text()); |
744 EXPECT_EQ(WideToUTF16(L"**\x2026"), render_text->GetDisplayText()); | 746 EXPECT_EQ(WideToUTF16(L"**\x2026"), render_text->GetDisplayText()); |
745 } | 747 } |
746 | 748 |
747 // TODO(asvitkine): RenderTextMac cursor movements. http://crbug.com/131618 | 749 // TODO(asvitkine): RenderTextMac cursor movements. http://crbug.com/131618 |
748 #if !defined(OS_MACOSX) | 750 #if !defined(OS_MACOSX) |
749 TEST_F(RenderTextTest, TruncatedCursorMovementLTR) { | 751 TEST_F(RenderTextTest, TruncatedCursorMovementLTR) { |
750 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 752 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
751 render_text->set_truncate_length(2); | 753 render_text->set_truncate_length(2); |
752 render_text->SetText(WideToUTF16(L"abcd")); | 754 render_text->SetText(WideToUTF16(L"abcd")); |
753 | 755 |
754 EXPECT_EQ(SelectionModel(0, CURSOR_BACKWARD), render_text->selection_model()); | 756 EXPECT_EQ(SelectionModel(0, CURSOR_BACKWARD), render_text->selection_model()); |
755 render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, false); | 757 render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, false); |
756 EXPECT_EQ(SelectionModel(4, CURSOR_FORWARD), render_text->selection_model()); | 758 EXPECT_EQ(SelectionModel(4, CURSOR_FORWARD), render_text->selection_model()); |
757 render_text->MoveCursor(LINE_BREAK, CURSOR_LEFT, false); | 759 render_text->MoveCursor(LINE_BREAK, CURSOR_LEFT, false); |
758 EXPECT_EQ(SelectionModel(0, CURSOR_BACKWARD), render_text->selection_model()); | 760 EXPECT_EQ(SelectionModel(0, CURSOR_BACKWARD), render_text->selection_model()); |
759 | 761 |
760 std::vector<SelectionModel> expected; | 762 std::vector<SelectionModel> expected; |
761 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); | 763 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); |
762 expected.push_back(SelectionModel(1, CURSOR_BACKWARD)); | 764 expected.push_back(SelectionModel(1, CURSOR_BACKWARD)); |
763 // The cursor hops over the ellipsis and elided text to the line end. | 765 // The cursor hops over the ellipsis and elided text to the line end. |
764 expected.push_back(SelectionModel(4, CURSOR_BACKWARD)); | 766 expected.push_back(SelectionModel(4, CURSOR_BACKWARD)); |
765 expected.push_back(SelectionModel(4, CURSOR_FORWARD)); | 767 expected.push_back(SelectionModel(4, CURSOR_FORWARD)); |
766 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_RIGHT); | 768 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_RIGHT); |
767 | 769 |
768 expected.clear(); | 770 expected.clear(); |
769 expected.push_back(SelectionModel(4, CURSOR_FORWARD)); | 771 expected.push_back(SelectionModel(4, CURSOR_FORWARD)); |
770 // The cursor hops over the elided text to preceeding text. | 772 // The cursor hops over the elided text to preceeding text. |
771 expected.push_back(SelectionModel(1, CURSOR_FORWARD)); | 773 expected.push_back(SelectionModel(1, CURSOR_FORWARD)); |
772 expected.push_back(SelectionModel(0, CURSOR_FORWARD)); | 774 expected.push_back(SelectionModel(0, CURSOR_FORWARD)); |
773 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); | 775 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); |
774 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_LEFT); | 776 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_LEFT); |
775 } | 777 } |
776 | 778 |
777 TEST_F(RenderTextTest, TruncatedCursorMovementRTL) { | 779 TEST_F(RenderTextTest, TruncatedCursorMovementRTL) { |
778 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 780 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
779 render_text->set_truncate_length(2); | 781 render_text->set_truncate_length(2); |
780 render_text->SetText(WideToUTF16(L"\x5d0\x5d1\x5d2\x5d3")); | 782 render_text->SetText(WideToUTF16(L"\x5d0\x5d1\x5d2\x5d3")); |
781 | 783 |
782 EXPECT_EQ(SelectionModel(0, CURSOR_BACKWARD), render_text->selection_model()); | 784 EXPECT_EQ(SelectionModel(0, CURSOR_BACKWARD), render_text->selection_model()); |
783 render_text->MoveCursor(LINE_BREAK, CURSOR_LEFT, false); | 785 render_text->MoveCursor(LINE_BREAK, CURSOR_LEFT, false); |
784 EXPECT_EQ(SelectionModel(4, CURSOR_FORWARD), render_text->selection_model()); | 786 EXPECT_EQ(SelectionModel(4, CURSOR_FORWARD), render_text->selection_model()); |
785 render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, false); | 787 render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, false); |
786 EXPECT_EQ(SelectionModel(0, CURSOR_BACKWARD), render_text->selection_model()); | 788 EXPECT_EQ(SelectionModel(0, CURSOR_BACKWARD), render_text->selection_model()); |
787 | 789 |
788 std::vector<SelectionModel> expected; | 790 std::vector<SelectionModel> expected; |
(...skipping 25 matching lines...) Expand all Loading... |
814 // Strings that begin with strong LTR characters. | 816 // Strings that begin with strong LTR characters. |
815 { kLtr, base::i18n::LEFT_TO_RIGHT }, | 817 { kLtr, base::i18n::LEFT_TO_RIGHT }, |
816 { kLtrRtl, base::i18n::LEFT_TO_RIGHT }, | 818 { kLtrRtl, base::i18n::LEFT_TO_RIGHT }, |
817 { kLtrRtlLtr, base::i18n::LEFT_TO_RIGHT }, | 819 { kLtrRtlLtr, base::i18n::LEFT_TO_RIGHT }, |
818 // Strings that begin with strong RTL characters. | 820 // Strings that begin with strong RTL characters. |
819 { kRtl, base::i18n::RIGHT_TO_LEFT }, | 821 { kRtl, base::i18n::RIGHT_TO_LEFT }, |
820 { kRtlLtr, base::i18n::RIGHT_TO_LEFT }, | 822 { kRtlLtr, base::i18n::RIGHT_TO_LEFT }, |
821 { kRtlLtrRtl, base::i18n::RIGHT_TO_LEFT }, | 823 { kRtlLtrRtl, base::i18n::RIGHT_TO_LEFT }, |
822 }; | 824 }; |
823 | 825 |
824 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 826 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
825 const bool was_rtl = base::i18n::IsRTL(); | 827 const bool was_rtl = base::i18n::IsRTL(); |
826 | 828 |
827 for (size_t i = 0; i < 2; ++i) { | 829 for (size_t i = 0; i < 2; ++i) { |
828 // Toggle the application default text direction (to try each direction). | 830 // Toggle the application default text direction (to try each direction). |
829 SetRTL(!base::i18n::IsRTL()); | 831 SetRTL(!base::i18n::IsRTL()); |
830 const base::i18n::TextDirection ui_direction = base::i18n::IsRTL() ? | 832 const base::i18n::TextDirection ui_direction = base::i18n::IsRTL() ? |
831 base::i18n::RIGHT_TO_LEFT : base::i18n::LEFT_TO_RIGHT; | 833 base::i18n::RIGHT_TO_LEFT : base::i18n::LEFT_TO_RIGHT; |
832 | 834 |
833 // Ensure that directionality modes yield the correct text directions. | 835 // Ensure that directionality modes yield the correct text directions. |
834 for (size_t j = 0; j < arraysize(cases); j++) { | 836 for (size_t j = 0; j < arraysize(cases); j++) { |
(...skipping 17 matching lines...) Expand all Loading... |
852 render_text->SetDirectionalityMode(DIRECTIONALITY_FROM_TEXT); | 854 render_text->SetDirectionalityMode(DIRECTIONALITY_FROM_TEXT); |
853 render_text->SetText(WideToUTF16(kLtr)); | 855 render_text->SetText(WideToUTF16(kLtr)); |
854 EXPECT_EQ(render_text->GetDisplayTextDirection(), base::i18n::LEFT_TO_RIGHT); | 856 EXPECT_EQ(render_text->GetDisplayTextDirection(), base::i18n::LEFT_TO_RIGHT); |
855 render_text->SetText(WideToUTF16(kRtl)); | 857 render_text->SetText(WideToUTF16(kRtl)); |
856 EXPECT_EQ(render_text->GetDisplayTextDirection(), base::i18n::RIGHT_TO_LEFT); | 858 EXPECT_EQ(render_text->GetDisplayTextDirection(), base::i18n::RIGHT_TO_LEFT); |
857 } | 859 } |
858 | 860 |
859 // TODO(asvitkine): RenderTextMac cursor movements. http://crbug.com/131618 | 861 // TODO(asvitkine): RenderTextMac cursor movements. http://crbug.com/131618 |
860 #if !defined(OS_MACOSX) | 862 #if !defined(OS_MACOSX) |
861 TEST_F(RenderTextTest, MoveCursorLeftRightInLtr) { | 863 TEST_F(RenderTextTest, MoveCursorLeftRightInLtr) { |
862 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 864 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
863 | 865 |
864 // Pure LTR. | 866 // Pure LTR. |
865 render_text->SetText(ASCIIToUTF16("abc")); | 867 render_text->SetText(ASCIIToUTF16("abc")); |
866 // |expected| saves the expected SelectionModel when moving cursor from left | 868 // |expected| saves the expected SelectionModel when moving cursor from left |
867 // to right. | 869 // to right. |
868 std::vector<SelectionModel> expected; | 870 std::vector<SelectionModel> expected; |
869 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); | 871 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); |
870 expected.push_back(SelectionModel(1, CURSOR_BACKWARD)); | 872 expected.push_back(SelectionModel(1, CURSOR_BACKWARD)); |
871 expected.push_back(SelectionModel(2, CURSOR_BACKWARD)); | 873 expected.push_back(SelectionModel(2, CURSOR_BACKWARD)); |
872 expected.push_back(SelectionModel(3, CURSOR_BACKWARD)); | 874 expected.push_back(SelectionModel(3, CURSOR_BACKWARD)); |
873 expected.push_back(SelectionModel(3, CURSOR_FORWARD)); | 875 expected.push_back(SelectionModel(3, CURSOR_FORWARD)); |
874 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_RIGHT); | 876 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_RIGHT); |
875 | 877 |
876 expected.clear(); | 878 expected.clear(); |
877 expected.push_back(SelectionModel(3, CURSOR_FORWARD)); | 879 expected.push_back(SelectionModel(3, CURSOR_FORWARD)); |
878 expected.push_back(SelectionModel(2, CURSOR_FORWARD)); | 880 expected.push_back(SelectionModel(2, CURSOR_FORWARD)); |
879 expected.push_back(SelectionModel(1, CURSOR_FORWARD)); | 881 expected.push_back(SelectionModel(1, CURSOR_FORWARD)); |
880 expected.push_back(SelectionModel(0, CURSOR_FORWARD)); | 882 expected.push_back(SelectionModel(0, CURSOR_FORWARD)); |
881 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); | 883 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); |
882 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_LEFT); | 884 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_LEFT); |
883 } | 885 } |
884 | 886 |
885 TEST_F(RenderTextTest, MoveCursorLeftRightInLtrRtl) { | 887 TEST_F(RenderTextTest, MoveCursorLeftRightInLtrRtl) { |
886 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 888 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
887 // LTR-RTL | 889 // LTR-RTL |
888 render_text->SetText(WideToUTF16(L"abc\x05d0\x05d1\x05d2")); | 890 render_text->SetText(WideToUTF16(L"abc\x05d0\x05d1\x05d2")); |
889 // The last one is the expected END position. | 891 // The last one is the expected END position. |
890 std::vector<SelectionModel> expected; | 892 std::vector<SelectionModel> expected; |
891 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); | 893 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); |
892 expected.push_back(SelectionModel(1, CURSOR_BACKWARD)); | 894 expected.push_back(SelectionModel(1, CURSOR_BACKWARD)); |
893 expected.push_back(SelectionModel(2, CURSOR_BACKWARD)); | 895 expected.push_back(SelectionModel(2, CURSOR_BACKWARD)); |
894 expected.push_back(SelectionModel(3, CURSOR_BACKWARD)); | 896 expected.push_back(SelectionModel(3, CURSOR_BACKWARD)); |
895 expected.push_back(SelectionModel(5, CURSOR_FORWARD)); | 897 expected.push_back(SelectionModel(5, CURSOR_FORWARD)); |
896 expected.push_back(SelectionModel(4, CURSOR_FORWARD)); | 898 expected.push_back(SelectionModel(4, CURSOR_FORWARD)); |
897 expected.push_back(SelectionModel(3, CURSOR_FORWARD)); | 899 expected.push_back(SelectionModel(3, CURSOR_FORWARD)); |
898 expected.push_back(SelectionModel(6, CURSOR_FORWARD)); | 900 expected.push_back(SelectionModel(6, CURSOR_FORWARD)); |
899 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_RIGHT); | 901 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_RIGHT); |
900 | 902 |
901 expected.clear(); | 903 expected.clear(); |
902 expected.push_back(SelectionModel(6, CURSOR_FORWARD)); | 904 expected.push_back(SelectionModel(6, CURSOR_FORWARD)); |
903 expected.push_back(SelectionModel(4, CURSOR_BACKWARD)); | 905 expected.push_back(SelectionModel(4, CURSOR_BACKWARD)); |
904 expected.push_back(SelectionModel(5, CURSOR_BACKWARD)); | 906 expected.push_back(SelectionModel(5, CURSOR_BACKWARD)); |
905 expected.push_back(SelectionModel(6, CURSOR_BACKWARD)); | 907 expected.push_back(SelectionModel(6, CURSOR_BACKWARD)); |
906 expected.push_back(SelectionModel(2, CURSOR_FORWARD)); | 908 expected.push_back(SelectionModel(2, CURSOR_FORWARD)); |
907 expected.push_back(SelectionModel(1, CURSOR_FORWARD)); | 909 expected.push_back(SelectionModel(1, CURSOR_FORWARD)); |
908 expected.push_back(SelectionModel(0, CURSOR_FORWARD)); | 910 expected.push_back(SelectionModel(0, CURSOR_FORWARD)); |
909 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); | 911 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); |
910 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_LEFT); | 912 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_LEFT); |
911 } | 913 } |
912 | 914 |
913 TEST_F(RenderTextTest, MoveCursorLeftRightInLtrRtlLtr) { | 915 TEST_F(RenderTextTest, MoveCursorLeftRightInLtrRtlLtr) { |
914 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 916 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
915 // LTR-RTL-LTR. | 917 // LTR-RTL-LTR. |
916 render_text->SetText(WideToUTF16(L"a" L"\x05d1" L"b")); | 918 render_text->SetText(WideToUTF16(L"a" L"\x05d1" L"b")); |
917 std::vector<SelectionModel> expected; | 919 std::vector<SelectionModel> expected; |
918 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); | 920 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); |
919 expected.push_back(SelectionModel(1, CURSOR_BACKWARD)); | 921 expected.push_back(SelectionModel(1, CURSOR_BACKWARD)); |
920 expected.push_back(SelectionModel(1, CURSOR_FORWARD)); | 922 expected.push_back(SelectionModel(1, CURSOR_FORWARD)); |
921 expected.push_back(SelectionModel(3, CURSOR_BACKWARD)); | 923 expected.push_back(SelectionModel(3, CURSOR_BACKWARD)); |
922 expected.push_back(SelectionModel(3, CURSOR_FORWARD)); | 924 expected.push_back(SelectionModel(3, CURSOR_FORWARD)); |
923 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_RIGHT); | 925 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_RIGHT); |
924 | 926 |
925 expected.clear(); | 927 expected.clear(); |
926 expected.push_back(SelectionModel(3, CURSOR_FORWARD)); | 928 expected.push_back(SelectionModel(3, CURSOR_FORWARD)); |
927 expected.push_back(SelectionModel(2, CURSOR_FORWARD)); | 929 expected.push_back(SelectionModel(2, CURSOR_FORWARD)); |
928 expected.push_back(SelectionModel(2, CURSOR_BACKWARD)); | 930 expected.push_back(SelectionModel(2, CURSOR_BACKWARD)); |
929 expected.push_back(SelectionModel(0, CURSOR_FORWARD)); | 931 expected.push_back(SelectionModel(0, CURSOR_FORWARD)); |
930 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); | 932 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); |
931 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_LEFT); | 933 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_LEFT); |
932 } | 934 } |
933 | 935 |
934 TEST_F(RenderTextTest, MoveCursorLeftRightInRtl) { | 936 TEST_F(RenderTextTest, MoveCursorLeftRightInRtl) { |
935 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 937 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
936 // Pure RTL. | 938 // Pure RTL. |
937 render_text->SetText(WideToUTF16(L"\x05d0\x05d1\x05d2")); | 939 render_text->SetText(WideToUTF16(L"\x05d0\x05d1\x05d2")); |
938 render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, false); | 940 render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, false); |
939 std::vector<SelectionModel> expected; | 941 std::vector<SelectionModel> expected; |
940 | 942 |
941 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); | 943 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); |
942 expected.push_back(SelectionModel(1, CURSOR_BACKWARD)); | 944 expected.push_back(SelectionModel(1, CURSOR_BACKWARD)); |
943 expected.push_back(SelectionModel(2, CURSOR_BACKWARD)); | 945 expected.push_back(SelectionModel(2, CURSOR_BACKWARD)); |
944 expected.push_back(SelectionModel(3, CURSOR_BACKWARD)); | 946 expected.push_back(SelectionModel(3, CURSOR_BACKWARD)); |
945 expected.push_back(SelectionModel(3, CURSOR_FORWARD)); | 947 expected.push_back(SelectionModel(3, CURSOR_FORWARD)); |
946 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_LEFT); | 948 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_LEFT); |
947 | 949 |
948 expected.clear(); | 950 expected.clear(); |
949 | 951 |
950 expected.push_back(SelectionModel(3, CURSOR_FORWARD)); | 952 expected.push_back(SelectionModel(3, CURSOR_FORWARD)); |
951 expected.push_back(SelectionModel(2, CURSOR_FORWARD)); | 953 expected.push_back(SelectionModel(2, CURSOR_FORWARD)); |
952 expected.push_back(SelectionModel(1, CURSOR_FORWARD)); | 954 expected.push_back(SelectionModel(1, CURSOR_FORWARD)); |
953 expected.push_back(SelectionModel(0, CURSOR_FORWARD)); | 955 expected.push_back(SelectionModel(0, CURSOR_FORWARD)); |
954 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); | 956 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); |
955 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_RIGHT); | 957 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_RIGHT); |
956 } | 958 } |
957 | 959 |
958 TEST_F(RenderTextTest, MoveCursorLeftRightInRtlLtr) { | 960 TEST_F(RenderTextTest, MoveCursorLeftRightInRtlLtr) { |
959 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 961 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
960 // RTL-LTR | 962 // RTL-LTR |
961 render_text->SetText(WideToUTF16(L"\x05d0\x05d1\x05d2" L"abc")); | 963 render_text->SetText(WideToUTF16(L"\x05d0\x05d1\x05d2" L"abc")); |
962 render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, false); | 964 render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, false); |
963 std::vector<SelectionModel> expected; | 965 std::vector<SelectionModel> expected; |
964 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); | 966 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); |
965 expected.push_back(SelectionModel(1, CURSOR_BACKWARD)); | 967 expected.push_back(SelectionModel(1, CURSOR_BACKWARD)); |
966 expected.push_back(SelectionModel(2, CURSOR_BACKWARD)); | 968 expected.push_back(SelectionModel(2, CURSOR_BACKWARD)); |
967 expected.push_back(SelectionModel(3, CURSOR_BACKWARD)); | 969 expected.push_back(SelectionModel(3, CURSOR_BACKWARD)); |
968 expected.push_back(SelectionModel(5, CURSOR_FORWARD)); | 970 expected.push_back(SelectionModel(5, CURSOR_FORWARD)); |
969 expected.push_back(SelectionModel(4, CURSOR_FORWARD)); | 971 expected.push_back(SelectionModel(4, CURSOR_FORWARD)); |
970 expected.push_back(SelectionModel(3, CURSOR_FORWARD)); | 972 expected.push_back(SelectionModel(3, CURSOR_FORWARD)); |
971 expected.push_back(SelectionModel(6, CURSOR_FORWARD)); | 973 expected.push_back(SelectionModel(6, CURSOR_FORWARD)); |
972 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_LEFT); | 974 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_LEFT); |
973 | 975 |
974 expected.clear(); | 976 expected.clear(); |
975 expected.push_back(SelectionModel(6, CURSOR_FORWARD)); | 977 expected.push_back(SelectionModel(6, CURSOR_FORWARD)); |
976 expected.push_back(SelectionModel(4, CURSOR_BACKWARD)); | 978 expected.push_back(SelectionModel(4, CURSOR_BACKWARD)); |
977 expected.push_back(SelectionModel(5, CURSOR_BACKWARD)); | 979 expected.push_back(SelectionModel(5, CURSOR_BACKWARD)); |
978 expected.push_back(SelectionModel(6, CURSOR_BACKWARD)); | 980 expected.push_back(SelectionModel(6, CURSOR_BACKWARD)); |
979 expected.push_back(SelectionModel(2, CURSOR_FORWARD)); | 981 expected.push_back(SelectionModel(2, CURSOR_FORWARD)); |
980 expected.push_back(SelectionModel(1, CURSOR_FORWARD)); | 982 expected.push_back(SelectionModel(1, CURSOR_FORWARD)); |
981 expected.push_back(SelectionModel(0, CURSOR_FORWARD)); | 983 expected.push_back(SelectionModel(0, CURSOR_FORWARD)); |
982 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); | 984 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); |
983 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_RIGHT); | 985 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_RIGHT); |
984 } | 986 } |
985 | 987 |
986 TEST_F(RenderTextTest, MoveCursorLeftRightInRtlLtrRtl) { | 988 TEST_F(RenderTextTest, MoveCursorLeftRightInRtlLtrRtl) { |
987 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 989 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
988 // RTL-LTR-RTL. | 990 // RTL-LTR-RTL. |
989 render_text->SetText(WideToUTF16(L"\x05d0" L"a" L"\x05d1")); | 991 render_text->SetText(WideToUTF16(L"\x05d0" L"a" L"\x05d1")); |
990 render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, false); | 992 render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, false); |
991 std::vector<SelectionModel> expected; | 993 std::vector<SelectionModel> expected; |
992 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); | 994 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); |
993 expected.push_back(SelectionModel(1, CURSOR_BACKWARD)); | 995 expected.push_back(SelectionModel(1, CURSOR_BACKWARD)); |
994 expected.push_back(SelectionModel(1, CURSOR_FORWARD)); | 996 expected.push_back(SelectionModel(1, CURSOR_FORWARD)); |
995 expected.push_back(SelectionModel(3, CURSOR_BACKWARD)); | 997 expected.push_back(SelectionModel(3, CURSOR_BACKWARD)); |
996 expected.push_back(SelectionModel(3, CURSOR_FORWARD)); | 998 expected.push_back(SelectionModel(3, CURSOR_FORWARD)); |
997 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_LEFT); | 999 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_LEFT); |
998 | 1000 |
999 expected.clear(); | 1001 expected.clear(); |
1000 expected.push_back(SelectionModel(3, CURSOR_FORWARD)); | 1002 expected.push_back(SelectionModel(3, CURSOR_FORWARD)); |
1001 expected.push_back(SelectionModel(2, CURSOR_FORWARD)); | 1003 expected.push_back(SelectionModel(2, CURSOR_FORWARD)); |
1002 expected.push_back(SelectionModel(2, CURSOR_BACKWARD)); | 1004 expected.push_back(SelectionModel(2, CURSOR_BACKWARD)); |
1003 expected.push_back(SelectionModel(0, CURSOR_FORWARD)); | 1005 expected.push_back(SelectionModel(0, CURSOR_FORWARD)); |
1004 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); | 1006 expected.push_back(SelectionModel(0, CURSOR_BACKWARD)); |
1005 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_RIGHT); | 1007 RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_RIGHT); |
1006 } | 1008 } |
1007 | 1009 |
1008 TEST_F(RenderTextTest, MoveCursorLeftRight_ComplexScript) { | 1010 TEST_F(RenderTextTest, MoveCursorLeftRight_ComplexScript) { |
1009 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1011 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1010 | 1012 |
1011 render_text->SetText(WideToUTF16(L"\x0915\x093f\x0915\x094d\x0915")); | 1013 render_text->SetText(WideToUTF16(L"\x0915\x093f\x0915\x094d\x0915")); |
1012 EXPECT_EQ(0U, render_text->cursor_position()); | 1014 EXPECT_EQ(0U, render_text->cursor_position()); |
1013 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false); | 1015 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false); |
1014 EXPECT_EQ(2U, render_text->cursor_position()); | 1016 EXPECT_EQ(2U, render_text->cursor_position()); |
1015 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false); | 1017 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false); |
1016 EXPECT_EQ(4U, render_text->cursor_position()); | 1018 EXPECT_EQ(4U, render_text->cursor_position()); |
1017 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false); | 1019 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false); |
1018 EXPECT_EQ(5U, render_text->cursor_position()); | 1020 EXPECT_EQ(5U, render_text->cursor_position()); |
1019 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false); | 1021 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false); |
1020 EXPECT_EQ(5U, render_text->cursor_position()); | 1022 EXPECT_EQ(5U, render_text->cursor_position()); |
1021 | 1023 |
1022 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); | 1024 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); |
1023 EXPECT_EQ(4U, render_text->cursor_position()); | 1025 EXPECT_EQ(4U, render_text->cursor_position()); |
1024 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); | 1026 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); |
1025 EXPECT_EQ(2U, render_text->cursor_position()); | 1027 EXPECT_EQ(2U, render_text->cursor_position()); |
1026 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); | 1028 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); |
1027 EXPECT_EQ(0U, render_text->cursor_position()); | 1029 EXPECT_EQ(0U, render_text->cursor_position()); |
1028 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); | 1030 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); |
1029 EXPECT_EQ(0U, render_text->cursor_position()); | 1031 EXPECT_EQ(0U, render_text->cursor_position()); |
1030 } | 1032 } |
1031 | 1033 |
1032 TEST_F(RenderTextTest, MoveCursorLeftRight_MeiryoUILigatures) { | 1034 TEST_F(RenderTextTest, MoveCursorLeftRight_MeiryoUILigatures) { |
1033 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1035 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1034 // Meiryo UI uses single-glyph ligatures for 'ff' and 'ffi', but each letter | 1036 // Meiryo UI uses single-glyph ligatures for 'ff' and 'ffi', but each letter |
1035 // (code point) has unique bounds, so mid-glyph cursoring should be possible. | 1037 // (code point) has unique bounds, so mid-glyph cursoring should be possible. |
1036 render_text->SetFontList(FontList("Meiryo UI, 12px")); | 1038 render_text->SetFontList(FontList("Meiryo UI, 12px")); |
1037 render_text->SetText(WideToUTF16(L"ff ffi")); | 1039 render_text->SetText(WideToUTF16(L"ff ffi")); |
1038 EXPECT_EQ(0U, render_text->cursor_position()); | 1040 EXPECT_EQ(0U, render_text->cursor_position()); |
1039 for (size_t i = 0; i < render_text->text().length(); ++i) { | 1041 for (size_t i = 0; i < render_text->text().length(); ++i) { |
1040 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false); | 1042 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false); |
1041 EXPECT_EQ(i + 1, render_text->cursor_position()); | 1043 EXPECT_EQ(i + 1, render_text->cursor_position()); |
1042 } | 1044 } |
1043 EXPECT_EQ(6U, render_text->cursor_position()); | 1045 EXPECT_EQ(6U, render_text->cursor_position()); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1096 { kText3, 7, 6, 6 }, | 1098 { kText3, 7, 6, 6 }, |
1097 { kText3, 50, 6, 6 }, | 1099 { kText3, 50, 6, 6 }, |
1098 }; | 1100 }; |
1099 | 1101 |
1100 #if defined(OS_WIN) | 1102 #if defined(OS_WIN) |
1101 // TODO(msw): XP fails due to lack of font support: http://crbug.com/106450 | 1103 // TODO(msw): XP fails due to lack of font support: http://crbug.com/106450 |
1102 if (base::win::GetVersion() < base::win::VERSION_VISTA) | 1104 if (base::win::GetVersion() < base::win::VERSION_VISTA) |
1103 return; | 1105 return; |
1104 #endif | 1106 #endif |
1105 | 1107 |
1106 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1108 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1107 for (size_t i = 0; i < arraysize(cases); i++) { | 1109 for (size_t i = 0; i < arraysize(cases); i++) { |
1108 SCOPED_TRACE(base::StringPrintf("Testing cases[%" PRIuS "]", i)); | 1110 SCOPED_TRACE(base::StringPrintf("Testing cases[%" PRIuS "]", i)); |
1109 render_text->SetText(cases[i].text); | 1111 render_text->SetText(cases[i].text); |
1110 | 1112 |
1111 size_t next = render_text->IndexOfAdjacentGrapheme(cases[i].index, | 1113 size_t next = render_text->IndexOfAdjacentGrapheme(cases[i].index, |
1112 CURSOR_FORWARD); | 1114 CURSOR_FORWARD); |
1113 EXPECT_EQ(cases[i].expected_next, next); | 1115 EXPECT_EQ(cases[i].expected_next, next); |
1114 EXPECT_TRUE(render_text->IsValidCursorIndex(next)); | 1116 EXPECT_TRUE(render_text->IsValidCursorIndex(next)); |
1115 | 1117 |
1116 size_t previous = render_text->IndexOfAdjacentGrapheme(cases[i].index, | 1118 size_t previous = render_text->IndexOfAdjacentGrapheme(cases[i].index, |
1117 CURSOR_BACKWARD); | 1119 CURSOR_BACKWARD); |
1118 EXPECT_EQ(cases[i].expected_previous, previous); | 1120 EXPECT_EQ(cases[i].expected_previous, previous); |
1119 EXPECT_TRUE(render_text->IsValidCursorIndex(previous)); | 1121 EXPECT_TRUE(render_text->IsValidCursorIndex(previous)); |
1120 } | 1122 } |
1121 } | 1123 } |
1122 | 1124 |
1123 TEST_F(RenderTextTest, MidGraphemeSelectionBounds) { | 1125 TEST_F(RenderTextTest, MidGraphemeSelectionBounds) { |
1124 #if defined(OS_WIN) | 1126 #if defined(OS_WIN) |
1125 // TODO(msw): XP fails due to lack of font support: http://crbug.com/106450 | 1127 // TODO(msw): XP fails due to lack of font support: http://crbug.com/106450 |
1126 if (base::win::GetVersion() < base::win::VERSION_VISTA) | 1128 if (base::win::GetVersion() < base::win::VERSION_VISTA) |
1127 return; | 1129 return; |
1128 #endif | 1130 #endif |
1129 | 1131 |
1130 // Test that selection bounds may be set amid multi-character graphemes. | 1132 // Test that selection bounds may be set amid multi-character graphemes. |
1131 const base::string16 kHindi = WideToUTF16(L"\x0915\x093f"); | 1133 const base::string16 kHindi = WideToUTF16(L"\x0915\x093f"); |
1132 const base::string16 kThai = WideToUTF16(L"\x0e08\x0e33"); | 1134 const base::string16 kThai = WideToUTF16(L"\x0e08\x0e33"); |
1133 const base::string16 cases[] = { kHindi, kThai }; | 1135 const base::string16 cases[] = { kHindi, kThai }; |
1134 | 1136 |
1135 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1137 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1136 for (size_t i = 0; i < arraysize(cases); i++) { | 1138 for (size_t i = 0; i < arraysize(cases); i++) { |
1137 SCOPED_TRACE(base::StringPrintf("Testing cases[%" PRIuS "]", i)); | 1139 SCOPED_TRACE(base::StringPrintf("Testing cases[%" PRIuS "]", i)); |
1138 render_text->SetText(cases[i]); | 1140 render_text->SetText(cases[i]); |
1139 EXPECT_TRUE(render_text->IsValidLogicalIndex(1)); | 1141 EXPECT_TRUE(render_text->IsValidLogicalIndex(1)); |
1140 EXPECT_FALSE(render_text->IsValidCursorIndex(1)); | 1142 EXPECT_FALSE(render_text->IsValidCursorIndex(1)); |
1141 EXPECT_TRUE(render_text->SelectRange(Range(2, 1))); | 1143 EXPECT_TRUE(render_text->SelectRange(Range(2, 1))); |
1142 EXPECT_EQ(Range(2, 1), render_text->selection()); | 1144 EXPECT_EQ(Range(2, 1), render_text->selection()); |
1143 EXPECT_EQ(1U, render_text->cursor_position()); | 1145 EXPECT_EQ(1U, render_text->cursor_position()); |
1144 // Although selection bounds may be set within a multi-character grapheme, | 1146 // Although selection bounds may be set within a multi-character grapheme, |
1145 // cursor movement (e.g. via arrow key) should avoid those indices. | 1147 // cursor movement (e.g. via arrow key) should avoid those indices. |
1146 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); | 1148 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); |
1147 EXPECT_EQ(0U, render_text->cursor_position()); | 1149 EXPECT_EQ(0U, render_text->cursor_position()); |
1148 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false); | 1150 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false); |
1149 EXPECT_EQ(2U, render_text->cursor_position()); | 1151 EXPECT_EQ(2U, render_text->cursor_position()); |
1150 } | 1152 } |
1151 } | 1153 } |
1152 | 1154 |
1153 TEST_F(RenderTextTest, FindCursorPosition) { | 1155 TEST_F(RenderTextTest, FindCursorPosition) { |
1154 const wchar_t* kTestStrings[] = { kLtrRtl, kLtrRtlLtr, kRtlLtr, kRtlLtrRtl }; | 1156 const wchar_t* kTestStrings[] = { kLtrRtl, kLtrRtlLtr, kRtlLtr, kRtlLtrRtl }; |
1155 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1157 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1156 render_text->SetDisplayRect(Rect(0, 0, 100, 20)); | 1158 render_text->SetDisplayRect(Rect(0, 0, 100, 20)); |
1157 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { | 1159 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { |
1158 SCOPED_TRACE(base::StringPrintf("Testing case[%" PRIuS "]", i)); | 1160 SCOPED_TRACE(base::StringPrintf("Testing case[%" PRIuS "]", i)); |
1159 render_text->SetText(WideToUTF16(kTestStrings[i])); | 1161 render_text->SetText(WideToUTF16(kTestStrings[i])); |
1160 for(size_t j = 0; j < render_text->text().length(); ++j) { | 1162 for(size_t j = 0; j < render_text->text().length(); ++j) { |
1161 const Range range(render_text->GetGlyphBounds(j)); | 1163 const Range range(render_text->GetGlyphBounds(j)); |
1162 // Test a point just inside the leading edge of the glyph bounds. | 1164 // Test a point just inside the leading edge of the glyph bounds. |
1163 int x = range.is_reversed() ? range.GetMax() - 1 : range.GetMin() + 1; | 1165 int x = range.is_reversed() ? range.GetMax() - 1 : range.GetMin() + 1; |
1164 EXPECT_EQ(j, render_text->FindCursorPosition(Point(x, 0)).caret_pos()); | 1166 EXPECT_EQ(j, render_text->FindCursorPosition(Point(x, 0)).caret_pos()); |
1165 } | 1167 } |
(...skipping 26 matching lines...) Expand all Loading... |
1192 { kRTLGrapheme, base::i18n::RIGHT_TO_LEFT }, | 1194 { kRTLGrapheme, base::i18n::RIGHT_TO_LEFT }, |
1193 { kHebrewLatin, base::i18n::RIGHT_TO_LEFT }, | 1195 { kHebrewLatin, base::i18n::RIGHT_TO_LEFT }, |
1194 }; | 1196 }; |
1195 | 1197 |
1196 #if defined(OS_WIN) | 1198 #if defined(OS_WIN) |
1197 // TODO(msw): XP fails due to lack of font support: http://crbug.com/106450 | 1199 // TODO(msw): XP fails due to lack of font support: http://crbug.com/106450 |
1198 if (base::win::GetVersion() < base::win::VERSION_VISTA) | 1200 if (base::win::GetVersion() < base::win::VERSION_VISTA) |
1199 return; | 1201 return; |
1200 #endif | 1202 #endif |
1201 | 1203 |
1202 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1204 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1203 for (size_t i = 0; i < arraysize(cases); i++) { | 1205 for (size_t i = 0; i < arraysize(cases); i++) { |
1204 render_text->SetText(cases[i].text); | 1206 render_text->SetText(cases[i].text); |
1205 bool ltr = (cases[i].expected_text_direction == base::i18n::LEFT_TO_RIGHT); | 1207 bool ltr = (cases[i].expected_text_direction == base::i18n::LEFT_TO_RIGHT); |
1206 | 1208 |
1207 SelectionModel start_edge = | 1209 SelectionModel start_edge = |
1208 render_text->EdgeSelectionModel(ltr ? CURSOR_LEFT : CURSOR_RIGHT); | 1210 render_text->EdgeSelectionModel(ltr ? CURSOR_LEFT : CURSOR_RIGHT); |
1209 EXPECT_EQ(start_edge, SelectionModel(0, CURSOR_BACKWARD)); | 1211 EXPECT_EQ(start_edge, SelectionModel(0, CURSOR_BACKWARD)); |
1210 | 1212 |
1211 SelectionModel end_edge = | 1213 SelectionModel end_edge = |
1212 render_text->EdgeSelectionModel(ltr ? CURSOR_RIGHT : CURSOR_LEFT); | 1214 render_text->EdgeSelectionModel(ltr ? CURSOR_RIGHT : CURSOR_LEFT); |
1213 EXPECT_EQ(end_edge, SelectionModel(cases[i].text.length(), CURSOR_FORWARD)); | 1215 EXPECT_EQ(end_edge, SelectionModel(cases[i].text.length(), CURSOR_FORWARD)); |
1214 } | 1216 } |
1215 } | 1217 } |
1216 | 1218 |
1217 TEST_F(RenderTextTest, SelectAll) { | 1219 TEST_F(RenderTextTest, SelectAll) { |
1218 const wchar_t* const cases[] = | 1220 const wchar_t* const cases[] = |
1219 { kWeak, kLtr, kLtrRtl, kLtrRtlLtr, kRtl, kRtlLtr, kRtlLtrRtl }; | 1221 { kWeak, kLtr, kLtrRtl, kLtrRtlLtr, kRtl, kRtlLtr, kRtlLtrRtl }; |
1220 | 1222 |
1221 // Ensure that SelectAll respects the |reversed| argument regardless of | 1223 // Ensure that SelectAll respects the |reversed| argument regardless of |
1222 // application locale and text content directionality. | 1224 // application locale and text content directionality. |
1223 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1225 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1224 const SelectionModel expected_reversed(Range(3, 0), CURSOR_FORWARD); | 1226 const SelectionModel expected_reversed(Range(3, 0), CURSOR_FORWARD); |
1225 const SelectionModel expected_forwards(Range(0, 3), CURSOR_BACKWARD); | 1227 const SelectionModel expected_forwards(Range(0, 3), CURSOR_BACKWARD); |
1226 const bool was_rtl = base::i18n::IsRTL(); | 1228 const bool was_rtl = base::i18n::IsRTL(); |
1227 | 1229 |
1228 for (size_t i = 0; i < 2; ++i) { | 1230 for (size_t i = 0; i < 2; ++i) { |
1229 SetRTL(!base::i18n::IsRTL()); | 1231 SetRTL(!base::i18n::IsRTL()); |
1230 // Test that an empty string produces an empty selection model. | 1232 // Test that an empty string produces an empty selection model. |
1231 render_text->SetText(base::string16()); | 1233 render_text->SetText(base::string16()); |
1232 EXPECT_EQ(render_text->selection_model(), SelectionModel()); | 1234 EXPECT_EQ(render_text->selection_model(), SelectionModel()); |
1233 | 1235 |
1234 // Test the weak, LTR, RTL, and Bidi string cases. | 1236 // Test the weak, LTR, RTL, and Bidi string cases. |
1235 for (size_t j = 0; j < arraysize(cases); j++) { | 1237 for (size_t j = 0; j < arraysize(cases); j++) { |
1236 render_text->SetText(WideToUTF16(cases[j])); | 1238 render_text->SetText(WideToUTF16(cases[j])); |
1237 render_text->SelectAll(false); | 1239 render_text->SelectAll(false); |
1238 EXPECT_EQ(render_text->selection_model(), expected_forwards); | 1240 EXPECT_EQ(render_text->selection_model(), expected_forwards); |
1239 render_text->SelectAll(true); | 1241 render_text->SelectAll(true); |
1240 EXPECT_EQ(render_text->selection_model(), expected_reversed); | 1242 EXPECT_EQ(render_text->selection_model(), expected_reversed); |
1241 } | 1243 } |
1242 } | 1244 } |
1243 | 1245 |
1244 EXPECT_EQ(was_rtl, base::i18n::IsRTL()); | 1246 EXPECT_EQ(was_rtl, base::i18n::IsRTL()); |
1245 } | 1247 } |
1246 | 1248 |
1247 // TODO(asvitkine): RenderTextMac cursor movements. http://crbug.com/131618 | 1249 // TODO(asvitkine): RenderTextMac cursor movements. http://crbug.com/131618 |
1248 #if !defined(OS_MACOSX) | 1250 #if !defined(OS_MACOSX) |
1249 TEST_F(RenderTextTest, MoveCursorLeftRightWithSelection) { | 1251 TEST_F(RenderTextTest, MoveCursorLeftRightWithSelection) { |
1250 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1252 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1251 render_text->SetText(WideToUTF16(L"abc\x05d0\x05d1\x05d2")); | 1253 render_text->SetText(WideToUTF16(L"abc\x05d0\x05d1\x05d2")); |
1252 // Left arrow on select ranging (6, 4). | 1254 // Left arrow on select ranging (6, 4). |
1253 render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, false); | 1255 render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, false); |
1254 EXPECT_EQ(Range(6), render_text->selection()); | 1256 EXPECT_EQ(Range(6), render_text->selection()); |
1255 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); | 1257 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); |
1256 EXPECT_EQ(Range(4), render_text->selection()); | 1258 EXPECT_EQ(Range(4), render_text->selection()); |
1257 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); | 1259 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); |
1258 EXPECT_EQ(Range(5), render_text->selection()); | 1260 EXPECT_EQ(Range(5), render_text->selection()); |
1259 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); | 1261 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); |
1260 EXPECT_EQ(Range(6), render_text->selection()); | 1262 EXPECT_EQ(Range(6), render_text->selection()); |
(...skipping 20 matching lines...) Expand all Loading... |
1281 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, true); | 1283 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, true); |
1282 EXPECT_EQ(Range(4, 5), render_text->selection()); | 1284 EXPECT_EQ(Range(4, 5), render_text->selection()); |
1283 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, true); | 1285 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, true); |
1284 EXPECT_EQ(Range(4, 6), render_text->selection()); | 1286 EXPECT_EQ(Range(4, 6), render_text->selection()); |
1285 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false); | 1287 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false); |
1286 EXPECT_EQ(Range(4), render_text->selection()); | 1288 EXPECT_EQ(Range(4), render_text->selection()); |
1287 } | 1289 } |
1288 #endif // !defined(OS_MACOSX) | 1290 #endif // !defined(OS_MACOSX) |
1289 | 1291 |
1290 TEST_F(RenderTextTest, CenteredDisplayOffset) { | 1292 TEST_F(RenderTextTest, CenteredDisplayOffset) { |
1291 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1293 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1292 render_text->SetText(ASCIIToUTF16("abcdefghij")); | 1294 render_text->SetText(ASCIIToUTF16("abcdefghij")); |
1293 render_text->SetHorizontalAlignment(ALIGN_CENTER); | 1295 render_text->SetHorizontalAlignment(ALIGN_CENTER); |
1294 | 1296 |
1295 const int kEnlargement = 10; | 1297 const int kEnlargement = 10; |
1296 const int content_width = render_text->GetContentWidth(); | 1298 const int content_width = render_text->GetContentWidth(); |
1297 Rect display_rect(0, 0, content_width / 2, | 1299 Rect display_rect(0, 0, content_width / 2, |
1298 render_text->font_list().GetHeight()); | 1300 render_text->font_list().GetHeight()); |
1299 render_text->SetDisplayRect(display_rect); | 1301 render_text->SetDisplayRect(display_rect); |
1300 | 1302 |
1301 // Move the cursor to the beginning of the text and, by checking the cursor | 1303 // Move the cursor to the beginning of the text and, by checking the cursor |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1386 EXPECT_EQ(end, render_text->selection_model()); | 1388 EXPECT_EQ(end, render_text->selection_model()); |
1387 } | 1389 } |
1388 } | 1390 } |
1389 } | 1391 } |
1390 | 1392 |
1391 // TODO(asvitkine): RenderTextMac cursor movements. http://crbug.com/131618 | 1393 // TODO(asvitkine): RenderTextMac cursor movements. http://crbug.com/131618 |
1392 #if !defined(OS_MACOSX) | 1394 #if !defined(OS_MACOSX) |
1393 // TODO(msw): Make these work on Windows. | 1395 // TODO(msw): Make these work on Windows. |
1394 #if !defined(OS_WIN) | 1396 #if !defined(OS_WIN) |
1395 TEST_F(RenderTextTest, MoveLeftRightByWordInBidiText) { | 1397 TEST_F(RenderTextTest, MoveLeftRightByWordInBidiText) { |
1396 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1398 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1397 | 1399 |
1398 // For testing simplicity, each word is a 3-character word. | 1400 // For testing simplicity, each word is a 3-character word. |
1399 std::vector<const wchar_t*> test; | 1401 std::vector<const wchar_t*> test; |
1400 test.push_back(L"abc"); | 1402 test.push_back(L"abc"); |
1401 test.push_back(L"abc def"); | 1403 test.push_back(L"abc def"); |
1402 test.push_back(L"\x05E1\x05E2\x05E3"); | 1404 test.push_back(L"\x05E1\x05E2\x05E3"); |
1403 test.push_back(L"\x05E1\x05E2\x05E3 \x05E4\x05E5\x05E6"); | 1405 test.push_back(L"\x05E1\x05E2\x05E3 \x05E4\x05E5\x05E6"); |
1404 test.push_back(L"abc \x05E1\x05E2\x05E3"); | 1406 test.push_back(L"abc \x05E1\x05E2\x05E3"); |
1405 test.push_back(L"abc def \x05E1\x05E2\x05E3 \x05E4\x05E5\x05E6"); | 1407 test.push_back(L"abc def \x05E1\x05E2\x05E3 \x05E4\x05E5\x05E6"); |
1406 test.push_back(L"abc def hij \x05E1\x05E2\x05E3 \x05E4\x05E5\x05E6" | 1408 test.push_back(L"abc def hij \x05E1\x05E2\x05E3 \x05E4\x05E5\x05E6" |
(...skipping 14 matching lines...) Expand all Loading... |
1421 L" \x05E1\x05E2\x05E3 \x05E4\x05E5\x05E6"); | 1423 L" \x05E1\x05E2\x05E3 \x05E4\x05E5\x05E6"); |
1422 test.push_back(L"\x05D1\x05D2\x05D3 \x05D4\x05D5\x05D6 \x05D7\x05D8\x05D9" | 1424 test.push_back(L"\x05D1\x05D2\x05D3 \x05D4\x05D5\x05D6 \x05D7\x05D8\x05D9" |
1423 L" abc def hij \x05E1\x05E2\x05E3 \x05E4\x05E5\x05E6" | 1425 L" abc def hij \x05E1\x05E2\x05E3 \x05E4\x05E5\x05E6" |
1424 L" \x05E7\x05E8\x05E9"); | 1426 L" \x05E7\x05E8\x05E9"); |
1425 | 1427 |
1426 for (size_t i = 0; i < test.size(); ++i) | 1428 for (size_t i = 0; i < test.size(); ++i) |
1427 MoveLeftRightByWordVerifier(render_text.get(), test[i]); | 1429 MoveLeftRightByWordVerifier(render_text.get(), test[i]); |
1428 } | 1430 } |
1429 | 1431 |
1430 TEST_F(RenderTextTest, MoveLeftRightByWordInBidiText_TestEndOfText) { | 1432 TEST_F(RenderTextTest, MoveLeftRightByWordInBidiText_TestEndOfText) { |
1431 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1433 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1432 | 1434 |
1433 render_text->SetText(WideToUTF16(L"ab\x05E1")); | 1435 render_text->SetText(WideToUTF16(L"ab\x05E1")); |
1434 // Moving the cursor by word from "abC|" to the left should return "|abC". | 1436 // Moving the cursor by word from "abC|" to the left should return "|abC". |
1435 // But since end of text is always treated as a word break, it returns | 1437 // But since end of text is always treated as a word break, it returns |
1436 // position "ab|C". | 1438 // position "ab|C". |
1437 // TODO(xji): Need to make it work as expected. | 1439 // TODO(xji): Need to make it work as expected. |
1438 render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, false); | 1440 render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, false); |
1439 render_text->MoveCursor(WORD_BREAK, CURSOR_LEFT, false); | 1441 render_text->MoveCursor(WORD_BREAK, CURSOR_LEFT, false); |
1440 // EXPECT_EQ(SelectionModel(), render_text->selection_model()); | 1442 // EXPECT_EQ(SelectionModel(), render_text->selection_model()); |
1441 | 1443 |
(...skipping 12 matching lines...) Expand all Loading... |
1454 // Moving the cursor by word from "|aCB" to the right should return "aCB|". | 1456 // Moving the cursor by word from "|aCB" to the right should return "aCB|". |
1455 // But since end of text is always treated as a word break, it returns | 1457 // But since end of text is always treated as a word break, it returns |
1456 // position "a|CB". | 1458 // position "a|CB". |
1457 // TODO(xji): Need to make it work as expected. | 1459 // TODO(xji): Need to make it work as expected. |
1458 render_text->MoveCursor(LINE_BREAK, CURSOR_LEFT, false); | 1460 render_text->MoveCursor(LINE_BREAK, CURSOR_LEFT, false); |
1459 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, false); | 1461 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, false); |
1460 // EXPECT_EQ(SelectionModel(), render_text->selection_model()); | 1462 // EXPECT_EQ(SelectionModel(), render_text->selection_model()); |
1461 } | 1463 } |
1462 | 1464 |
1463 TEST_F(RenderTextTest, MoveLeftRightByWordInTextWithMultiSpaces) { | 1465 TEST_F(RenderTextTest, MoveLeftRightByWordInTextWithMultiSpaces) { |
1464 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1466 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1465 render_text->SetText(WideToUTF16(L"abc def")); | 1467 render_text->SetText(WideToUTF16(L"abc def")); |
1466 render_text->MoveCursorTo(SelectionModel(5, CURSOR_FORWARD)); | 1468 render_text->MoveCursorTo(SelectionModel(5, CURSOR_FORWARD)); |
1467 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, false); | 1469 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, false); |
1468 EXPECT_EQ(11U, render_text->cursor_position()); | 1470 EXPECT_EQ(11U, render_text->cursor_position()); |
1469 | 1471 |
1470 render_text->MoveCursorTo(SelectionModel(5, CURSOR_FORWARD)); | 1472 render_text->MoveCursorTo(SelectionModel(5, CURSOR_FORWARD)); |
1471 render_text->MoveCursor(WORD_BREAK, CURSOR_LEFT, false); | 1473 render_text->MoveCursor(WORD_BREAK, CURSOR_LEFT, false); |
1472 EXPECT_EQ(0U, render_text->cursor_position()); | 1474 EXPECT_EQ(0U, render_text->cursor_position()); |
1473 } | 1475 } |
1474 #endif // !defined(OS_WIN) | 1476 #endif // !defined(OS_WIN) |
1475 | 1477 |
1476 TEST_F(RenderTextTest, MoveLeftRightByWordInChineseText) { | 1478 TEST_F(RenderTextTest, MoveLeftRightByWordInChineseText) { |
1477 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1479 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1478 render_text->SetText(WideToUTF16(L"\x6211\x4EEC\x53BB\x516C\x56ED\x73A9")); | 1480 render_text->SetText(WideToUTF16(L"\x6211\x4EEC\x53BB\x516C\x56ED\x73A9")); |
1479 render_text->MoveCursor(LINE_BREAK, CURSOR_LEFT, false); | 1481 render_text->MoveCursor(LINE_BREAK, CURSOR_LEFT, false); |
1480 EXPECT_EQ(0U, render_text->cursor_position()); | 1482 EXPECT_EQ(0U, render_text->cursor_position()); |
1481 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, false); | 1483 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, false); |
1482 EXPECT_EQ(2U, render_text->cursor_position()); | 1484 EXPECT_EQ(2U, render_text->cursor_position()); |
1483 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, false); | 1485 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, false); |
1484 EXPECT_EQ(3U, render_text->cursor_position()); | 1486 EXPECT_EQ(3U, render_text->cursor_position()); |
1485 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, false); | 1487 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, false); |
1486 EXPECT_EQ(5U, render_text->cursor_position()); | 1488 EXPECT_EQ(5U, render_text->cursor_position()); |
1487 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, false); | 1489 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, false); |
1488 EXPECT_EQ(6U, render_text->cursor_position()); | 1490 EXPECT_EQ(6U, render_text->cursor_position()); |
1489 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, false); | 1491 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, false); |
1490 EXPECT_EQ(6U, render_text->cursor_position()); | 1492 EXPECT_EQ(6U, render_text->cursor_position()); |
1491 } | 1493 } |
1492 #endif // !defined(OS_MACOSX) | 1494 #endif // !defined(OS_MACOSX) |
1493 | 1495 |
1494 TEST_F(RenderTextTest, StringSizeSanity) { | 1496 TEST_F(RenderTextTest, StringSizeSanity) { |
1495 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1497 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1496 render_text->SetText(UTF8ToUTF16("Hello World")); | 1498 render_text->SetText(UTF8ToUTF16("Hello World")); |
1497 const Size string_size = render_text->GetStringSize(); | 1499 const Size string_size = render_text->GetStringSize(); |
1498 EXPECT_GT(string_size.width(), 0); | 1500 EXPECT_GT(string_size.width(), 0); |
1499 EXPECT_GT(string_size.height(), 0); | 1501 EXPECT_GT(string_size.height(), 0); |
1500 } | 1502 } |
1501 | 1503 |
1502 TEST_F(RenderTextTest, StringSizeLongStrings) { | 1504 TEST_F(RenderTextTest, StringSizeLongStrings) { |
1503 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1505 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1504 Size previous_string_size; | 1506 Size previous_string_size; |
1505 for (size_t length = 10; length < 1000000; length *= 10) { | 1507 for (size_t length = 10; length < 1000000; length *= 10) { |
1506 render_text->SetText(base::string16(length, 'a')); | 1508 render_text->SetText(base::string16(length, 'a')); |
1507 const Size string_size = render_text->GetStringSize(); | 1509 const Size string_size = render_text->GetStringSize(); |
1508 EXPECT_GT(string_size.width(), previous_string_size.width()); | 1510 EXPECT_GT(string_size.width(), previous_string_size.width()); |
1509 EXPECT_GT(string_size.height(), 0); | 1511 EXPECT_GT(string_size.height(), 0); |
1510 previous_string_size = string_size; | 1512 previous_string_size = string_size; |
1511 } | 1513 } |
1512 } | 1514 } |
1513 | 1515 |
1514 // TODO(asvitkine): This test fails because PlatformFontMac uses point font | 1516 // TODO(asvitkine): This test fails because PlatformFontMac uses point font |
1515 // sizes instead of pixel sizes like other implementations. | 1517 // sizes instead of pixel sizes like other implementations. |
1516 #if !defined(OS_MACOSX) | 1518 #if !defined(OS_MACOSX) |
1517 TEST_F(RenderTextTest, StringSizeEmptyString) { | 1519 TEST_F(RenderTextTest, StringSizeEmptyString) { |
1518 // Ascent and descent of Arial and Symbol are different on most platforms. | 1520 // Ascent and descent of Arial and Symbol are different on most platforms. |
1519 const FontList font_list("Arial,Symbol, 16px"); | 1521 const FontList font_list("Arial,Symbol, 16px"); |
1520 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1522 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1521 render_text->SetFontList(font_list); | 1523 render_text->SetFontList(font_list); |
1522 render_text->SetDisplayRect(Rect(0, 0, 0, font_list.GetHeight())); | 1524 render_text->SetDisplayRect(Rect(0, 0, 0, font_list.GetHeight())); |
1523 | 1525 |
1524 // The empty string respects FontList metrics for non-zero height | 1526 // The empty string respects FontList metrics for non-zero height |
1525 // and baseline. | 1527 // and baseline. |
1526 render_text->SetText(base::string16()); | 1528 render_text->SetText(base::string16()); |
1527 EXPECT_EQ(font_list.GetHeight(), render_text->GetStringSize().height()); | 1529 EXPECT_EQ(font_list.GetHeight(), render_text->GetStringSize().height()); |
1528 EXPECT_EQ(0, render_text->GetStringSize().width()); | 1530 EXPECT_EQ(0, render_text->GetStringSize().width()); |
1529 EXPECT_EQ(font_list.GetBaseline(), render_text->GetBaseline()); | 1531 EXPECT_EQ(font_list.GetBaseline(), render_text->GetBaseline()); |
1530 | 1532 |
(...skipping 25 matching lines...) Expand all Loading... |
1556 const char* larger_font_text = symbol_font_text; | 1558 const char* larger_font_text = symbol_font_text; |
1557 if (symbol_font.GetHeight() < arial_font.GetHeight() && | 1559 if (symbol_font.GetHeight() < arial_font.GetHeight() && |
1558 symbol_font.GetBaseline() < arial_font.GetBaseline()) { | 1560 symbol_font.GetBaseline() < arial_font.GetBaseline()) { |
1559 std::swap(smaller_font, larger_font); | 1561 std::swap(smaller_font, larger_font); |
1560 std::swap(smaller_font_text, larger_font_text); | 1562 std::swap(smaller_font_text, larger_font_text); |
1561 } | 1563 } |
1562 ASSERT_LT(smaller_font.GetHeight(), larger_font.GetHeight()); | 1564 ASSERT_LT(smaller_font.GetHeight(), larger_font.GetHeight()); |
1563 ASSERT_LT(smaller_font.GetBaseline(), larger_font.GetBaseline()); | 1565 ASSERT_LT(smaller_font.GetBaseline(), larger_font.GetBaseline()); |
1564 | 1566 |
1565 // Check |smaller_font_text| is rendered with the smaller font. | 1567 // Check |smaller_font_text| is rendered with the smaller font. |
1566 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1568 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1567 render_text->SetText(UTF8ToUTF16(smaller_font_text)); | 1569 render_text->SetText(UTF8ToUTF16(smaller_font_text)); |
1568 render_text->SetFontList(FontList(smaller_font)); | 1570 render_text->SetFontList(FontList(smaller_font)); |
1569 render_text->SetDisplayRect(Rect(0, 0, 0, | 1571 render_text->SetDisplayRect(Rect(0, 0, 0, |
1570 render_text->font_list().GetHeight())); | 1572 render_text->font_list().GetHeight())); |
1571 EXPECT_EQ(smaller_font.GetHeight(), render_text->GetStringSize().height()); | 1573 EXPECT_EQ(smaller_font.GetHeight(), render_text->GetStringSize().height()); |
1572 EXPECT_EQ(smaller_font.GetBaseline(), render_text->GetBaseline()); | 1574 EXPECT_EQ(smaller_font.GetBaseline(), render_text->GetBaseline()); |
1573 | 1575 |
1574 // Layout the same text with mixed fonts. The text should be rendered with | 1576 // Layout the same text with mixed fonts. The text should be rendered with |
1575 // the smaller font, but the height and baseline are determined with the | 1577 // the smaller font, but the height and baseline are determined with the |
1576 // metrics of the font list, which is equal to the larger font. | 1578 // metrics of the font list, which is equal to the larger font. |
1577 std::vector<Font> fonts; | 1579 std::vector<Font> fonts; |
1578 fonts.push_back(smaller_font); // The primary font is the smaller font. | 1580 fonts.push_back(smaller_font); // The primary font is the smaller font. |
1579 fonts.push_back(larger_font); | 1581 fonts.push_back(larger_font); |
1580 const FontList font_list(fonts); | 1582 const FontList font_list(fonts); |
1581 render_text->SetFontList(font_list); | 1583 render_text->SetFontList(font_list); |
1582 render_text->SetDisplayRect(Rect(0, 0, 0, | 1584 render_text->SetDisplayRect(Rect(0, 0, 0, |
1583 render_text->font_list().GetHeight())); | 1585 render_text->font_list().GetHeight())); |
1584 EXPECT_LT(smaller_font.GetHeight(), render_text->GetStringSize().height()); | 1586 EXPECT_LT(smaller_font.GetHeight(), render_text->GetStringSize().height()); |
1585 EXPECT_LT(smaller_font.GetBaseline(), render_text->GetBaseline()); | 1587 EXPECT_LT(smaller_font.GetBaseline(), render_text->GetBaseline()); |
1586 EXPECT_EQ(font_list.GetHeight(), render_text->GetStringSize().height()); | 1588 EXPECT_EQ(font_list.GetHeight(), render_text->GetStringSize().height()); |
1587 EXPECT_EQ(font_list.GetBaseline(), render_text->GetBaseline()); | 1589 EXPECT_EQ(font_list.GetBaseline(), render_text->GetBaseline()); |
1588 } | 1590 } |
1589 | 1591 |
1590 TEST_F(RenderTextTest, MinLineHeight) { | 1592 TEST_F(RenderTextTest, MinLineHeight) { |
1591 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1593 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1592 | 1594 |
1593 render_text->SetText(ASCIIToUTF16("Hello!")); | 1595 render_text->SetText(ASCIIToUTF16("Hello!")); |
1594 SizeF default_size = render_text->GetStringSizeF(); | 1596 SizeF default_size = render_text->GetStringSizeF(); |
1595 ASSERT_NE(0, default_size.height()); | 1597 ASSERT_NE(0, default_size.height()); |
1596 ASSERT_NE(0, default_size.width()); | 1598 ASSERT_NE(0, default_size.width()); |
1597 | 1599 |
1598 render_text->SetMinLineHeight(default_size.height() / 2); | 1600 render_text->SetMinLineHeight(default_size.height() / 2); |
1599 EXPECT_EQ(default_size.ToString(), render_text->GetStringSizeF().ToString()); | 1601 EXPECT_EQ(default_size.ToString(), render_text->GetStringSizeF().ToString()); |
1600 | 1602 |
1601 render_text->SetMinLineHeight(default_size.height() * 2); | 1603 render_text->SetMinLineHeight(default_size.height() * 2); |
1602 SizeF taller_size = render_text->GetStringSizeF(); | 1604 SizeF taller_size = render_text->GetStringSizeF(); |
1603 EXPECT_EQ(default_size.height() * 2, taller_size.height()); | 1605 EXPECT_EQ(default_size.height() * 2, taller_size.height()); |
1604 EXPECT_EQ(default_size.width(), taller_size.width()); | 1606 EXPECT_EQ(default_size.width(), taller_size.width()); |
1605 } | 1607 } |
1606 | 1608 |
1607 TEST_F(RenderTextTest, SetFontList) { | 1609 TEST_F(RenderTextTest, SetFontList) { |
1608 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1610 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1609 render_text->SetFontList(FontList("Arial,Symbol, 13px")); | 1611 render_text->SetFontList(FontList("Arial,Symbol, 13px")); |
1610 const std::vector<Font>& fonts = render_text->font_list().GetFonts(); | 1612 const std::vector<Font>& fonts = render_text->font_list().GetFonts(); |
1611 ASSERT_EQ(2U, fonts.size()); | 1613 ASSERT_EQ(2U, fonts.size()); |
1612 EXPECT_EQ("Arial", fonts[0].GetFontName()); | 1614 EXPECT_EQ("Arial", fonts[0].GetFontName()); |
1613 EXPECT_EQ("Symbol", fonts[1].GetFontName()); | 1615 EXPECT_EQ("Symbol", fonts[1].GetFontName()); |
1614 EXPECT_EQ(13, render_text->font_list().GetFontSize()); | 1616 EXPECT_EQ(13, render_text->font_list().GetFontSize()); |
1615 } | 1617 } |
1616 | 1618 |
1617 TEST_F(RenderTextTest, StringSizeBoldWidth) { | 1619 TEST_F(RenderTextTest, StringSizeBoldWidth) { |
1618 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1620 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1619 render_text->SetText(UTF8ToUTF16("Hello World")); | 1621 render_text->SetText(UTF8ToUTF16("Hello World")); |
1620 | 1622 |
1621 const int plain_width = render_text->GetStringSize().width(); | 1623 const int plain_width = render_text->GetStringSize().width(); |
1622 EXPECT_GT(plain_width, 0); | 1624 EXPECT_GT(plain_width, 0); |
1623 | 1625 |
1624 // Apply a bold style and check that the new width is greater. | 1626 // Apply a bold style and check that the new width is greater. |
1625 render_text->SetStyle(BOLD, true); | 1627 render_text->SetStyle(BOLD, true); |
1626 const int bold_width = render_text->GetStringSize().width(); | 1628 const int bold_width = render_text->GetStringSize().width(); |
1627 EXPECT_GT(bold_width, plain_width); | 1629 EXPECT_GT(bold_width, plain_width); |
1628 | 1630 |
(...skipping 10 matching lines...) Expand all Loading... |
1639 WideToUTF16(L"\x6328\x62f6"), // Japanese | 1641 WideToUTF16(L"\x6328\x62f6"), // Japanese |
1640 WideToUTF16(L"\x0915\x093f"), // Hindi | 1642 WideToUTF16(L"\x0915\x093f"), // Hindi |
1641 WideToUTF16(L"\x05e0\x05b8"), // Hebrew | 1643 WideToUTF16(L"\x05e0\x05b8"), // Hebrew |
1642 }; | 1644 }; |
1643 | 1645 |
1644 const FontList default_font_list; | 1646 const FontList default_font_list; |
1645 const FontList& larger_font_list = default_font_list.DeriveWithSizeDelta(24); | 1647 const FontList& larger_font_list = default_font_list.DeriveWithSizeDelta(24); |
1646 EXPECT_GT(larger_font_list.GetHeight(), default_font_list.GetHeight()); | 1648 EXPECT_GT(larger_font_list.GetHeight(), default_font_list.GetHeight()); |
1647 | 1649 |
1648 for (size_t i = 0; i < arraysize(cases); i++) { | 1650 for (size_t i = 0; i < arraysize(cases); i++) { |
1649 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1651 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1650 render_text->SetFontList(default_font_list); | 1652 render_text->SetFontList(default_font_list); |
1651 render_text->SetText(cases[i]); | 1653 render_text->SetText(cases[i]); |
1652 | 1654 |
1653 const int height1 = render_text->GetStringSize().height(); | 1655 const int height1 = render_text->GetStringSize().height(); |
1654 EXPECT_GT(height1, 0); | 1656 EXPECT_GT(height1, 0); |
1655 | 1657 |
1656 // Check that setting the larger font increases the height. | 1658 // Check that setting the larger font increases the height. |
1657 render_text->SetFontList(larger_font_list); | 1659 render_text->SetFontList(larger_font_list); |
1658 const int height2 = render_text->GetStringSize().height(); | 1660 const int height2 = render_text->GetStringSize().height(); |
1659 EXPECT_GT(height2, height1); | 1661 EXPECT_GT(height2, height1); |
1660 } | 1662 } |
1661 } | 1663 } |
1662 | 1664 |
1663 TEST_F(RenderTextTest, GetBaselineSanity) { | 1665 TEST_F(RenderTextTest, GetBaselineSanity) { |
1664 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1666 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1665 render_text->SetText(UTF8ToUTF16("Hello World")); | 1667 render_text->SetText(UTF8ToUTF16("Hello World")); |
1666 const int baseline = render_text->GetBaseline(); | 1668 const int baseline = render_text->GetBaseline(); |
1667 EXPECT_GT(baseline, 0); | 1669 EXPECT_GT(baseline, 0); |
1668 } | 1670 } |
1669 | 1671 |
1670 TEST_F(RenderTextTest, CursorBoundsInReplacementMode) { | 1672 TEST_F(RenderTextTest, CursorBoundsInReplacementMode) { |
1671 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1673 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1672 render_text->SetText(ASCIIToUTF16("abcdefg")); | 1674 render_text->SetText(ASCIIToUTF16("abcdefg")); |
1673 render_text->SetDisplayRect(Rect(100, 17)); | 1675 render_text->SetDisplayRect(Rect(100, 17)); |
1674 SelectionModel sel_b(1, CURSOR_FORWARD); | 1676 SelectionModel sel_b(1, CURSOR_FORWARD); |
1675 SelectionModel sel_c(2, CURSOR_FORWARD); | 1677 SelectionModel sel_c(2, CURSOR_FORWARD); |
1676 Rect cursor_around_b = render_text->GetCursorBounds(sel_b, false); | 1678 Rect cursor_around_b = render_text->GetCursorBounds(sel_b, false); |
1677 Rect cursor_before_b = render_text->GetCursorBounds(sel_b, true); | 1679 Rect cursor_before_b = render_text->GetCursorBounds(sel_b, true); |
1678 Rect cursor_before_c = render_text->GetCursorBounds(sel_c, true); | 1680 Rect cursor_before_c = render_text->GetCursorBounds(sel_c, true); |
1679 EXPECT_EQ(cursor_around_b.x(), cursor_before_b.x()); | 1681 EXPECT_EQ(cursor_around_b.x(), cursor_before_b.x()); |
1680 EXPECT_EQ(cursor_around_b.right(), cursor_before_c.x()); | 1682 EXPECT_EQ(cursor_around_b.right(), cursor_before_c.x()); |
1681 } | 1683 } |
1682 | 1684 |
1683 TEST_F(RenderTextTest, GetTextOffset) { | 1685 TEST_F(RenderTextTest, GetTextOffset) { |
1684 // The default horizontal text offset differs for LTR and RTL, and is only set | 1686 // The default horizontal text offset differs for LTR and RTL, and is only set |
1685 // when the RenderText object is created. This test will check the default in | 1687 // when the RenderText object is created. This test will check the default in |
1686 // LTR mode, and the next test will check the RTL default. | 1688 // LTR mode, and the next test will check the RTL default. |
1687 const bool was_rtl = base::i18n::IsRTL(); | 1689 const bool was_rtl = base::i18n::IsRTL(); |
1688 SetRTL(false); | 1690 SetRTL(false); |
1689 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1691 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1690 render_text->SetText(ASCIIToUTF16("abcdefg")); | 1692 render_text->SetText(ASCIIToUTF16("abcdefg")); |
1691 render_text->SetFontList(FontList("Arial, 13px")); | 1693 render_text->SetFontList(FontList("Arial, 13px")); |
1692 | 1694 |
1693 // Set display area's size equal to the font size. | 1695 // Set display area's size equal to the font size. |
1694 const Size font_size(render_text->GetContentWidth(), | 1696 const Size font_size(render_text->GetContentWidth(), |
1695 render_text->font_list().GetHeight()); | 1697 render_text->font_list().GetHeight()); |
1696 Rect display_rect(font_size); | 1698 Rect display_rect(font_size); |
1697 render_text->SetDisplayRect(display_rect); | 1699 render_text->SetDisplayRect(display_rect); |
1698 | 1700 |
1699 Vector2d offset = render_text->GetLineOffset(0); | 1701 Vector2d offset = render_text->GetLineOffset(0); |
(...skipping 29 matching lines...) Expand all Loading... |
1729 EXPECT_EQ(prev_offset.y() + kEnlargementY, offset.y()); | 1731 EXPECT_EQ(prev_offset.y() + kEnlargementY, offset.y()); |
1730 | 1732 |
1731 SetRTL(was_rtl); | 1733 SetRTL(was_rtl); |
1732 } | 1734 } |
1733 | 1735 |
1734 TEST_F(RenderTextTest, GetTextOffsetHorizontalDefaultInRTL) { | 1736 TEST_F(RenderTextTest, GetTextOffsetHorizontalDefaultInRTL) { |
1735 // This only checks the default horizontal alignment in RTL mode; all other | 1737 // This only checks the default horizontal alignment in RTL mode; all other |
1736 // GetLineOffset(0) attributes are checked by the test above. | 1738 // GetLineOffset(0) attributes are checked by the test above. |
1737 const bool was_rtl = base::i18n::IsRTL(); | 1739 const bool was_rtl = base::i18n::IsRTL(); |
1738 SetRTL(true); | 1740 SetRTL(true); |
1739 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1741 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1740 render_text->SetText(ASCIIToUTF16("abcdefg")); | 1742 render_text->SetText(ASCIIToUTF16("abcdefg")); |
1741 render_text->SetFontList(FontList("Arial, 13px")); | 1743 render_text->SetFontList(FontList("Arial, 13px")); |
1742 const int kEnlargement = 2; | 1744 const int kEnlargement = 2; |
1743 const Size font_size(render_text->GetContentWidth() + kEnlargement, | 1745 const Size font_size(render_text->GetContentWidth() + kEnlargement, |
1744 render_text->GetStringSize().height()); | 1746 render_text->GetStringSize().height()); |
1745 Rect display_rect(font_size); | 1747 Rect display_rect(font_size); |
1746 render_text->SetDisplayRect(display_rect); | 1748 render_text->SetDisplayRect(display_rect); |
1747 Vector2d offset = render_text->GetLineOffset(0); | 1749 Vector2d offset = render_text->GetLineOffset(0); |
1748 EXPECT_EQ(kEnlargement, offset.x()); | 1750 EXPECT_EQ(kEnlargement, offset.x()); |
1749 SetRTL(was_rtl); | 1751 SetRTL(was_rtl); |
1750 } | 1752 } |
1751 | 1753 |
1752 TEST_F(RenderTextTest, SetDisplayOffset) { | 1754 TEST_F(RenderTextTest, SetDisplayOffset) { |
1753 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1755 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1754 render_text->SetText(ASCIIToUTF16("abcdefg")); | 1756 render_text->SetText(ASCIIToUTF16("abcdefg")); |
1755 render_text->SetFontList(FontList("Arial, 13px")); | 1757 render_text->SetFontList(FontList("Arial, 13px")); |
1756 | 1758 |
1757 const Size font_size(render_text->GetContentWidth(), | 1759 const Size font_size(render_text->GetContentWidth(), |
1758 render_text->font_list().GetHeight()); | 1760 render_text->font_list().GetHeight()); |
1759 const int kEnlargement = 10; | 1761 const int kEnlargement = 10; |
1760 | 1762 |
1761 // Set display width |kEnlargement| pixels greater than content width and test | 1763 // Set display width |kEnlargement| pixels greater than content width and test |
1762 // different possible situations. In this case the only possible display | 1764 // different possible situations. In this case the only possible display |
1763 // offset is zero. | 1765 // offset is zero. |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1855 { WideToUTF16(L"Hello World(\x0915\x093f)Hello World") }, | 1857 { WideToUTF16(L"Hello World(\x0915\x093f)Hello World") }, |
1856 | 1858 |
1857 // Hebrew(English) | 1859 // Hebrew(English) |
1858 { WideToUTF16(L"\x05e0\x05b8(a)") }, | 1860 { WideToUTF16(L"\x05e0\x05b8(a)") }, |
1859 // Hebrew(English)Hebrew | 1861 // Hebrew(English)Hebrew |
1860 { WideToUTF16(L"\x05e0\x05b8(a)\x05e0\x05b8") }, | 1862 { WideToUTF16(L"\x05e0\x05b8(a)\x05e0\x05b8") }, |
1861 // English(Hebrew)English | 1863 // English(Hebrew)English |
1862 { WideToUTF16(L"Hello World(\x05e0\x05b8)Hello World") }, | 1864 { WideToUTF16(L"Hello World(\x05e0\x05b8)Hello World") }, |
1863 }; | 1865 }; |
1864 | 1866 |
1865 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1867 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1866 for (size_t i = 0; i < arraysize(cases); ++i) { | 1868 for (size_t i = 0; i < arraysize(cases); ++i) { |
1867 base::string16 text = cases[i].text; | 1869 base::string16 text = cases[i].text; |
1868 const size_t start_paren_char_index = text.find('('); | 1870 const size_t start_paren_char_index = text.find('('); |
1869 ASSERT_NE(base::string16::npos, start_paren_char_index); | 1871 ASSERT_NE(base::string16::npos, start_paren_char_index); |
1870 const size_t end_paren_char_index = text.find(')'); | 1872 const size_t end_paren_char_index = text.find(')'); |
1871 ASSERT_NE(base::string16::npos, end_paren_char_index); | 1873 ASSERT_NE(base::string16::npos, end_paren_char_index); |
1872 | 1874 |
1873 for (size_t j = 0; j < arraysize(punctuation_pairs); ++j) { | 1875 for (size_t j = 0; j < arraysize(punctuation_pairs); ++j) { |
1874 text[start_paren_char_index] = punctuation_pairs[j].left_char; | 1876 text[start_paren_char_index] = punctuation_pairs[j].left_char; |
1875 text[end_paren_char_index] = punctuation_pairs[j].right_char; | 1877 text[end_paren_char_index] = punctuation_pairs[j].right_char; |
(...skipping 18 matching lines...) Expand all Loading... |
1894 EXPECT_EQ(start_font.GetFontName(), end_font.GetFontName()); | 1896 EXPECT_EQ(start_font.GetFontName(), end_font.GetFontName()); |
1895 EXPECT_EQ(start_font.GetFontSize(), end_font.GetFontSize()); | 1897 EXPECT_EQ(start_font.GetFontSize(), end_font.GetFontSize()); |
1896 EXPECT_EQ(start_font.GetStyle(), end_font.GetStyle()); | 1898 EXPECT_EQ(start_font.GetStyle(), end_font.GetStyle()); |
1897 } | 1899 } |
1898 } | 1900 } |
1899 } | 1901 } |
1900 | 1902 |
1901 // Make sure the caret width is always >=1 so that the correct | 1903 // Make sure the caret width is always >=1 so that the correct |
1902 // caret is drawn at high DPI. crbug.com/164100. | 1904 // caret is drawn at high DPI. crbug.com/164100. |
1903 TEST_F(RenderTextTest, CaretWidth) { | 1905 TEST_F(RenderTextTest, CaretWidth) { |
1904 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1906 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1905 render_text->SetText(ASCIIToUTF16("abcdefg")); | 1907 render_text->SetText(ASCIIToUTF16("abcdefg")); |
1906 EXPECT_GE(render_text->GetUpdatedCursorBounds().width(), 1); | 1908 EXPECT_GE(render_text->GetUpdatedCursorBounds().width(), 1); |
1907 } | 1909 } |
1908 | 1910 |
1909 TEST_F(RenderTextTest, SelectWord) { | 1911 TEST_F(RenderTextTest, SelectWord) { |
1910 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1912 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1911 render_text->SetText(ASCIIToUTF16(" foo a.bc.d bar")); | 1913 render_text->SetText(ASCIIToUTF16(" foo a.bc.d bar")); |
1912 | 1914 |
1913 struct { | 1915 struct { |
1914 size_t cursor; | 1916 size_t cursor; |
1915 size_t selection_start; | 1917 size_t selection_start; |
1916 size_t selection_end; | 1918 size_t selection_end; |
1917 } cases[] = { | 1919 } cases[] = { |
1918 { 0, 0, 1 }, | 1920 { 0, 0, 1 }, |
1919 { 1, 1, 4 }, | 1921 { 1, 1, 4 }, |
1920 { 2, 1, 4 }, | 1922 { 2, 1, 4 }, |
(...skipping 19 matching lines...) Expand all Loading... |
1940 EXPECT_EQ(Range(cases[i].selection_start, cases[i].selection_end), | 1942 EXPECT_EQ(Range(cases[i].selection_start, cases[i].selection_end), |
1941 render_text->selection()); | 1943 render_text->selection()); |
1942 } | 1944 } |
1943 } | 1945 } |
1944 | 1946 |
1945 // Make sure the last word is selected when the cursor is at text.length(). | 1947 // Make sure the last word is selected when the cursor is at text.length(). |
1946 TEST_F(RenderTextTest, LastWordSelected) { | 1948 TEST_F(RenderTextTest, LastWordSelected) { |
1947 const std::string kTestURL1 = "http://www.google.com"; | 1949 const std::string kTestURL1 = "http://www.google.com"; |
1948 const std::string kTestURL2 = "http://www.google.com/something/"; | 1950 const std::string kTestURL2 = "http://www.google.com/something/"; |
1949 | 1951 |
1950 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1952 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1951 | 1953 |
1952 render_text->SetText(ASCIIToUTF16(kTestURL1)); | 1954 render_text->SetText(ASCIIToUTF16(kTestURL1)); |
1953 render_text->SetCursorPosition(kTestURL1.length()); | 1955 render_text->SetCursorPosition(kTestURL1.length()); |
1954 render_text->SelectWord(); | 1956 render_text->SelectWord(); |
1955 EXPECT_EQ(ASCIIToUTF16("com"), GetSelectedText(render_text.get())); | 1957 EXPECT_EQ(ASCIIToUTF16("com"), GetSelectedText(render_text.get())); |
1956 EXPECT_FALSE(render_text->selection().is_reversed()); | 1958 EXPECT_FALSE(render_text->selection().is_reversed()); |
1957 | 1959 |
1958 render_text->SetText(ASCIIToUTF16(kTestURL2)); | 1960 render_text->SetText(ASCIIToUTF16(kTestURL2)); |
1959 render_text->SetCursorPosition(kTestURL2.length()); | 1961 render_text->SetCursorPosition(kTestURL2.length()); |
1960 render_text->SelectWord(); | 1962 render_text->SelectWord(); |
1961 EXPECT_EQ(ASCIIToUTF16("/"), GetSelectedText(render_text.get())); | 1963 EXPECT_EQ(ASCIIToUTF16("/"), GetSelectedText(render_text.get())); |
1962 EXPECT_FALSE(render_text->selection().is_reversed()); | 1964 EXPECT_FALSE(render_text->selection().is_reversed()); |
1963 } | 1965 } |
1964 | 1966 |
1965 // When given a non-empty selection, SelectWord should expand the selection to | 1967 // When given a non-empty selection, SelectWord should expand the selection to |
1966 // nearest word boundaries. | 1968 // nearest word boundaries. |
1967 TEST_F(RenderTextTest, SelectMultipleWords) { | 1969 TEST_F(RenderTextTest, SelectMultipleWords) { |
1968 const std::string kTestURL = "http://www.google.com"; | 1970 const std::string kTestURL = "http://www.google.com"; |
1969 | 1971 |
1970 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1972 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1971 | 1973 |
1972 render_text->SetText(ASCIIToUTF16(kTestURL)); | 1974 render_text->SetText(ASCIIToUTF16(kTestURL)); |
1973 render_text->SelectRange(Range(16, 20)); | 1975 render_text->SelectRange(Range(16, 20)); |
1974 render_text->SelectWord(); | 1976 render_text->SelectWord(); |
1975 EXPECT_EQ(ASCIIToUTF16("google.com"), GetSelectedText(render_text.get())); | 1977 EXPECT_EQ(ASCIIToUTF16("google.com"), GetSelectedText(render_text.get())); |
1976 EXPECT_FALSE(render_text->selection().is_reversed()); | 1978 EXPECT_FALSE(render_text->selection().is_reversed()); |
1977 | 1979 |
1978 // SelectWord should preserve the selection direction. | 1980 // SelectWord should preserve the selection direction. |
1979 render_text->SelectRange(Range(20, 16)); | 1981 render_text->SelectRange(Range(20, 16)); |
1980 render_text->SelectWord(); | 1982 render_text->SelectWord(); |
1981 EXPECT_EQ(ASCIIToUTF16("google.com"), GetSelectedText(render_text.get())); | 1983 EXPECT_EQ(ASCIIToUTF16("google.com"), GetSelectedText(render_text.get())); |
1982 EXPECT_TRUE(render_text->selection().is_reversed()); | 1984 EXPECT_TRUE(render_text->selection().is_reversed()); |
1983 } | 1985 } |
1984 | 1986 |
1985 // TODO(asvitkine): RenderTextMac cursor movements. http://crbug.com/131618 | 1987 // TODO(asvitkine): RenderTextMac cursor movements. http://crbug.com/131618 |
1986 #if !defined(OS_MACOSX) | 1988 #if !defined(OS_MACOSX) |
1987 TEST_F(RenderTextTest, DisplayRectShowsCursorLTR) { | 1989 TEST_F(RenderTextTest, DisplayRectShowsCursorLTR) { |
1988 ASSERT_FALSE(base::i18n::IsRTL()); | 1990 ASSERT_FALSE(base::i18n::IsRTL()); |
1989 ASSERT_FALSE(base::i18n::ICUIsRTL()); | 1991 ASSERT_FALSE(base::i18n::ICUIsRTL()); |
1990 | 1992 |
1991 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1993 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
1992 render_text->SetText(WideToUTF16(L"abcdefghijklmnopqrstuvwxzyabcdefg")); | 1994 render_text->SetText(WideToUTF16(L"abcdefghijklmnopqrstuvwxzyabcdefg")); |
1993 render_text->MoveCursorTo(SelectionModel(render_text->text().length(), | 1995 render_text->MoveCursorTo(SelectionModel(render_text->text().length(), |
1994 CURSOR_FORWARD)); | 1996 CURSOR_FORWARD)); |
1995 int width = render_text->GetStringSize().width(); | 1997 int width = render_text->GetStringSize().width(); |
1996 ASSERT_GT(width, 10); | 1998 ASSERT_GT(width, 10); |
1997 | 1999 |
1998 // Ensure that the cursor is placed at the width of its preceding text. | 2000 // Ensure that the cursor is placed at the width of its preceding text. |
1999 render_text->SetDisplayRect(Rect(width + 10, 1)); | 2001 render_text->SetDisplayRect(Rect(width + 10, 1)); |
2000 EXPECT_EQ(width, render_text->GetUpdatedCursorBounds().x()); | 2002 EXPECT_EQ(width, render_text->GetUpdatedCursorBounds().x()); |
2001 | 2003 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2038 render_text->SetDisplayRect(Rect(width + 10, 1)); | 2040 render_text->SetDisplayRect(Rect(width + 10, 1)); |
2039 EXPECT_EQ(width, render_text->GetUpdatedCursorBounds().x()); | 2041 EXPECT_EQ(width, render_text->GetUpdatedCursorBounds().x()); |
2040 } | 2042 } |
2041 #endif // !defined(OS_MACOSX) | 2043 #endif // !defined(OS_MACOSX) |
2042 | 2044 |
2043 TEST_F(RenderTextTest, DisplayRectShowsCursorRTL) { | 2045 TEST_F(RenderTextTest, DisplayRectShowsCursorRTL) { |
2044 // Set the application default text direction to RTL. | 2046 // Set the application default text direction to RTL. |
2045 const bool was_rtl = base::i18n::IsRTL(); | 2047 const bool was_rtl = base::i18n::IsRTL(); |
2046 SetRTL(true); | 2048 SetRTL(true); |
2047 | 2049 |
2048 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 2050 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
2049 render_text->SetText(WideToUTF16(L"abcdefghijklmnopqrstuvwxzyabcdefg")); | 2051 render_text->SetText(WideToUTF16(L"abcdefghijklmnopqrstuvwxzyabcdefg")); |
2050 render_text->MoveCursorTo(SelectionModel(0, CURSOR_FORWARD)); | 2052 render_text->MoveCursorTo(SelectionModel(0, CURSOR_FORWARD)); |
2051 int width = render_text->GetStringSize().width(); | 2053 int width = render_text->GetStringSize().width(); |
2052 ASSERT_GT(width, 10); | 2054 ASSERT_GT(width, 10); |
2053 | 2055 |
2054 // Ensure that the cursor is placed at the width of its preceding text. | 2056 // Ensure that the cursor is placed at the width of its preceding text. |
2055 render_text->SetDisplayRect(Rect(width + 10, 1)); | 2057 render_text->SetDisplayRect(Rect(width + 10, 1)); |
2056 EXPECT_EQ(render_text->display_rect().width() - width - 1, | 2058 EXPECT_EQ(render_text->display_rect().width() - width - 1, |
2057 render_text->GetUpdatedCursorBounds().x()); | 2059 render_text->GetUpdatedCursorBounds().x()); |
2058 | 2060 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2096 render_text->GetUpdatedCursorBounds().x()); | 2098 render_text->GetUpdatedCursorBounds().x()); |
2097 | 2099 |
2098 // Reset the application default text direction to LTR. | 2100 // Reset the application default text direction to LTR. |
2099 SetRTL(was_rtl); | 2101 SetRTL(was_rtl); |
2100 EXPECT_EQ(was_rtl, base::i18n::IsRTL()); | 2102 EXPECT_EQ(was_rtl, base::i18n::IsRTL()); |
2101 } | 2103 } |
2102 | 2104 |
2103 // Changing colors between or inside ligated glyphs should not break shaping. | 2105 // Changing colors between or inside ligated glyphs should not break shaping. |
2104 TEST_F(RenderTextTest, SelectionKeepsLigatures) { | 2106 TEST_F(RenderTextTest, SelectionKeepsLigatures) { |
2105 const wchar_t* kTestStrings[] = { L"\x644\x623", L"\x633\x627" }; | 2107 const wchar_t* kTestStrings[] = { L"\x644\x623", L"\x633\x627" }; |
2106 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 2108 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
2107 render_text->set_selection_color(SK_ColorRED); | 2109 render_text->set_selection_color(SK_ColorRED); |
2108 Canvas canvas; | 2110 Canvas canvas; |
2109 | 2111 |
2110 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { | 2112 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { |
2111 render_text->SetText(WideToUTF16(kTestStrings[i])); | 2113 render_text->SetText(WideToUTF16(kTestStrings[i])); |
2112 const int expected_width = render_text->GetStringSize().width(); | 2114 const int expected_width = render_text->GetStringSize().width(); |
2113 render_text->MoveCursorTo(SelectionModel(Range(0, 1), CURSOR_FORWARD)); | 2115 render_text->MoveCursorTo(SelectionModel(Range(0, 1), CURSOR_FORWARD)); |
2114 EXPECT_EQ(expected_width, render_text->GetStringSize().width()); | 2116 EXPECT_EQ(expected_width, render_text->GetStringSize().width()); |
2115 // Drawing the text should not DCHECK or crash; see http://crbug.com/262119 | 2117 // Drawing the text should not DCHECK or crash; see http://crbug.com/262119 |
2116 render_text->Draw(&canvas); | 2118 render_text->Draw(&canvas); |
(...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2734 }; | 2736 }; |
2735 | 2737 |
2736 internal::TextRunHarfBuzz run; | 2738 internal::TextRunHarfBuzz run; |
2737 run.range = Range(0, 4); | 2739 run.range = Range(0, 4); |
2738 run.glyph_count = 2; | 2740 run.glyph_count = 2; |
2739 run.glyph_to_char.resize(2); | 2741 run.glyph_to_char.resize(2); |
2740 run.positions.reset(new SkPoint[4]); | 2742 run.positions.reset(new SkPoint[4]); |
2741 run.width = 20; | 2743 run.width = 20; |
2742 | 2744 |
2743 const base::string16 kString = ASCIIToUTF16("abcd"); | 2745 const base::string16 kString = ASCIIToUTF16("abcd"); |
2744 scoped_ptr<base::i18n::BreakIterator> iter(new base::i18n::BreakIterator( | 2746 std::unique_ptr<base::i18n::BreakIterator> iter(new base::i18n::BreakIterator( |
2745 kString, base::i18n::BreakIterator::BREAK_CHARACTER)); | 2747 kString, base::i18n::BreakIterator::BREAK_CHARACTER)); |
2746 ASSERT_TRUE(iter->Init()); | 2748 ASSERT_TRUE(iter->Init()); |
2747 | 2749 |
2748 for (size_t i = 0; i < arraysize(cases); ++i) { | 2750 for (size_t i = 0; i < arraysize(cases); ++i) { |
2749 std::copy(cases[i].glyph_to_char, cases[i].glyph_to_char + 2, | 2751 std::copy(cases[i].glyph_to_char, cases[i].glyph_to_char + 2, |
2750 run.glyph_to_char.begin()); | 2752 run.glyph_to_char.begin()); |
2751 run.is_rtl = cases[i].is_rtl; | 2753 run.is_rtl = cases[i].is_rtl; |
2752 for (int j = 0; j < 2; ++j) | 2754 for (int j = 0; j < 2; ++j) |
2753 run.positions[j].set(j * 10, 0); | 2755 run.positions[j].set(j * 10, 0); |
2754 | 2756 |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2851 ASSERT_EQ(2U, run_list->size()); | 2853 ASSERT_EQ(2U, run_list->size()); |
2852 // U+1F431 is represented as a surrogate pair in UTF16. | 2854 // U+1F431 is represented as a surrogate pair in UTF16. |
2853 EXPECT_EQ(Range(0, 2), run_list->runs()[0]->range); | 2855 EXPECT_EQ(Range(0, 2), run_list->runs()[0]->range); |
2854 EXPECT_EQ(Range(2, 3), run_list->runs()[1]->range); | 2856 EXPECT_EQ(Range(2, 3), run_list->runs()[1]->range); |
2855 } | 2857 } |
2856 | 2858 |
2857 TEST_F(RenderTextTest, GlyphBounds) { | 2859 TEST_F(RenderTextTest, GlyphBounds) { |
2858 const wchar_t* kTestStrings[] = { | 2860 const wchar_t* kTestStrings[] = { |
2859 L"asdf 1234 qwer", L"\x0647\x0654", L"\x0645\x0631\x062D\x0628\x0627" | 2861 L"asdf 1234 qwer", L"\x0647\x0654", L"\x0645\x0631\x062D\x0628\x0627" |
2860 }; | 2862 }; |
2861 scoped_ptr<RenderText> render_text(new RenderTextHarfBuzz); | 2863 std::unique_ptr<RenderText> render_text(new RenderTextHarfBuzz); |
2862 | 2864 |
2863 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { | 2865 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { |
2864 render_text->SetText(WideToUTF16(kTestStrings[i])); | 2866 render_text->SetText(WideToUTF16(kTestStrings[i])); |
2865 render_text->EnsureLayout(); | 2867 render_text->EnsureLayout(); |
2866 | 2868 |
2867 for (size_t j = 0; j < render_text->text().length(); ++j) | 2869 for (size_t j = 0; j < render_text->text().length(); ++j) |
2868 EXPECT_FALSE(render_text->GetGlyphBounds(j).is_empty()); | 2870 EXPECT_FALSE(render_text->GetGlyphBounds(j).is_empty()); |
2869 } | 2871 } |
2870 } | 2872 } |
2871 | 2873 |
2872 // Ensure that shaping with a non-existent font does not cause a crash. | 2874 // Ensure that shaping with a non-existent font does not cause a crash. |
2873 TEST_F(RenderTextTest, HarfBuzz_NonExistentFont) { | 2875 TEST_F(RenderTextTest, HarfBuzz_NonExistentFont) { |
2874 RenderTextHarfBuzz render_text; | 2876 RenderTextHarfBuzz render_text; |
2875 render_text.SetText(ASCIIToUTF16("test")); | 2877 render_text.SetText(ASCIIToUTF16("test")); |
2876 render_text.EnsureLayout(); | 2878 render_text.EnsureLayout(); |
2877 internal::TextRunList* run_list = render_text.GetRunList(); | 2879 internal::TextRunList* run_list = render_text.GetRunList(); |
2878 ASSERT_EQ(1U, run_list->size()); | 2880 ASSERT_EQ(1U, run_list->size()); |
2879 internal::TextRunHarfBuzz* run = run_list->runs()[0]; | 2881 internal::TextRunHarfBuzz* run = run_list->runs()[0]; |
2880 render_text.ShapeRunWithFont(render_text.text(), | 2882 render_text.ShapeRunWithFont(render_text.text(), |
2881 Font("TheFontThatDoesntExist", 13), | 2883 Font("TheFontThatDoesntExist", 13), |
2882 FontRenderParams(), run); | 2884 FontRenderParams(), run); |
2883 } | 2885 } |
2884 | 2886 |
2885 // Ensure an empty run returns sane values to queries. | 2887 // Ensure an empty run returns sane values to queries. |
2886 TEST_F(RenderTextTest, HarfBuzz_EmptyRun) { | 2888 TEST_F(RenderTextTest, HarfBuzz_EmptyRun) { |
2887 internal::TextRunHarfBuzz run; | 2889 internal::TextRunHarfBuzz run; |
2888 const base::string16 kString = ASCIIToUTF16("abcdefgh"); | 2890 const base::string16 kString = ASCIIToUTF16("abcdefgh"); |
2889 scoped_ptr<base::i18n::BreakIterator> iter(new base::i18n::BreakIterator( | 2891 std::unique_ptr<base::i18n::BreakIterator> iter(new base::i18n::BreakIterator( |
2890 kString, base::i18n::BreakIterator::BREAK_CHARACTER)); | 2892 kString, base::i18n::BreakIterator::BREAK_CHARACTER)); |
2891 ASSERT_TRUE(iter->Init()); | 2893 ASSERT_TRUE(iter->Init()); |
2892 | 2894 |
2893 run.range = Range(3, 8); | 2895 run.range = Range(3, 8); |
2894 run.glyph_count = 0; | 2896 run.glyph_count = 0; |
2895 EXPECT_EQ(Range(0, 0), run.CharRangeToGlyphRange(Range(4, 5))); | 2897 EXPECT_EQ(Range(0, 0), run.CharRangeToGlyphRange(Range(4, 5))); |
2896 EXPECT_EQ(Range(0, 0), run.GetGraphemeBounds(iter.get(), 4).Round()); | 2898 EXPECT_EQ(Range(0, 0), run.GetGraphemeBounds(iter.get(), 4).Round()); |
2897 Range chars; | 2899 Range chars; |
2898 Range glyphs; | 2900 Range glyphs; |
2899 run.GetClusterAt(4, &chars, &glyphs); | 2901 run.GetClusterAt(4, &chars, &glyphs); |
(...skipping 13 matching lines...) Expand all Loading... |
2913 render_text.SetMultiline(true); | 2915 render_text.SetMultiline(true); |
2914 EXPECT_EQ(text_size.width() * 2, render_text.GetStringSizeF().width()); | 2916 EXPECT_EQ(text_size.width() * 2, render_text.GetStringSizeF().width()); |
2915 EXPECT_EQ(text_size.height(), render_text.GetStringSizeF().height()); | 2917 EXPECT_EQ(text_size.height(), render_text.GetStringSizeF().height()); |
2916 render_text.SetDisplayRect(gfx::Rect(0, 0, std::ceil(text_size.width()), 0)); | 2918 render_text.SetDisplayRect(gfx::Rect(0, 0, std::ceil(text_size.width()), 0)); |
2917 EXPECT_NEAR(text_size.width(), render_text.GetStringSizeF().width(), 1.0f); | 2919 EXPECT_NEAR(text_size.width(), render_text.GetStringSizeF().width(), 1.0f); |
2918 EXPECT_EQ(text_size.height() * 2, render_text.GetStringSizeF().height()); | 2920 EXPECT_EQ(text_size.height() * 2, render_text.GetStringSizeF().height()); |
2919 } | 2921 } |
2920 | 2922 |
2921 // Ensure a string fits in a display rect with a width equal to the string's. | 2923 // Ensure a string fits in a display rect with a width equal to the string's. |
2922 TEST_F(RenderTextTest, StringFitsOwnWidth) { | 2924 TEST_F(RenderTextTest, StringFitsOwnWidth) { |
2923 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 2925 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
2924 const base::string16 kString = ASCIIToUTF16("www.example.com"); | 2926 const base::string16 kString = ASCIIToUTF16("www.example.com"); |
2925 | 2927 |
2926 render_text->SetText(kString); | 2928 render_text->SetText(kString); |
2927 render_text->ApplyStyle(BOLD, true, Range(0, 3)); | 2929 render_text->ApplyStyle(BOLD, true, Range(0, 3)); |
2928 render_text->SetElideBehavior(ELIDE_TAIL); | 2930 render_text->SetElideBehavior(ELIDE_TAIL); |
2929 | 2931 |
2930 render_text->SetDisplayRect(Rect(0, 0, 500, 100)); | 2932 render_text->SetDisplayRect(Rect(0, 0, 500, 100)); |
2931 EXPECT_EQ(kString, render_text->GetDisplayText()); | 2933 EXPECT_EQ(kString, render_text->GetDisplayText()); |
2932 render_text->SetDisplayRect(Rect(0, 0, render_text->GetContentWidth(), 100)); | 2934 render_text->SetDisplayRect(Rect(0, 0, render_text->GetContentWidth(), 100)); |
2933 EXPECT_EQ(kString, render_text->GetDisplayText()); | 2935 EXPECT_EQ(kString, render_text->GetDisplayText()); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3013 // TODO(dschuyler): A-Ring draws outside GetStringSize; crbug.com/459812. | 3015 // TODO(dschuyler): A-Ring draws outside GetStringSize; crbug.com/459812. |
3014 // L"g\x00C5X\x00C5X\x00C5X\x00C5X\x00C5X\x00C5X\x00C5", | 3016 // L"g\x00C5X\x00C5X\x00C5X\x00C5X\x00C5X\x00C5X\x00C5", |
3015 L"\x0647\x0654\x0647\x0654\x0647\x0654\x0647\x0654\x0645\x0631\x062D" | 3017 L"\x0647\x0654\x0647\x0654\x0647\x0654\x0647\x0654\x0645\x0631\x062D" |
3016 L"\x0628\x0627"}; | 3018 L"\x0628\x0627"}; |
3017 const Size kCanvasSize(300, 50); | 3019 const Size kCanvasSize(300, 50); |
3018 const int kTestSize = 10; | 3020 const int kTestSize = 10; |
3019 | 3021 |
3020 sk_sp<SkSurface> surface = | 3022 sk_sp<SkSurface> surface = |
3021 SkSurface::MakeRasterN32Premul(kCanvasSize.width(), kCanvasSize.height()); | 3023 SkSurface::MakeRasterN32Premul(kCanvasSize.width(), kCanvasSize.height()); |
3022 Canvas canvas(skia::SharePtr(surface->getCanvas()), 1.0f); | 3024 Canvas canvas(skia::SharePtr(surface->getCanvas()), 1.0f); |
3023 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 3025 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
3024 render_text->SetHorizontalAlignment(ALIGN_LEFT); | 3026 render_text->SetHorizontalAlignment(ALIGN_LEFT); |
3025 render_text->SetColor(SK_ColorBLACK); | 3027 render_text->SetColor(SK_ColorBLACK); |
3026 | 3028 |
3027 for (auto string : kTestStrings) { | 3029 for (auto string : kTestStrings) { |
3028 surface->getCanvas()->clear(SK_ColorWHITE); | 3030 surface->getCanvas()->clear(SK_ColorWHITE); |
3029 render_text->SetText(WideToUTF16(string)); | 3031 render_text->SetText(WideToUTF16(string)); |
3030 const Size string_size = render_text->GetStringSize(); | 3032 const Size string_size = render_text->GetStringSize(); |
3031 render_text->ApplyBaselineStyle(SUPERSCRIPT, Range(1, 2)); | 3033 render_text->ApplyBaselineStyle(SUPERSCRIPT, Range(1, 2)); |
3032 render_text->ApplyBaselineStyle(SUPERIOR, Range(3, 4)); | 3034 render_text->ApplyBaselineStyle(SUPERIOR, Range(3, 4)); |
3033 render_text->ApplyBaselineStyle(INFERIOR, Range(5, 6)); | 3035 render_text->ApplyBaselineStyle(INFERIOR, Range(5, 6)); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3104 // Ensure that the text will clip to the display rect. Draws to a canvas and | 3106 // Ensure that the text will clip to the display rect. Draws to a canvas and |
3105 // checks whether any pixel beyond the bounding rectangle is colored. | 3107 // checks whether any pixel beyond the bounding rectangle is colored. |
3106 TEST_F(RenderTextTest, TextDoesClip) { | 3108 TEST_F(RenderTextTest, TextDoesClip) { |
3107 const wchar_t* kTestStrings[] = {L"TEST", L"W", L"WWWW", L"gAXAXWWWW"}; | 3109 const wchar_t* kTestStrings[] = {L"TEST", L"W", L"WWWW", L"gAXAXWWWW"}; |
3108 const Size kCanvasSize(300, 50); | 3110 const Size kCanvasSize(300, 50); |
3109 const int kTestSize = 10; | 3111 const int kTestSize = 10; |
3110 | 3112 |
3111 sk_sp<SkSurface> surface = | 3113 sk_sp<SkSurface> surface = |
3112 SkSurface::MakeRasterN32Premul(kCanvasSize.width(), kCanvasSize.height()); | 3114 SkSurface::MakeRasterN32Premul(kCanvasSize.width(), kCanvasSize.height()); |
3113 Canvas canvas(skia::SharePtr(surface->getCanvas()), 1.0f); | 3115 Canvas canvas(skia::SharePtr(surface->getCanvas()), 1.0f); |
3114 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 3116 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); |
3115 render_text->SetHorizontalAlignment(ALIGN_LEFT); | 3117 render_text->SetHorizontalAlignment(ALIGN_LEFT); |
3116 render_text->SetColor(SK_ColorBLACK); | 3118 render_text->SetColor(SK_ColorBLACK); |
3117 | 3119 |
3118 for (auto string : kTestStrings) { | 3120 for (auto string : kTestStrings) { |
3119 surface->getCanvas()->clear(SK_ColorWHITE); | 3121 surface->getCanvas()->clear(SK_ColorWHITE); |
3120 render_text->SetText(WideToUTF16(string)); | 3122 render_text->SetText(WideToUTF16(string)); |
3121 const Size string_size = render_text->GetStringSize(); | 3123 const Size string_size = render_text->GetStringSize(); |
3122 int fake_width = string_size.width() / 2; | 3124 int fake_width = string_size.width() / 2; |
3123 int fake_height = string_size.height() / 2; | 3125 int fake_height = string_size.height() / 2; |
3124 render_text->SetDisplayRect( | 3126 render_text->SetDisplayRect( |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3209 backend[i]->SetColor(SK_ColorRED); | 3211 backend[i]->SetColor(SK_ColorRED); |
3210 test_api.DrawVisualText(&renderer); | 3212 test_api.DrawVisualText(&renderer); |
3211 | 3213 |
3212 renderer.GetTextLogAndReset(&text_log); | 3214 renderer.GetTextLogAndReset(&text_log); |
3213 EXPECT_EQ(1u, text_log.size()); | 3215 EXPECT_EQ(1u, text_log.size()); |
3214 EXPECT_EQ(SK_ColorRED, text_log[0].color); | 3216 EXPECT_EQ(SK_ColorRED, text_log[0].color); |
3215 } | 3217 } |
3216 } | 3218 } |
3217 | 3219 |
3218 } // namespace gfx | 3220 } // namespace gfx |
OLD | NEW |