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

Side by Side Diff: ui/views/controls/label_unittest.cc

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

Powered by Google App Engine
This is Rietveld 408576698