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

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

Issue 10807082: Add RenderText DirectionalityMode enum and support; etc. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Restore Label::SetURL; derive the direction from display text. Created 8 years, 4 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
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 "base/i18n/rtl.h" 5 #include "base/i18n/rtl.h"
6 #include "base/utf_string_conversions.h" 6 #include "base/utf_string_conversions.h"
7 #include "testing/gtest/include/gtest/gtest.h" 7 #include "testing/gtest/include/gtest/gtest.h"
8 #include "ui/base/accessibility/accessible_view_state.h" 8 #include "ui/base/accessibility/accessible_view_state.h"
9 #include "ui/base/l10n/l10n_util.h" 9 #include "ui/base/l10n/l10n_util.h"
10 #include "ui/gfx/canvas.h" 10 #include "ui/gfx/canvas.h"
11 #include "ui/gfx/render_text.h"
11 #include "ui/views/border.h" 12 #include "ui/views/border.h"
12 #include "ui/views/controls/label.h" 13 #include "ui/views/controls/label.h"
13 14
14 namespace views { 15 namespace views {
15 16
16 // All text sizing measurements (width and height) should be greater than this. 17 // All text sizing measurements (width and height) should be greater than this.
17 const int kMinTextDimension = 4; 18 const int kMinTextDimension = 4;
18 19
19 TEST(LabelTest, FontPropertyCourier) { 20 TEST(LabelTest, FontPropertyCourier) {
20 Label label; 21 Label label;
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 reverse_alignment ? Label::ALIGN_LEFT : Label::ALIGN_RIGHT, 73 reverse_alignment ? Label::ALIGN_LEFT : Label::ALIGN_RIGHT,
73 label.horizontal_alignment()); 74 label.horizontal_alignment());
74 label.SetHorizontalAlignment(Label::ALIGN_LEFT); 75 label.SetHorizontalAlignment(Label::ALIGN_LEFT);
75 EXPECT_EQ( 76 EXPECT_EQ(
76 reverse_alignment ? Label::ALIGN_RIGHT : Label::ALIGN_LEFT, 77 reverse_alignment ? Label::ALIGN_RIGHT : Label::ALIGN_LEFT,
77 label.horizontal_alignment()); 78 label.horizontal_alignment());
78 label.SetHorizontalAlignment(Label::ALIGN_CENTER); 79 label.SetHorizontalAlignment(Label::ALIGN_CENTER);
79 EXPECT_EQ(Label::ALIGN_CENTER, label.horizontal_alignment()); 80 EXPECT_EQ(Label::ALIGN_CENTER, label.horizontal_alignment());
80 81
81 // The label's alignment should not be flipped if the directionality mode is 82 // The label's alignment should not be flipped if the directionality mode is
82 // AUTO_DETECT_DIRECTIONALITY. 83 // gfx::DERIVE_FROM_TEXT.
83 label.set_directionality_mode(Label::AUTO_DETECT_DIRECTIONALITY); 84 label.set_directionality_mode(gfx::DERIVE_FROM_TEXT);
84 label.SetHorizontalAlignment(Label::ALIGN_RIGHT); 85 label.SetHorizontalAlignment(Label::ALIGN_RIGHT);
85 EXPECT_EQ(Label::ALIGN_RIGHT, label.horizontal_alignment()); 86 EXPECT_EQ(Label::ALIGN_RIGHT, label.horizontal_alignment());
86 label.SetHorizontalAlignment(Label::ALIGN_LEFT); 87 label.SetHorizontalAlignment(Label::ALIGN_LEFT);
87 EXPECT_EQ(Label::ALIGN_LEFT, label.horizontal_alignment()); 88 EXPECT_EQ(Label::ALIGN_LEFT, label.horizontal_alignment());
88 label.SetHorizontalAlignment(Label::ALIGN_CENTER); 89 label.SetHorizontalAlignment(Label::ALIGN_CENTER);
89 EXPECT_EQ(Label::ALIGN_CENTER, label.horizontal_alignment()); 90 EXPECT_EQ(Label::ALIGN_CENTER, label.horizontal_alignment());
90 } 91 }
91 92
92 TEST(LabelTest, DirectionalityModeProperty) { 93 TEST(LabelTest, DirectionalityModeProperty) {
93 Label label; 94 Label label;
94 EXPECT_EQ(Label::USE_UI_DIRECTIONALITY, label.directionality_mode()); 95 EXPECT_EQ(gfx::DERIVE_FROM_UI, label.directionality_mode());
95 96
96 label.set_directionality_mode(Label::AUTO_DETECT_DIRECTIONALITY); 97 label.set_directionality_mode(gfx::DERIVE_FROM_TEXT);
97 EXPECT_EQ(Label::AUTO_DETECT_DIRECTIONALITY, label.directionality_mode()); 98 EXPECT_EQ(gfx::DERIVE_FROM_TEXT, label.directionality_mode());
98 99
99 label.set_directionality_mode(Label::USE_UI_DIRECTIONALITY); 100 label.set_directionality_mode(gfx::DERIVE_FROM_UI);
100 EXPECT_EQ(Label::USE_UI_DIRECTIONALITY, label.directionality_mode()); 101 EXPECT_EQ(gfx::DERIVE_FROM_UI, label.directionality_mode());
101 } 102 }
102 103
103 TEST(LabelTest, MultiLineProperty) { 104 TEST(LabelTest, MultiLineProperty) {
104 Label label; 105 Label label;
105 EXPECT_FALSE(label.is_multi_line()); 106 EXPECT_FALSE(label.is_multi_line());
106 label.SetMultiLine(true); 107 label.SetMultiLine(true);
107 EXPECT_TRUE(label.is_multi_line()); 108 EXPECT_TRUE(label.is_multi_line());
108 label.SetMultiLine(false); 109 label.SetMultiLine(false);
109 EXPECT_FALSE(label.is_multi_line()); 110 EXPECT_FALSE(label.is_multi_line());
110 } 111 }
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 label.SetBounds(0, 0, 0, 0); 274 label.SetBounds(0, 0, 0, 0);
274 gfx::Size required_size_with_border = label.GetPreferredSize(); 275 gfx::Size required_size_with_border = label.GetPreferredSize();
275 EXPECT_EQ(required_size_with_border.height(), 276 EXPECT_EQ(required_size_with_border.height(),
276 required_size.height() + border.height()); 277 required_size.height() + border.height());
277 EXPECT_EQ(required_size_with_border.width(), 278 EXPECT_EQ(required_size_with_border.width(),
278 required_size.width() + border.width()); 279 required_size.width() + border.width());
279 } 280 }
280 281
281 TEST(LabelTest, AutoDetectDirectionality) { 282 TEST(LabelTest, AutoDetectDirectionality) {
282 Label label; 283 Label label;
283 label.set_directionality_mode(Label::AUTO_DETECT_DIRECTIONALITY); 284 label.set_directionality_mode(gfx::DERIVE_FROM_TEXT);
284
285 // Test text starts with RTL character.
286 string16 test_text(WideToUTF16(L" \x5d0\x5d1\x5d2 abc"));
287 label.SetText(test_text);
288 gfx::Size required_size(label.GetPreferredSize());
289 gfx::Size extra(22, 8);
290 label.SetBounds(0,
291 0,
292 required_size.width() + extra.width(),
293 required_size.height() + extra.height());
294 285
295 string16 paint_text; 286 string16 paint_text;
296 gfx::Rect text_bounds; 287 gfx::Rect text_bounds;
297 int flags; 288 int flags = 0;
289
290 // Test text starting with an RTL character.
291 label.SetText(WideToUTF16(L" \x5d0\x5d1\x5d2 abc "));
298 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); 292 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
299 EXPECT_EQ(gfx::Canvas::FORCE_RTL_DIRECTIONALITY, flags); 293 EXPECT_EQ(gfx::Canvas::FORCE_RTL_DIRECTIONALITY, flags);
300 294
301 // Test text starts with LTR character. 295 // Test text starting with an LTR character.
302 test_text = (WideToUTF16(L"ltr \x5d0\x5d1\x5d2 abc")); 296 label.SetText(WideToUTF16(L"ltr \x5d0\x5d1\x5d2 abc "));
303 label.SetText(test_text);
304 required_size = label.GetPreferredSize();
305 label.SetBounds(0,
306 0,
307 required_size.width() + extra.width(),
308 required_size.height() + extra.height());
309
310 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); 297 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
311 EXPECT_EQ(gfx::Canvas::FORCE_LTR_DIRECTIONALITY, flags); 298 EXPECT_EQ(gfx::Canvas::FORCE_LTR_DIRECTIONALITY, flags);
312 } 299 }
313 300
314 TEST(LabelTest, DrawSingleLineString) { 301 TEST(LabelTest, DrawSingleLineString) {
315 Label label; 302 Label label;
316 label.set_focusable(false); 303 label.set_focusable(false);
317 304
318 // Turn off mirroring so that we don't need to figure out if 305 // Turn off mirroring so that we don't need to figure out if
319 // align right really means align left. 306 // align right really means align left.
320 label.set_directionality_mode(Label::AUTO_DETECT_DIRECTIONALITY); 307 label.set_directionality_mode(gfx::DERIVE_FROM_TEXT);
321 308
322 string16 test_text(ASCIIToUTF16("Here's a string with no returns.")); 309 string16 test_text(ASCIIToUTF16("Here's a string with no returns."));
323 label.SetText(test_text); 310 label.SetText(test_text);
324 gfx::Size required_size(label.GetPreferredSize()); 311 gfx::Size required_size(label.GetPreferredSize());
325 gfx::Size extra(22, 8); 312 gfx::Size extra(22, 8);
326 label.SetBounds(0, 313 label.SetBounds(0,
327 0, 314 0,
328 required_size.width() + extra.width(), 315 required_size.width() + extra.width(),
329 required_size.height() + extra.height()); 316 required_size.height() + extra.height());
330 317
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 415
429 // On Linux the underlying pango routines require a max height in order to 416 // On Linux the underlying pango routines require a max height in order to
430 // ellide multiline text. So until that can be resolved, we set all 417 // ellide multiline text. So until that can be resolved, we set all
431 // multiline lables to not ellide in Linux only. 418 // multiline lables to not ellide in Linux only.
432 TEST(LabelTest, DrawMultiLineString) { 419 TEST(LabelTest, DrawMultiLineString) {
433 Label label; 420 Label label;
434 label.set_focusable(false); 421 label.set_focusable(false);
435 422
436 // Turn off mirroring so that we don't need to figure out if 423 // Turn off mirroring so that we don't need to figure out if
437 // align right really means align left. 424 // align right really means align left.
438 label.set_directionality_mode(Label::AUTO_DETECT_DIRECTIONALITY); 425 label.set_directionality_mode(gfx::DERIVE_FROM_TEXT);
439 426
440 string16 test_text(ASCIIToUTF16("Another string\nwith returns\n\n!")); 427 string16 test_text(ASCIIToUTF16("Another string\nwith returns\n\n!"));
441 label.SetText(test_text); 428 label.SetText(test_text);
442 label.SetMultiLine(true); 429 label.SetMultiLine(true);
443 label.SizeToFit(0); 430 label.SizeToFit(0);
444 gfx::Size extra(50, 10); 431 gfx::Size extra(50, 10);
445 label.SetBounds(label.x(), 432 label.SetBounds(label.x(),
446 label.y(), 433 label.y(),
447 label.width() + extra.width(), 434 label.width() + extra.width(),
448 label.height() + extra.height()); 435 label.height() + extra.height());
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 EXPECT_EQ( 836 EXPECT_EQ(
850 0, label.ComputeDrawStringFlags() & gfx::Canvas::NO_SUBPIXEL_RENDERING); 837 0, label.ComputeDrawStringFlags() & gfx::Canvas::NO_SUBPIXEL_RENDERING);
851 838
852 label.SetBackgroundColor(SkColorSetARGB(64, 255, 255, 255)); 839 label.SetBackgroundColor(SkColorSetARGB(64, 255, 255, 255));
853 EXPECT_EQ( 840 EXPECT_EQ(
854 gfx::Canvas::NO_SUBPIXEL_RENDERING, 841 gfx::Canvas::NO_SUBPIXEL_RENDERING,
855 label.ComputeDrawStringFlags() & gfx::Canvas::NO_SUBPIXEL_RENDERING); 842 label.ComputeDrawStringFlags() & gfx::Canvas::NO_SUBPIXEL_RENDERING);
856 } 843 }
857 844
858 } // namespace views 845 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698