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

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: Update and expand on unit tests. 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/text_constants.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 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 reverse_alignment ? Label::ALIGN_LEFT : Label::ALIGN_RIGHT, 65 reverse_alignment ? Label::ALIGN_LEFT : Label::ALIGN_RIGHT,
65 label.horizontal_alignment()); 66 label.horizontal_alignment());
66 label.SetHorizontalAlignment(Label::ALIGN_LEFT); 67 label.SetHorizontalAlignment(Label::ALIGN_LEFT);
67 EXPECT_EQ( 68 EXPECT_EQ(
68 reverse_alignment ? Label::ALIGN_RIGHT : Label::ALIGN_LEFT, 69 reverse_alignment ? Label::ALIGN_RIGHT : Label::ALIGN_LEFT,
69 label.horizontal_alignment()); 70 label.horizontal_alignment());
70 label.SetHorizontalAlignment(Label::ALIGN_CENTER); 71 label.SetHorizontalAlignment(Label::ALIGN_CENTER);
71 EXPECT_EQ(Label::ALIGN_CENTER, label.horizontal_alignment()); 72 EXPECT_EQ(Label::ALIGN_CENTER, label.horizontal_alignment());
72 73
73 // The label's alignment should not be flipped if the directionality mode is 74 // The label's alignment should not be flipped if the directionality mode is
74 // AUTO_DETECT_DIRECTIONALITY. 75 // gfx::DIRECTIONALITY_FROM_TEXT.
75 label.set_directionality_mode(Label::AUTO_DETECT_DIRECTIONALITY); 76 label.set_directionality_mode(gfx::DIRECTIONALITY_FROM_TEXT);
76 label.SetHorizontalAlignment(Label::ALIGN_RIGHT); 77 label.SetHorizontalAlignment(Label::ALIGN_RIGHT);
77 EXPECT_EQ(Label::ALIGN_RIGHT, label.horizontal_alignment()); 78 EXPECT_EQ(Label::ALIGN_RIGHT, label.horizontal_alignment());
78 label.SetHorizontalAlignment(Label::ALIGN_LEFT); 79 label.SetHorizontalAlignment(Label::ALIGN_LEFT);
79 EXPECT_EQ(Label::ALIGN_LEFT, label.horizontal_alignment()); 80 EXPECT_EQ(Label::ALIGN_LEFT, label.horizontal_alignment());
80 label.SetHorizontalAlignment(Label::ALIGN_CENTER); 81 label.SetHorizontalAlignment(Label::ALIGN_CENTER);
81 EXPECT_EQ(Label::ALIGN_CENTER, label.horizontal_alignment()); 82 EXPECT_EQ(Label::ALIGN_CENTER, label.horizontal_alignment());
82 } 83 }
83 84
84 TEST(LabelTest, DirectionalityModeProperty) { 85 TEST(LabelTest, DirectionalityModeProperty) {
85 Label label; 86 Label label;
86 EXPECT_EQ(Label::USE_UI_DIRECTIONALITY, label.directionality_mode()); 87 EXPECT_EQ(gfx::DIRECTIONALITY_FROM_UI, label.directionality_mode());
87 88
88 label.set_directionality_mode(Label::AUTO_DETECT_DIRECTIONALITY); 89 label.set_directionality_mode(gfx::DIRECTIONALITY_FROM_TEXT);
89 EXPECT_EQ(Label::AUTO_DETECT_DIRECTIONALITY, label.directionality_mode()); 90 EXPECT_EQ(gfx::DIRECTIONALITY_FROM_TEXT, label.directionality_mode());
90 91
91 label.set_directionality_mode(Label::USE_UI_DIRECTIONALITY); 92 label.set_directionality_mode(gfx::DIRECTIONALITY_FROM_UI);
92 EXPECT_EQ(Label::USE_UI_DIRECTIONALITY, label.directionality_mode()); 93 EXPECT_EQ(gfx::DIRECTIONALITY_FROM_UI, label.directionality_mode());
93 } 94 }
94 95
95 TEST(LabelTest, MultiLineProperty) { 96 TEST(LabelTest, MultiLineProperty) {
96 Label label; 97 Label label;
97 EXPECT_FALSE(label.is_multi_line()); 98 EXPECT_FALSE(label.is_multi_line());
98 label.SetMultiLine(true); 99 label.SetMultiLine(true);
99 EXPECT_TRUE(label.is_multi_line()); 100 EXPECT_TRUE(label.is_multi_line());
100 label.SetMultiLine(false); 101 label.SetMultiLine(false);
101 EXPECT_FALSE(label.is_multi_line()); 102 EXPECT_FALSE(label.is_multi_line());
102 } 103 }
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 label.SetBounds(0, 0, 0, 0); 266 label.SetBounds(0, 0, 0, 0);
266 gfx::Size required_size_with_border = label.GetPreferredSize(); 267 gfx::Size required_size_with_border = label.GetPreferredSize();
267 EXPECT_EQ(required_size_with_border.height(), 268 EXPECT_EQ(required_size_with_border.height(),
268 required_size.height() + border.height()); 269 required_size.height() + border.height());
269 EXPECT_EQ(required_size_with_border.width(), 270 EXPECT_EQ(required_size_with_border.width(),
270 required_size.width() + border.width()); 271 required_size.width() + border.width());
271 } 272 }
272 273
273 TEST(LabelTest, AutoDetectDirectionality) { 274 TEST(LabelTest, AutoDetectDirectionality) {
274 Label label; 275 Label label;
275 label.set_directionality_mode(Label::AUTO_DETECT_DIRECTIONALITY); 276 label.set_directionality_mode(gfx::DIRECTIONALITY_FROM_TEXT);
276
277 // Test text starts with RTL character.
278 string16 test_text(WideToUTF16(L" \x5d0\x5d1\x5d2 abc"));
279 label.SetText(test_text);
280 gfx::Size required_size(label.GetPreferredSize());
281 gfx::Size extra(22, 8);
282 label.SetBounds(0,
283 0,
284 required_size.width() + extra.width(),
285 required_size.height() + extra.height());
286 277
287 string16 paint_text; 278 string16 paint_text;
288 gfx::Rect text_bounds; 279 gfx::Rect text_bounds;
289 int flags; 280 int flags = 0;
281
282 // Test text starting with an RTL character.
283 label.SetText(WideToUTF16(L" \x5d0\x5d1\x5d2 abc "));
290 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); 284 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
291 EXPECT_EQ(gfx::Canvas::FORCE_RTL_DIRECTIONALITY, flags); 285 EXPECT_EQ(gfx::Canvas::FORCE_RTL_DIRECTIONALITY, flags);
292 286
293 // Test text starts with LTR character. 287 // Test text starting with an LTR character.
294 test_text = (WideToUTF16(L"ltr \x5d0\x5d1\x5d2 abc")); 288 label.SetText(WideToUTF16(L"ltr \x5d0\x5d1\x5d2 abc "));
295 label.SetText(test_text);
296 required_size = label.GetPreferredSize();
297 label.SetBounds(0,
298 0,
299 required_size.width() + extra.width(),
300 required_size.height() + extra.height());
301
302 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags); 289 label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
303 EXPECT_EQ(gfx::Canvas::FORCE_LTR_DIRECTIONALITY, flags); 290 EXPECT_EQ(gfx::Canvas::FORCE_LTR_DIRECTIONALITY, flags);
304 } 291 }
305 292
306 TEST(LabelTest, DrawSingleLineString) { 293 TEST(LabelTest, DrawSingleLineString) {
307 Label label; 294 Label label;
308 label.set_focusable(false); 295 label.set_focusable(false);
309 296
310 // Turn off mirroring so that we don't need to figure out if 297 // Turn off mirroring so that we don't need to figure out if
311 // align right really means align left. 298 // align right really means align left.
312 label.set_directionality_mode(Label::AUTO_DETECT_DIRECTIONALITY); 299 label.set_directionality_mode(gfx::DIRECTIONALITY_FROM_TEXT);
313 300
314 string16 test_text(ASCIIToUTF16("Here's a string with no returns.")); 301 string16 test_text(ASCIIToUTF16("Here's a string with no returns."));
315 label.SetText(test_text); 302 label.SetText(test_text);
316 gfx::Size required_size(label.GetPreferredSize()); 303 gfx::Size required_size(label.GetPreferredSize());
317 gfx::Size extra(22, 8); 304 gfx::Size extra(22, 8);
318 label.SetBounds(0, 305 label.SetBounds(0,
319 0, 306 0,
320 required_size.width() + extra.width(), 307 required_size.width() + extra.width(),
321 required_size.height() + extra.height()); 308 required_size.height() + extra.height());
322 309
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 407
421 // On Linux the underlying pango routines require a max height in order to 408 // On Linux the underlying pango routines require a max height in order to
422 // ellide multiline text. So until that can be resolved, we set all 409 // ellide multiline text. So until that can be resolved, we set all
423 // multiline lables to not ellide in Linux only. 410 // multiline lables to not ellide in Linux only.
424 TEST(LabelTest, DrawMultiLineString) { 411 TEST(LabelTest, DrawMultiLineString) {
425 Label label; 412 Label label;
426 label.set_focusable(false); 413 label.set_focusable(false);
427 414
428 // Turn off mirroring so that we don't need to figure out if 415 // Turn off mirroring so that we don't need to figure out if
429 // align right really means align left. 416 // align right really means align left.
430 label.set_directionality_mode(Label::AUTO_DETECT_DIRECTIONALITY); 417 label.set_directionality_mode(gfx::DIRECTIONALITY_FROM_TEXT);
431 418
432 string16 test_text(ASCIIToUTF16("Another string\nwith returns\n\n!")); 419 string16 test_text(ASCIIToUTF16("Another string\nwith returns\n\n!"));
433 label.SetText(test_text); 420 label.SetText(test_text);
434 label.SetMultiLine(true); 421 label.SetMultiLine(true);
435 label.SizeToFit(0); 422 label.SizeToFit(0);
436 gfx::Size extra(50, 10); 423 gfx::Size extra(50, 10);
437 label.SetBounds(label.x(), 424 label.SetBounds(label.x(),
438 label.y(), 425 label.y(),
439 label.width() + extra.width(), 426 label.width() + extra.width(),
440 label.height() + extra.height()); 427 label.height() + extra.height());
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after
841 EXPECT_EQ( 828 EXPECT_EQ(
842 0, label.ComputeDrawStringFlags() & gfx::Canvas::NO_SUBPIXEL_RENDERING); 829 0, label.ComputeDrawStringFlags() & gfx::Canvas::NO_SUBPIXEL_RENDERING);
843 830
844 label.SetBackgroundColor(SkColorSetARGB(64, 255, 255, 255)); 831 label.SetBackgroundColor(SkColorSetARGB(64, 255, 255, 255));
845 EXPECT_EQ( 832 EXPECT_EQ(
846 gfx::Canvas::NO_SUBPIXEL_RENDERING, 833 gfx::Canvas::NO_SUBPIXEL_RENDERING,
847 label.ComputeDrawStringFlags() & gfx::Canvas::NO_SUBPIXEL_RENDERING); 834 label.ComputeDrawStringFlags() & gfx::Canvas::NO_SUBPIXEL_RENDERING);
848 } 835 }
849 836
850 } // namespace views 837 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698