Chromium Code Reviews| 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 #import "ui/views/cocoa/bridged_native_widget.h" | 5 #import "ui/views/cocoa/bridged_native_widget.h" |
| 6 | 6 |
| 7 #import <Cocoa/Cocoa.h> | 7 #import <Cocoa/Cocoa.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 | 10 |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 103 gfx::Rect right_caret = GetCaretBoundsForPosition( | 103 gfx::Rect right_caret = GetCaretBoundsForPosition( |
| 104 client, composition_text, query_range.location + query_range.length, | 104 client, composition_text, query_range.location + query_range.length, |
| 105 nullptr); | 105 nullptr); |
| 106 | 106 |
| 107 // The expected bounds correspond to the area between the left and right caret | 107 // The expected bounds correspond to the area between the left and right caret |
| 108 // positions. | 108 // positions. |
| 109 return gfx::Rect(left_caret.x(), left_caret.y(), | 109 return gfx::Rect(left_caret.x(), left_caret.y(), |
| 110 right_caret.x() - left_caret.x(), left_caret.height()); | 110 right_caret.x() - left_caret.x(), left_caret.height()); |
| 111 } | 111 } |
| 112 | 112 |
| 113 // Implemented NSResponder action messages for use in tests. | |
|
tapted
2016/05/31 01:49:14
nit: constants should come before functions in eac
karandeepb
2016/05/31 01:57:33
Done.
| |
| 114 NSArray* kMoveActions = @[ | |
|
tapted
2016/05/31 01:49:14
nit: NSArray* const kMoveActions - same below (it'
karandeepb
2016/05/31 01:57:33
Done.
| |
| 115 @"moveForward:", | |
| 116 @"moveRight:", | |
| 117 @"moveBackward:", | |
| 118 @"moveLeft:", | |
| 119 @"moveUp:", | |
| 120 @"moveDown:", | |
| 121 @"moveWordForward:", | |
| 122 @"moveWordBackward:", | |
| 123 @"moveToBeginningOfLine:", | |
| 124 @"moveToEndOfLine:", | |
| 125 @"moveToBeginningOfParagraph:", | |
| 126 @"moveToEndOfParagraph:", | |
| 127 @"moveToEndOfDocument:", | |
| 128 @"moveToBeginningOfDocument:", | |
| 129 @"pageDown:", | |
| 130 @"pageUp:", | |
| 131 @"moveWordRight:", | |
| 132 @"moveWordLeft:", | |
| 133 @"moveToLeftEndOfLine:", | |
| 134 @"moveToRightEndOfLine:" | |
| 135 ]; | |
| 136 | |
| 137 NSArray* kSelectActions = @[ | |
| 138 @"moveBackwardAndModifySelection:", | |
| 139 @"moveForwardAndModifySelection:", | |
| 140 @"moveWordForwardAndModifySelection:", | |
| 141 @"moveWordBackwardAndModifySelection:", | |
| 142 @"moveUpAndModifySelection:", | |
| 143 @"moveDownAndModifySelection:", | |
| 144 @"moveToBeginningOfLineAndModifySelection:", | |
| 145 @"moveToEndOfLineAndModifySelection:", | |
| 146 @"moveToBeginningOfParagraphAndModifySelection:", | |
| 147 @"moveToEndOfParagraphAndModifySelection:", | |
| 148 @"moveToEndOfDocumentAndModifySelection:", | |
| 149 @"moveToBeginningOfDocumentAndModifySelection:", | |
| 150 @"pageDownAndModifySelection:", | |
| 151 @"pageUpAndModifySelection:", | |
| 152 @"moveParagraphForwardAndModifySelection:", | |
| 153 @"moveParagraphBackwardAndModifySelection:", | |
| 154 @"moveRightAndModifySelection:", | |
| 155 @"moveLeftAndModifySelection:", | |
| 156 @"moveWordRightAndModifySelection:", | |
| 157 @"moveWordLeftAndModifySelection:", | |
| 158 @"moveToLeftEndOfLineAndModifySelection:", | |
| 159 @"moveToRightEndOfLineAndModifySelection:" | |
| 160 ]; | |
| 161 | |
| 162 NSArray* kDeleteActions = @[ | |
| 163 @"deleteForward:", @"deleteBackward:", @"deleteWordForward:", | |
| 164 @"deleteWordBackward:", @"deleteToBeginningOfLine:", @"deleteToEndOfLine:", | |
| 165 @"deleteToBeginningOfParagraph:", @"deleteToEndOfParagraph:" | |
| 166 ]; | |
| 167 | |
| 168 NSArray* kMiscActions = @[ @"insertText:", @"cancelOperation:" ]; | |
| 169 | |
| 113 } // namespace | 170 } // namespace |
| 114 | 171 |
| 115 // Class to override -[NSWindow toggleFullScreen:] to a no-op. This simulates | 172 // Class to override -[NSWindow toggleFullScreen:] to a no-op. This simulates |
| 116 // NSWindow's behavior when attempting to toggle fullscreen state again, when | 173 // NSWindow's behavior when attempting to toggle fullscreen state again, when |
| 117 // the last attempt failed but Cocoa has not yet sent | 174 // the last attempt failed but Cocoa has not yet sent |
| 118 // windowDidFailToEnterFullScreen:. | 175 // windowDidFailToEnterFullScreen:. |
| 119 @interface BridgedNativeWidgetTestFullScreenWindow : NativeWidgetMacNSWindow { | 176 @interface BridgedNativeWidgetTestFullScreenWindow : NativeWidgetMacNSWindow { |
| 120 @private | 177 @private |
| 121 int ignoredToggleFullScreenCount_; | 178 int ignoredToggleFullScreenCount_; |
| 122 } | 179 } |
| (...skipping 814 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 937 TEST_F(BridgedNativeWidgetTest, TextInput_DeleteToBeginningOfParagraph) { | 994 TEST_F(BridgedNativeWidgetTest, TextInput_DeleteToBeginningOfParagraph) { |
| 938 TestDeleteBeginning(@selector(deleteToBeginningOfParagraph:)); | 995 TestDeleteBeginning(@selector(deleteToBeginningOfParagraph:)); |
| 939 } | 996 } |
| 940 | 997 |
| 941 TEST_F(BridgedNativeWidgetTest, TextInput_DeleteToEndOfParagraph) { | 998 TEST_F(BridgedNativeWidgetTest, TextInput_DeleteToEndOfParagraph) { |
| 942 TestDeleteEnd(@selector(deleteToEndOfParagraph:)); | 999 TestDeleteEnd(@selector(deleteToEndOfParagraph:)); |
| 943 } | 1000 } |
| 944 | 1001 |
| 945 // Test move commands against expectations set by |dummy_text_view_|. | 1002 // Test move commands against expectations set by |dummy_text_view_|. |
| 946 TEST_F(BridgedNativeWidgetTest, TextInput_MoveEditingCommands) { | 1003 TEST_F(BridgedNativeWidgetTest, TextInput_MoveEditingCommands) { |
| 947 NSArray* selectors = @[ | 1004 TestEditingCommands(kMoveActions); |
| 948 @"moveForward:", | |
| 949 @"moveRight:", | |
| 950 @"moveBackward:", | |
| 951 @"moveLeft:", | |
| 952 @"moveUp:", | |
| 953 @"moveDown:", | |
| 954 @"moveWordForward:", | |
| 955 @"moveWordBackward:", | |
| 956 @"moveToBeginningOfLine:", | |
| 957 @"moveToEndOfLine:", | |
| 958 @"moveToBeginningOfParagraph:", | |
| 959 @"moveToEndOfParagraph:", | |
| 960 @"moveToEndOfDocument:", | |
| 961 @"moveToBeginningOfDocument:", | |
| 962 @"pageDown:", | |
| 963 @"pageUp:", | |
| 964 @"moveWordRight:", | |
| 965 @"moveWordLeft:", | |
| 966 @"moveToLeftEndOfLine:", | |
| 967 @"moveToRightEndOfLine:" | |
| 968 ]; | |
| 969 TestEditingCommands(selectors); | |
| 970 } | 1005 } |
| 971 | 1006 |
| 972 // Todo(karandeepb): Enable this test once the behavior of all move and select | 1007 // Todo(karandeepb): Enable this test once the behavior of all move and select |
| 973 // commands are fixed. | 1008 // commands are fixed. |
| 974 // Test move and select commands against expectations set by |dummy_text_view_|. | 1009 // Test move and select commands against expectations set by |dummy_text_view_|. |
| 975 TEST_F(BridgedNativeWidgetTest, | 1010 TEST_F(BridgedNativeWidgetTest, |
| 976 TextInput_MoveAndSelectEditingCommands_DISABLED) { | 1011 TextInput_MoveAndSelectEditingCommands_DISABLED) { |
| 977 NSArray* selectors = @[ | 1012 TestEditingCommands(kSelectActions); |
| 978 @"moveBackwardAndModifySelection:", | |
| 979 @"moveForwardAndModifySelection:", | |
| 980 @"moveWordForwardAndModifySelection:", | |
| 981 @"moveWordBackwardAndModifySelection:", | |
| 982 @"moveUpAndModifySelection:", | |
| 983 @"moveDownAndModifySelection:", | |
| 984 @"moveToBeginningOfLineAndModifySelection:", | |
| 985 @"moveToEndOfLineAndModifySelection:", | |
| 986 @"moveToBeginningOfParagraphAndModifySelection:", | |
| 987 @"moveToEndOfParagraphAndModifySelection:", | |
| 988 @"moveToEndOfDocumentAndModifySelection:", | |
| 989 @"moveToBeginningOfDocumentAndModifySelection:", | |
| 990 @"pageDownAndModifySelection:", | |
| 991 @"pageUpAndModifySelection:", | |
| 992 @"moveParagraphForwardAndModifySelection:", | |
| 993 @"moveParagraphBackwardAndModifySelection:", | |
| 994 @"moveRightAndModifySelection:", | |
| 995 @"moveLeftAndModifySelection:", | |
| 996 @"moveWordRightAndModifySelection:", | |
| 997 @"moveWordLeftAndModifySelection:", | |
| 998 @"moveToLeftEndOfLineAndModifySelection:", | |
| 999 @"moveToRightEndOfLineAndModifySelection:" | |
| 1000 ]; | |
| 1001 TestEditingCommands(selectors); | |
| 1002 } | 1013 } |
| 1003 | 1014 |
| 1004 // Test delete commands against expectations set by |dummy_text_view_|. | 1015 // Test delete commands against expectations set by |dummy_text_view_|. |
| 1005 TEST_F(BridgedNativeWidgetTest, TextInput_DeleteCommands) { | 1016 TEST_F(BridgedNativeWidgetTest, TextInput_DeleteCommands) { |
| 1006 NSArray* selectors = @[ | 1017 TestEditingCommands(kDeleteActions); |
| 1007 @"deleteForward:", @"deleteBackward:", @"deleteWordForward:", | 1018 } |
| 1008 @"deleteWordBackward:", @"deleteToBeginningOfLine:", @"deleteToEndOfLine:", | 1019 |
| 1009 @"deleteToBeginningOfParagraph:", @"deleteToEndOfParagraph:" | 1020 // Test that we don't crash during an action message even if the TextInputClient |
| 1010 ]; | 1021 // is nil. Regression test for crbug.com/615745. |
| 1011 TestEditingCommands(selectors); | 1022 TEST_F(BridgedNativeWidgetTest, NilTextInputClient) { |
| 1023 [ns_view_ setTextInputClient:nil]; | |
| 1024 NSMutableArray* selectors = [NSMutableArray array]; | |
| 1025 [selectors addObjectsFromArray:kMoveActions]; | |
| 1026 [selectors addObjectsFromArray:kSelectActions]; | |
| 1027 [selectors addObjectsFromArray:kDeleteActions]; | |
| 1028 [selectors addObjectsFromArray:kMiscActions]; | |
| 1029 | |
| 1030 for (NSString* selector in selectors) | |
| 1031 [ns_view_ doCommandBySelector:NSSelectorFromString(selector)]; | |
| 1012 } | 1032 } |
| 1013 | 1033 |
| 1014 // Test firstRectForCharacterRange:actualRange for cases where query range is | 1034 // Test firstRectForCharacterRange:actualRange for cases where query range is |
| 1015 // empty or outside composition range. | 1035 // empty or outside composition range. |
| 1016 TEST_F(BridgedNativeWidgetTest, TextInput_FirstRectForCharacterRange_Caret) { | 1036 TEST_F(BridgedNativeWidgetTest, TextInput_FirstRectForCharacterRange_Caret) { |
| 1017 InstallTextField(""); | 1037 InstallTextField(""); |
| 1018 ui::TextInputClient* client = [ns_view_ textInputClient]; | 1038 ui::TextInputClient* client = [ns_view_ textInputClient]; |
| 1019 | 1039 |
| 1020 // No composition. Ensure bounds and range corresponding to the current caret | 1040 // No composition. Ensure bounds and range corresponding to the current caret |
| 1021 // position are returned. | 1041 // position are returned. |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1168 [center postNotificationName:NSWindowDidExitFullScreenNotification | 1188 [center postNotificationName:NSWindowDidExitFullScreenNotification |
| 1169 object:window]; | 1189 object:window]; |
| 1170 EXPECT_EQ(1, [window ignoredToggleFullScreenCount]); // No change. | 1190 EXPECT_EQ(1, [window ignoredToggleFullScreenCount]); // No change. |
| 1171 EXPECT_FALSE(bridge()->target_fullscreen_state()); | 1191 EXPECT_FALSE(bridge()->target_fullscreen_state()); |
| 1172 | 1192 |
| 1173 widget_->CloseNow(); | 1193 widget_->CloseNow(); |
| 1174 } | 1194 } |
| 1175 | 1195 |
| 1176 } // namespace test | 1196 } // namespace test |
| 1177 } // namespace views | 1197 } // namespace views |
| OLD | NEW |