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 | |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |