[evolution/wip/mcrha/webkit-jsc-api] Extend test_get_element_from_point() to test also when being scrolled
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/wip/mcrha/webkit-jsc-api] Extend test_get_element_from_point() to test also when being scrolled
- Date: Tue, 8 Oct 2019 15:47:18 +0000 (UTC)
commit f626c9db98366af13dd7c4886d22852053ae939a
Author: Milan Crha <mcrha redhat com>
Date: Tue Oct 8 17:47:30 2019 +0200
Extend test_get_element_from_point() to test also when being scrolled
src/e-util/test-web-view-jsc.c | 88 ++++++++++++++++++++++++++++++-----
src/web-extensions/evolution-utils.js | 3 +-
2 files changed, 79 insertions(+), 12 deletions(-)
---
diff --git a/src/e-util/test-web-view-jsc.c b/src/e-util/test-web-view-jsc.c
index 2179b05577..f5dbdc43ca 100644
--- a/src/e-util/test-web-view-jsc.c
+++ b/src/e-util/test-web-view-jsc.c
@@ -1777,7 +1777,8 @@ test_get_element_from_point (TestFixture *fixture)
{ "empty:///frm2", "frm2", "btn1" },
{ "empty:///frm2", "frm2", "btn2" }
};
- gint ii;
+ gchar *script;
+ gint ii, scroll_x, scroll_y, client_width, client_height, tested;
test_utils_load_body (fixture, LOAD_ALL);
@@ -1793,14 +1794,15 @@ test_get_element_from_point (TestFixture *fixture)
" }\n"
" }\n"
" var res = [];\n"
- " res[\"left\"] = xx + (elem.offsetWidth / 2);\n"
- " res[\"top\"] = yy + (elem.offsetHeight / 2);\n"
+ " res[\"left\"] = xx + (elem.offsetWidth / 2) - window.scrollX;\n"
+ " res[\"right\"] = xx + elem.offsetWidth - 2 - window.scrollX;\n"
+ " res[\"top\"] = yy + (elem.offsetHeight / 2) - window.scrollY;\n"
" return res;"
"}\n"
"\n"
/* To not scroll in the frm1 */
- "document.getElementById(\"frm1\").height =
document.getElementById(\"frm1\").contentDocument.getElementById(\"btn1\").offsetTop + "
- "2 *
document.getElementById(\"frm1\").contentDocument.getElementById(\"btn1\").offsetHeight;\n"
+ "document.getElementById(\"frm1\").height =
document.getElementById(\"frm1\").contentDocument.getElementById(\"btn1\").offsetTop +"
+ " 2 *
document.getElementById(\"frm1\").contentDocument.getElementById(\"btn1\").offsetHeight;\n"
"\n"
"document.body.scrollHeight;\n");
@@ -1819,7 +1821,7 @@ test_get_element_from_point (TestFixture *fixture)
const gchar *iframe_src;
gchar *script;
JSCValue *value;
- gint left, top;
+ gint xx, yy;
script = e_web_view_jsc_printf_script ("TestGetPosition(%s, %s);", elems[ii].iframe_id,
elems[ii].elem_id);
@@ -1828,11 +1830,11 @@ test_get_element_from_point (TestFixture *fixture)
g_assert_nonnull (value);
g_assert (jsc_value_is_object (value));
- left = e_web_view_jsc_get_object_property_int32 (value, "left", -1);
- top = e_web_view_jsc_get_object_property_int32 (value, "top", -1);
+ xx = e_web_view_jsc_get_object_property_int32 (value, "left", -1);
+ yy = e_web_view_jsc_get_object_property_int32 (value, "top", -1);
- g_assert_cmpint (left, >, -1);
- g_assert_cmpint (top, >, -1);
+ g_assert_cmpint (xx, >, -1);
+ g_assert_cmpint (yy, >, -1);
g_clear_object (&value);
g_free (script);
@@ -1842,7 +1844,7 @@ test_get_element_from_point (TestFixture *fixture)
if (!iframe_src)
iframe_src = webkit_web_view_get_uri (fixture->web_view);
- test_utils_verify_get_element_from_point (fixture, left, top, iframe_src,
elems[ii].iframe_id, elems[ii].elem_id);
+ test_utils_verify_get_element_from_point (fixture, xx, yy, iframe_src, elems[ii].iframe_id,
elems[ii].elem_id);
}
test_utils_verify_get_element_from_point (fixture, -1, -1, webkit_web_view_get_uri
(fixture->web_view), "", "");
@@ -1850,6 +1852,70 @@ test_get_element_from_point (TestFixture *fixture)
test_utils_jsc_call_sync (fixture, "Evo.findIFrameDocument(\"\").getElementById(\"btn3\").focus();",
NULL);
test_utils_verify_get_element_from_point (fixture, -1, -1, webkit_web_view_get_uri
(fixture->web_view), "", "btn3");
+
+ scroll_x = test_utils_jsc_call_int32_sync (fixture, "document.body.scrollWidth;") / 2;
+ scroll_y = test_utils_jsc_call_int32_sync (fixture, "document.body.scrollHeight;") / 2;
+
+ /* To scroll in the overall document */
+ gtk_widget_set_size_request (fixture->window, -1, -1);
+ gtk_window_resize (GTK_WINDOW (fixture->window), scroll_x, scroll_y);
+
+ /* Window/widget resize is done asynchronously, thus wait for it */
+ g_signal_connect (fixture->window, "size-allocate",
+ G_CALLBACK (window_size_allocated_cb), fixture);
+
+ test_utils_wait (fixture);
+
+ g_signal_handlers_disconnect_by_func (fixture->window, G_CALLBACK (window_size_allocated_cb),
fixture);
+
+ /* Scroll by some value */
+ scroll_x /= 2;
+ scroll_y /= 2;
+ script = e_web_view_jsc_printf_script ("window.scrollBy(%d,%d);", scroll_x, scroll_y);
+ test_utils_jsc_call_sync (fixture, script, NULL);
+ g_free (script);
+
+ test_utils_wait_noop (fixture);
+
+ scroll_x = test_utils_jsc_call_int32_sync (fixture, "window.scrollX;");
+ scroll_y = test_utils_jsc_call_int32_sync (fixture, "window.scrollY;");
+ client_width = test_utils_jsc_call_int32_sync (fixture, "document.body.clientWidth;");
+ client_height = test_utils_jsc_call_int32_sync (fixture, "document.body.clientHeight;");
+
+ tested = 0;
+
+ for (ii = 0; ii < G_N_ELEMENTS (elems); ii++) {
+ const gchar *iframe_src;
+ gchar *script;
+ JSCValue *value;
+ gint xx, yy;
+
+ script = e_web_view_jsc_printf_script ("TestGetPosition(%s, %s);", elems[ii].iframe_id,
elems[ii].elem_id);
+
+ test_utils_jsc_call_sync (fixture, script, &value);
+
+ g_assert_nonnull (value);
+ g_assert (jsc_value_is_object (value));
+
+ xx = e_web_view_jsc_get_object_property_int32 (value, "right", -1);
+ yy = e_web_view_jsc_get_object_property_int32 (value, "top", -1);
+
+ g_clear_object (&value);
+ g_free (script);
+
+ if (xx >= 0 && xx < client_width && yy >= 0 && yy < client_height) {
+ iframe_src = elems[ii].iframe_src;
+
+ if (!iframe_src)
+ iframe_src = webkit_web_view_get_uri (fixture->web_view);
+
+ test_utils_verify_get_element_from_point (fixture, xx, yy, iframe_src,
elems[ii].iframe_id, elems[ii].elem_id);
+
+ tested++;
+ }
+ }
+
+ g_assert_cmpint (tested, >, 0);
}
gint
diff --git a/src/web-extensions/evolution-utils.js b/src/web-extensions/evolution-utils.js
index 8a484e48ae..963b24bb9d 100644
--- a/src/web-extensions/evolution-utils.js
+++ b/src/web-extensions/evolution-utils.js
@@ -523,7 +523,8 @@ Evo.findElementFromPoint = function(doc, xx, yy, parent_elem)
top_offset += offset_parent.offsetTop - offset_parent.scrollTop;
offset_parent = offset_parent.offsetParent;
- } while (offset_parent);
+ /* Stop on body, because it sometimes have the same offset/scroll values as its
iframe parent and sometimes not. */
+ } while (offset_parent && !(/* offset_parent instanceof HTMLBodyElement */
offset_parent.tagName.toUpperCase() == "BODY"));
}
elem = doc.elementFromPoint(xx - left_offset + window.scrollX, yy - top_offset +
window.scrollY);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]