| Index: ui/gfx/text_elider_unittest.cc
|
| diff --git a/ui/gfx/text_elider_unittest.cc b/ui/gfx/text_elider_unittest.cc
|
| index 2a90e5d73cbcca9366f4fa2eeab1a8246fb97284..b4989406278c33a38175a3ce621b5188f1c5e632 100644
|
| --- a/ui/gfx/text_elider_unittest.cc
|
| +++ b/ui/gfx/text_elider_unittest.cc
|
| @@ -13,6 +13,8 @@
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "ui/gfx/font.h"
|
| +#include "ui/gfx/font_list.h"
|
| +#include "ui/gfx/text_utils.h"
|
| #include "url/gurl.h"
|
|
|
| namespace gfx {
|
| @@ -53,24 +55,10 @@ void RunUrlTest(Testcase* testcases, size_t num_testcases) {
|
| }
|
| }
|
|
|
| -gfx::Font GetTestingFont() {
|
| - gfx::Font font;
|
| -#if defined(OS_MACOSX)
|
| - // Use a specific font for certain tests on Mac.
|
| - // 1) Different Mac machines might be configured with different default font.
|
| - // The number of extra pixels needed to make ElideEmail/TestFilenameEliding
|
| - // tests work might vary per the default font.
|
| - // 2) This specific font helps expose the line width exceeding problem as in
|
| - // ElideRectangleTextCheckLineWidth.
|
| - font = gfx::Font("LucidaGrande", 12);
|
| -#endif
|
| - return font;
|
| -}
|
| -
|
| } // namespace
|
|
|
| -// TODO(ios): Complex eliding is off by one for some of those tests on iOS.
|
| -// See crbug.com/154019
|
| +// TODO(ios): This test fails on iOS because iOS version of gfx::GetStringWidth
|
| +// that calls [NSString sizeWithFont] returns the rounded string width.
|
| #if defined(OS_IOS)
|
| #define MAYBE_ElideEmail DISABLED_ElideEmail
|
| #else
|
| @@ -121,22 +109,13 @@ TEST(TextEliderTest, MAYBE_ElideEmail) {
|
| {"mmmmm@llllllllll", "m" + kEllipsisStr + "@l" + kEllipsisStr},
|
| };
|
|
|
| - const gfx::Font font = GetTestingFont();
|
| + const gfx::Font font;
|
| for (size_t i = 0; i < arraysize(testcases); ++i) {
|
| const string16 expected_output = UTF8ToUTF16(testcases[i].output);
|
| - int available_width = font.GetStringWidth(expected_output);
|
| -#if defined(OS_MACOSX)
|
| - // Give two extra pixels to offset the ceiling width returned by
|
| - // GetStringWidth on Mac. This workaround will no longer be needed once
|
| - // the floating point width is adopted (http://crbug.com/288987).
|
| - // Note that we need one more pixel than TestFilenameEliding because
|
| - // multiple strings are elided and we need to offset more.
|
| - available_width += 2;
|
| -#endif
|
| EXPECT_EQ(expected_output,
|
| ElideEmail(UTF8ToUTF16(testcases[i].input),
|
| font,
|
| - available_width));
|
| + font.GetStringWidth(expected_output)));
|
| }
|
| }
|
|
|
| @@ -201,7 +180,7 @@ TEST(TextEliderTest, TestTrailingEllipsisSlashEllipsisHack) {
|
| // Very little space, would cause double ellipsis.
|
| gfx::Font font;
|
| GURL url("http://battersbox.com/directory/foo/peter_paul_and_mary.html");
|
| - int available_width = font.GetStringWidth(
|
| + float available_width = font.GetStringWidth(
|
| UTF8ToUTF16("battersbox.com/" + kEllipsisStr + "/" + kEllipsisStr));
|
|
|
| // Create the expected string, after elision. Depending on font size, the
|
| @@ -288,7 +267,8 @@ TEST(TextEliderTest, TestFileURLEliding) {
|
| RunUrlTest(testcases, arraysize(testcases));
|
| }
|
|
|
| -// TODO(ios): Complex eliding is off by one for some of those tests on iOS.
|
| +// TODO(ios): This test fails on iOS because iOS version of gfx::GetStringWidth
|
| +// that calls [NSString sizeWithFont] returns the rounded string width.
|
| // See crbug.com/154019
|
| #if defined(OS_IOS)
|
| #define MAYBE_TestFilenameEliding DISABLED_TestFilenameEliding
|
| @@ -334,28 +314,22 @@ TEST(TextEliderTest, MAYBE_TestFilenameEliding) {
|
| "file.name.re" + kEllipsisStr + "emelylongext"}
|
| };
|
|
|
| - static const gfx::Font font = GetTestingFont();
|
| + static const gfx::Font font;
|
| for (size_t i = 0; i < arraysize(testcases); ++i) {
|
| base::FilePath filepath(testcases[i].input);
|
| string16 expected = UTF8ToUTF16(testcases[i].output);
|
| expected = base::i18n::GetDisplayStringInLTRDirectionality(expected);
|
| - int available_width = font.GetStringWidth(UTF8ToUTF16(testcases[i].output));
|
| -#if defined(OS_MACOSX)
|
| - // Give one extra pixel to offset the ceiling width returned by
|
| - // GetStringWidth on Mac. This workaround will no longer be needed once
|
| - // the floating point width is adopted (http://crbug.com/288987).
|
| - available_width += 1;
|
| -#endif
|
| - EXPECT_EQ(expected, ElideFilename(filepath, font, available_width));
|
| + EXPECT_EQ(expected, ElideFilename(filepath, font,
|
| + font.GetStringWidth(UTF8ToUTF16(testcases[i].output))));
|
| }
|
| }
|
|
|
| TEST(TextEliderTest, ElideTextTruncate) {
|
| const gfx::Font font;
|
| - const int kTestWidth = font.GetStringWidth(ASCIIToUTF16("Test"));
|
| + const float kTestWidth = font.GetStringWidth(ASCIIToUTF16("Test"));
|
| struct TestData {
|
| const char* input;
|
| - int width;
|
| + float width;
|
| const char* output;
|
| } cases[] = {
|
| { "", 0, "" },
|
| @@ -375,12 +349,12 @@ TEST(TextEliderTest, ElideTextTruncate) {
|
|
|
| TEST(TextEliderTest, ElideTextEllipsis) {
|
| const gfx::Font font;
|
| - const int kTestWidth = font.GetStringWidth(ASCIIToUTF16("Test"));
|
| + const float kTestWidth = font.GetStringWidth(ASCIIToUTF16("Test"));
|
| const char* kEllipsis = "\xE2\x80\xA6";
|
| - const int kEllipsisWidth = font.GetStringWidth(UTF8ToUTF16(kEllipsis));
|
| + const float kEllipsisWidth = font.GetStringWidth(UTF8ToUTF16(kEllipsis));
|
| struct TestData {
|
| const char* input;
|
| - int width;
|
| + float width;
|
| const char* output;
|
| } cases[] = {
|
| { "", 0, "" },
|
| @@ -424,14 +398,14 @@ TEST(TextEliderTest, ElideTextSurrogatePairs) {
|
| const std::string kSurrogate = "\xF0\x9D\x84\x9E";
|
| const string16 kTestString =
|
| UTF8ToUTF16(kSurrogate + "ab" + kSurrogate + kSurrogate + "cd");
|
| - const int kTestStringWidth = font.GetStringWidth(kTestString);
|
| + const float kTestStringWidth = font.GetStringWidth(kTestString);
|
| const char16 kSurrogateFirstChar = kTestString[0];
|
| const char16 kSurrogateSecondChar = kTestString[1];
|
| string16 result;
|
|
|
| // Elide |kTextString| to all possible widths and check that no instance of
|
| // |kSurrogate| was split in two.
|
| - for (int width = 0; width <= kTestStringWidth; width++) {
|
| + for (float width = 0; width <= kTestStringWidth; width++) {
|
| result = ElideText(kTestString, font, width, TRUNCATE_AT_END);
|
| CheckSurrogatePairs(result, kSurrogateFirstChar, kSurrogateSecondChar);
|
|
|
| @@ -468,7 +442,7 @@ TEST(TextEliderTest, ElideTextLongStrings) {
|
| };
|
|
|
| const gfx::Font font;
|
| - int ellipsis_width = font.GetStringWidth(kEllipsisStr);
|
| + float ellipsis_width = font.GetStringWidth(kEllipsisStr);
|
| for (size_t i = 0; i < arraysize(testcases_end); ++i) {
|
| // Compare sizes rather than actual contents because if the test fails,
|
| // output is rather long.
|
| @@ -581,13 +555,13 @@ TEST(TextEliderTest, ElideString) {
|
|
|
| TEST(TextEliderTest, ElideRectangleText) {
|
| const gfx::Font font;
|
| - const int line_height = font.GetHeight();
|
| - const int test_width = font.GetStringWidth(ASCIIToUTF16("Test"));
|
| + const float line_height = font.GetHeight();
|
| + const float test_width = font.GetStringWidth(ASCIIToUTF16("Test"));
|
|
|
| struct TestData {
|
| const char* input;
|
| - int available_pixel_width;
|
| - int available_pixel_height;
|
| + float available_pixel_width;
|
| + float available_pixel_height;
|
| bool truncated_y;
|
| const char* output;
|
| } cases[] = {
|
| @@ -638,14 +612,14 @@ TEST(TextEliderTest, ElideRectangleText) {
|
|
|
| TEST(TextEliderTest, ElideRectangleTextPunctuation) {
|
| const gfx::Font font;
|
| - const int line_height = font.GetHeight();
|
| - const int test_width = font.GetStringWidth(ASCIIToUTF16("Test"));
|
| - const int test_t_width = font.GetStringWidth(ASCIIToUTF16("Test T"));
|
| + const float line_height = font.GetHeight();
|
| + const float test_width = font.GetStringWidth(ASCIIToUTF16("Test"));
|
| + const float test_t_width = font.GetStringWidth(ASCIIToUTF16("Test T"));
|
|
|
| struct TestData {
|
| const char* input;
|
| - int available_pixel_width;
|
| - int available_pixel_height;
|
| + float available_pixel_width;
|
| + float available_pixel_height;
|
| bool wrap_words;
|
| bool truncated_x;
|
| const char* output;
|
| @@ -678,14 +652,14 @@ TEST(TextEliderTest, ElideRectangleTextPunctuation) {
|
|
|
| TEST(TextEliderTest, ElideRectangleTextLongWords) {
|
| const gfx::Font font;
|
| - const int kAvailableHeight = 1000;
|
| + const float kAvailableHeight = 1000;
|
| const string16 kElidedTesting = UTF8ToUTF16(std::string("Tes") + kEllipsis);
|
| - const int elided_width = font.GetStringWidth(kElidedTesting);
|
| - const int test_width = font.GetStringWidth(ASCIIToUTF16("Test"));
|
| + const float elided_width = font.GetStringWidth(kElidedTesting);
|
| + const float test_width = font.GetStringWidth(ASCIIToUTF16("Test"));
|
|
|
| struct TestData {
|
| const char* input;
|
| - int available_pixel_width;
|
| + float available_pixel_width;
|
| WordWrapBehavior wrap_behavior;
|
| bool truncated_x;
|
| const char* output;
|
| @@ -735,24 +709,19 @@ TEST(TextEliderTest, ElideRectangleTextLongWords) {
|
| }
|
| }
|
|
|
| -// TODO(ios): Complex eliding is off by one for some of those tests on iOS.
|
| -// See crbug.com/154019
|
| -#if defined(OS_IOS)
|
| -#define MAYBE_ElideRectangleTextCheckLineWidth \
|
| - DISABLED_ElideRectangleTextCheckLineWidth
|
| -#else
|
| -#define MAYBE_ElideRectangleTextCheckLineWidth ElideRectangleTextCheckLineWidth
|
| -#endif
|
| -
|
| // This test is to make sure that the width of each wrapped line does not
|
| // exceed the available width. On some platform like Mac, this test used to
|
| // fail because the truncated integer width is returned for the string
|
| // and the accumulation of the truncated values causes the elide function
|
| // to wrap incorrectly.
|
| -TEST(TextEliderTest, MAYBE_ElideRectangleTextCheckLineWidth) {
|
| - gfx::Font font = GetTestingFont();
|
| - const int kAvailableWidth = 235;
|
| - const int kAvailableHeight = 1000;
|
| +TEST(TextEliderTest, ElideRectangleTextCheckLineWidth) {
|
| + gfx::Font font;
|
| +#if defined(OS_MACOSX) && !defined(OS_IOS)
|
| + // Use a specific font to expose the line width exceeding problem.
|
| + font = gfx::Font("LucidaGrande", 12);
|
| +#endif
|
| + const float kAvailableWidth = 235;
|
| + const float kAvailableHeight = 1000;
|
| const char text[] = "that Russian place we used to go to after fencing";
|
| std::vector<string16> lines;
|
| EXPECT_EQ(0, ElideRectangleText(UTF8ToUTF16(text),
|
|
|