Title: [125893] trunk/Source/WebKit2
Revision
125893
Author
[email protected]
Date
2012-08-17 07:04:09 -0700 (Fri, 17 Aug 2012)

Log Message

[EFL] [WK2] Add unit tests for vibration_client_callbacks_set API
https://bugs.webkit.org/show_bug.cgi?id=93890

Patch by Sudarsana Nagineni <[email protected]> on 2012-08-17
Reviewed by Kenneth Rohde Christiansen.

This patch covers unit testing of the Vibration API as delivered.

* UIProcess/API/efl/tests/test_ewk2_context.cpp:
(VibrationCbData):
(vibrateCallback):
(cancelVibrationCallback):
(loadVibrationHTMLString):
(TEST_F):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (125892 => 125893)


--- trunk/Source/WebKit2/ChangeLog	2012-08-17 13:48:19 UTC (rev 125892)
+++ trunk/Source/WebKit2/ChangeLog	2012-08-17 14:04:09 UTC (rev 125893)
@@ -1,3 +1,19 @@
+2012-08-17  Sudarsana Nagineni  <[email protected]>
+
+        [EFL] [WK2] Add unit tests for vibration_client_callbacks_set API
+        https://bugs.webkit.org/show_bug.cgi?id=93890
+
+        Reviewed by Kenneth Rohde Christiansen.
+
+        This patch covers unit testing of the Vibration API as delivered.
+
+        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
+        (VibrationCbData):
+        (vibrateCallback):
+        (cancelVibrationCallback):
+        (loadVibrationHTMLString):
+        (TEST_F):
+
 2012-08-17  Carlos Garcia Campos  <[email protected]>
 
         [GTK] Rename WebKitWebView print-requested signal to print

Modified: trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_context.cpp (125892 => 125893)


--- trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_context.cpp	2012-08-17 13:48:19 UTC (rev 125892)
+++ trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_context.cpp	2012-08-17 14:04:09 UTC (rev 125893)
@@ -28,6 +28,7 @@
 #include "UnitTestUtils/EWK2UnitTestBase.h"
 #include "UnitTestUtils/EWK2UnitTestEnvironment.h"
 #include <EWebKit2.h>
+#include <Ecore.h>
 #include <gtest/gtest.h>
 
 using namespace EWK2UnitTest;
@@ -67,3 +68,83 @@
     loadUrlSync("fooscheme:MyPath");
     ASSERT_STREQ(ewk_view_title_get(webView()), "Foo");
 }
+
+struct VibrationCbData {
+    bool didReceiveVibrateCallback; // Whether the vibration event received.
+    bool didReceiveCancelVibrationCallback; // Whether the cancel vibration event received.
+    unsigned vibrateCalledCount; // Vibrate callbacks count.
+    uint64_t expectedVibrationTime; // Expected vibration time.
+};
+
+static void vibrateCallback(uint64_t vibrationTime, void* userData)
+{
+    VibrationCbData* data = ""
+    if (vibrationTime == data->expectedVibrationTime)
+        data->didReceiveVibrateCallback = true;
+    data->vibrateCalledCount++;
+}
+
+static void cancelVibrationCallback(void* userData)
+{
+    VibrationCbData* data = ""
+    data->didReceiveCancelVibrationCallback = true;
+}
+
+static void loadVibrationHTMLString(Evas_Object* webView, const char* vibrationPattern, bool waitForVibrationEvent, VibrationCbData* data)
+{
+    const char* content =
+        "<html><head><script type='text/_javascript_'>function vibrate() { navigator.vibrate(%s);"
+        " document.title = \"Loaded\"; }</script></head><body _onload_='vibrate()'></body></html>";
+
+    data->didReceiveVibrateCallback = false;
+    data->didReceiveCancelVibrationCallback = false;
+    data->vibrateCalledCount = 0;
+    Eina_Strbuf* buffer = eina_strbuf_new();
+    eina_strbuf_append_printf(buffer, content, vibrationPattern);
+    ewk_view_html_string_load(webView, eina_strbuf_string_get(buffer), 0, 0);
+    eina_strbuf_free(buffer);
+
+    if (!waitForVibrationEvent)
+        return;
+
+    while (!data->didReceiveVibrateCallback && !data->didReceiveCancelVibrationCallback)
+        ecore_main_loop_iterate();
+}
+
+TEST_F(EWK2UnitTestBase, ewk_context_vibration_client_callbacks_set)
+{
+    VibrationCbData data = { false, false, 0, 5000 };
+    ewk_context_vibration_client_callbacks_set(ewk_context_default_get(), vibrateCallback, cancelVibrationCallback, &data);
+
+    // Vibrate for 5 seconds.
+    loadVibrationHTMLString(webView(), "5000", true, &data);
+    ASSERT_TRUE(data.didReceiveVibrateCallback);
+
+    // Cancel any existing vibrations.
+    loadVibrationHTMLString(webView(), "0", true, &data);
+    ASSERT_TRUE(data.didReceiveCancelVibrationCallback);
+
+    // This case the pattern will cause the device to vibrate for 200 ms, be still for 100 ms, and then vibrate for 5000 ms.
+    loadVibrationHTMLString(webView(), "[200, 100, 5000]", true, &data);
+    ASSERT_EQ(data.vibrateCalledCount, 2);
+    ASSERT_TRUE(data.didReceiveVibrateCallback);
+
+    // Cancel outstanding vibration pattern.
+    loadVibrationHTMLString(webView(), "[0]", true, &data);
+    ASSERT_TRUE(data.didReceiveCancelVibrationCallback);
+
+    // Stop listening for vibration events, by calling the function with null for the callbacks.
+    ewk_context_vibration_client_callbacks_set(ewk_context_default_get(), 0, 0, &data);
+
+    // Make sure we don't receive vibration event.
+    loadVibrationHTMLString(webView(), "[5000]", false, &data);
+    waitUntilTitleChangedTo("Loaded");
+    ASSERT_STREQ(ewk_view_title_get(webView()), "Loaded");
+    ASSERT_FALSE(data.didReceiveVibrateCallback);
+
+    // Make sure we don't receive cancel vibration event.
+    loadVibrationHTMLString(webView(), "0", false, &data);
+    waitUntilTitleChangedTo("Loaded");
+    ASSERT_STREQ(ewk_view_title_get(webView()), "Loaded");
+    ASSERT_FALSE(data.didReceiveCancelVibrationCallback);
+}
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to