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

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

Issue 329813003: Reland: Use labels to display views tab titles. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Call AddChildView(title_) on Tab to prevent leaks. 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
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
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
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
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
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
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
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