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

Side by Side Diff: ui/base/text/text_elider_unittest.cc

Issue 13846005: Fix infinite loop caused by ElideText() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix android failure Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/base/text/text_elider.cc ('k') | ui/views/controls/label_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4 //
5 // Unit tests for eliding and formatting utility functions. 5 // Unit tests for eliding and formatting utility functions.
6 6
7 #include "ui/base/text/text_elider.h" 7 #include "ui/base/text/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 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 { "Tests", kTestWidth, "Test" }, 338 { "Tests", kTestWidth, "Test" },
339 }; 339 };
340 340
341 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { 341 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) {
342 string16 result = ElideText(UTF8ToUTF16(cases[i].input), font, 342 string16 result = ElideText(UTF8ToUTF16(cases[i].input), font,
343 cases[i].width, TRUNCATE_AT_END); 343 cases[i].width, TRUNCATE_AT_END);
344 EXPECT_EQ(cases[i].output, UTF16ToUTF8(result)); 344 EXPECT_EQ(cases[i].output, UTF16ToUTF8(result));
345 } 345 }
346 } 346 }
347 347
348 TEST(TextEliderTest, ElideTextEllipsis) {
349 const gfx::Font font;
350 const int kTestWidth = font.GetStringWidth(ASCIIToUTF16("Test"));
351 const char* kEllipsis = "\xE2\x80\xA6";
352 const int kEllipsisWidth = font.GetStringWidth(UTF8ToUTF16(kEllipsis));
353 struct TestData {
354 const char* input;
355 int width;
356 const char* output;
357 } cases[] = {
358 { "", 0, "" },
359 { "Test", 0, "" },
360 { "Test", kEllipsisWidth, kEllipsis },
361 { "", kTestWidth, "" },
362 { "Tes", kTestWidth, "Tes" },
363 { "Test", kTestWidth, "Test" },
364 };
365
366 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) {
367 string16 result = ElideText(UTF8ToUTF16(cases[i].input), font,
368 cases[i].width, ELIDE_AT_END);
369 EXPECT_EQ(cases[i].output, UTF16ToUTF8(result));
370 }
371 }
372
348 // Checks that all occurrences of |first_char| are followed by |second_char| and 373 // Checks that all occurrences of |first_char| are followed by |second_char| and
349 // all occurrences of |second_char| are preceded by |first_char| in |text|. 374 // all occurrences of |second_char| are preceded by |first_char| in |text|.
350 static void CheckSurrogatePairs(const string16& text, 375 static void CheckSurrogatePairs(const string16& text,
351 char16 first_char, 376 char16 first_char,
352 char16 second_char) { 377 char16 second_char) {
353 size_t index = text.find_first_of(first_char); 378 size_t index = text.find_first_of(first_char);
354 while (index != string16::npos) { 379 while (index != string16::npos) {
355 EXPECT_LT(index, text.length() - 1); 380 EXPECT_LT(index, text.length() - 1);
356 EXPECT_EQ(second_char, text[index + 1]); 381 EXPECT_EQ(second_char, text[index + 1]);
357 index = text.find_first_of(first_char, index + 1); 382 index = text.find_first_of(first_char, index + 1);
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after
900 925
901 // Test adds ... at right spot when there is not enough room to break at a 926 // Test adds ... at right spot when there is not enough room to break at a
902 // word boundary. 927 // word boundary.
903 EXPECT_EQ(L"foooooey\x2026", UTF16ToWide(TruncateString(string, 11))); 928 EXPECT_EQ(L"foooooey\x2026", UTF16ToWide(TruncateString(string, 11)));
904 929
905 // Test completely truncates string if break is on initial whitespace. 930 // Test completely truncates string if break is on initial whitespace.
906 EXPECT_EQ(L"\x2026", UTF16ToWide(TruncateString(ASCIIToUTF16(" "), 2))); 931 EXPECT_EQ(L"\x2026", UTF16ToWide(TruncateString(ASCIIToUTF16(" "), 2)));
907 } 932 }
908 933
909 } // namespace ui 934 } // namespace ui
OLDNEW
« no previous file with comments | « ui/base/text/text_elider.cc ('k') | ui/views/controls/label_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698