Chromium Code Reviews| Index: ui/views/cocoa/bridged_native_widget_unittest.mm |
| diff --git a/ui/views/cocoa/bridged_native_widget_unittest.mm b/ui/views/cocoa/bridged_native_widget_unittest.mm |
| index 8922f051ff6e82527cb184912d45f104b86d97e5..11a780b9c947ab59cbaf03279014d01b25aa09e0 100644 |
| --- a/ui/views/cocoa/bridged_native_widget_unittest.mm |
| +++ b/ui/views/cocoa/bridged_native_widget_unittest.mm |
| @@ -207,11 +207,20 @@ class BridgedNativeWidgetTest : public BridgedNativeWidgetTestBase { |
| // Returns the current text as std::string. |
| std::string GetText(); |
| + // Set the selection range for the installed textfield. |
| + void SetSelectionRange(const gfx::Range& range); |
| + |
| // testing::Test: |
| void SetUp() override; |
| void TearDown() override; |
| protected: |
| + // Test delete to beginning of line or paragraph based on |sel|. |
| + void TestDeleteBeginning(SEL sel); |
| + |
| + // Test delete to end of line or paragraph based on |sel|. |
| + void TestDeleteEnd(SEL sel); |
| + |
| std::unique_ptr<views::View> view_; |
| BridgedContentView* ns_view_; // Weak. Owned by bridge(). |
| base::MessageLoopForUI message_loop_; |
| @@ -255,6 +264,11 @@ std::string BridgedNativeWidgetTest::GetText() { |
| return SysNSStringToUTF8([text string]); |
| } |
| +void BridgedNativeWidgetTest::SetSelectionRange(const gfx::Range& range) { |
| + ui::TextInputClient* client = [ns_view_ textInputClient]; |
| + client->SetSelectionRange(range); |
| +} |
| + |
| void BridgedNativeWidgetTest::SetUp() { |
| BridgedNativeWidgetTestBase::SetUp(); |
| @@ -284,6 +298,56 @@ void BridgedNativeWidgetTest::TearDown() { |
| BridgedNativeWidgetTestBase::TearDown(); |
| } |
| +void BridgedNativeWidgetTest::TestDeleteBeginning(SEL sel) { |
|
tapted
2016/04/29 04:15:39
nit: add a comment describing what |sel| can be (i
karandeepb
2016/05/02 02:53:42
Done.
|
| + InstallTextField("foo bar baz"); |
| + EXPECT_EQ_RANGE(NSMakeRange(11, 0), [ns_view_ selectedRange]); |
| + |
| + // Move the caret to the beginning of the line. |
| + SetSelectionRange(gfx::Range(0)); |
| + // Verify no deletion takes place. |
| + [ns_view_ doCommandBySelector:sel]; |
| + EXPECT_EQ("foo bar baz", GetText()); |
| + EXPECT_EQ_RANGE(NSMakeRange(0, 0), [ns_view_ selectedRange]); |
| + |
| + // Move the caret as- "foo| bar baz". |
| + SetSelectionRange(gfx::Range(3, 3)); |
| + [ns_view_ doCommandBySelector:sel]; |
| + // Verify state is "| bar baz". |
| + EXPECT_EQ(" bar baz", GetText()); |
| + EXPECT_EQ_RANGE(NSMakeRange(0, 0), [ns_view_ selectedRange]); |
| + |
| + // Make a selection as- " bar |baz|". |
| + SetSelectionRange(gfx::Range(5, 8)); |
| + [ns_view_ doCommandBySelector:sel]; |
| + // Verify only the selection is deleted so that the state is " bar |". |
| + EXPECT_EQ(" bar ", GetText()); |
| + EXPECT_EQ_RANGE(NSMakeRange(5, 0), [ns_view_ selectedRange]); |
| +} |
| + |
| +void BridgedNativeWidgetTest::TestDeleteEnd(SEL sel) { |
|
tapted
2016/04/29 04:15:39
nit: add comment
karandeepb
2016/05/02 02:53:42
Done.
|
| + InstallTextField("foo bar baz"); |
| + EXPECT_EQ_RANGE(NSMakeRange(11, 0), [ns_view_ selectedRange]); |
| + |
| + // Caret is at the end of the line. Verify no deletion takes place. |
| + [ns_view_ doCommandBySelector:sel]; |
| + EXPECT_EQ("foo bar baz", GetText()); |
| + EXPECT_EQ_RANGE(NSMakeRange(11, 0), [ns_view_ selectedRange]); |
| + |
| + // Move the caret as- "foo bar| baz". |
| + SetSelectionRange(gfx::Range(7, 7)); |
| + [ns_view_ doCommandBySelector:sel]; |
| + // Verify state is "foo bar|". |
| + EXPECT_EQ("foo bar", GetText()); |
| + EXPECT_EQ_RANGE(NSMakeRange(7, 0), [ns_view_ selectedRange]); |
| + |
| + // Make a selection as- "|foo |bar". |
| + SetSelectionRange(gfx::Range(0, 4)); |
| + [ns_view_ doCommandBySelector:sel]; |
| + // Verify only the selection is deleted so that the state is "|bar". |
| + EXPECT_EQ("bar", GetText()); |
| + EXPECT_EQ_RANGE(NSMakeRange(0, 0), [ns_view_ selectedRange]); |
| +} |
| + |
| // The TEST_VIEW macro expects the view it's testing to have a superview. In |
| // these tests, the NSView bridge is a contentView, at the root. These mimic |
| // what TEST_VIEW usually does. |
| @@ -585,6 +649,72 @@ TEST_F(BridgedNativeWidgetTest, TextInput_DeleteForward) { |
| EXPECT_EQ_RANGE(NSMakeRange(0, 0), [ns_view_ selectedRange]); |
| } |
| +TEST_F(BridgedNativeWidgetTest, TextInput_DeleteWordForward) { |
|
tapted
2016/04/29 04:15:39
nit: add broader test comment
karandeepb
2016/05/02 02:53:42
Done.
|
| + InstallTextField("foo bar baz"); |
| + EXPECT_EQ_RANGE(NSMakeRange(11, 0), [ns_view_ selectedRange]); |
| + |
| + // Caret is at the end of the line. Verify no deletion takes place. |
| + [ns_view_ doCommandBySelector:@selector(deleteWordForward:)]; |
| + EXPECT_EQ("foo bar baz", GetText()); |
| + EXPECT_EQ_RANGE(NSMakeRange(11, 0), [ns_view_ selectedRange]); |
| + |
| + // Move the caret as- "foo b|ar baz". |
| + SetSelectionRange(gfx::Range(5, 5)); |
| + [ns_view_ doCommandBySelector:@selector(deleteWordForward:)]; |
| + // Verify state is "foo b| baz" |
| + EXPECT_EQ("foo b baz", GetText()); |
| + EXPECT_EQ_RANGE(NSMakeRange(5, 0), [ns_view_ selectedRange]); |
| + |
| + // Make a selection as- "|fo|o b baz". |
| + SetSelectionRange(gfx::Range(0, 2)); |
| + [ns_view_ doCommandBySelector:@selector(deleteWordForward:)]; |
| + // Verify only the selection is deleted and state is "|o b baz". |
| + EXPECT_EQ("o b baz", GetText()); |
| + EXPECT_EQ_RANGE(NSMakeRange(0, 0), [ns_view_ selectedRange]); |
| +} |
| + |
| +TEST_F(BridgedNativeWidgetTest, TextInput_DeleteWordBackward) { |
|
tapted
2016/04/29 04:15:39
nit: add comment
karandeepb
2016/05/02 02:53:42
Done.
|
| + InstallTextField("foo bar baz"); |
| + EXPECT_EQ_RANGE(NSMakeRange(11, 0), [ns_view_ selectedRange]); |
| + |
| + // Move the caret to the beginning of the line. |
| + SetSelectionRange(gfx::Range(0)); |
| + // Verify no deletion takes place. |
| + [ns_view_ doCommandBySelector:@selector(deleteWordBackward:)]; |
| + EXPECT_EQ("foo bar baz", GetText()); |
| + EXPECT_EQ_RANGE(NSMakeRange(0, 0), [ns_view_ selectedRange]); |
| + |
| + // Move the caret as- "foo ba|r baz". |
| + SetSelectionRange(gfx::Range(6, 6)); |
| + [ns_view_ doCommandBySelector:@selector(deleteWordBackward:)]; |
| + // Verify state is "foo |r baz". |
| + EXPECT_EQ("foo r baz", GetText()); |
| + EXPECT_EQ_RANGE(NSMakeRange(4, 0), [ns_view_ selectedRange]); |
| + |
| + // Make a selection as- "f|oo r b|az". |
| + SetSelectionRange(gfx::Range(1, 7)); |
| + [ns_view_ doCommandBySelector:@selector(deleteWordBackward:)]; |
| + // Verify only the selection is deleted and state is "f|az" |
| + EXPECT_EQ("faz", GetText()); |
| + EXPECT_EQ_RANGE(NSMakeRange(1, 0), [ns_view_ selectedRange]); |
| +} |
| + |
| +TEST_F(BridgedNativeWidgetTest, TextInput_DeleteToBeginningOfLine) { |
|
tapted
2016/04/29 04:15:39
a comment here can probably cover all four tests b
karandeepb
2016/05/02 02:53:42
Done.
|
| + TestDeleteBeginning(@selector(deleteToBeginningOfLine:)); |
| +} |
| + |
| +TEST_F(BridgedNativeWidgetTest, TextInput_DeleteToEndOfLine) { |
| + TestDeleteEnd(@selector(deleteToEndOfLine:)); |
| +} |
| + |
| +TEST_F(BridgedNativeWidgetTest, TextInput_DeleteToBeginningOfParagraph) { |
| + TestDeleteBeginning(@selector(deleteToBeginningOfParagraph:)); |
| +} |
| + |
| +TEST_F(BridgedNativeWidgetTest, TextInput_DeleteToEndOfParagraph) { |
| + TestDeleteEnd(@selector(deleteToEndOfParagraph:)); |
| +} |
| + |
| // Test firstRectForCharacterRange:actualRange for cases where query range is |
| // empty or outside composition range. |
| TEST_F(BridgedNativeWidgetTest, TextInput_FirstRectForCharacterRange_Caret) { |