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

Unified Diff: ui/views/cocoa/bridged_native_widget_unittest.mm

Issue 1912993002: MacViews: Implement NSResponder deletion action messages. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Change "Depends on Patchset". Created 4 years, 8 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/cocoa/bridged_content_view.mm ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..8f270c30bb1da7d9ec5951c6e05e24999968cef2 100644
--- a/ui/views/cocoa/bridged_native_widget_unittest.mm
+++ b/ui/views/cocoa/bridged_native_widget_unittest.mm
@@ -207,11 +207,22 @@ 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|. |sel| can be
+ // either deleteToBeginningOfLine: or deleteToBeginningOfParagraph:.
+ void TestDeleteBeginning(SEL sel);
+
+ // Test delete to end of line or paragraph based on |sel|. |sel| can be
+ // either deleteToEndOfLine: or deleteToEndOfParagraph:.
+ void TestDeleteEnd(SEL sel);
+
std::unique_ptr<views::View> view_;
BridgedContentView* ns_view_; // Weak. Owned by bridge().
base::MessageLoopForUI message_loop_;
@@ -255,6 +266,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 +300,56 @@ void BridgedNativeWidgetTest::TearDown() {
BridgedNativeWidgetTestBase::TearDown();
}
+void BridgedNativeWidgetTest::TestDeleteBeginning(SEL sel) {
+ 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) {
+ 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 +651,76 @@ TEST_F(BridgedNativeWidgetTest, TextInput_DeleteForward) {
EXPECT_EQ_RANGE(NSMakeRange(0, 0), [ns_view_ selectedRange]);
}
+// Test forward word deletion using text input protocol.
+TEST_F(BridgedNativeWidgetTest, TextInput_DeleteWordForward) {
+ 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 backward word deletion using text input protocol.
+TEST_F(BridgedNativeWidgetTest, TextInput_DeleteWordBackward) {
+ 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 deleting to beginning/end of line/paragraph using text input protocol.
+
+TEST_F(BridgedNativeWidgetTest, TextInput_DeleteToBeginningOfLine) {
+ 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) {
« no previous file with comments | « ui/views/cocoa/bridged_content_view.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698