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 #include "ui/views/controls/label.h" | 5 #include "ui/views/controls/label.h" |
6 | 6 |
7 #include "base/i18n/rtl.h" | 7 #include "base/i18n/rtl.h" |
8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 #include "ui/accessibility/ax_view_state.h" | 10 #include "ui/accessibility/ax_view_state.h" |
11 #include "ui/base/l10n/l10n_util.h" | 11 #include "ui/base/l10n/l10n_util.h" |
12 #include "ui/gfx/canvas.h" | 12 #include "ui/gfx/canvas.h" |
13 #include "ui/views/border.h" | 13 #include "ui/views/border.h" |
14 | 14 |
15 using base::ASCIIToUTF16; | 15 using base::ASCIIToUTF16; |
16 | 16 |
17 namespace views { | 17 namespace views { |
18 | 18 |
19 // All text sizing measurements (width and height) should be greater than this. | 19 // All text sizing measurements (width and height) should be greater than this. |
20 const int kMinTextDimension = 4; | 20 const int kMinTextDimension = 4; |
21 | 21 |
| 22 // A test utility function to set the application default text direction. |
| 23 void SetRTL(bool rtl) { |
| 24 // Override the current locale/direction. |
| 25 base::i18n::SetICUDefaultLocale(rtl ? "he" : "en"); |
| 26 EXPECT_EQ(rtl, base::i18n::IsRTL()); |
| 27 } |
| 28 |
22 TEST(LabelTest, FontPropertySymbol) { | 29 TEST(LabelTest, FontPropertySymbol) { |
23 Label label; | 30 Label label; |
24 std::string font_name("symbol"); | 31 std::string font_name("symbol"); |
25 gfx::Font font(font_name, 26); | 32 gfx::Font font(font_name, 26); |
26 label.SetFontList(gfx::FontList(font)); | 33 label.SetFontList(gfx::FontList(font)); |
27 gfx::Font font_used = label.font_list().GetPrimaryFont(); | 34 gfx::Font font_used = label.font_list().GetPrimaryFont(); |
28 EXPECT_EQ(font_name, font_used.GetFontName()); | 35 EXPECT_EQ(font_name, font_used.GetFontName()); |
29 EXPECT_EQ(26, font_used.GetFontSize()); | 36 EXPECT_EQ(26, font_used.GetFontSize()); |
30 } | 37 } |
31 | 38 |
(...skipping 16 matching lines...) Expand all Loading... |
48 | 55 |
49 TEST(LabelTest, ColorProperty) { | 56 TEST(LabelTest, ColorProperty) { |
50 Label label; | 57 Label label; |
51 SkColor color = SkColorSetARGB(20, 40, 10, 5); | 58 SkColor color = SkColorSetARGB(20, 40, 10, 5); |
52 label.SetAutoColorReadabilityEnabled(false); | 59 label.SetAutoColorReadabilityEnabled(false); |
53 label.SetEnabledColor(color); | 60 label.SetEnabledColor(color); |
54 EXPECT_EQ(color, label.enabled_color()); | 61 EXPECT_EQ(color, label.enabled_color()); |
55 } | 62 } |
56 | 63 |
57 TEST(LabelTest, AlignmentProperty) { | 64 TEST(LabelTest, AlignmentProperty) { |
58 Label label; | 65 const bool was_rtl = base::i18n::IsRTL(); |
59 bool reverse_alignment = base::i18n::IsRTL(); | 66 |
60 | 67 Label label; |
61 label.SetHorizontalAlignment(gfx::ALIGN_RIGHT); | 68 for (size_t i = 0; i < 2; ++i) { |
62 EXPECT_EQ(reverse_alignment ? gfx::ALIGN_LEFT : gfx::ALIGN_RIGHT, | 69 // Toggle the application default text direction (to try each direction). |
63 label.horizontal_alignment()); | 70 SetRTL(!base::i18n::IsRTL()); |
64 label.SetHorizontalAlignment(gfx::ALIGN_LEFT); | 71 bool reverse_alignment = base::i18n::IsRTL(); |
65 EXPECT_EQ(reverse_alignment ? gfx::ALIGN_RIGHT : gfx::ALIGN_LEFT, | 72 |
66 label.horizontal_alignment()); | 73 // The alignment should be flipped in RTL UI. |
67 label.SetHorizontalAlignment(gfx::ALIGN_CENTER); | 74 label.SetHorizontalAlignment(gfx::ALIGN_RIGHT); |
68 EXPECT_EQ(gfx::ALIGN_CENTER, label.horizontal_alignment()); | 75 EXPECT_EQ(reverse_alignment ? gfx::ALIGN_LEFT : gfx::ALIGN_RIGHT, |
69 | 76 label.GetHorizontalAlignment()); |
70 // The label's alignment should not be flipped if the directionality mode is | 77 label.SetHorizontalAlignment(gfx::ALIGN_LEFT); |
71 // AUTO_DETECT_DIRECTIONALITY. | 78 EXPECT_EQ(reverse_alignment ? gfx::ALIGN_RIGHT : gfx::ALIGN_LEFT, |
72 label.set_directionality_mode(Label::AUTO_DETECT_DIRECTIONALITY); | 79 label.GetHorizontalAlignment()); |
73 label.SetHorizontalAlignment(gfx::ALIGN_RIGHT); | 80 label.SetHorizontalAlignment(gfx::ALIGN_CENTER); |
74 EXPECT_EQ(gfx::ALIGN_RIGHT, label.horizontal_alignment()); | 81 EXPECT_EQ(gfx::ALIGN_CENTER, label.GetHorizontalAlignment()); |
75 label.SetHorizontalAlignment(gfx::ALIGN_LEFT); | 82 |
76 EXPECT_EQ(gfx::ALIGN_LEFT, label.horizontal_alignment()); | 83 for (size_t j = 0; j < 2; ++j) { |
77 label.SetHorizontalAlignment(gfx::ALIGN_CENTER); | 84 label.SetHorizontalAlignment(gfx::ALIGN_TO_HEAD); |
78 EXPECT_EQ(gfx::ALIGN_CENTER, label.horizontal_alignment()); | 85 const bool rtl = j == 0; |
| 86 label.SetText(rtl ? base::WideToUTF16(L"\x5d0") : ASCIIToUTF16("A")); |
| 87 EXPECT_EQ(rtl ? gfx::ALIGN_RIGHT : gfx::ALIGN_LEFT, |
| 88 label.GetHorizontalAlignment()); |
| 89 } |
| 90 } |
| 91 |
| 92 EXPECT_EQ(was_rtl, base::i18n::IsRTL()); |
79 } | 93 } |
80 | 94 |
81 TEST(LabelTest, DirectionalityModeProperty) { | 95 TEST(LabelTest, DirectionalityModeProperty) { |
82 Label label; | 96 Label label; |
83 EXPECT_EQ(Label::USE_UI_DIRECTIONALITY, label.directionality_mode()); | 97 EXPECT_EQ(gfx::DIRECTIONALITY_FROM_UI, label.directionality_mode()); |
84 | 98 |
85 label.set_directionality_mode(Label::AUTO_DETECT_DIRECTIONALITY); | 99 label.set_directionality_mode(gfx::DIRECTIONALITY_FROM_TEXT); |
86 EXPECT_EQ(Label::AUTO_DETECT_DIRECTIONALITY, label.directionality_mode()); | 100 EXPECT_EQ(gfx::DIRECTIONALITY_FROM_TEXT, label.directionality_mode()); |
87 | 101 |
88 label.set_directionality_mode(Label::USE_UI_DIRECTIONALITY); | 102 label.set_directionality_mode(gfx::DIRECTIONALITY_FROM_UI); |
89 EXPECT_EQ(Label::USE_UI_DIRECTIONALITY, label.directionality_mode()); | 103 EXPECT_EQ(gfx::DIRECTIONALITY_FROM_UI, label.directionality_mode()); |
90 } | 104 } |
91 | 105 |
92 TEST(LabelTest, MultiLineProperty) { | 106 TEST(LabelTest, MultiLineProperty) { |
93 Label label; | 107 Label label; |
94 EXPECT_FALSE(label.is_multi_line()); | 108 EXPECT_FALSE(label.is_multi_line()); |
95 label.SetMultiLine(true); | 109 label.SetMultiLine(true); |
96 EXPECT_TRUE(label.is_multi_line()); | 110 EXPECT_TRUE(label.is_multi_line()); |
97 label.SetMultiLine(false); | 111 label.SetMultiLine(false); |
98 EXPECT_FALSE(label.is_multi_line()); | 112 EXPECT_FALSE(label.is_multi_line()); |
99 } | 113 } |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
310 | 324 |
311 // GetPreferredSize and borders. | 325 // GetPreferredSize and borders. |
312 label.SetBounds(0, 0, 0, 0); | 326 label.SetBounds(0, 0, 0, 0); |
313 gfx::Size required_size_with_border = label.GetPreferredSize(); | 327 gfx::Size required_size_with_border = label.GetPreferredSize(); |
314 EXPECT_EQ(required_size_with_border.height(), | 328 EXPECT_EQ(required_size_with_border.height(), |
315 required_size.height() + border.height()); | 329 required_size.height() + border.height()); |
316 EXPECT_EQ(required_size_with_border.width(), | 330 EXPECT_EQ(required_size_with_border.width(), |
317 required_size.width() + border.width()); | 331 required_size.width() + border.width()); |
318 } | 332 } |
319 | 333 |
320 TEST(LabelTest, AutoDetectDirectionality) { | 334 TEST(LabelTest, DirectionalityFromText) { |
321 Label label; | 335 Label label; |
322 label.set_directionality_mode(Label::AUTO_DETECT_DIRECTIONALITY); | 336 label.set_directionality_mode(gfx::DIRECTIONALITY_FROM_TEXT); |
| 337 label.SetBounds(0, 0, 1000, 1000); |
| 338 base::string16 paint_text; |
| 339 gfx::Rect text_bounds; |
| 340 int flags = -1; |
323 | 341 |
324 // Test text starts with RTL character. | 342 // Test text starts with RTL character. |
325 label.SetText(base::WideToUTF16(L" \x5d0\x5d1\x5d2 abc")); | 343 label.SetText(base::WideToUTF16(L" \x5d0\x5d1\x5d2 abc")); |
326 gfx::Size required_size(label.GetPreferredSize()); | |
327 gfx::Size extra(22, 8); | |
328 label.SetBounds(0, 0, required_size.width() + extra.width(), | |
329 required_size.height() + extra.height()); | |
330 | |
331 base::string16 paint_text; | |
332 gfx::Rect text_bounds; | |
333 int flags; | |
334 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); | 344 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); |
335 EXPECT_EQ(gfx::Canvas::FORCE_RTL_DIRECTIONALITY, | 345 EXPECT_EQ(gfx::Canvas::FORCE_RTL_DIRECTIONALITY, |
336 flags & (gfx::Canvas::FORCE_RTL_DIRECTIONALITY | | 346 flags & (gfx::Canvas::FORCE_RTL_DIRECTIONALITY | |
337 gfx::Canvas::FORCE_LTR_DIRECTIONALITY)); | 347 gfx::Canvas::FORCE_LTR_DIRECTIONALITY)); |
338 | 348 |
339 // Test text starts with LTR character. | 349 // Test text starts with LTR character. |
340 label.SetText(base::WideToUTF16(L"ltr \x5d0\x5d1\x5d2 abc")); | 350 label.SetText(base::WideToUTF16(L"ltr \x5d0\x5d1\x5d2 abc")); |
341 required_size = label.GetPreferredSize(); | |
342 label.SetBounds(0, 0, required_size.width() + extra.width(), | |
343 required_size.height() + extra.height()); | |
344 | |
345 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); | 351 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); |
346 EXPECT_EQ(gfx::Canvas::FORCE_LTR_DIRECTIONALITY, | 352 EXPECT_EQ(gfx::Canvas::FORCE_LTR_DIRECTIONALITY, |
347 flags & (gfx::Canvas::FORCE_RTL_DIRECTIONALITY | | 353 flags & (gfx::Canvas::FORCE_RTL_DIRECTIONALITY | |
348 gfx::Canvas::FORCE_LTR_DIRECTIONALITY)); | 354 gfx::Canvas::FORCE_LTR_DIRECTIONALITY)); |
349 } | 355 } |
350 | 356 |
351 TEST(LabelTest, DrawSingleLineString) { | 357 TEST(LabelTest, DrawSingleLineString) { |
352 Label label; | 358 Label label; |
353 label.SetFocusable(false); | 359 label.SetFocusable(false); |
354 | 360 // Force a directionality to simplify alignment value testing. |
355 // Turn off mirroring so that we don't need to figure out if | 361 label.set_directionality_mode(gfx::DIRECTIONALITY_FORCE_LTR); |
356 // align right really means align left. | |
357 label.set_directionality_mode(Label::AUTO_DETECT_DIRECTIONALITY); | |
358 | 362 |
359 label.SetText(ASCIIToUTF16("Here's a string with no returns.")); | 363 label.SetText(ASCIIToUTF16("Here's a string with no returns.")); |
360 gfx::Size required_size(label.GetPreferredSize()); | 364 gfx::Size required_size(label.GetPreferredSize()); |
361 gfx::Size extra(22, 8); | 365 gfx::Size extra(22, 8); |
362 label.SetBounds(0, 0, required_size.width() + extra.width(), | 366 label.SetBounds(0, 0, required_size.width() + extra.width(), |
363 required_size.height() + extra.height()); | 367 required_size.height() + extra.height()); |
364 | 368 |
365 // Do some basic verifications for all three alignments. | 369 // Do some basic verifications for all three alignments. |
366 base::string16 paint_text; | 370 base::string16 paint_text; |
367 gfx::Rect text_bounds; | 371 gfx::Rect text_bounds; |
368 int flags; | 372 int flags = -1; |
369 | 373 |
370 // Centered text. | 374 // Centered text. |
371 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); | 375 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); |
372 EXPECT_EQ(label.text(), paint_text); | 376 EXPECT_EQ(label.text(), paint_text); |
373 // The text should be centered horizontally and vertically. | 377 // The text should be centered horizontally and vertically. |
374 EXPECT_EQ(extra.width() / 2, text_bounds.x()); | 378 EXPECT_EQ(extra.width() / 2, text_bounds.x()); |
375 EXPECT_EQ(extra.height() / 2 , text_bounds.y()); | 379 EXPECT_EQ(extra.height() / 2 , text_bounds.y()); |
376 EXPECT_EQ(required_size.width(), text_bounds.width()); | 380 EXPECT_EQ(required_size.width(), text_bounds.width()); |
377 EXPECT_EQ(required_size.height(), text_bounds.height()); | 381 EXPECT_EQ(required_size.height(), text_bounds.height()); |
378 EXPECT_EQ(gfx::Canvas::TEXT_ALIGN_CENTER, | 382 EXPECT_EQ(gfx::Canvas::TEXT_ALIGN_CENTER, |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
467 EXPECT_EQ(border.left() + extra.width(), text_bounds.x()); | 471 EXPECT_EQ(border.left() + extra.width(), text_bounds.x()); |
468 EXPECT_EQ(border.top() + extra.height() / 2 , text_bounds.y()); | 472 EXPECT_EQ(border.top() + extra.height() / 2 , text_bounds.y()); |
469 EXPECT_EQ(required_size.width(), text_bounds.width()); | 473 EXPECT_EQ(required_size.width(), text_bounds.width()); |
470 EXPECT_EQ(required_size.height(), text_bounds.height()); | 474 EXPECT_EQ(required_size.height(), text_bounds.height()); |
471 EXPECT_EQ(gfx::Canvas::TEXT_ALIGN_RIGHT, | 475 EXPECT_EQ(gfx::Canvas::TEXT_ALIGN_RIGHT, |
472 flags & (gfx::Canvas::TEXT_ALIGN_LEFT | | 476 flags & (gfx::Canvas::TEXT_ALIGN_LEFT | |
473 gfx::Canvas::TEXT_ALIGN_CENTER | | 477 gfx::Canvas::TEXT_ALIGN_CENTER | |
474 gfx::Canvas::TEXT_ALIGN_RIGHT)); | 478 gfx::Canvas::TEXT_ALIGN_RIGHT)); |
475 } | 479 } |
476 | 480 |
477 // On Linux the underlying pango routines require a max height in order to | 481 // Pango needs a max height to elide multiline text; that is not supported here. |
478 // ellide multiline text. So until that can be resolved, we set all | |
479 // multiline lables to not ellide in Linux only. | |
480 TEST(LabelTest, DrawMultiLineString) { | 482 TEST(LabelTest, DrawMultiLineString) { |
481 Label label; | 483 Label label; |
482 label.SetFocusable(false); | 484 label.SetFocusable(false); |
483 | 485 // Force a directionality to simplify alignment value testing. |
484 // Turn off mirroring so that we don't need to figure out if | 486 label.set_directionality_mode(gfx::DIRECTIONALITY_FORCE_LTR); |
485 // align right really means align left. | 487 // Set a background color to prevent gfx::Canvas::NO_SUBPIXEL_RENDERING flags. |
486 label.set_directionality_mode(Label::AUTO_DETECT_DIRECTIONALITY); | 488 label.SetBackgroundColor(SK_ColorWHITE); |
487 | 489 |
488 label.SetText(ASCIIToUTF16("Another string\nwith returns\n\n!")); | 490 label.SetText(ASCIIToUTF16("Another string\nwith returns\n\n!")); |
489 label.SetMultiLine(true); | 491 label.SetMultiLine(true); |
490 label.SizeToFit(0); | 492 label.SizeToFit(0); |
491 gfx::Size extra(50, 10); | 493 gfx::Size extra(50, 10); |
492 label.SetBounds(label.x(), label.y(), | 494 label.SetBounds(label.x(), label.y(), |
493 label.width() + extra.width(), | 495 label.width() + extra.width(), |
494 label.height() + extra.height()); | 496 label.height() + extra.height()); |
495 | 497 |
496 // Do some basic verifications for all three alignments. | 498 // Do some basic verifications for all three alignments. |
497 base::string16 paint_text; | 499 base::string16 paint_text; |
498 gfx::Rect text_bounds; | 500 gfx::Rect text_bounds; |
499 int flags; | 501 int flags = -1; |
500 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); | 502 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); |
501 EXPECT_EQ(label.text(), paint_text); | 503 EXPECT_EQ(label.text(), paint_text); |
502 EXPECT_EQ(extra.width() / 2, text_bounds.x()); | 504 EXPECT_EQ(extra.width() / 2, text_bounds.x()); |
503 EXPECT_EQ(extra.height() / 2, text_bounds.y()); | 505 EXPECT_EQ(extra.height() / 2, text_bounds.y()); |
504 EXPECT_GT(text_bounds.width(), kMinTextDimension); | 506 EXPECT_GT(text_bounds.width(), kMinTextDimension); |
505 EXPECT_GT(text_bounds.height(), kMinTextDimension); | 507 EXPECT_GT(text_bounds.height(), kMinTextDimension); |
506 int expected_flags = gfx::Canvas::MULTI_LINE | | 508 int expected_flags = gfx::Canvas::MULTI_LINE | |
507 gfx::Canvas::TEXT_ALIGN_CENTER | | 509 gfx::Canvas::TEXT_ALIGN_CENTER | |
508 gfx::Canvas::FORCE_LTR_DIRECTIONALITY; | 510 gfx::Canvas::FORCE_LTR_DIRECTIONALITY; |
509 #if !defined(OS_WIN) | 511 #if !defined(OS_WIN) |
510 expected_flags |= gfx::Canvas::NO_ELLIPSIS; | 512 expected_flags |= gfx::Canvas::NO_ELLIPSIS; |
511 #endif | 513 #endif |
512 EXPECT_EQ(expected_flags, expected_flags & flags); | 514 EXPECT_EQ(expected_flags, expected_flags); |
513 gfx::Rect center_bounds(text_bounds); | 515 gfx::Rect center_bounds(text_bounds); |
514 | 516 |
515 label.SetHorizontalAlignment(gfx::ALIGN_LEFT); | 517 label.SetHorizontalAlignment(gfx::ALIGN_LEFT); |
516 paint_text.clear(); | 518 paint_text.clear(); |
517 text_bounds.SetRect(0, 0, 0, 0); | 519 text_bounds.SetRect(0, 0, 0, 0); |
518 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); | 520 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); |
519 EXPECT_EQ(label.text(), paint_text); | 521 EXPECT_EQ(label.text(), paint_text); |
520 EXPECT_EQ(0, text_bounds.x()); | 522 EXPECT_EQ(0, text_bounds.x()); |
521 EXPECT_EQ(extra.height() / 2, text_bounds.y()); | 523 EXPECT_EQ(extra.height() / 2, text_bounds.y()); |
522 EXPECT_GT(text_bounds.width(), kMinTextDimension); | 524 EXPECT_GT(text_bounds.width(), kMinTextDimension); |
523 EXPECT_GT(text_bounds.height(), kMinTextDimension); | 525 EXPECT_GT(text_bounds.height(), kMinTextDimension); |
524 expected_flags = gfx::Canvas::MULTI_LINE | | 526 expected_flags = gfx::Canvas::MULTI_LINE | |
525 gfx::Canvas::TEXT_ALIGN_LEFT | | 527 gfx::Canvas::TEXT_ALIGN_LEFT | |
526 gfx::Canvas::FORCE_LTR_DIRECTIONALITY; | 528 gfx::Canvas::FORCE_LTR_DIRECTIONALITY; |
527 #if !defined(OS_WIN) | 529 #if !defined(OS_WIN) |
528 expected_flags |= gfx::Canvas::NO_ELLIPSIS; | 530 expected_flags |= gfx::Canvas::NO_ELLIPSIS; |
529 #endif | 531 #endif |
530 EXPECT_EQ(expected_flags, expected_flags & flags); | 532 EXPECT_EQ(expected_flags, expected_flags); |
531 | 533 |
532 label.SetHorizontalAlignment(gfx::ALIGN_RIGHT); | 534 label.SetHorizontalAlignment(gfx::ALIGN_RIGHT); |
533 paint_text.clear(); | 535 paint_text.clear(); |
534 text_bounds.SetRect(0, 0, 0, 0); | 536 text_bounds.SetRect(0, 0, 0, 0); |
535 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); | 537 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); |
536 EXPECT_EQ(label.text(), paint_text); | 538 EXPECT_EQ(label.text(), paint_text); |
537 EXPECT_EQ(extra.width(), text_bounds.x()); | 539 EXPECT_EQ(extra.width(), text_bounds.x()); |
538 EXPECT_EQ(extra.height() / 2, text_bounds.y()); | 540 EXPECT_EQ(extra.height() / 2, text_bounds.y()); |
539 EXPECT_GT(text_bounds.width(), kMinTextDimension); | 541 EXPECT_GT(text_bounds.width(), kMinTextDimension); |
540 EXPECT_GT(text_bounds.height(), kMinTextDimension); | 542 EXPECT_GT(text_bounds.height(), kMinTextDimension); |
541 expected_flags = gfx::Canvas::MULTI_LINE | | 543 expected_flags = gfx::Canvas::MULTI_LINE | |
542 gfx::Canvas::TEXT_ALIGN_RIGHT | | 544 gfx::Canvas::TEXT_ALIGN_RIGHT | |
543 gfx::Canvas::FORCE_LTR_DIRECTIONALITY; | 545 gfx::Canvas::FORCE_LTR_DIRECTIONALITY; |
544 #if !defined(OS_WIN) | 546 #if !defined(OS_WIN) |
545 expected_flags |= gfx::Canvas::NO_ELLIPSIS; | 547 expected_flags |= gfx::Canvas::NO_ELLIPSIS; |
546 #endif | 548 #endif |
547 EXPECT_EQ(expected_flags, expected_flags & flags); | 549 EXPECT_EQ(expected_flags, expected_flags); |
548 | 550 |
549 // Test multiline drawing with a border. | 551 // Test multiline drawing with a border. |
550 gfx::Insets border(19, 92, 23, 2); | 552 gfx::Insets border(19, 92, 23, 2); |
551 label.SetBorder(Border::CreateEmptyBorder( | 553 label.SetBorder(Border::CreateEmptyBorder( |
552 border.top(), border.left(), border.bottom(), border.right())); | 554 border.top(), border.left(), border.bottom(), border.right())); |
553 label.SizeToFit(0); | 555 label.SizeToFit(0); |
554 label.SetBounds(label.x(), label.y(), | 556 label.SetBounds(label.x(), label.y(), |
555 label.width() + extra.width(), | 557 label.width() + extra.width(), |
556 label.height() + extra.height()); | 558 label.height() + extra.height()); |
557 | 559 |
558 label.SetHorizontalAlignment(gfx::ALIGN_CENTER); | 560 label.SetHorizontalAlignment(gfx::ALIGN_CENTER); |
559 paint_text.clear(); | 561 paint_text.clear(); |
560 text_bounds.SetRect(0, 0, 0, 0); | 562 text_bounds.SetRect(0, 0, 0, 0); |
561 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); | 563 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); |
562 EXPECT_EQ(label.text(), paint_text); | 564 EXPECT_EQ(label.text(), paint_text); |
563 EXPECT_EQ(border.left() + extra.width() / 2, text_bounds.x()); | 565 EXPECT_EQ(border.left() + extra.width() / 2, text_bounds.x()); |
564 EXPECT_EQ(border.top() + extra.height() / 2, text_bounds.y()); | 566 EXPECT_EQ(border.top() + extra.height() / 2, text_bounds.y()); |
565 EXPECT_EQ(center_bounds.width(), text_bounds.width()); | 567 EXPECT_EQ(center_bounds.width(), text_bounds.width()); |
566 EXPECT_EQ(center_bounds.height(), text_bounds.height()); | 568 EXPECT_EQ(center_bounds.height(), text_bounds.height()); |
567 expected_flags = gfx::Canvas::MULTI_LINE | | 569 expected_flags = gfx::Canvas::MULTI_LINE | |
568 gfx::Canvas::TEXT_ALIGN_CENTER | | 570 gfx::Canvas::TEXT_ALIGN_CENTER | |
569 gfx::Canvas::FORCE_LTR_DIRECTIONALITY; | 571 gfx::Canvas::FORCE_LTR_DIRECTIONALITY; |
570 #if !defined(OS_WIN) | 572 #if !defined(OS_WIN) |
571 expected_flags |= gfx::Canvas::NO_ELLIPSIS; | 573 expected_flags |= gfx::Canvas::NO_ELLIPSIS; |
572 #endif | 574 #endif |
573 EXPECT_EQ(expected_flags, expected_flags & flags); | 575 EXPECT_EQ(expected_flags, expected_flags); |
574 | 576 |
575 label.SetHorizontalAlignment(gfx::ALIGN_LEFT); | 577 label.SetHorizontalAlignment(gfx::ALIGN_LEFT); |
576 paint_text.clear(); | 578 paint_text.clear(); |
577 text_bounds.SetRect(0, 0, 0, 0); | 579 text_bounds.SetRect(0, 0, 0, 0); |
578 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); | 580 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); |
579 EXPECT_EQ(label.text(), paint_text); | 581 EXPECT_EQ(label.text(), paint_text); |
580 EXPECT_EQ(border.left(), text_bounds.x()); | 582 EXPECT_EQ(border.left(), text_bounds.x()); |
581 EXPECT_EQ(border.top() + extra.height() / 2, text_bounds.y()); | 583 EXPECT_EQ(border.top() + extra.height() / 2, text_bounds.y()); |
582 EXPECT_EQ(center_bounds.width(), text_bounds.width()); | 584 EXPECT_EQ(center_bounds.width(), text_bounds.width()); |
583 EXPECT_EQ(center_bounds.height(), text_bounds.height()); | 585 EXPECT_EQ(center_bounds.height(), text_bounds.height()); |
584 expected_flags = gfx::Canvas::MULTI_LINE | | 586 expected_flags = gfx::Canvas::MULTI_LINE | |
585 gfx::Canvas::TEXT_ALIGN_LEFT | | 587 gfx::Canvas::TEXT_ALIGN_LEFT | |
586 gfx::Canvas::FORCE_LTR_DIRECTIONALITY; | 588 gfx::Canvas::FORCE_LTR_DIRECTIONALITY; |
587 #if !defined(OS_WIN) | 589 #if !defined(OS_WIN) |
588 expected_flags |= gfx::Canvas::NO_ELLIPSIS; | 590 expected_flags |= gfx::Canvas::NO_ELLIPSIS; |
589 #endif | 591 #endif |
590 EXPECT_EQ(expected_flags, expected_flags & flags); | 592 EXPECT_EQ(expected_flags, expected_flags); |
591 | 593 |
592 label.SetHorizontalAlignment(gfx::ALIGN_RIGHT); | 594 label.SetHorizontalAlignment(gfx::ALIGN_RIGHT); |
593 paint_text.clear(); | 595 paint_text.clear(); |
594 text_bounds.SetRect(0, 0, 0, 0); | 596 text_bounds.SetRect(0, 0, 0, 0); |
595 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); | 597 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); |
596 EXPECT_EQ(label.text(), paint_text); | 598 EXPECT_EQ(label.text(), paint_text); |
597 EXPECT_EQ(extra.width() + border.left(), text_bounds.x()); | 599 EXPECT_EQ(extra.width() + border.left(), text_bounds.x()); |
598 EXPECT_EQ(border.top() + extra.height() / 2, text_bounds.y()); | 600 EXPECT_EQ(border.top() + extra.height() / 2, text_bounds.y()); |
599 EXPECT_EQ(center_bounds.width(), text_bounds.width()); | 601 EXPECT_EQ(center_bounds.width(), text_bounds.width()); |
600 EXPECT_EQ(center_bounds.height(), text_bounds.height()); | 602 EXPECT_EQ(center_bounds.height(), text_bounds.height()); |
601 expected_flags = gfx::Canvas::MULTI_LINE | | 603 expected_flags = gfx::Canvas::MULTI_LINE | |
602 gfx::Canvas::TEXT_ALIGN_RIGHT | | 604 gfx::Canvas::TEXT_ALIGN_RIGHT | |
603 gfx::Canvas::FORCE_LTR_DIRECTIONALITY; | 605 gfx::Canvas::FORCE_LTR_DIRECTIONALITY; |
604 #if !defined(OS_WIN) | 606 #if !defined(OS_WIN) |
605 expected_flags |= gfx::Canvas::NO_ELLIPSIS; | 607 expected_flags |= gfx::Canvas::NO_ELLIPSIS; |
606 #endif | 608 #endif |
607 EXPECT_EQ(expected_flags, expected_flags & flags); | 609 EXPECT_EQ(expected_flags, expected_flags); |
608 } | 610 } |
609 | 611 |
610 TEST(LabelTest, DrawSingleLineStringInRTL) { | 612 TEST(LabelTest, DrawSingleLineStringInRTL) { |
611 Label label; | 613 Label label; |
612 label.SetFocusable(false); | 614 label.SetFocusable(false); |
613 | 615 |
614 std::string locale = l10n_util::GetApplicationLocale(""); | 616 std::string locale = l10n_util::GetApplicationLocale(""); |
615 base::i18n::SetICUDefaultLocale("he"); | 617 base::i18n::SetICUDefaultLocale("he"); |
616 | 618 |
617 label.SetText(ASCIIToUTF16("Here's a string with no returns.")); | 619 label.SetText(ASCIIToUTF16("Here's a string with no returns.")); |
618 gfx::Size required_size(label.GetPreferredSize()); | 620 gfx::Size required_size(label.GetPreferredSize()); |
619 gfx::Size extra(22, 8); | 621 gfx::Size extra(22, 8); |
620 label.SetBounds(0, 0, required_size.width() + extra.width(), | 622 label.SetBounds(0, 0, required_size.width() + extra.width(), |
621 required_size.height() + extra.height()); | 623 required_size.height() + extra.height()); |
622 | 624 |
623 // Do some basic verifications for all three alignments. | 625 // Do some basic verifications for all three alignments. |
624 base::string16 paint_text; | 626 base::string16 paint_text; |
625 gfx::Rect text_bounds; | 627 gfx::Rect text_bounds; |
626 int flags; | 628 int flags = -1; |
627 | 629 |
628 // Centered text. | 630 // Centered text. |
629 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); | 631 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); |
630 EXPECT_EQ(label.text(), paint_text); | 632 EXPECT_EQ(label.text(), paint_text); |
631 // The text should be centered horizontally and vertically. | 633 // The text should be centered horizontally and vertically. |
632 EXPECT_EQ(extra.width() / 2, text_bounds.x()); | 634 EXPECT_EQ(extra.width() / 2, text_bounds.x()); |
633 EXPECT_EQ(extra.height() / 2 , text_bounds.y()); | 635 EXPECT_EQ(extra.height() / 2 , text_bounds.y()); |
634 EXPECT_EQ(required_size.width(), text_bounds.width()); | 636 EXPECT_EQ(required_size.width(), text_bounds.width()); |
635 EXPECT_EQ(required_size.height(), text_bounds.height()); | 637 EXPECT_EQ(required_size.height(), text_bounds.height()); |
636 EXPECT_EQ(gfx::Canvas::TEXT_ALIGN_CENTER, | 638 EXPECT_EQ(gfx::Canvas::TEXT_ALIGN_CENTER, |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
751 label.SetMultiLine(true); | 753 label.SetMultiLine(true); |
752 label.SizeToFit(0); | 754 label.SizeToFit(0); |
753 gfx::Size extra(50, 10); | 755 gfx::Size extra(50, 10); |
754 label.SetBounds(label.x(), label.y(), | 756 label.SetBounds(label.x(), label.y(), |
755 label.width() + extra.width(), | 757 label.width() + extra.width(), |
756 label.height() + extra.height()); | 758 label.height() + extra.height()); |
757 | 759 |
758 // Do some basic verifications for all three alignments. | 760 // Do some basic verifications for all three alignments. |
759 base::string16 paint_text; | 761 base::string16 paint_text; |
760 gfx::Rect text_bounds; | 762 gfx::Rect text_bounds; |
761 int flags; | 763 int flags = -1; |
762 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); | 764 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); |
763 EXPECT_EQ(label.text(), paint_text); | 765 EXPECT_EQ(label.text(), paint_text); |
764 EXPECT_EQ(extra.width() / 2, text_bounds.x()); | 766 EXPECT_EQ(extra.width() / 2, text_bounds.x()); |
765 EXPECT_EQ(extra.height() / 2, text_bounds.y()); | 767 EXPECT_EQ(extra.height() / 2, text_bounds.y()); |
766 EXPECT_GT(text_bounds.width(), kMinTextDimension); | 768 EXPECT_GT(text_bounds.width(), kMinTextDimension); |
767 EXPECT_GT(text_bounds.height(), kMinTextDimension); | 769 EXPECT_GT(text_bounds.height(), kMinTextDimension); |
768 EXPECT_TRUE(gfx::Canvas::MULTI_LINE & flags); | 770 EXPECT_TRUE(gfx::Canvas::MULTI_LINE & flags); |
769 EXPECT_TRUE(gfx::Canvas::TEXT_ALIGN_CENTER & flags); | 771 EXPECT_TRUE(gfx::Canvas::TEXT_ALIGN_CENTER & flags); |
770 #if !defined(OS_WIN) | 772 #if !defined(OS_WIN) |
771 EXPECT_TRUE(gfx::Canvas::NO_ELLIPSIS & flags); | 773 EXPECT_TRUE(gfx::Canvas::NO_ELLIPSIS & flags); |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
897 EXPECT_FALSE(label.GetTooltipHandlerForPoint(gfx::Point(2, 51))); | 899 EXPECT_FALSE(label.GetTooltipHandlerForPoint(gfx::Point(2, 51))); |
898 EXPECT_FALSE(label.GetTooltipHandlerForPoint(gfx::Point(-1, 20))); | 900 EXPECT_FALSE(label.GetTooltipHandlerForPoint(gfx::Point(-1, 20))); |
899 | 901 |
900 // GetTooltipHandlerForPoint works should work in child bounds. | 902 // GetTooltipHandlerForPoint works should work in child bounds. |
901 label.SetBounds(2, 2, 10, 10); | 903 label.SetBounds(2, 2, 10, 10); |
902 EXPECT_EQ(&label, label.GetTooltipHandlerForPoint(gfx::Point(1, 5))); | 904 EXPECT_EQ(&label, label.GetTooltipHandlerForPoint(gfx::Point(1, 5))); |
903 EXPECT_FALSE(label.GetTooltipHandlerForPoint(gfx::Point(3, 11))); | 905 EXPECT_FALSE(label.GetTooltipHandlerForPoint(gfx::Point(3, 11))); |
904 } | 906 } |
905 | 907 |
906 } // namespace views | 908 } // namespace views |
OLD | NEW |