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/base/accessibility/accessible_view_state.h" | 10 #include "ui/base/accessibility/accessible_view_state.h" |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 // splitting the words into up to one character per line if necessary. | 194 // splitting the words into up to one character per line if necessary. |
195 // Incorrect word splitting may cause infinite loops in text layout. | 195 // Incorrect word splitting may cause infinite loops in text layout. |
196 gfx::Size required_size = label.GetPreferredSize(); | 196 gfx::Size required_size = label.GetPreferredSize(); |
197 for (int i = 1; i < required_size.width(); ++i) { | 197 for (int i = 1; i < required_size.width(); ++i) { |
198 EXPECT_GT(label.GetHeightForWidth(i), 0); | 198 EXPECT_GT(label.GetHeightForWidth(i), 0); |
199 } | 199 } |
200 } | 200 } |
201 | 201 |
202 TEST(LabelTest, MultiLineSizing) { | 202 TEST(LabelTest, MultiLineSizing) { |
203 Label label; | 203 Label label; |
204 label.set_focusable(false); | 204 label.SetFocusable(false); |
205 string16 test_text( | 205 string16 test_text( |
206 ASCIIToUTF16("A random string\nwith multiple lines\nand returns!")); | 206 ASCIIToUTF16("A random string\nwith multiple lines\nand returns!")); |
207 label.SetText(test_text); | 207 label.SetText(test_text); |
208 label.SetMultiLine(true); | 208 label.SetMultiLine(true); |
209 | 209 |
210 // GetPreferredSize | 210 // GetPreferredSize |
211 gfx::Size required_size = label.GetPreferredSize(); | 211 gfx::Size required_size = label.GetPreferredSize(); |
212 EXPECT_GT(required_size.height(), kMinTextDimension); | 212 EXPECT_GT(required_size.height(), kMinTextDimension); |
213 EXPECT_GT(required_size.width(), kMinTextDimension); | 213 EXPECT_GT(required_size.width(), kMinTextDimension); |
214 | 214 |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
315 required_size.height() + extra.height()); | 315 required_size.height() + extra.height()); |
316 | 316 |
317 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); | 317 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); |
318 EXPECT_EQ(gfx::Canvas::FORCE_LTR_DIRECTIONALITY, | 318 EXPECT_EQ(gfx::Canvas::FORCE_LTR_DIRECTIONALITY, |
319 flags & (gfx::Canvas::FORCE_RTL_DIRECTIONALITY | | 319 flags & (gfx::Canvas::FORCE_RTL_DIRECTIONALITY | |
320 gfx::Canvas::FORCE_LTR_DIRECTIONALITY)); | 320 gfx::Canvas::FORCE_LTR_DIRECTIONALITY)); |
321 } | 321 } |
322 | 322 |
323 TEST(LabelTest, DrawSingleLineString) { | 323 TEST(LabelTest, DrawSingleLineString) { |
324 Label label; | 324 Label label; |
325 label.set_focusable(false); | 325 label.SetFocusable(false); |
326 | 326 |
327 // Turn off mirroring so that we don't need to figure out if | 327 // Turn off mirroring so that we don't need to figure out if |
328 // align right really means align left. | 328 // align right really means align left. |
329 label.set_directionality_mode(Label::AUTO_DETECT_DIRECTIONALITY); | 329 label.set_directionality_mode(Label::AUTO_DETECT_DIRECTIONALITY); |
330 | 330 |
331 string16 test_text(ASCIIToUTF16("Here's a string with no returns.")); | 331 string16 test_text(ASCIIToUTF16("Here's a string with no returns.")); |
332 label.SetText(test_text); | 332 label.SetText(test_text); |
333 gfx::Size required_size(label.GetPreferredSize()); | 333 gfx::Size required_size(label.GetPreferredSize()); |
334 gfx::Size extra(22, 8); | 334 gfx::Size extra(22, 8); |
335 label.SetBounds(0, | 335 label.SetBounds(0, |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
451 flags & (gfx::Canvas::TEXT_ALIGN_LEFT | | 451 flags & (gfx::Canvas::TEXT_ALIGN_LEFT | |
452 gfx::Canvas::TEXT_ALIGN_CENTER | | 452 gfx::Canvas::TEXT_ALIGN_CENTER | |
453 gfx::Canvas::TEXT_ALIGN_RIGHT)); | 453 gfx::Canvas::TEXT_ALIGN_RIGHT)); |
454 } | 454 } |
455 | 455 |
456 // On Linux the underlying pango routines require a max height in order to | 456 // On Linux the underlying pango routines require a max height in order to |
457 // ellide multiline text. So until that can be resolved, we set all | 457 // ellide multiline text. So until that can be resolved, we set all |
458 // multiline lables to not ellide in Linux only. | 458 // multiline lables to not ellide in Linux only. |
459 TEST(LabelTest, DrawMultiLineString) { | 459 TEST(LabelTest, DrawMultiLineString) { |
460 Label label; | 460 Label label; |
461 label.set_focusable(false); | 461 label.SetFocusable(false); |
462 | 462 |
463 // Turn off mirroring so that we don't need to figure out if | 463 // Turn off mirroring so that we don't need to figure out if |
464 // align right really means align left. | 464 // align right really means align left. |
465 label.set_directionality_mode(Label::AUTO_DETECT_DIRECTIONALITY); | 465 label.set_directionality_mode(Label::AUTO_DETECT_DIRECTIONALITY); |
466 | 466 |
467 string16 test_text(ASCIIToUTF16("Another string\nwith returns\n\n!")); | 467 string16 test_text(ASCIIToUTF16("Another string\nwith returns\n\n!")); |
468 label.SetText(test_text); | 468 label.SetText(test_text); |
469 label.SetMultiLine(true); | 469 label.SetMultiLine(true); |
470 label.SizeToFit(0); | 470 label.SizeToFit(0); |
471 gfx::Size extra(50, 10); | 471 gfx::Size extra(50, 10); |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
592 gfx::Canvas::FORCE_LTR_DIRECTIONALITY; | 592 gfx::Canvas::FORCE_LTR_DIRECTIONALITY; |
593 #if defined(OS_WIN) | 593 #if defined(OS_WIN) |
594 EXPECT_EQ(expected_flags, flags); | 594 EXPECT_EQ(expected_flags, flags); |
595 #else | 595 #else |
596 EXPECT_EQ(expected_flags | gfx::Canvas::NO_ELLIPSIS, flags); | 596 EXPECT_EQ(expected_flags | gfx::Canvas::NO_ELLIPSIS, flags); |
597 #endif | 597 #endif |
598 } | 598 } |
599 | 599 |
600 TEST(LabelTest, DrawSingleLineStringInRTL) { | 600 TEST(LabelTest, DrawSingleLineStringInRTL) { |
601 Label label; | 601 Label label; |
602 label.set_focusable(false); | 602 label.SetFocusable(false); |
603 | 603 |
604 std::string locale = l10n_util::GetApplicationLocale(""); | 604 std::string locale = l10n_util::GetApplicationLocale(""); |
605 base::i18n::SetICUDefaultLocale("he"); | 605 base::i18n::SetICUDefaultLocale("he"); |
606 | 606 |
607 string16 test_text(ASCIIToUTF16("Here's a string with no returns.")); | 607 string16 test_text(ASCIIToUTF16("Here's a string with no returns.")); |
608 label.SetText(test_text); | 608 label.SetText(test_text); |
609 gfx::Size required_size(label.GetPreferredSize()); | 609 gfx::Size required_size(label.GetPreferredSize()); |
610 gfx::Size extra(22, 8); | 610 gfx::Size extra(22, 8); |
611 label.SetBounds(0, | 611 label.SetBounds(0, |
612 0, | 612 0, |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
731 | 731 |
732 // Reset locale. | 732 // Reset locale. |
733 base::i18n::SetICUDefaultLocale(locale); | 733 base::i18n::SetICUDefaultLocale(locale); |
734 } | 734 } |
735 | 735 |
736 // On Linux the underlying pango routines require a max height in order to | 736 // On Linux the underlying pango routines require a max height in order to |
737 // ellide multiline text. So until that can be resolved, we set all | 737 // ellide multiline text. So until that can be resolved, we set all |
738 // multiline lables to not ellide in Linux only. | 738 // multiline lables to not ellide in Linux only. |
739 TEST(LabelTest, DrawMultiLineStringInRTL) { | 739 TEST(LabelTest, DrawMultiLineStringInRTL) { |
740 Label label; | 740 Label label; |
741 label.set_focusable(false); | 741 label.SetFocusable(false); |
742 | 742 |
743 // Test for RTL. | 743 // Test for RTL. |
744 std::string locale = l10n_util::GetApplicationLocale(""); | 744 std::string locale = l10n_util::GetApplicationLocale(""); |
745 base::i18n::SetICUDefaultLocale("he"); | 745 base::i18n::SetICUDefaultLocale("he"); |
746 | 746 |
747 string16 test_text(ASCIIToUTF16("Another string\nwith returns\n\n!")); | 747 string16 test_text(ASCIIToUTF16("Another string\nwith returns\n\n!")); |
748 label.SetText(test_text); | 748 label.SetText(test_text); |
749 label.SetMultiLine(true); | 749 label.SetMultiLine(true); |
750 label.SizeToFit(0); | 750 label.SizeToFit(0); |
751 gfx::Size extra(50, 10); | 751 gfx::Size extra(50, 10); |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
923 EXPECT_FALSE(label.GetTooltipHandlerForPoint(gfx::Point(2, 51))); | 923 EXPECT_FALSE(label.GetTooltipHandlerForPoint(gfx::Point(2, 51))); |
924 EXPECT_FALSE(label.GetTooltipHandlerForPoint(gfx::Point(-1, 20))); | 924 EXPECT_FALSE(label.GetTooltipHandlerForPoint(gfx::Point(-1, 20))); |
925 | 925 |
926 // GetTooltipHandlerForPoint works should work in child bounds. | 926 // GetTooltipHandlerForPoint works should work in child bounds. |
927 label.SetBounds(2, 2, 10, 10); | 927 label.SetBounds(2, 2, 10, 10); |
928 EXPECT_EQ(&label, label.GetTooltipHandlerForPoint(gfx::Point(1, 5))); | 928 EXPECT_EQ(&label, label.GetTooltipHandlerForPoint(gfx::Point(1, 5))); |
929 EXPECT_FALSE(label.GetTooltipHandlerForPoint(gfx::Point(3, 11))); | 929 EXPECT_FALSE(label.GetTooltipHandlerForPoint(gfx::Point(3, 11))); |
930 } | 930 } |
931 | 931 |
932 } // namespace views | 932 } // namespace views |
OLD | NEW |