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

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: for dcommit Created 8 years, 9 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
« no previous file with comments | « ui/gfx/render_text_linux.cc ('k') | ui/ui.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 void TestVisualCursorMotionInObscuredField(RenderText* render_text,
285 const string16& text,
286 bool select) {
287 render_text->SetText(text);
288 int len = text.length();
289 render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, select);
290 EXPECT_TRUE(render_text->selection_model().Equals(SelectionModel(
291 select ? 0 : len, len, len - 1, SelectionModel::TRAILING)));
292 render_text->MoveCursor(LINE_BREAK, CURSOR_LEFT, select);
293 EXPECT_TRUE(render_text->selection_model().Equals(SelectionModel(
294 0, 0, SelectionModel::LEADING)));
295 for (int j = 1; j <= len; ++j) {
296 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, select);
297 EXPECT_TRUE(render_text->selection_model().Equals(SelectionModel(
298 select ? 0 : j, j, j - 1, SelectionModel::TRAILING)));
299 }
300 for (int j = len - 1; j >= 0; --j) {
301 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, select);
302 EXPECT_TRUE(render_text->selection_model().Equals(SelectionModel(
303 select ? 0 : j, j, j, SelectionModel::LEADING)));
304 }
305 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, select);
306 EXPECT_TRUE(render_text->selection_model().Equals(SelectionModel(
307 select ? 0 : len, len, len - 1, SelectionModel::TRAILING)));
308 render_text->MoveCursor(WORD_BREAK, CURSOR_LEFT, select);
309 EXPECT_TRUE(render_text->selection_model().Equals(SelectionModel(
310 0, 0, SelectionModel::LEADING)));
311 }
312
313 TEST_F(RenderTextTest, PasswordCensorship) {
314 const string16 seuss = ASCIIToUTF16("hop on pop");
315 const string16 no_seuss = ASCIIToUTF16("**********");
316 scoped_ptr<RenderText> render_text(RenderText::CreateRenderText());
317
318 // GetObscuredText returns asterisks when the obscured bit is set.
319 render_text->SetText(seuss);
320 render_text->SetObscured(true);
321 EXPECT_EQ(seuss, render_text->text());
322 EXPECT_EQ(no_seuss, render_text->GetDisplayText());
323 render_text->SetObscured(false);
324 EXPECT_EQ(seuss, render_text->text());
325 EXPECT_EQ(seuss, render_text->GetDisplayText());
326
327 // TODO(benrg): No Windows implementation yet.
328 #if !defined(OS_WIN)
329
330 render_text->SetObscured(true);
331
332 // Surrogate pairs are counted as one code point.
333 const char16 invalid_surrogates[] = {0xDC00, 0xD800, 0};
334 render_text->SetText(invalid_surrogates);
335 EXPECT_EQ(ASCIIToUTF16("**"), render_text->GetDisplayText());
336 const char16 valid_surrogates[] = {0xD800, 0xDC00, 0};
337 render_text->SetText(valid_surrogates);
338 EXPECT_EQ(ASCIIToUTF16("*"), render_text->GetDisplayText());
339 EXPECT_EQ(0U, render_text->GetCursorPosition());
340 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false);
341 EXPECT_EQ(2U, render_text->GetCursorPosition());
342
343 // Cursoring is independent of the underlying characters when the text is
344 // obscured.
345 const wchar_t* const texts[] = {
346 L"hop on pop", // word boundaries
347 L"ab \x5D0\x5D1" L"12", // bidi embedding level of 2
348 L"\x5D0\x5D1" L"12", // RTL paragraph direction on Linux
349 L"\x5D0\x5D1" // pure RTL
350 };
351 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(texts); ++i) {
352 string16 text = WideToUTF16(texts[i]);
353 TestVisualCursorMotionInObscuredField(render_text.get(), text, false);
354 TestVisualCursorMotionInObscuredField(render_text.get(), text, true);
355 }
356 #endif // !defined(OS_WIN)
357 }
358
284 void RunMoveCursorLeftRightTest(RenderText* render_text, 359 void RunMoveCursorLeftRightTest(RenderText* render_text,
285 const std::vector<SelectionModel>& expected, 360 const std::vector<SelectionModel>& expected,
286 bool move_right) { 361 bool move_right) {
287 for (int i = 0; i < static_cast<int>(expected.size()); ++i) { 362 for (int i = 0; i < static_cast<int>(expected.size()); ++i) {
288 SelectionModel sel = expected[i]; 363 SelectionModel sel = expected[i];
289 EXPECT_TRUE(render_text->selection_model().Equals(sel)); 364 EXPECT_TRUE(render_text->selection_model().Equals(sel));
290 if (move_right) 365 if (move_right)
291 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false); 366 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false);
292 else 367 else
293 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); 368 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. 1096 // Ensure that a sufficiently large display rectangle shows all the text.
1022 render_text->SetDisplayRect(Rect(width + 10, 1)); 1097 render_text->SetDisplayRect(Rect(width + 10, 1));
1023 EXPECT_EQ(render_text->display_rect().width() - width - 1, 1098 EXPECT_EQ(render_text->display_rect().width() - width - 1,
1024 render_text->GetUpdatedCursorBounds().x()); 1099 render_text->GetUpdatedCursorBounds().x());
1025 1100
1026 // Reset locale. 1101 // Reset locale.
1027 base::i18n::SetICUDefaultLocale(locale); 1102 base::i18n::SetICUDefaultLocale(locale);
1028 } 1103 }
1029 1104
1030 } // namespace gfx 1105 } // namespace gfx
OLDNEW
« no previous file with comments | « ui/gfx/render_text_linux.cc ('k') | ui/ui.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698