Index: Source/web/tests/WebViewTest.cpp |
diff --git a/Source/web/tests/WebViewTest.cpp b/Source/web/tests/WebViewTest.cpp |
index fd5215bc768cd318b0e8f604fe28c3e3e1ab94a7..287d0d1ea193c7758266bc46effee5788c39c4a1 100644 |
--- a/Source/web/tests/WebViewTest.cpp |
+++ b/Source/web/tests/WebViewTest.cpp |
@@ -36,6 +36,7 @@ |
#include "URLTestHelpers.h" |
#include "WebAutofillClient.h" |
#include "WebContentDetectionResult.h" |
+#include "WebDateTimeChooserCompletion.h" |
#include "WebDocument.h" |
#include "WebElement.h" |
#include "WebFrame.h" |
@@ -51,9 +52,12 @@ |
#include "core/dom/Document.h" |
#include "core/dom/Element.h" |
#include "core/html/HTMLDocument.h" |
+#include "core/html/HTMLInputElement.h" |
#include "core/loader/FrameLoadRequest.h" |
#include "core/frame/FrameView.h" |
+#include "core/page/Chrome.h" |
#include "core/page/Settings.h" |
+#include "core/platform/chromium/KeyboardCodes.h" |
#include "public/platform/Platform.h" |
#include "public/platform/WebSize.h" |
#include "public/platform/WebThread.h" |
@@ -181,6 +185,30 @@ private: |
WebFrameClient* m_webFrameClient; |
}; |
+class DateTimeChooserWebViewClient : public WebViewClient { |
+public: |
+ WebDateTimeChooserCompletion* chooserCompletion() |
+ { |
+ return m_chooserCompletion; |
+ } |
+ |
+ void clearChooserCompletion() |
+ { |
+ m_chooserCompletion = 0; |
+ } |
+ |
+ // WebViewClient methods |
+ virtual bool openDateTimeChooser(const WebDateTimeChooserParams&, WebDateTimeChooserCompletion* chooser_completion) OVERRIDE |
+ { |
+ m_chooserCompletion = chooser_completion; |
+ return true; |
+ } |
+ |
+private: |
+ WebDateTimeChooserCompletion* m_chooserCompletion; |
+ |
+}; |
+ |
class WebViewTest : public testing::Test { |
public: |
WebViewTest() |
@@ -1238,4 +1266,88 @@ TEST_F(WebViewTest, DispatchesDomFocusOutDomFocusInOnViewToggleFocus) |
EXPECT_STREQ("DOMFocusOutDOMFocusIn", element.innerText().utf8().data()); |
} |
+#if !ENABLE(INPUT_MULTIPLE_FIELDS_UI) |
+static void openDateTimeChooser(WebView* webView, WebCore::HTMLInputElement* inputElement) |
+{ |
+ inputElement->focus(); |
+ |
+ WebKeyboardEvent keyEvent; |
+ keyEvent.windowsKeyCode = WebCore::VKEY_SPACE; |
+ keyEvent.type = WebInputEvent::RawKeyDown; |
+ keyEvent.setKeyIdentifierFromWindowsKeyCode(); |
+ webView->handleInputEvent(keyEvent); |
+ |
+ keyEvent.type = WebInputEvent::KeyUp; |
+ webView->handleInputEvent(keyEvent); |
+} |
+ |
+TEST_F(WebViewTest, ChooseValueFromDateTimeChooser) |
+{ |
+ DateTimeChooserWebViewClient client; |
+ std::string url = m_baseURL + "date_time_chooser.html"; |
+ URLTestHelpers::registerMockedURLLoad(toKURL(url), "date_time_chooser.html"); |
+ WebViewImpl* webViewImpl = toWebViewImpl(m_webViewHelper.initializeAndLoad(url, true, 0, &client)); |
+ |
+ WebCore::Document* document = webViewImpl->mainFrameImpl()->frame()->document(); |
+ WebCore::Page* page = document->page(); |
+ |
+ WebCore::HTMLInputElement* inputElement; |
+ |
+ inputElement = toHTMLInputElement(document->getElementById("date")); |
+ openDateTimeChooser(webViewImpl, inputElement); |
+ client.chooserCompletion()->didChooseValue(0); |
+ client.clearChooserCompletion(); |
+ EXPECT_STREQ("1970-01-01", inputElement->value().utf8().data()); |
+ |
+ openDateTimeChooser(webViewImpl, inputElement); |
+ client.chooserCompletion()->didChooseValue(std::numeric_limits<double>::quiet_NaN()); |
+ client.clearChooserCompletion(); |
+ EXPECT_STREQ("", inputElement->value().utf8().data()); |
+ |
+ inputElement = toHTMLInputElement(document->getElementById("datetimelocal")); |
+ openDateTimeChooser(webViewImpl, inputElement); |
+ client.chooserCompletion()->didChooseValue(0); |
+ client.clearChooserCompletion(); |
+ EXPECT_STREQ("1970-01-01T00:00", inputElement->value().utf8().data()); |
+ |
+ openDateTimeChooser(webViewImpl, inputElement); |
+ client.chooserCompletion()->didChooseValue(std::numeric_limits<double>::quiet_NaN()); |
+ client.clearChooserCompletion(); |
+ EXPECT_STREQ("", inputElement->value().utf8().data()); |
+ |
+ inputElement = toHTMLInputElement(document->getElementById("month")); |
+ openDateTimeChooser(webViewImpl, inputElement); |
+ client.chooserCompletion()->didChooseValue(0); |
+ client.clearChooserCompletion(); |
+ EXPECT_STREQ("1970-01", inputElement->value().utf8().data()); |
+ |
+ openDateTimeChooser(webViewImpl, inputElement); |
+ client.chooserCompletion()->didChooseValue(std::numeric_limits<double>::quiet_NaN()); |
+ client.clearChooserCompletion(); |
+ EXPECT_STREQ("", inputElement->value().utf8().data()); |
+ |
+ inputElement = toHTMLInputElement(document->getElementById("time")); |
+ openDateTimeChooser(webViewImpl, inputElement); |
+ client.chooserCompletion()->didChooseValue(0); |
+ client.clearChooserCompletion(); |
+ EXPECT_STREQ("00:00", inputElement->value().utf8().data()); |
+ |
+ openDateTimeChooser(webViewImpl, inputElement); |
+ client.chooserCompletion()->didChooseValue(std::numeric_limits<double>::quiet_NaN()); |
+ client.clearChooserCompletion(); |
+ EXPECT_STREQ("", inputElement->value().utf8().data()); |
+ |
+ inputElement = toHTMLInputElement(document->getElementById("week")); |
+ openDateTimeChooser(webViewImpl, inputElement); |
+ client.chooserCompletion()->didChooseValue(0); |
+ client.clearChooserCompletion(); |
+ EXPECT_STREQ("1970-W01", inputElement->value().utf8().data()); |
+ |
+ openDateTimeChooser(webViewImpl, inputElement); |
+ client.chooserCompletion()->didChooseValue(std::numeric_limits<double>::quiet_NaN()); |
+ client.clearChooserCompletion(); |
+ EXPECT_STREQ("", inputElement->value().utf8().data()); |
+} |
+#endif |
+ |
} |