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" }, | |
Evan Martin
2010/12/21 23:39:18
Awesome test suite!
| |
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 |