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

Unified Diff: ui/views/controls/textfield/textfield_model_unittest.cc

Issue 1999773002: views::Textfield: Implement transpose editing command. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/controls/textfield/textfield_model.cc ('k') | ui/views/controls/textfield/textfield_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/controls/textfield/textfield_model_unittest.cc
diff --git a/ui/views/controls/textfield/textfield_model_unittest.cc b/ui/views/controls/textfield/textfield_model_unittest.cc
index 03cb08d76eac6d0d0b05dbc0a24fbf3d2b226e83..7019132301208905e3645e50e03ee6fc0aec9e13 100644
--- a/ui/views/controls/textfield/textfield_model_unittest.cc
+++ b/ui/views/controls/textfield/textfield_model_unittest.cc
@@ -1589,4 +1589,68 @@ TEST_F(TextfieldModelTest, Clipboard_WhiteSpaceStringTest) {
EXPECT_STR_EQ("FOO BAR", model.text());
}
+TEST_F(TextfieldModelTest, Transpose) {
+ const base::string16 ltr = base::ASCIIToUTF16("12");
+ const base::string16 rtl = base::WideToUTF16(L"\x0634\x0632");
+ const base::string16 ltr_transposed = base::ASCIIToUTF16("21");
+ const base::string16 rtl_transposed = base::WideToUTF16(L"\x0632\x0634");
+
+ // This is a string with an 'a' between two emojis.
+ const base::string16 surrogate_pairs({0xD83D, 0xDE07, 'a', 0xD83D, 0xDE0E});
+ const base::string16 test_strings[] = {ltr, rtl, surrogate_pairs};
+
+ struct TestCase {
+ gfx::Range range;
+ base::string16 expected_text;
+ gfx::Range expected_selection;
+ };
+
+ std::vector<TestCase> ltr_tests = {
+ {gfx::Range(0), ltr, gfx::Range(0)},
+ {gfx::Range(1), ltr_transposed, gfx::Range(2)},
+ {gfx::Range(2), ltr_transposed, gfx::Range(2)},
+ {gfx::Range(0, 2), ltr, gfx::Range(0, 2)}};
+
+ std::vector<TestCase> rtl_tests = {
+ {gfx::Range(0), rtl, gfx::Range(0)},
+ {gfx::Range(1), rtl_transposed, gfx::Range(2)},
+ {gfx::Range(2), rtl_transposed, gfx::Range(2)},
+ {gfx::Range(0, 1), rtl, gfx::Range(0, 1)}};
+
+ // Only test at valid grapheme boundaries.
+ std::vector<TestCase> emoji_tests = {
msw 2016/06/29 17:16:45 nit: naming consistency between surrogate_pairs an
karandeepb 2016/06/30 03:03:39 Done.
+ {gfx::Range(0), surrogate_pairs, gfx::Range(0)},
+ {gfx::Range(2), base::string16({'a', 0xD83D, 0xDE07, 0xD83D, 0xDE0E}),
+ gfx::Range(3)},
+ {gfx::Range(3), base::string16({0xD83D, 0xDE07, 0xD83D, 0xDE0E, 'a'}),
+ gfx::Range(5)},
+ {gfx::Range(5), base::string16({0xD83D, 0xDE07, 0xD83D, 0xDE0E, 'a'}),
+ gfx::Range(5)},
+ {gfx::Range(3, 5), surrogate_pairs, gfx::Range(3, 5)}};
+
+ std::vector<std::vector<TestCase>> all_tests = {ltr_tests, rtl_tests,
+ emoji_tests};
+
+ TextfieldModel model(nullptr);
+
+ EXPECT_EQ(all_tests.size(), arraysize(test_strings));
+
+ for (size_t i = 0; i < arraysize(test_strings); i++) {
+ for (size_t j = 0; j < all_tests[i].size(); j++) {
+ SCOPED_TRACE(testing::Message() << "Testing case " << i << ", " << j
+ << " with string " << test_strings[i]);
+
+ const TestCase& test_case = all_tests[i][j];
+
+ model.SetText(test_strings[i]);
+ model.SelectRange(test_case.range);
+ EXPECT_EQ(test_case.range, model.render_text()->selection());
+ model.Transpose();
+
+ EXPECT_EQ(test_case.expected_text, model.text());
+ EXPECT_EQ(test_case.expected_selection, model.render_text()->selection());
+ }
+ }
+}
+
} // namespace views
« no previous file with comments | « ui/views/controls/textfield/textfield_model.cc ('k') | ui/views/controls/textfield/textfield_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698