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 // Unit tests for eliding and formatting utility functions. | 5 // Unit tests for eliding and formatting utility functions. |
6 | 6 |
7 #include "ui/gfx/text_elider.h" | 7 #include "ui/gfx/text_elider.h" |
8 | 8 |
9 #include "base/files/file_path.h" | 9 #include "base/files/file_path.h" |
10 #include "base/i18n/rtl.h" | 10 #include "base/i18n/rtl.h" |
(...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
513 }; | 513 }; |
514 | 514 |
515 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { | 515 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { |
516 std::vector<base::string16> lines; | 516 std::vector<base::string16> lines; |
517 EXPECT_EQ(cases[i].truncated_y ? INSUFFICIENT_SPACE_VERTICAL : 0, | 517 EXPECT_EQ(cases[i].truncated_y ? INSUFFICIENT_SPACE_VERTICAL : 0, |
518 ElideRectangleText(UTF8ToUTF16(cases[i].input), | 518 ElideRectangleText(UTF8ToUTF16(cases[i].input), |
519 font_list, | 519 font_list, |
520 cases[i].available_pixel_width, | 520 cases[i].available_pixel_width, |
521 cases[i].available_pixel_height, | 521 cases[i].available_pixel_height, |
522 TRUNCATE_LONG_WORDS, | 522 TRUNCATE_LONG_WORDS, |
523 &lines)); | 523 &lines, |
| 524 nullptr)); |
524 if (cases[i].output) { | 525 if (cases[i].output) { |
525 const std::string result = UTF16ToUTF8(JoinString(lines, '|')); | 526 const std::string result = UTF16ToUTF8(JoinString(lines, '|')); |
526 EXPECT_EQ(cases[i].output, result) << "Case " << i << " failed!"; | 527 EXPECT_EQ(cases[i].output, result) << "Case " << i << " failed!"; |
527 } else { | 528 } else { |
528 EXPECT_TRUE(lines.empty()) << "Case " << i << " failed!"; | 529 EXPECT_TRUE(lines.empty()) << "Case " << i << " failed!"; |
529 } | 530 } |
530 } | 531 } |
531 } | 532 } |
532 | 533 |
533 // TODO(338784): Enable this on android. | 534 // TODO(338784): Enable this on android. |
(...skipping 26 matching lines...) Expand all Loading... |
560 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { | 561 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { |
561 std::vector<base::string16> lines; | 562 std::vector<base::string16> lines; |
562 const WordWrapBehavior wrap_behavior = | 563 const WordWrapBehavior wrap_behavior = |
563 (cases[i].wrap_words ? WRAP_LONG_WORDS : TRUNCATE_LONG_WORDS); | 564 (cases[i].wrap_words ? WRAP_LONG_WORDS : TRUNCATE_LONG_WORDS); |
564 EXPECT_EQ(cases[i].truncated_x ? INSUFFICIENT_SPACE_HORIZONTAL : 0, | 565 EXPECT_EQ(cases[i].truncated_x ? INSUFFICIENT_SPACE_HORIZONTAL : 0, |
565 ElideRectangleText(UTF8ToUTF16(cases[i].input), | 566 ElideRectangleText(UTF8ToUTF16(cases[i].input), |
566 font_list, | 567 font_list, |
567 cases[i].available_pixel_width, | 568 cases[i].available_pixel_width, |
568 cases[i].available_pixel_height, | 569 cases[i].available_pixel_height, |
569 wrap_behavior, | 570 wrap_behavior, |
570 &lines)); | 571 &lines, |
| 572 nullptr)); |
571 if (cases[i].output) { | 573 if (cases[i].output) { |
572 const std::string result = UTF16ToUTF8(JoinString(lines, '|')); | 574 const std::string result = UTF16ToUTF8(JoinString(lines, '|')); |
573 EXPECT_EQ(cases[i].output, result) << "Case " << i << " failed!"; | 575 EXPECT_EQ(cases[i].output, result) << "Case " << i << " failed!"; |
574 } else { | 576 } else { |
575 EXPECT_TRUE(lines.empty()) << "Case " << i << " failed!"; | 577 EXPECT_TRUE(lines.empty()) << "Case " << i << " failed!"; |
576 } | 578 } |
577 } | 579 } |
578 } | 580 } |
579 | 581 |
580 // TODO(338784): Enable this on android. | 582 // TODO(338784): Enable this on android. |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
628 }; | 630 }; |
629 | 631 |
630 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { | 632 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { |
631 std::vector<base::string16> lines; | 633 std::vector<base::string16> lines; |
632 EXPECT_EQ(cases[i].truncated_x ? INSUFFICIENT_SPACE_HORIZONTAL : 0, | 634 EXPECT_EQ(cases[i].truncated_x ? INSUFFICIENT_SPACE_HORIZONTAL : 0, |
633 ElideRectangleText(UTF8ToUTF16(cases[i].input), | 635 ElideRectangleText(UTF8ToUTF16(cases[i].input), |
634 font_list, | 636 font_list, |
635 cases[i].available_pixel_width, | 637 cases[i].available_pixel_width, |
636 kAvailableHeight, | 638 kAvailableHeight, |
637 cases[i].wrap_behavior, | 639 cases[i].wrap_behavior, |
638 &lines)); | 640 &lines, |
| 641 nullptr)); |
639 std::string expected_output(cases[i].output); | 642 std::string expected_output(cases[i].output); |
640 ReplaceSubstringsAfterOffset(&expected_output, 0, "...", kEllipsis); | 643 ReplaceSubstringsAfterOffset(&expected_output, 0, "...", kEllipsis); |
641 const std::string result = UTF16ToUTF8(JoinString(lines, '|')); | 644 const std::string result = UTF16ToUTF8(JoinString(lines, '|')); |
642 EXPECT_EQ(expected_output, result) << "Case " << i << " failed!"; | 645 EXPECT_EQ(expected_output, result) << "Case " << i << " failed!"; |
643 } | 646 } |
644 } | 647 } |
645 | 648 |
646 // This test is to make sure that the width of each wrapped line does not | 649 // This test is to make sure that the width of each wrapped line does not |
647 // exceed the available width. On some platform like Mac, this test used to | 650 // exceed the available width. On some platform like Mac, this test used to |
648 // fail because the truncated integer width is returned for the string | 651 // fail because the truncated integer width is returned for the string |
649 // and the accumulation of the truncated values causes the elide function | 652 // and the accumulation of the truncated values causes the elide function |
650 // to wrap incorrectly. | 653 // to wrap incorrectly. |
651 // TODO(338784): Enable this on android. | 654 // TODO(338784): Enable this on android. |
652 #if defined(OS_ANDROID) | 655 #if defined(OS_ANDROID) |
653 #define MAYBE_ElideRectangleTextCheckLineWidth \ | 656 #define MAYBE_ElideRectangleTextCheckLineWidth \ |
654 DISABLED_ElideRectangleTextCheckLineWidth | 657 DISABLED_ElideRectangleTextCheckLineWidth |
655 #else | 658 #else |
656 #define MAYBE_ElideRectangleTextCheckLineWidth ElideRectangleTextCheckLineWidth | 659 #define MAYBE_ElideRectangleTextCheckLineWidth ElideRectangleTextCheckLineWidth |
657 #endif | 660 #endif |
658 TEST(TextEliderTest, MAYBE_ElideRectangleTextCheckLineWidth) { | 661 TEST(TextEliderTest, MAYBE_ElideRectangleTextCheckLineWidth) { |
659 FontList font_list; | 662 FontList font_list; |
660 #if defined(OS_MACOSX) && !defined(OS_IOS) | 663 #if defined(OS_MACOSX) && !defined(OS_IOS) |
661 // Use a specific font to expose the line width exceeding problem. | 664 // Use a specific font to expose the line width exceeding problem. |
662 font_list = FontList(Font("LucidaGrande", 12)); | 665 font_list = FontList(Font("LucidaGrande", 12)); |
663 #endif | 666 #endif |
664 const float kAvailableWidth = 235; | 667 const float kAvailableWidth = 235; |
665 const int kAvailableHeight = 1000; | 668 const int kAvailableHeight = 1000; |
666 const char text[] = "that Russian place we used to go to after fencing"; | 669 const char text[] = "that Russian place we used to go to after fencing"; |
667 std::vector<base::string16> lines; | 670 std::vector<base::string16> lines; |
668 EXPECT_EQ(0, ElideRectangleText(UTF8ToUTF16(text), | 671 EXPECT_EQ(0, |
669 font_list, | 672 ElideRectangleText(UTF8ToUTF16(text), |
670 kAvailableWidth, | 673 font_list, |
671 kAvailableHeight, | 674 kAvailableWidth, |
672 WRAP_LONG_WORDS, | 675 kAvailableHeight, |
673 &lines)); | 676 WRAP_LONG_WORDS, |
| 677 &lines, |
| 678 nullptr)); |
674 ASSERT_EQ(2u, lines.size()); | 679 ASSERT_EQ(2u, lines.size()); |
675 EXPECT_LE(GetStringWidthF(lines[0], font_list), kAvailableWidth); | 680 EXPECT_LE(GetStringWidthF(lines[0], font_list), kAvailableWidth); |
676 EXPECT_LE(GetStringWidthF(lines[1], font_list), kAvailableWidth); | 681 EXPECT_LE(GetStringWidthF(lines[1], font_list), kAvailableWidth); |
677 } | 682 } |
678 | 683 |
679 TEST(TextEliderTest, ElideRectangleString) { | 684 TEST(TextEliderTest, ElideRectangleString) { |
680 struct TestData { | 685 struct TestData { |
681 const char* input; | 686 const char* input; |
682 int max_rows; | 687 int max_rows; |
683 int max_cols; | 688 int max_cols; |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
917 // Test adds ... at right spot within a word. | 922 // Test adds ... at right spot within a word. |
918 EXPECT_EQ(L"f\x2026", UTF16ToWide(TruncateString(string, 2, | 923 EXPECT_EQ(L"f\x2026", UTF16ToWide(TruncateString(string, 2, |
919 CHARACTER_BREAK))); | 924 CHARACTER_BREAK))); |
920 | 925 |
921 // Test removes trailing whitespace if break falls between words. | 926 // Test removes trailing whitespace if break falls between words. |
922 EXPECT_EQ(L"foooooey\x2026", UTF16ToWide(TruncateString(string, 12, | 927 EXPECT_EQ(L"foooooey\x2026", UTF16ToWide(TruncateString(string, 12, |
923 CHARACTER_BREAK))); | 928 CHARACTER_BREAK))); |
924 } | 929 } |
925 | 930 |
926 } // namespace gfx | 931 } // namespace gfx |
OLD | NEW |