OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "app/text_elider.h" | 5 #include "app/text_elider.h" |
6 #include "base/file_path.h" | 6 #include "base/file_path.h" |
7 #include "base/i18n/rtl.h" | 7 #include "base/i18n/rtl.h" |
8 #include "base/scoped_ptr.h" | 8 #include "base/scoped_ptr.h" |
9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 { L"Hello, my name is Tom", 5, true, L"H...m" }, | 312 { L"Hello, my name is Tom", 5, true, L"H...m" }, |
313 { L"Hello, my name is Tom", 6, true, L"He...m" }, | 313 { L"Hello, my name is Tom", 6, true, L"He...m" }, |
314 { L"Hello, my name is Tom", 7, true, L"He...om" }, | 314 { L"Hello, my name is Tom", 7, true, L"He...om" }, |
315 { L"Hello, my name is Tom", 10, true, L"Hell...Tom" }, | 315 { L"Hello, my name is Tom", 10, true, L"Hell...Tom" }, |
316 { L"Hello, my name is Tom", 100, false, L"Hello, my name is Tom" } | 316 { L"Hello, my name is Tom", 100, false, L"Hello, my name is Tom" } |
317 }; | 317 }; |
318 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { | 318 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { |
319 std::wstring output; | 319 std::wstring output; |
320 EXPECT_EQ(cases[i].result, | 320 EXPECT_EQ(cases[i].result, |
321 gfx::ElideString(cases[i].input, cases[i].max_len, &output)); | 321 gfx::ElideString(cases[i].input, cases[i].max_len, &output)); |
322 EXPECT_TRUE(output == cases[i].output); | 322 EXPECT_EQ(cases[i].output, output); |
323 } | 323 } |
324 } | 324 } |
| 325 |
| 326 TEST(TextEliderTest, ElideRectangleString) { |
| 327 struct TestData { |
| 328 const wchar_t* input; |
| 329 int max_rows; |
| 330 int max_cols; |
| 331 bool result; |
| 332 const wchar_t* output; |
| 333 } cases[] = { |
| 334 { L"", 0, 0, false, L"" }, |
| 335 { L"", 1, 1, false, L"" }, |
| 336 { L"Hi, my name is\nTom", 0, 0, true, L"..." }, |
| 337 { L"Hi, my name is\nTom", 1, 0, true, L"\n..." }, |
| 338 { L"Hi, my name is\nTom", 0, 1, true, L"..." }, |
| 339 { L"Hi, my name is\nTom", 1, 1, true, L"H\n..." }, |
| 340 { L"Hi, my name is\nTom", 2, 1, true, L"H\ni\n..." }, |
| 341 { L"Hi, my name is\nTom", 3, 1, true, L"H\ni\n,\n..." }, |
| 342 { L"Hi, my name is\nTom", 4, 1, true, L"H\ni\n,\n \n..." }, |
| 343 { L"Hi, my name is\nTom", 5, 1, true, L"H\ni\n,\n \nm\n..." }, |
| 344 { L"Hi, my name is\nTom", 0, 2, true, L"..." }, |
| 345 { L"Hi, my name is\nTom", 1, 2, true, L"Hi\n..." }, |
| 346 { L"Hi, my name is\nTom", 2, 2, true, L"Hi\n, \n..." }, |
| 347 { L"Hi, my name is\nTom", 3, 2, true, L"Hi\n, \nmy\n..." }, |
| 348 { L"Hi, my name is\nTom", 4, 2, true, L"Hi\n, \nmy\n n\n..." }, |
| 349 { L"Hi, my name is\nTom", 5, 2, true, L"Hi\n, \nmy\n n\nam\n..." }, |
| 350 { L"Hi, my name is\nTom", 0, 3, true, L"..." }, |
| 351 { L"Hi, my name is\nTom", 1, 3, true, L"Hi,\n..." }, |
| 352 { L"Hi, my name is\nTom", 2, 3, true, L"Hi,\n my\n..." }, |
| 353 { L"Hi, my name is\nTom", 3, 3, true, L"Hi,\n my\n na\n..." }, |
| 354 { L"Hi, my name is\nTom", 4, 3, true, L"Hi,\n my\n na\nme \n..." }, |
| 355 { L"Hi, my name is\nTom", 5, 3, true, L"Hi,\n my\n na\nme \nis\n..." }, |
| 356 { L"Hi, my name is\nTom", 1, 4, true, L"Hi, \n..." }, |
| 357 { L"Hi, my name is\nTom", 2, 4, true, L"Hi, \nmy n\n..." }, |
| 358 { L"Hi, my name is\nTom", 3, 4, true, L"Hi, \nmy n\name \n..." }, |
| 359 { L"Hi, my name is\nTom", 4, 4, true, L"Hi, \nmy n\name \nis\n..." }, |
| 360 { L"Hi, my name is\nTom", 5, 4, false, L"Hi, \nmy n\name \nis\nTom" }, |
| 361 { L"Hi, my name is\nTom", 1, 5, true, L"Hi, \n..." }, |
| 362 { L"Hi, my name is\nTom", 2, 5, true, L"Hi, \nmy na\n..." }, |
| 363 { L"Hi, my name is\nTom", 3, 5, true, L"Hi, \nmy na\nme \n..." }, |
| 364 { L"Hi, my name is\nTom", 4, 5, true, L"Hi, \nmy na\nme \nis\n..." }, |
| 365 { L"Hi, my name is\nTom", 5, 5, false, L"Hi, \nmy na\nme \nis\nTom" }, |
| 366 { L"Hi, my name is\nTom", 1, 6, true, L"Hi, \n..." }, |
| 367 { L"Hi, my name is\nTom", 2, 6, true, L"Hi, \nmy \n..." }, |
| 368 { L"Hi, my name is\nTom", 3, 6, true, L"Hi, \nmy \nname \n..." }, |
| 369 { L"Hi, my name is\nTom", 4, 6, true, L"Hi, \nmy \nname \nis\n..." }, |
| 370 { L"Hi, my name is\nTom", 5, 6, false, L"Hi, \nmy \nname \nis\nTom" }, |
| 371 { L"Hi, my name is\nTom", 1, 7, true, L"Hi, \n..." }, |
| 372 { L"Hi, my name is\nTom", 2, 7, true, L"Hi, \nmy \n..." }, |
| 373 { L"Hi, my name is\nTom", 3, 7, true, L"Hi, \nmy \nname \n..." }, |
| 374 { L"Hi, my name is\nTom", 4, 7, true, L"Hi, \nmy \nname \nis\n..." }, |
| 375 { L"Hi, my name is\nTom", 5, 7, false, L"Hi, \nmy \nname \nis\nTom" }, |
| 376 { L"Hi, my name is\nTom", 1, 8, true, L"Hi, my \n..." }, |
| 377 { L"Hi, my name is\nTom", 2, 8, true, L"Hi, my \nname \n..." }, |
| 378 { L"Hi, my name is\nTom", 3, 8, true, L"Hi, my \nname \nis\n..." }, |
| 379 { L"Hi, my name is\nTom", 4, 8, false, L"Hi, my \nname \nis\nTom" }, |
| 380 { L"Hi, my name is\nTom", 1, 9, true, L"Hi, my \n..." }, |
| 381 { L"Hi, my name is\nTom", 2, 9, true, L"Hi, my \nname is\n..." }, |
| 382 { L"Hi, my name is\nTom", 3, 9, false, L"Hi, my \nname is\nTom" }, |
| 383 { L"Hi, my name is\nTom", 1, 10, true, L"Hi, my \n..." }, |
| 384 { L"Hi, my name is\nTom", 2, 10, true, L"Hi, my \nname is\n..." }, |
| 385 { L"Hi, my name is\nTom", 3, 10, false, L"Hi, my \nname is\nTom" }, |
| 386 { L"Hi, my name is\nTom", 1, 11, true, L"Hi, my \n..." }, |
| 387 { L"Hi, my name is\nTom", 2, 11, true, L"Hi, my \nname is\n..." }, |
| 388 { L"Hi, my name is\nTom", 3, 11, false, L"Hi, my \nname is\nTom" }, |
| 389 { L"Hi, my name is\nTom", 1, 12, true, L"Hi, my \n..." }, |
| 390 { L"Hi, my name is\nTom", 2, 12, true, L"Hi, my \nname is\n..." }, |
| 391 { L"Hi, my name is\nTom", 3, 12, false, L"Hi, my \nname is\nTom" }, |
| 392 { L"Hi, my name is\nTom", 1, 13, true, L"Hi, my name \n..." }, |
| 393 { L"Hi, my name is\nTom", 2, 13, true, L"Hi, my name \nis\n..." }, |
| 394 { L"Hi, my name is\nTom", 3, 13, false, L"Hi, my name \nis\nTom" }, |
| 395 { L"Hi, my name is\nTom", 1, 20, true, L"Hi, my name is\n..." }, |
| 396 { L"Hi, my name is\nTom", 2, 20, false, L"Hi, my name is\nTom" }, |
| 397 { L"Hi, my name is Tom", 1, 40, false, L"Hi, my name is Tom" }, |
| 398 }; |
| 399 string16 output; |
| 400 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { |
| 401 EXPECT_EQ(cases[i].result, |
| 402 gfx::ElideRectangleString(WideToUTF16(cases[i].input), |
| 403 cases[i].max_rows, cases[i].max_cols, |
| 404 &output)); |
| 405 EXPECT_EQ(cases[i].output, UTF16ToWide(output)); |
| 406 } |
| 407 } |
| 408 |
| 409 TEST(TextEliderTest, ElideRectangleWide16) { |
| 410 // Two greek words separated by space. |
| 411 const string16 str(WideToUTF16( |
| 412 L"\x03a0\x03b1\x03b3\x03ba\x03cc\x03c3\x03bc\x03b9" |
| 413 L"\x03bf\x03c2\x0020\x0399\x03c3\x03c4\x03cc\x03c2")); |
| 414 const string16 out1(WideToUTF16( |
| 415 L"\x03a0\x03b1\x03b3\x03ba\n" |
| 416 L"\x03cc\x03c3\x03bc\x03b9\n" |
| 417 L"...")); |
| 418 const string16 out2(WideToUTF16( |
| 419 L"\x03a0\x03b1\x03b3\x03ba\x03cc\x03c3\x03bc\x03b9\x03bf\x03c2\x0020\n" |
| 420 L"\x0399\x03c3\x03c4\x03cc\x03c2")); |
| 421 string16 output; |
| 422 EXPECT_TRUE(gfx::ElideRectangleString(str, 2, 4, &output)); |
| 423 EXPECT_EQ(out1, output); |
| 424 EXPECT_FALSE(gfx::ElideRectangleString(str, 2, 12, &output)); |
| 425 EXPECT_EQ(out2, output); |
| 426 } |
| 427 |
| 428 TEST(TextEliderTest, ElideRectangleWide32) { |
| 429 // Four U+1D49C MATHEMATICAL SCRIPT CAPITAL A followed by space "aaaaa". |
| 430 const string16 str(UTF8ToUTF16( |
| 431 "\xF0\x9D\x92\x9C\xF0\x9D\x92\x9C\xF0\x9D\x92\x9C\xF0\x9D\x92\x9C" |
| 432 " aaaaa")); |
| 433 const string16 out(UTF8ToUTF16( |
| 434 "\xF0\x9D\x92\x9C\xF0\x9D\x92\x9C\xF0\x9D\x92\x9C\n" |
| 435 "\xF0\x9D\x92\x9C \naaa\n...")); |
| 436 string16 output; |
| 437 EXPECT_TRUE(gfx::ElideRectangleString(str, 3, 3, &output)); |
| 438 EXPECT_EQ(out, output); |
| 439 } |
| 440 |
OLD | NEW |