From 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c Mon Sep 17 00:00:00 2001 From: Lorry Tar Creator Date: Tue, 27 Jun 2017 06:07:23 +0000 Subject: webkitgtk-2.16.5 --- .../Tests/WebKit2Gtk/TestConsoleMessage.cpp | 155 +++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestConsoleMessage.cpp (limited to 'Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestConsoleMessage.cpp') diff --git a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestConsoleMessage.cpp b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestConsoleMessage.cpp new file mode 100644 index 000000000..2595a8a42 --- /dev/null +++ b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestConsoleMessage.cpp @@ -0,0 +1,155 @@ +/* + * Copyright (C) 2015 Igalia S.L. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2,1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include "config.h" + +#include "WebViewTest.h" +#include +#include + +class ConsoleMessageTest : public WebViewTest { +public: + MAKE_GLIB_TEST_FIXTURE(ConsoleMessageTest); + + // This should be keep in sync with the public enums in WebKitConsoleMessage.h. + enum class MessageSource { JavaScript, Network, ConsoleAPI, Security, Other }; + enum class MessageLevel { Info, Log, Warning, Error, Debug }; + struct ConsoleMessage { + bool operator==(const ConsoleMessage& other) + { + return source == other.source + && level == other.level + && message == other.message + && lineNumber == other.lineNumber + && sourceID == other.sourceID; + } + + MessageSource source; + MessageLevel level; + CString message; + unsigned lineNumber; + CString sourceID; + }; + + static void consoleMessageReceivedCallback(WebKitUserContentManager*, WebKitJavascriptResult* message, ConsoleMessageTest* test) + { + g_assert(message); + GUniquePtr messageString(WebViewTest::javascriptResultToCString(message)); + GRefPtr variant = g_variant_parse(G_VARIANT_TYPE("(uusus)"), messageString.get(), nullptr, nullptr, nullptr); + g_assert(variant.get()); + + unsigned source, level, lineNumber; + const char* messageText; + const char* sourceID; + g_variant_get(variant.get(), "(uu&su&s)", &source, &level, &messageText, &lineNumber, &sourceID); + test->m_consoleMessage = { static_cast(source), static_cast(level), messageText, lineNumber, sourceID }; + + g_main_loop_quit(test->m_mainLoop); + } + + ConsoleMessageTest() + { + webkit_user_content_manager_register_script_message_handler(m_userContentManager.get(), "console"); + g_signal_connect(m_userContentManager.get(), "script-message-received::console", G_CALLBACK(consoleMessageReceivedCallback), this); + } + + ~ConsoleMessageTest() + { + g_signal_handlers_disconnect_matched(m_userContentManager.get(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this); + webkit_user_content_manager_unregister_script_message_handler(m_userContentManager.get(), "console"); + } + + void waitUntilConsoleMessageReceived() + { + g_main_loop_run(m_mainLoop); + } + + ConsoleMessage m_consoleMessage; +}; + +static void testWebKitConsoleMessageConsoleAPI(ConsoleMessageTest* test, gconstpointer) +{ + ConsoleMessageTest::ConsoleMessage referenceMessage = { ConsoleMessageTest::MessageSource::ConsoleAPI, ConsoleMessageTest::MessageLevel::Log, "Log Console Message", 1, "http://foo.com/bar" }; + test->loadHtml("", "http://foo.com/bar"); + test->waitUntilConsoleMessageReceived(); + g_assert(test->m_consoleMessage == referenceMessage); + + referenceMessage.level = ConsoleMessageTest::MessageLevel::Info; + referenceMessage.message = "Info Console Message"; + test->loadHtml("", "http://foo.com/bar"); + test->waitUntilConsoleMessageReceived(); + g_assert(test->m_consoleMessage == referenceMessage); + + referenceMessage.level = ConsoleMessageTest::MessageLevel::Warning; + referenceMessage.message = "Warning Console Message"; + test->loadHtml("", "http://foo.com/bar"); + test->waitUntilConsoleMessageReceived(); + g_assert(test->m_consoleMessage == referenceMessage); + + referenceMessage.level = ConsoleMessageTest::MessageLevel::Error; + referenceMessage.message = "Error Console Message"; + test->loadHtml("", "http://foo.com/bar"); + test->waitUntilConsoleMessageReceived(); + g_assert(test->m_consoleMessage == referenceMessage); + + referenceMessage.level = ConsoleMessageTest::MessageLevel::Debug; + referenceMessage.message = "Debug Console Message"; + test->loadHtml("", "http://foo.com/bar"); + test->waitUntilConsoleMessageReceived(); + g_assert(test->m_consoleMessage == referenceMessage); +} + +static void testWebKitConsoleMessageJavaScriptException(ConsoleMessageTest* test, gconstpointer) +{ + ConsoleMessageTest::ConsoleMessage referenceMessage = { ConsoleMessageTest::MessageSource::JavaScript, ConsoleMessageTest::MessageLevel::Error, + "ReferenceError: Can't find variable: foo", 1, "http://foo.com/bar" }; + test->loadHtml("", "http://foo.com/bar"); + test->waitUntilConsoleMessageReceived(); + g_assert(test->m_consoleMessage == referenceMessage); +} + +static void testWebKitConsoleMessageNetworkError(ConsoleMessageTest* test, gconstpointer) +{ + ConsoleMessageTest::ConsoleMessage referenceMessage = { ConsoleMessageTest::MessageSource::Network, ConsoleMessageTest::MessageLevel::Error, + "Failed to load resource: The resource at '/org/webkit/webkit2gtk/tests/not-found.css' does not exist", 0, "resource:///org/webkit/webkit2gtk/tests/not-found.css" }; + test->loadHtml("", "resource:///org/webkit/webkit2gtk/tests/"); + test->waitUntilConsoleMessageReceived(); + g_assert(test->m_consoleMessage == referenceMessage); +} + +static void testWebKitConsoleMessageSecurityError(ConsoleMessageTest* test, gconstpointer) +{ + ConsoleMessageTest::ConsoleMessage referenceMessage = { ConsoleMessageTest::MessageSource::Security, ConsoleMessageTest::MessageLevel::Error, + "Not allowed to load local resource: file:///foo/bar/source.png", 1, "http://foo.com/bar" }; + test->loadHtml("", "http://foo.com/bar"); + test->waitUntilConsoleMessageReceived(); + g_assert(test->m_consoleMessage == referenceMessage); +} + +void beforeAll() +{ + ConsoleMessageTest::add("WebKitConsoleMessage", "console-api", testWebKitConsoleMessageConsoleAPI); + ConsoleMessageTest::add("WebKitConsoleMessage", "js-exception", testWebKitConsoleMessageJavaScriptException); + ConsoleMessageTest::add("WebKitConsoleMessage", "network-error", testWebKitConsoleMessageNetworkError); + ConsoleMessageTest::add("WebKitConsoleMessage", "security-error", testWebKitConsoleMessageSecurityError); +} + +void afterAll() +{ +} -- cgit v1.2.1