Index: content/browser/renderer_host/render_widget_host_view_aura_unittest.cc |
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc |
index 30defc8652ebd6e26f713df9a26c93555bf04233..2d95eee1931675c3705cc4d043a6a5b092ffdf12 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc |
+++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc |
@@ -4248,7 +4248,11 @@ TEST_F(InputMethodResultAuraTest, FinishImeCompositionSession) { |
} |
// A class of tests which verify the correctness of some tracked IME related |
-// state at the browser side, e.g., caret bounds. |
+// state at the browser side, e.g., caret bounds. In each test, the views are |
+// activated according to a predefined sequence. Then the IME state for the view |
+// is modified by invoking some method on the view. The test then verifies that |
+// the reported state from ui::TextInputClient or the view itself matches the |
+// expected value. |
class InputMethodStateAuraTest : public InputMethodAuraTestBase { |
public: |
InputMethodStateAuraTest() {} |
@@ -4271,10 +4275,8 @@ class InputMethodStateAuraTest : public InputMethodAuraTestBase { |
DISALLOW_COPY_AND_ASSIGN(InputMethodStateAuraTest); |
}; |
-// This test activates the views on the tab according to a predefined order and |
-// for each tab, simulates a selection bounds changed call. Then it verifies |
-// that the caret bounds reported by the TextInputClient match those reported |
-// for the active view. |
+// This test verifies the correctness of caret bounds after a change in the |
+// selection bounds for the view. |
TEST_F(InputMethodStateAuraTest, GetCaretBounds) { |
ViewHostMsg_SelectionBounds_Params params; |
params.is_anchor_first = true; |
@@ -4300,4 +4302,74 @@ TEST_F(InputMethodStateAuraTest, GetCaretBounds) { |
} |
} |
+// This test verifies the correctness of the selected text as reported by the |
+// view after a text selection change on the view. |
+TEST_F(InputMethodStateAuraTest, GetSelectedText) { |
+ // Some range in the text that follows. |
+ gfx::Range selection_range(25U, 29U); |
+ |
+ // A long text containing selection. |
+ base::string16 text = base::ASCIIToUTF16("this is not a valid statement"); |
+ size_t offset = 0U; |
+ |
+ for (auto index : active_view_sequence_) { |
+ ActivateViewForTextInputManager(views_[index], ui::TEXT_INPUT_TYPE_TEXT); |
+ base::string16 expected_text = text.substr( |
+ selection_range.GetMin() - offset, selection_range.length()); |
+ views_[index]->SelectionChanged(text, offset, selection_range); |
+ |
+ // Casting to the base class since GetSelectedText() belongs to it. |
+ RenderWidgetHostView* rwhv = views_[index]; |
+ EXPECT_EQ(expected_text, rwhv->GetSelectedText()); |
+ |
+ // Changing offset to make sure that the next view has a different text |
+ // selection. |
+ offset++; |
+ } |
+} |
+ |
+// This test verifies the correctness of the total text range reported by the |
+// TextInputClient after a view is subject to a change in its text selection. |
+TEST_F(InputMethodStateAuraTest, GetTextRange) { |
+ base::string16 text = base::ASCIIToUTF16("some text of length 22"); |
+ size_t offset = 0U; |
+ gfx::Range selection_range; |
+ |
+ for (auto index : active_view_sequence_) { |
+ ActivateViewForTextInputManager(views_[index], ui::TEXT_INPUT_TYPE_TEXT); |
+ gfx::Range expected_range(offset, offset + text.length()); |
+ views_[index]->SelectionChanged(text, offset, selection_range); |
+ gfx::Range range_from_client; |
+ |
+ // For aura this always returns true. |
+ EXPECT_TRUE(text_input_client()->GetTextRange(&range_from_client)); |
+ EXPECT_EQ(expected_range, range_from_client); |
+ |
+ // Changing offset to make sure that the next view has a different text |
+ // selection. |
+ offset++; |
+ } |
+} |
+ |
+// This test verifies the correctness of the selection range reported by the |
+// TextInputClient after a view is subject to a change in its text selection. |
+TEST_F(InputMethodStateAuraTest, GetSelectionRange) { |
+ base::string16 text; |
+ gfx::Range expected_range(0U, 1U); |
+ |
+ for (auto index : active_view_sequence_) { |
+ ActivateViewForTextInputManager(views_[index], ui::TEXT_INPUT_TYPE_TEXT); |
+ views_[index]->SelectionChanged(text, 0U, expected_range); |
+ gfx::Range range_from_client; |
+ |
+ // This method always returns true. |
+ EXPECT_TRUE(text_input_client()->GetSelectionRange(&range_from_client)); |
+ EXPECT_EQ(expected_range, range_from_client); |
+ |
+ // Changing range to make sure that the next view has a different text |
+ // selection. |
+ expected_range.set_end(expected_range.end() + 1U); |
+ } |
+} |
+ |
} // namespace content |