OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/views/controls/textfield/textfield_model.h" | 5 #include "ui/views/controls/textfield/textfield_model.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <vector> | 10 #include <vector> |
(...skipping 1571 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1582 | 1582 |
1583 // Test 7 | 1583 // Test 7 |
1584 // Clipboard text with lots of spaces between words should have all spaces | 1584 // Clipboard text with lots of spaces between words should have all spaces |
1585 // replaced with a single space. | 1585 // replaced with a single space. |
1586 ui::ScopedClipboardWriter(ui::CLIPBOARD_TYPE_COPY_PASTE) | 1586 ui::ScopedClipboardWriter(ui::CLIPBOARD_TYPE_COPY_PASTE) |
1587 .WriteText(base::ASCIIToUTF16("FOO BAR")); | 1587 .WriteText(base::ASCIIToUTF16("FOO BAR")); |
1588 EXPECT_TRUE(model.Paste()); | 1588 EXPECT_TRUE(model.Paste()); |
1589 EXPECT_STR_EQ("FOO BAR", model.text()); | 1589 EXPECT_STR_EQ("FOO BAR", model.text()); |
1590 } | 1590 } |
1591 | 1591 |
1592 TEST_F(TextfieldModelTest, Transpose) { | |
1593 const base::string16 ltr = base::ASCIIToUTF16("12"); | |
1594 const base::string16 rtl = base::WideToUTF16(L"\x0634\x0632"); | |
1595 const base::string16 ltr_transposed = base::ASCIIToUTF16("21"); | |
1596 const base::string16 rtl_transposed = base::WideToUTF16(L"\x0632\x0634"); | |
1597 | |
1598 // This is a string with an 'a' between two emojis. | |
1599 const base::string16 surrogate_pairs({0xD83D, 0xDE07, 'a', 0xD83D, 0xDE0E}); | |
1600 const base::string16 test_strings[] = {ltr, rtl, surrogate_pairs}; | |
1601 | |
1602 struct TestCase { | |
1603 gfx::Range range; | |
1604 base::string16 expected_text; | |
1605 gfx::Range expected_selection; | |
1606 }; | |
1607 | |
1608 std::vector<TestCase> ltr_tests = { | |
1609 {gfx::Range(0), ltr, gfx::Range(0)}, | |
1610 {gfx::Range(1), ltr_transposed, gfx::Range(2)}, | |
1611 {gfx::Range(2), ltr_transposed, gfx::Range(2)}, | |
1612 {gfx::Range(0, 2), ltr, gfx::Range(0, 2)}}; | |
1613 | |
1614 std::vector<TestCase> rtl_tests = { | |
1615 {gfx::Range(0), rtl, gfx::Range(0)}, | |
1616 {gfx::Range(1), rtl_transposed, gfx::Range(2)}, | |
1617 {gfx::Range(2), rtl_transposed, gfx::Range(2)}, | |
1618 {gfx::Range(0, 1), rtl, gfx::Range(0, 1)}}; | |
1619 | |
1620 // Only test at valid grapheme boundaries. | |
1621 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.
| |
1622 {gfx::Range(0), surrogate_pairs, gfx::Range(0)}, | |
1623 {gfx::Range(2), base::string16({'a', 0xD83D, 0xDE07, 0xD83D, 0xDE0E}), | |
1624 gfx::Range(3)}, | |
1625 {gfx::Range(3), base::string16({0xD83D, 0xDE07, 0xD83D, 0xDE0E, 'a'}), | |
1626 gfx::Range(5)}, | |
1627 {gfx::Range(5), base::string16({0xD83D, 0xDE07, 0xD83D, 0xDE0E, 'a'}), | |
1628 gfx::Range(5)}, | |
1629 {gfx::Range(3, 5), surrogate_pairs, gfx::Range(3, 5)}}; | |
1630 | |
1631 std::vector<std::vector<TestCase>> all_tests = {ltr_tests, rtl_tests, | |
1632 emoji_tests}; | |
1633 | |
1634 TextfieldModel model(nullptr); | |
1635 | |
1636 EXPECT_EQ(all_tests.size(), arraysize(test_strings)); | |
1637 | |
1638 for (size_t i = 0; i < arraysize(test_strings); i++) { | |
1639 for (size_t j = 0; j < all_tests[i].size(); j++) { | |
1640 SCOPED_TRACE(testing::Message() << "Testing case " << i << ", " << j | |
1641 << " with string " << test_strings[i]); | |
1642 | |
1643 const TestCase& test_case = all_tests[i][j]; | |
1644 | |
1645 model.SetText(test_strings[i]); | |
1646 model.SelectRange(test_case.range); | |
1647 EXPECT_EQ(test_case.range, model.render_text()->selection()); | |
1648 model.Transpose(); | |
1649 | |
1650 EXPECT_EQ(test_case.expected_text, model.text()); | |
1651 EXPECT_EQ(test_case.expected_selection, model.render_text()->selection()); | |
1652 } | |
1653 } | |
1654 } | |
1655 | |
1592 } // namespace views | 1656 } // namespace views |
OLD | NEW |