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

Side by Side Diff: ui/gfx/render_text_unittest.cc

Issue 8747001: Reintroduce password support to NativeTextfieldViews (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments, Utf16OffsetToPointer bug Created 8 years, 10 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 "ui/gfx/render_text.h" 5 #include "ui/gfx/render_text.h"
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/utf_string_conversions.h" 8 #include "base/utf_string_conversions.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "ui/base/l10n/l10n_util.h" 10 #include "ui/base/l10n/l10n_util.h"
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 EXPECT_EQ(ui::Range(0, 3), render_text->style_ranges()[0].range); 274 EXPECT_EQ(ui::Range(0, 3), render_text->style_ranges()[0].range);
275 275
276 SetTextWith2ExtraStyles(render_text.get()); 276 SetTextWith2ExtraStyles(render_text.get());
277 EXPECT_EQ(3U, render_text->style_ranges().size()); 277 EXPECT_EQ(3U, render_text->style_ranges().size());
278 278
279 render_text->SetText(ASCIIToUTF16("a")); 279 render_text->SetText(ASCIIToUTF16("a"));
280 EXPECT_EQ(1U, render_text->style_ranges().size()); 280 EXPECT_EQ(1U, render_text->style_ranges().size());
281 EXPECT_EQ(ui::Range(0, 1), render_text->style_ranges()[0].range); 281 EXPECT_EQ(ui::Range(0, 1), render_text->style_ranges()[0].range);
282 } 282 }
283 283
284 TEST_F(RenderTextTest, PasswordCensorship) {
285 const string16 seuss = ASCIIToUTF16("hop on pop");
286 const string16 no_seuss = ASCIIToUTF16("**********");
287 scoped_ptr<RenderText> render_text(RenderText::CreateRenderText());
288
289 // GetObscuredText returns asterisks when the obscured bit is set.
290 render_text->SetText(seuss);
291 render_text->SetObscured(true);
292 EXPECT_EQ(seuss, render_text->text());
293 EXPECT_EQ(no_seuss, render_text->GetDisplayText());
294 render_text->SetObscured(false);
295 EXPECT_EQ(seuss, render_text->text());
296 EXPECT_EQ(seuss, render_text->GetDisplayText());
297
298 render_text->SetObscured(true);
299
300 // Surrogate pairs are counted as one code point.
301 const char16 invalid_surrogates[] = {0xDC00, 0xD800, 0};
302 render_text->SetText(invalid_surrogates);
303 EXPECT_EQ(ASCIIToUTF16("**"), render_text->GetDisplayText());
304 const char16 valid_surrogates[] = {0xD800, 0xDC00, 0};
305 render_text->SetText(valid_surrogates);
306 EXPECT_EQ(ASCIIToUTF16("*"), render_text->GetDisplayText());
307 EXPECT_EQ(0U, render_text->GetCursorPosition());
308 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false);
309 EXPECT_EQ(2U, render_text->GetCursorPosition());
310
311 // Cursoring is independent of the underlying characters when the text is
312 // obscured.
313 const wchar_t* const texts[] = {
314 L"hop on pop", // word boundaries
315 L"ab \x5D0\x5D1" L"12", // bidi embedding level of 2
316 L"\x5D0\x5D1" L"12", // RTL paragraph direction on Linux
317 L"\x5D0\x5D1" // pure RTL
318 };
319 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(texts); ++i) {
320 string16 text = WideToUTF16(texts[i]);
321 render_text->SetText(text);
322 int len = text.length();
323 for (int s = 0; s <= 1; ++s) {
xji 2012/02/25 00:06:14 maybe make it a function and call it with |select|
benrg 2012/03/01 17:18:00 Done.
324 bool select = s != 0;
325 render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, select);
326 EXPECT_TRUE(render_text->selection_model().Equals(SelectionModel(
327 select ? 0 : len, len, len - 1, SelectionModel::TRAILING)));
328 render_text->MoveCursor(LINE_BREAK, CURSOR_LEFT, select);
329 EXPECT_TRUE(render_text->selection_model().Equals(SelectionModel(
330 0, 0, SelectionModel::LEADING)));
331 for (int j = 1; j <= len; ++j) {
332 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, select);
333 EXPECT_TRUE(render_text->selection_model().Equals(SelectionModel(
334 select ? 0 : j, j, j - 1, SelectionModel::TRAILING)));
335 }
336 for (int j = len - 1; j >= 0; --j) {
337 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, select);
338 EXPECT_TRUE(render_text->selection_model().Equals(SelectionModel(
339 select ? 0 : j, j, j, SelectionModel::LEADING)));
340 }
341 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, select);
342 EXPECT_TRUE(render_text->selection_model().Equals(SelectionModel(
343 select ? 0 : len, len, len - 1, SelectionModel::TRAILING)));
344 render_text->MoveCursor(WORD_BREAK, CURSOR_LEFT, select);
345 EXPECT_TRUE(render_text->selection_model().Equals(SelectionModel(
346 0, 0, SelectionModel::LEADING)));
347 }
348 }
xji 2012/02/25 00:06:14 since you are testing the visual operations here.
benrg 2012/03/01 17:18:00 Not done yet.
xji 2012/03/01 19:33:49 pls. add it in follow-up CL. And you can also chec
349 }
350
284 void RunMoveCursorLeftRightTest(RenderText* render_text, 351 void RunMoveCursorLeftRightTest(RenderText* render_text,
285 const std::vector<SelectionModel>& expected, 352 const std::vector<SelectionModel>& expected,
286 bool move_right) { 353 bool move_right) {
287 for (int i = 0; i < static_cast<int>(expected.size()); ++i) { 354 for (int i = 0; i < static_cast<int>(expected.size()); ++i) {
288 SelectionModel sel = expected[i]; 355 SelectionModel sel = expected[i];
289 EXPECT_TRUE(render_text->selection_model().Equals(sel)); 356 EXPECT_TRUE(render_text->selection_model().Equals(sel));
290 if (move_right) 357 if (move_right)
291 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false); 358 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false);
292 else 359 else
293 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); 360 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false);
(...skipping 727 matching lines...) Expand 10 before | Expand all | Expand 10 after
1021 // Ensure that a sufficiently large display rectangle shows all the text. 1088 // Ensure that a sufficiently large display rectangle shows all the text.
1022 render_text->SetDisplayRect(Rect(width + 10, 1)); 1089 render_text->SetDisplayRect(Rect(width + 10, 1));
1023 EXPECT_EQ(render_text->display_rect().width() - width - 1, 1090 EXPECT_EQ(render_text->display_rect().width() - width - 1,
1024 render_text->GetUpdatedCursorBounds().x()); 1091 render_text->GetUpdatedCursorBounds().x());
1025 1092
1026 // Reset locale. 1093 // Reset locale.
1027 base::i18n::SetICUDefaultLocale(locale); 1094 base::i18n::SetICUDefaultLocale(locale);
1028 } 1095 }
1029 1096
1030 } // namespace gfx 1097 } // namespace gfx
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698