| Index: third_party/WebKit/Source/web/tests/WebViewTest.cpp
|
| diff --git a/third_party/WebKit/Source/web/tests/WebViewTest.cpp b/third_party/WebKit/Source/web/tests/WebViewTest.cpp
|
| index c542443721ecc9ea3c9f7e82fa981a181ebd2ffb..c57dfe5c2f4744b1794df96ff6afd477e844c400 100644
|
| --- a/third_party/WebKit/Source/web/tests/WebViewTest.cpp
|
| +++ b/third_party/WebKit/Source/web/tests/WebViewTest.cpp
|
| @@ -833,6 +833,192 @@ TEST_F(WebViewTest, ConfirmCompositionCursorPositionChange)
|
| EXPECT_EQ(-1, info.compositionEnd);
|
| }
|
|
|
| +TEST_F(WebViewTest, SetCompositionForDifferentnewCursorPositions)
|
| +{
|
| + URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("input_field_populated.html"));
|
| + WebView* webView = m_webViewHelper.initializeAndLoad(m_baseURL + "input_field_populated.html");
|
| + webView->setInitialFocus(false);
|
| +
|
| + webView->confirmComposition("hello", 1);
|
| + webView->confirmComposition("world", 0);
|
| + WebTextInputInfo info = webView->textInputInfo();
|
| + EXPECT_EQ("helloworld", std::string(info.value.utf8().data()));
|
| + EXPECT_EQ(5, info.selectionStart);
|
| + EXPECT_EQ(5, info.selectionEnd);
|
| + EXPECT_EQ(-1, info.compositionStart);
|
| + EXPECT_EQ(-1, info.compositionEnd);
|
| +
|
| + WebVector<WebCompositionUnderline> emptyUnderlines;
|
| + // Set up a composition that needs to be committed.
|
| + std::string compositionText("ABC");
|
| +
|
| + // Cursor is on the left of composing text.
|
| + webView->setComposition(WebString::fromUTF8(compositionText.c_str()), emptyUnderlines, 0, 0);
|
| + info = webView->textInputInfo();
|
| + EXPECT_EQ("helloABCworld", std::string(info.value.utf8().data()));
|
| + EXPECT_EQ(5, info.selectionStart);
|
| + EXPECT_EQ(5, info.selectionEnd);
|
| + EXPECT_EQ(5, info.compositionStart);
|
| + EXPECT_EQ(8, info.compositionEnd);
|
| +
|
| + // Cursor is on the right of composing text.
|
| + webView->setComposition(WebString::fromUTF8(compositionText.c_str()), emptyUnderlines, 3, 3);
|
| + info = webView->textInputInfo();
|
| + EXPECT_EQ("helloABCworld", std::string(info.value.utf8().data()));
|
| + EXPECT_EQ(8, info.selectionStart);
|
| + EXPECT_EQ(8, info.selectionEnd);
|
| + EXPECT_EQ(5, info.compositionStart);
|
| + EXPECT_EQ(8, info.compositionEnd);
|
| +
|
| + // Cursor is between composing text and left boundary.
|
| + webView->setComposition(WebString::fromUTF8(compositionText.c_str()), emptyUnderlines, -2, -2);
|
| + info = webView->textInputInfo();
|
| + EXPECT_EQ("helloABCworld", std::string(info.value.utf8().data()));
|
| + EXPECT_EQ(3, info.selectionStart);
|
| + EXPECT_EQ(3, info.selectionEnd);
|
| + EXPECT_EQ(5, info.compositionStart);
|
| + EXPECT_EQ(8, info.compositionEnd);
|
| +
|
| + // Cursor is between composing text and right boundary.
|
| + webView->setComposition(WebString::fromUTF8(compositionText.c_str()), emptyUnderlines, 5, 5);
|
| + info = webView->textInputInfo();
|
| + EXPECT_EQ("helloABCworld", std::string(info.value.utf8().data()));
|
| + EXPECT_EQ(10, info.selectionStart);
|
| + EXPECT_EQ(10, info.selectionEnd);
|
| + EXPECT_EQ(5, info.compositionStart);
|
| + EXPECT_EQ(8, info.compositionEnd);
|
| +
|
| + // Cursor is on the left boundary.
|
| + webView->setComposition(WebString::fromUTF8(compositionText.c_str()), emptyUnderlines, -5, -5);
|
| + info = webView->textInputInfo();
|
| + EXPECT_EQ("helloABCworld", std::string(info.value.utf8().data()));
|
| + EXPECT_EQ(0, info.selectionStart);
|
| + EXPECT_EQ(0, info.selectionEnd);
|
| + EXPECT_EQ(5, info.compositionStart);
|
| + EXPECT_EQ(8, info.compositionEnd);
|
| +
|
| + // Cursor is on the right boundary.
|
| + webView->setComposition(WebString::fromUTF8(compositionText.c_str()), emptyUnderlines, 8, 8);
|
| + info = webView->textInputInfo();
|
| + EXPECT_EQ("helloABCworld", std::string(info.value.utf8().data()));
|
| + EXPECT_EQ(13, info.selectionStart);
|
| + EXPECT_EQ(13, info.selectionEnd);
|
| + EXPECT_EQ(5, info.compositionStart);
|
| + EXPECT_EQ(8, info.compositionEnd);
|
| +
|
| + // Cursor exceeds the left boundary.
|
| + webView->setComposition(WebString::fromUTF8(compositionText.c_str()), emptyUnderlines, -100, -100);
|
| + info = webView->textInputInfo();
|
| + EXPECT_EQ("helloABCworld", std::string(info.value.utf8().data()));
|
| + EXPECT_EQ(0, info.selectionStart);
|
| + EXPECT_EQ(0, info.selectionEnd);
|
| + EXPECT_EQ(5, info.compositionStart);
|
| + EXPECT_EQ(8, info.compositionEnd);
|
| +
|
| + // Cursor exceeds the right boundary.
|
| + webView->setComposition(WebString::fromUTF8(compositionText.c_str()), emptyUnderlines, 100, 100);
|
| + info = webView->textInputInfo();
|
| + EXPECT_EQ("helloABCworld", std::string(info.value.utf8().data()));
|
| + EXPECT_EQ(13, info.selectionStart);
|
| + EXPECT_EQ(13, info.selectionEnd);
|
| + EXPECT_EQ(5, info.compositionStart);
|
| + EXPECT_EQ(8, info.compositionEnd);
|
| +}
|
| +
|
| +TEST_F(WebViewTest, SetCompositionWithEmptyText)
|
| +{
|
| + URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("input_field_populated.html"));
|
| + WebView* webView = m_webViewHelper.initializeAndLoad(m_baseURL + "input_field_populated.html");
|
| + webView->setInitialFocus(false);
|
| +
|
| + webView->confirmComposition("hello", 1);
|
| + WebTextInputInfo info = webView->textInputInfo();
|
| + EXPECT_EQ("hello", std::string(info.value.utf8().data()));
|
| + EXPECT_EQ(5, info.selectionStart);
|
| + EXPECT_EQ(5, info.selectionEnd);
|
| + EXPECT_EQ(-1, info.compositionStart);
|
| + EXPECT_EQ(-1, info.compositionEnd);
|
| +
|
| + WebVector<WebCompositionUnderline> emptyUnderlines;
|
| +
|
| + webView->setComposition(WebString::fromUTF8(""), emptyUnderlines, 0, 0);
|
| + info = webView->textInputInfo();
|
| + EXPECT_EQ("hello", std::string(info.value.utf8().data()));
|
| + EXPECT_EQ(5, info.selectionStart);
|
| + EXPECT_EQ(5, info.selectionEnd);
|
| + EXPECT_EQ(-1, info.compositionStart);
|
| + EXPECT_EQ(-1, info.compositionEnd);
|
| +
|
| + webView->setComposition(WebString::fromUTF8(""), emptyUnderlines, -2, -2);
|
| + info = webView->textInputInfo();
|
| + EXPECT_EQ("hello", std::string(info.value.utf8().data()));
|
| + EXPECT_EQ(3, info.selectionStart);
|
| + EXPECT_EQ(3, info.selectionEnd);
|
| + EXPECT_EQ(-1, info.compositionStart);
|
| + EXPECT_EQ(-1, info.compositionEnd);
|
| +}
|
| +
|
| +TEST_F(WebViewTest, ConfirmCompositionForDifferentnewCursorPositions)
|
| +{
|
| + URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("input_field_populated.html"));
|
| + WebView* webView = m_webViewHelper.initializeAndLoad(m_baseURL + "input_field_populated.html");
|
| + webView->setInitialFocus(false);
|
| +
|
| + // Cursor is on the left of composing text.
|
| + webView->confirmComposition("ab", 0);
|
| + WebTextInputInfo info = webView->textInputInfo();
|
| + EXPECT_EQ("ab", std::string(info.value.utf8().data()));
|
| + EXPECT_EQ(0, info.selectionStart);
|
| + EXPECT_EQ(0, info.selectionEnd);
|
| + EXPECT_EQ(-1, info.compositionStart);
|
| + EXPECT_EQ(-1, info.compositionEnd);
|
| +
|
| + // Cursor is on the right of composing text.
|
| + webView->confirmComposition("c", 2);
|
| + info = webView->textInputInfo();
|
| + EXPECT_EQ("cab", std::string(info.value.utf8().data()));
|
| + EXPECT_EQ(2, info.selectionStart);
|
| + EXPECT_EQ(2, info.selectionEnd);
|
| + EXPECT_EQ(-1, info.compositionStart);
|
| + EXPECT_EQ(-1, info.compositionEnd);
|
| +
|
| + // Cursor is on the left boundary.
|
| + webView->confirmComposition("def", -2);
|
| + info = webView->textInputInfo();
|
| + EXPECT_EQ("cadefb", std::string(info.value.utf8().data()));
|
| + EXPECT_EQ(0, info.selectionStart);
|
| + EXPECT_EQ(0, info.selectionEnd);
|
| + EXPECT_EQ(-1, info.compositionStart);
|
| + EXPECT_EQ(-1, info.compositionEnd);
|
| +
|
| + // Cursor is on the right boundary.
|
| + webView->confirmComposition("g", 7);
|
| + info = webView->textInputInfo();
|
| + EXPECT_EQ("gcadefb", std::string(info.value.utf8().data()));
|
| + EXPECT_EQ(7, info.selectionStart);
|
| + EXPECT_EQ(7, info.selectionEnd);
|
| + EXPECT_EQ(-1, info.compositionStart);
|
| + EXPECT_EQ(-1, info.compositionEnd);
|
| +
|
| + // Cursor exceeds the left boundary.
|
| + webView->confirmComposition("hi", -100);
|
| + info = webView->textInputInfo();
|
| + EXPECT_EQ("gcadefbhi", std::string(info.value.utf8().data()));
|
| + EXPECT_EQ(0, info.selectionStart);
|
| + EXPECT_EQ(0, info.selectionEnd);
|
| + EXPECT_EQ(-1, info.compositionStart);
|
| + EXPECT_EQ(-1, info.compositionEnd);
|
| +
|
| + // Cursor exceeds the right boundary.
|
| + webView->confirmComposition("jk", 100);
|
| + info = webView->textInputInfo();
|
| + EXPECT_EQ("jkgcadefbhi", std::string(info.value.utf8().data()));
|
| + EXPECT_EQ(11, info.selectionStart);
|
| + EXPECT_EQ(11, info.selectionEnd);
|
| + EXPECT_EQ(-1, info.compositionStart);
|
| + EXPECT_EQ(-1, info.compositionEnd);
|
| +}
|
| +
|
| TEST_F(WebViewTest, FinishCompositionDoesNotRevealSelection)
|
| {
|
| URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("form_with_input.html"));
|
| @@ -890,7 +1076,7 @@ TEST_F(WebViewTest, InsertNewLinePlacementAfterConfirmComposition)
|
| EXPECT_EQ(-1, info.compositionEnd);
|
|
|
| std::string compositionText("\n");
|
| - webView->confirmComposition(WebString::fromUTF8(compositionText.c_str()));
|
| + webView->confirmComposition(WebString::fromUTF8(compositionText.c_str()), 1);
|
| info = webView->textInputInfo();
|
| EXPECT_EQ(5, info.selectionStart);
|
| EXPECT_EQ(5, info.selectionEnd);
|
| @@ -950,7 +1136,7 @@ TEST_F(WebViewTest, SetCompositionFromExistingTextInTextArea)
|
| WebLocalFrameImpl* frame = webView->mainFrameImpl();
|
| frame->setEditableSelectionOffsets(27, 27);
|
| std::string newLineText("\n");
|
| - webView->confirmComposition(WebString::fromUTF8(newLineText.c_str()));
|
| + webView->confirmComposition(WebString::fromUTF8(newLineText.c_str()), 1);
|
| WebTextInputInfo info = webView->textInputInfo();
|
| EXPECT_EQ("0123456789abcdefghijklmnopq\nrstuvwxyz", std::string(info.value.utf8().data()));
|
|
|
| @@ -964,7 +1150,7 @@ TEST_F(WebViewTest, SetCompositionFromExistingTextInTextArea)
|
| EXPECT_EQ(34, info.compositionEnd);
|
|
|
| std::string compositionText("yolo");
|
| - webView->confirmComposition(WebString::fromUTF8(compositionText.c_str()));
|
| + webView->confirmComposition(WebString::fromUTF8(compositionText.c_str()), 1);
|
| info = webView->textInputInfo();
|
| EXPECT_EQ("0123456789abcdefghijklmnopq\nrsyoloxyz", std::string(info.value.utf8().data()));
|
| EXPECT_EQ(34, info.selectionStart);
|
| @@ -998,7 +1184,7 @@ TEST_F(WebViewTest, SetEditableSelectionOffsetsKeepsComposition)
|
| std::string compositionTextSecond("world");
|
| WebVector<WebCompositionUnderline> emptyUnderlines;
|
|
|
| - webView->confirmComposition(WebString::fromUTF8(compositionTextFirst.c_str()));
|
| + webView->confirmComposition(WebString::fromUTF8(compositionTextFirst.c_str()), 1);
|
| webView->setComposition(WebString::fromUTF8(compositionTextSecond.c_str()), emptyUnderlines, 5, 5);
|
|
|
| WebTextInputInfo info = webView->textInputInfo();
|
| @@ -3209,7 +3395,7 @@ TEST_F(WebViewTest, PasswordFieldEditingIsUserGesture)
|
| frame->setAutofillClient(&client);
|
| webView->setInitialFocus(false);
|
|
|
| - EXPECT_TRUE(webView->confirmComposition(WebString::fromUTF8(std::string("hello").c_str())));
|
| + EXPECT_TRUE(webView->confirmComposition(WebString::fromUTF8(std::string("hello").c_str()), 1));
|
| EXPECT_EQ(1, client.textChangesFromUserGesture());
|
| EXPECT_FALSE(UserGestureIndicator::processingUserGesture());
|
| frame->setAutofillClient(0);
|
|
|