Modified: trunk/Source/WebKit2/ChangeLog (123862 => 123863)
--- trunk/Source/WebKit2/ChangeLog 2012-07-27 11:09:35 UTC (rev 123862)
+++ trunk/Source/WebKit2/ChangeLog 2012-07-27 11:12:56 UTC (rev 123863)
@@ -1,3 +1,29 @@
+2012-07-27 Christophe Dumez <[email protected]>
+
+ [EFL][WK2] Add more Ewk_View unit tests
+ https://bugs.webkit.org/show_bug.cgi?id=92407
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Add more unit tests for WebKit2 Ewk_View API.
+ In particular, navigation, HTML loading and
+ device pixel ratio functions are now tested.
+
+ * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
+ (EWK2UnitTest::EWK2UnitTestBase::SetUp): Call ewk_init() instead
+ of duplicating initialization code.
+ (EWK2UnitTest::EWK2UnitTestBase::TearDown): call ewk_shutdown().
+ (TitleChangedData):
+ (EWK2UnitTest):
+ (EWK2UnitTest::onTitleChanged):
+ (EWK2UnitTest::EWK2UnitTestBase::waitUntilTitleChangedTo): Add convenience
+ method to wait until the view main frame title changes to a given value.
+ * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
+ (EWK2UnitTestBase):
+ * UIProcess/API/efl/tests/test_ewk2_view.cpp:
+ (TEST_F):
+ (serverCallbackNavigation):
+
2012-07-27 Mikhail Pozdnyakov <[email protected]>
[EFL][WK2] Keyboard events miss key location data.
Modified: trunk/Source/WebKit2/UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp (123862 => 123863)
--- trunk/Source/WebKit2/UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp 2012-07-27 11:09:35 UTC (rev 123862)
+++ trunk/Source/WebKit2/UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp 2012-07-27 11:12:56 UTC (rev 123863)
@@ -47,13 +47,8 @@
void EWK2UnitTestBase::SetUp()
{
- ASSERT_GT(ecore_evas_init(), 0);
+ ewk_init();
- // glib support (for libsoup).
- g_type_init();
- if (!ecore_main_loop_glib_integrate())
- fprintf(stderr, "WARNING: Glib main loop integration is not working. Some tests may fail.");
-
unsigned int width = environment->defaultWidth();
unsigned int height = environment->defaultHeight();
@@ -77,7 +72,7 @@
{
evas_object_del(m_webView);
ecore_evas_free(m_ecoreEvas);
- ecore_evas_shutdown();
+ ewk_shutdown();
}
void EWK2UnitTestBase::loadUrlSync(const char* url)
@@ -93,4 +88,28 @@
evas_object_smart_callback_del(m_webView, "load,finished", onLoadFinished);
}
+struct TitleChangedData {
+ CString expectedTitle;
+ bool done;
+};
+
+static void onTitleChanged(void* userData, Evas_Object* webView, void* eventInfo)
+{
+ TitleChangedData* data = ""
+
+ if (!strcmp(ewk_view_title_get(webView), data->expectedTitle.data()))
+ data->done = true;
+}
+
+void EWK2UnitTestBase::waitUntilTitleChangedTo(const char* expectedTitle)
+{
+ TitleChangedData data = { expectedTitle, false };
+ evas_object_smart_callback_add(m_webView, "title,changed", onTitleChanged, &data);
+
+ while (!data.done)
+ ecore_main_loop_iterate();
+
+ evas_object_smart_callback_del(m_webView, "title,changed", onTitleChanged);
+}
+
} // namespace EWK2UnitTest
Modified: trunk/Source/WebKit2/UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h (123862 => 123863)
--- trunk/Source/WebKit2/UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h 2012-07-27 11:09:35 UTC (rev 123862)
+++ trunk/Source/WebKit2/UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h 2012-07-27 11:12:56 UTC (rev 123863)
@@ -37,6 +37,7 @@
virtual void TearDown();
void loadUrlSync(const char* url);
+ void waitUntilTitleChangedTo(const char* expectedTitle);
private:
Evas_Object* m_webView;
Modified: trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_view.cpp (123862 => 123863)
--- trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_view.cpp 2012-07-27 11:09:35 UTC (rev 123862)
+++ trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_view.cpp 2012-07-27 11:12:56 UTC (rev 123863)
@@ -21,9 +21,12 @@
#include "UnitTestUtils/EWK2UnitTestBase.h"
#include "UnitTestUtils/EWK2UnitTestEnvironment.h"
+#include "UnitTestUtils/EWK2UnitTestServer.h"
#include <EWebKit2.h>
#include <Ecore.h>
#include <gtest/gtest.h>
+#include <wtf/OwnPtr.h>
+#include <wtf/PassOwnPtr.h>
#include <wtf/UnusedParam.h>
#include <wtf/text/CString.h>
@@ -51,6 +54,80 @@
EXPECT_STREQ(ewk_view_uri_get(webView()), environment->defaultTestPageUrl());
}
+TEST_F(EWK2UnitTestBase, ewk_view_device_pixel_ratio)
+{
+ loadUrlSync(environment->defaultTestPageUrl());
+
+ // Default pixel ratio is 1.0
+ ASSERT_FLOAT_EQ(ewk_view_device_pixel_ratio_get(webView()), 1);
+
+ ASSERT_TRUE(ewk_view_device_pixel_ratio_set(webView(), 1.2));
+ ASSERT_FLOAT_EQ(ewk_view_device_pixel_ratio_get(webView()), 1.2);
+
+ ASSERT_TRUE(ewk_view_device_pixel_ratio_set(webView(), 1));
+ ASSERT_FLOAT_EQ(ewk_view_device_pixel_ratio_get(webView()), 1);
+}
+
+TEST_F(EWK2UnitTestBase, ewk_view_html_string_load)
+{
+ ewk_view_html_string_load(webView(), "<html><head><title>Foo</title></head><body>Bar</body></html>", 0, 0);
+ waitUntilTitleChangedTo("Foo");
+ ASSERT_STREQ(ewk_view_title_get(webView()), "Foo");
+ ewk_view_html_string_load(webView(), "<html><head><title>Bar</title></head><body>Foo</body></html>", 0, 0);
+ waitUntilTitleChangedTo("Bar");
+ ASSERT_STREQ(ewk_view_title_get(webView()), "Bar");
+}
+
+static void serverCallbackNavigation(SoupServer* server, SoupMessage* message, const char* path, GHashTable*, SoupClientContext*, gpointer)
+{
+ if (message->method != SOUP_METHOD_GET) {
+ soup_message_set_status(message, SOUP_STATUS_NOT_IMPLEMENTED);
+ return;
+ }
+
+ soup_message_set_status(message, SOUP_STATUS_OK);
+
+ Eina_Strbuf* body = eina_strbuf_new();
+ eina_strbuf_append_printf(body, "<html><title>%s</title><body>%s</body></html>", path + 1, path + 1);
+ const size_t bodyLength = eina_strbuf_length_get(body);
+ soup_message_body_append(message->response_body, SOUP_MEMORY_TAKE, eina_strbuf_string_steal(body), bodyLength);
+ eina_strbuf_free(body);
+
+ soup_message_body_complete(message->response_body);
+}
+
+TEST_F(EWK2UnitTestBase, ewk_view_navigation)
+{
+ OwnPtr<EWK2UnitTestServer> httpServer = adoptPtr(new EWK2UnitTestServer);
+ httpServer->run(serverCallbackNavigation);
+
+ // Visit Page1
+ loadUrlSync(httpServer->getURIForPath("/Page1").data());
+ ASSERT_STREQ(ewk_view_title_get(webView()), "Page1");
+ ASSERT_FALSE(ewk_view_back_possible(webView()));
+ ASSERT_FALSE(ewk_view_forward_possible(webView()));
+
+ // Visit Page2
+ loadUrlSync(httpServer->getURIForPath("/Page2").data());
+ ASSERT_STREQ(ewk_view_title_get(webView()), "Page2");
+ ASSERT_TRUE(ewk_view_back_possible(webView()));
+ ASSERT_FALSE(ewk_view_forward_possible(webView()));
+
+ // Go back to Page1
+ ewk_view_back(webView());
+ waitUntilTitleChangedTo("Page1");
+ ASSERT_STREQ(ewk_view_title_get(webView()), "Page1");
+ ASSERT_FALSE(ewk_view_back_possible(webView()));
+ ASSERT_TRUE(ewk_view_forward_possible(webView()));
+
+ // Go forward to Page2
+ ewk_view_forward(webView());
+ waitUntilTitleChangedTo("Page2");
+ ASSERT_STREQ(ewk_view_title_get(webView()), "Page2");
+ ASSERT_TRUE(ewk_view_back_possible(webView()));
+ ASSERT_FALSE(ewk_view_forward_possible(webView()));
+}
+
TEST_F(EWK2UnitTestBase, ewk_view_setting_encoding_custom)
{
ASSERT_FALSE(ewk_view_setting_encoding_custom_get(webView()));