diff options
Diffstat (limited to 'tests/manual/wasm/selenium')
5 files changed, 0 insertions, 1315 deletions
diff --git a/tests/manual/wasm/selenium/qwasmwindow/CMakeLists.txt b/tests/manual/wasm/selenium/qwasmwindow/CMakeLists.txt deleted file mode 100644 index aa5caa8ce78..00000000000 --- a/tests/manual/wasm/selenium/qwasmwindow/CMakeLists.txt +++ /dev/null @@ -1,36 +0,0 @@ -qt_internal_add_manual_test(qwasmwindow_harness - SOURCES - qwasmwindow_harness.cpp - LIBRARIES - Qt::Core - Qt::CorePrivate - Qt::GuiPrivate -) - -add_custom_command( - TARGET qwasmwindow_harness POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/qwasmwindow_harness.html - ${CMAKE_CURRENT_BINARY_DIR}/qwasmwindow_harness.html -) - -add_custom_command( - TARGET qwasmwindow_harness POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/qwasmwindow.py - ${CMAKE_CURRENT_BINARY_DIR}/qwasmwindow.py -) - -add_custom_command( - TARGET qwasmwindow_harness POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/run.sh - ${CMAKE_CURRENT_BINARY_DIR}/run.sh -) - -add_custom_command( - TARGET qwasmwindow_harness POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../util/wasm/qtwasmserver/qtwasmserver.py - ${CMAKE_CURRENT_BINARY_DIR}/qtwasmserver.py -) diff --git a/tests/manual/wasm/selenium/qwasmwindow/qwasmwindow.py b/tests/manual/wasm/selenium/qwasmwindow/qwasmwindow.py deleted file mode 100644 index 954cd5be174..00000000000 --- a/tests/manual/wasm/selenium/qwasmwindow/qwasmwindow.py +++ /dev/null @@ -1,906 +0,0 @@ -# Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -from selenium.webdriver import Chrome -from selenium.webdriver.common.actions.action_builder import ActionBuilder -from selenium.webdriver.common.actions.pointer_actions import PointerActions -from selenium.webdriver.common.actions.interaction import POINTER_TOUCH -from selenium.webdriver.common.actions.pointer_input import PointerInput -from selenium.webdriver.common.by import By -from selenium.webdriver.support.expected_conditions import presence_of_element_located -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.common.action_chains import ActionChains - -import unittest -from enum import Enum, auto - -import time - -class WidgetTestCase(unittest.TestCase): - def setUp(self): - self._driver = Chrome() - self._driver.get( - 'http://localhost:8001/qwasmwindow_harness.html') - self._test_sandbox_element = WebDriverWait(self._driver, 30).until( - presence_of_element_located((By.ID, 'test-sandbox')) - ) - self.addTypeEqualityFunc(Color, assert_colors_equal) - self.addTypeEqualityFunc(Rect, assert_rects_equal) - - def test_window_resizing(self): - defaultWindowMinSize = 100 - screen = Screen(self._driver, ScreenPosition.FIXED, - x=0, y=0, width=600, height=600) - window = Window(parent=screen, rect=Rect(x=100, y=100, width=200, height=200)) - self.assertEqual(window.rect, Rect(x=100, y=100, width=200, height=200)) - - window.drag(Handle.TOP_LEFT, direction=UP(10) + LEFT(10)) - self.assertEqual(window.rect, Rect(x=90, y=90, width=210, height=210)) - - window.drag(Handle.TOP, direction=DOWN(10) + LEFT(100)) - self.assertEqual(window.rect, Rect(x=90, y=100, width=210, height=200)) - - window.drag(Handle.TOP_RIGHT, direction=UP(5) + LEFT(5)) - self.assertEqual(window.rect, Rect(x=90, y=95, width=205, height=205)) - - window.drag(Handle.RIGHT, direction=DOWN(100) + RIGHT(5)) - self.assertEqual(window.rect, Rect(x=90, y=95, width=210, height=205)) - - window.drag(Handle.BOTTOM_RIGHT, direction=UP(5) + LEFT(10)) - self.assertEqual(window.rect, Rect(x=90, y=95, width=200, height=200)) - - window.drag(Handle.BOTTOM, direction=DOWN(20) + LEFT(100)) - self.assertEqual(window.rect, Rect(x=90, y=95, width=200, height=220)) - - window.drag(Handle.BOTTOM_LEFT, direction=DOWN(10) + LEFT(10)) - self.assertEqual(window.rect, Rect(x=80, y=95, width=210, height=230)) - - window.drag(Handle.LEFT, direction=DOWN(343) + LEFT(5)) - self.assertEqual(window.rect, Rect(x=75, y=95, width=215, height=230)) - - window.drag(Handle.BOTTOM_RIGHT, direction=UP(150) + LEFT(150)) - self.assertEqual(window.rect, Rect(x=75, y=95, width=defaultWindowMinSize, height=defaultWindowMinSize)) - - def test_cannot_resize_over_screen_top_edge(self): - screen = Screen(self._driver, ScreenPosition.FIXED, - x=200, y=200, width=300, height=300) - window = Window(parent=screen, rect=Rect(x=300, y=300, width=100, height=100)) - self.assertEqual(window.rect, Rect(x=300, y=300, width=100, height=100)) - frame_rect_before_resize = window.frame_rect - - window.drag(Handle.TOP, direction=UP(200)) - self.assertEqual(window.rect.x, 300) - self.assertEqual(window.frame_rect.y, screen.rect.y) - self.assertEqual(window.rect.width, 100) - self.assertEqual(window.frame_rect.y + window.frame_rect.height, - frame_rect_before_resize.y + frame_rect_before_resize.height) - - def test_window_move(self): - screen = Screen(self._driver, ScreenPosition.FIXED, - x=200, y=200, width=300, height=300) - window = Window(parent=screen, rect=Rect(x=300, y=300, width=100, height=100)) - self.assertEqual(window.rect, Rect(x=300, y=300, width=100, height=100)) - - window.drag(Handle.TOP_WINDOW_BAR, direction=UP(30)) - self.assertEqual(window.rect, Rect(x=300, y=270, width=100, height=100)) - - window.drag(Handle.TOP_WINDOW_BAR, direction=RIGHT(50)) - self.assertEqual(window.rect, Rect(x=350, y=270, width=100, height=100)) - - window.drag(Handle.TOP_WINDOW_BAR, direction=DOWN(30) + LEFT(70)) - self.assertEqual(window.rect, Rect(x=280, y=300, width=100, height=100)) - - def test_screen_limits_window_moves(self): - screen = Screen(self._driver, ScreenPosition.RELATIVE, - x=200, y=200, width=300, height=300) - window = Window(parent=screen, rect=Rect(x=300, y=300, width=100, height=100)) - self.assertEqual(window.rect, Rect(x=300, y=300, width=100, height=100)) - - window.drag(Handle.TOP_WINDOW_BAR, direction=LEFT(300)) - self.assertEqual(window.frame_rect.x, screen.rect.x - window.frame_rect.width / 2) - - def test_screen_in_scroll_container_limits_window_moves(self): - screen = Screen(self._driver, ScreenPosition.IN_SCROLL_CONTAINER, - x=200, y=2000, width=300, height=300, - container_width=500, container_height=7000) - screen.scroll_to() - window = Window(parent=screen, rect=Rect(x=300, y=2100, width=100, height=100)) - self.assertEqual(window.rect, Rect(x=300, y=2100, width=100, height=100)) - - window.drag(Handle.TOP_WINDOW_BAR, direction=LEFT(300)) - self.assertEqual(window.frame_rect.x, screen.rect.x - window.frame_rect.width / 2) - - def test_maximize(self): - screen = Screen(self._driver, ScreenPosition.RELATIVE, - x=200, y=200, width=300, height=300) - window = Window(parent=screen, rect=Rect(x=300, y=300, width=100, height=100), title='Maximize') - self.assertEqual(window.rect, Rect(x=300, y=300, width=100, height=100)) - - window.maximize() - self.assertEqual(window.frame_rect, Rect(x=200, y=200, width=300, height=300)) - - def test_multitouch_window_move(self): - screen = Screen(self._driver, ScreenPosition.FIXED, - x=0, y=0, width=800, height=800) - windows = [Window(screen, rect=Rect(x=50, y=50, width=100, height=100), title='First'), - Window(screen, rect=Rect(x=400, y=400, width=100, height=100), title='Second'), - Window(screen, rect=Rect(x=50, y=400, width=100, height=100), title='Third')] - - self.assertEqual(windows[0].rect, Rect(x=50, y=50, width=100, height=100)) - self.assertEqual(windows[1].rect, Rect(x=400, y=400, width=100, height=100)) - self.assertEqual(windows[2].rect, Rect(x=50, y=400, width=100, height=100)) - - actions = [TouchDragAction(origin=windows[0].at(Handle.TOP_WINDOW_BAR), direction=DOWN(20) + RIGHT(20)), - TouchDragAction(origin=windows[1].at(Handle.TOP_WINDOW_BAR), direction=DOWN(20) + LEFT(20)), - TouchDragAction(origin=windows[2].at(Handle.TOP_WINDOW_BAR), direction=UP(20) + RIGHT(20))] - perform_touch_drag_actions(actions) - self.assertEqual(windows[0].rect, Rect(x=70, y=70, width=100, height=100)) - self.assertEqual(windows[1].rect, Rect(x=380, y=420, width=100, height=100)) - self.assertEqual(windows[2].rect, Rect(x=70, y=380, width=100, height=100)) - - def test_multitouch_window_resize(self): - screen = Screen(self._driver, ScreenPosition.FIXED, - x=0, y=0, width=800, height=800) - windows = [Window(screen, rect=Rect(x=50, y=50, width=150, height=150), title='First'), - Window(screen, rect=Rect(x=400, y=400, width=150, height=150), title='Second'), - Window(screen, rect=Rect(x=50, y=400, width=150, height=150), title='Third')] - - self.assertEqual(windows[0].rect, Rect(x=50, y=50, width=150, height=150)) - self.assertEqual(windows[1].rect, Rect(x=400, y=400, width=150, height=150)) - self.assertEqual(windows[2].rect, Rect(x=50, y=400, width=150, height=150)) - - actions = [TouchDragAction(origin=windows[0].at(Handle.TOP_LEFT), direction=DOWN(20) + RIGHT(20)), - TouchDragAction(origin=windows[1].at(Handle.TOP), direction=DOWN(20) + LEFT(20)), - TouchDragAction(origin=windows[2].at(Handle.BOTTOM_RIGHT), direction=UP(20) + RIGHT(20))] - perform_touch_drag_actions(actions) - self.assertEqual(windows[0].rect, Rect(x=70, y=70, width=130, height=130)) - self.assertEqual(windows[1].rect, Rect(x=400, y=420, width=150, height=130)) - self.assertEqual(windows[2].rect, Rect(x=50, y=400, width=170, height=130)) - - def test_newly_created_window_gets_keyboard_focus(self): - screen = Screen(self._driver, ScreenPosition.FIXED, - x=0, y=0, width=800, height=800) - window = Window(parent=screen, rect=Rect(x=0, y=0, width=800, height=800), title='root') - - ActionChains(self._driver).key_down('c').key_up('c').perform() - - events = window.events - self.assertEqual(len(events), 2) - self.assertEqual(events[-2]['type'], 'keyPress') - self.assertEqual(events[-2]['key'], 'c') - self.assertEqual(events[-1]['type'], 'keyRelease') - self.assertEqual(events[-1]['key'], 'c') - - def test_child_window_activation(self): - screen = Screen(self._driver, ScreenPosition.FIXED, - x=0, y=0, width=800, height=800) - - root = Window(parent=screen, rect=Rect(x=0, y=0, width=800, height=800), title='root') - w1 = Window(parent=root, rect=Rect(x=100, y=100, width=600, height=600), title='w1') - w1_w1 = Window(parent=w1, rect=Rect(x=100, y=100, width=300, height=300), title='w1_w1') - w1_w1_w1 = Window(parent=w1_w1, rect=Rect(x=100, y=100, width=100, height=100), title='w1_w1_w1') - w1_w1_w2 = Window(parent=w1_w1, rect=Rect(x=150, y=150, width=100, height=100), title='w1_w1_w2') - w1_w2 = Window(parent=w1, rect=Rect(x=300, y=300, width=300, height=300), title='w1_w2') - w1_w2_w1 = Window(parent=w1_w2, rect=Rect(x=100, y=100, width=100, height=100), title='w1_w2_w1') - w2 = Window(parent=root, rect=Rect(x=300, y=300, width=450, height=450), title='w2') - - self.assertEqual(screen.window_stack_at_point(*w1_w1.bounding_box.center), - [w2, w1_w1_w2, w1_w1_w1, w1_w1, w1, root]) - - self.assertEqual(screen.window_stack_at_point(*w2.bounding_box.center), - [w2, w1_w2_w1, w1_w2, w1, root]) - - for w in [w1, w1_w1, w1_w1_w1, w1_w1_w2, w1_w2, w1_w2_w1]: - self.assertFalse(w.active) - self.assertTrue(w2.active) - - w1.click(0, 0) - - for w in [w1, w1_w2, w1_w2_w1]: - self.assertTrue(w.active) - for w in [w1_w1, w1_w1_w1, w1_w1_w2, w2]: - self.assertFalse(w.active) - - self.assertEqual(screen.window_stack_at_point(*w2.bounding_box.center), - [w1_w2_w1, w1_w2, w1, w2, root]) - - w1_w1_w1.click(0, 0) - - for w in [w1, w1_w1, w1_w1_w1]: - self.assertTrue(w.active) - for w in [w1_w1_w2, w1_w2, w1_w2_w1, w2]: - self.assertFalse(w.active) - - self.assertEqual(screen.window_stack_at_point(*w1_w1_w1.bounding_box.center), - [w1_w1_w1, w1_w1_w2, w1_w1, w1, w2, root]) - - w1_w1_w2.click(w1_w1_w2.bounding_box.width, w1_w1_w2.bounding_box.height) - - for w in [w1, w1_w1, w1_w1_w2]: - self.assertTrue(w.active) - for w in [w1_w1_w1, w1_w2, w1_w2_w1, w2]: - self.assertFalse(w.active) - - self.assertEqual(screen.window_stack_at_point(w1_w1_w2.bounding_box.x, w1_w1_w2.bounding_box.y), - [w1_w1_w2, w1_w1_w1, w1_w1, w1, w2, root]) - - def test_window_reparenting(self): - screen = Screen(self._driver, ScreenPosition.FIXED, - x=0, y=0, width=800, height=800) - - bottom = Window(parent=screen, rect=Rect(x=800, y=800, width=300, height=300), title='bottom') - w1 = Window(parent=screen, rect=Rect(x=50, y=50, width=300, height=300), title='w1') - w2 = Window(parent=screen, rect=Rect(x=50, y=50, width=300, height=300), title='w2') - w3 = Window(parent=screen, rect=Rect(x=50, y=50, width=300, height=300), title='w3') - - self.assertTrue( - w2.element not in [*w1.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w3.element not in [*w1.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w1.element not in [*w2.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w3.element not in [*w2.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w1.element not in [*w3.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w2.element not in [*w3.element.find_elements(By.XPATH, "ancestor::div")]) - - w2.set_parent(w1) - - self.assertTrue( - w2.element not in [*w1.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w3.element not in [*w1.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w1.element in [*w2.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w3.element not in [*w2.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w1.element not in [*w3.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w2.element not in [*w3.element.find_elements(By.XPATH, "ancestor::div")]) - - w3.set_parent(w2) - - self.assertTrue( - w2.element not in [*w1.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w3.element not in [*w1.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w1.element in [*w2.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w3.element not in [*w2.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w1.element in [*w3.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w2.element in [*w3.element.find_elements(By.XPATH, "ancestor::div")]) - - w2.set_parent(screen) - - self.assertTrue( - w2.element not in [*w1.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w3.element not in [*w1.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w1.element not in [*w2.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w3.element not in [*w2.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w1.element not in [*w3.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w2.element in [*w3.element.find_elements(By.XPATH, "ancestor::div")]) - - w1.set_parent(w2) - - self.assertTrue( - w2.element in [*w1.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w3.element not in [*w1.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w1.element not in [*w2.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w3.element not in [*w2.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w1.element not in [*w3.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w2.element in [*w3.element.find_elements(By.XPATH, "ancestor::div")]) - - w3.set_parent(screen) - - self.assertTrue( - w2.element in [*w1.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w3.element not in [*w1.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w1.element not in [*w2.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w3.element not in [*w2.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w1.element not in [*w3.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w2.element not in [*w3.element.find_elements(By.XPATH, "ancestor::div")]) - - w2.set_parent(w3) - - self.assertTrue( - w2.element in [*w1.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w3.element in [*w1.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w1.element not in [*w2.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w3.element in [*w2.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w1.element not in [*w3.element.find_elements(By.XPATH, "ancestor::div")]) - self.assertTrue( - w2.element not in [*w3.element.find_elements(By.XPATH, "ancestor::div")]) - - def test_window_closing(self): - screen = Screen(self._driver, ScreenPosition.FIXED, - x=0, y=0, width=800, height=800) - - bottom = Window(parent=screen, rect=Rect(x=800, y=800, width=300, height=300), title='root') - bottom.close() - - w1 = Window(parent=screen, rect=Rect(x=50, y=50, width=300, height=300), title='w1') - w2 = Window(parent=screen, rect=Rect(x=50, y=50, width=300, height=300), title='w2') - w3 = Window(parent=screen, rect=Rect(x=50, y=50, width=300, height=300), title='w3') - - w3.close() - - self.assertFalse(w3 in screen.query_windows()) - self.assertTrue(w2 in screen.query_windows()) - self.assertTrue(w1 in screen.query_windows()) - - w4 = Window(parent=screen, rect=Rect(x=50, y=50, width=300, height=300), title='w4') - - self.assertTrue(w4 in screen.query_windows()) - self.assertTrue(w2 in screen.query_windows()) - self.assertTrue(w1 in screen.query_windows()) - - w2.close() - w1.close() - - self.assertTrue(w4 in screen.query_windows()) - self.assertFalse(w2 in screen.query_windows()) - self.assertFalse(w1 in screen.query_windows()) - - w4.close() - - self.assertFalse(w4 in screen.query_windows()) - - def test_window_painting(self): - screen = Screen(self._driver, ScreenPosition.FIXED, - x=0, y=0, width=800, height=800) - bottom = Window(parent=screen, rect=Rect(x=0, y=0, width=400, height=400), title='root') - bottom.set_background_color(Color(r=255, g=0, b=0)) - wait_for_animation_frame(self._driver) - - self.assertEqual(bottom.color_at(0, 0), Color(r=255, g=0, b=0)) - - w1 = Window(parent=screen, rect=Rect(x=100, y=100, width=600, height=600), title='w1') - w1.set_background_color(Color(r=0, g=255, b=0)) - wait_for_animation_frame(self._driver) - - self.assertEqual(w1.color_at(0, 0), Color(r=0, g=255, b=0)) - - w1_w1 = Window(parent=w1, rect=Rect(x=100, y=100, width=400, height=400), title='w1_w1') - w1_w1.set_background_color(Color(r=0, g=0, b=255)) - wait_for_animation_frame(self._driver) - - self.assertEqual(w1_w1.color_at(0, 0), Color(r=0, g=0, b=255)) - - w1_w1_w1 = Window(parent=w1_w1, rect=Rect(x=100, y=100, width=200, height=200), title='w1_w1_w1') - w1_w1_w1.set_background_color(Color(r=255, g=255, b=0)) - wait_for_animation_frame(self._driver) - - self.assertEqual(w1_w1_w1.color_at(0, 0), Color(r=255, g=255, b=0)) - - def test_keyboard_input(self): - screen = Screen(self._driver, ScreenPosition.FIXED, - x=0, y=0, width=800, height=800) - - bottom = Window(parent=screen, rect=Rect(x=0, y=0, width=800, height=800), title='root') - w1 = Window(parent=screen, rect=Rect(x=100, y=100, width=600, height=600), title='w1') - w1_w1 = Window(parent=w1, rect=Rect(x=100, y=100, width=400, height=400), title='w1_w1') - w1_w1_w1 = Window(parent=w1_w1, rect=Rect(x=100, y=100, width=100, height=100), title='w1_w1_w1') - Window(parent=w1_w1, rect=Rect(x=150, y=150, width=100, height=100), title='w1_w1_w2') - - w1_w1_w1.click(0, 0) - - ActionChains(self._driver).key_down('c').key_up('c').perform() - - events = w1_w1_w1.events - self.assertEqual(len(events), 2) - self.assertEqual(events[-2]['type'], 'keyPress') - self.assertEqual(events[-2]['key'], 'c') - self.assertEqual(events[-1]['type'], 'keyRelease') - self.assertEqual(events[-1]['key'], 'c') - self.assertEqual(len(w1_w1.events), 0) - self.assertEqual(len(w1.events), 0) - - w1_w1.click(0, 0) - - ActionChains(self._driver).key_down('b').key_up('b').perform() - - events = w1_w1.events - self.assertEqual(len(events), 2) - self.assertEqual(events[-2]['type'], 'keyPress') - self.assertEqual(events[-2]['key'], 'b') - self.assertEqual(events[-1]['type'], 'keyRelease') - self.assertEqual(events[-1]['key'], 'b') - self.assertEqual(len(w1_w1_w1.events), 2) - self.assertEqual(len(w1.events), 0) - - w1.click(0, 0) - - ActionChains(self._driver).key_down('a').key_up('a').perform() - - events = w1.events - self.assertEqual(len(events), 2) - self.assertEqual(events[-2]['type'], 'keyPress') - self.assertEqual(events[-2]['key'], 'a') - self.assertEqual(events[-1]['type'], 'keyRelease') - self.assertEqual(events[-1]['key'], 'a') - self.assertEqual(len(w1_w1_w1.events), 2) - self.assertEqual(len(w1_w1.events), 2) - - def tearDown(self): - self._driver.quit() - -class ScreenPosition(Enum): - FIXED = auto() - RELATIVE = auto() - IN_SCROLL_CONTAINER = auto() - -class Screen: - def __init__(self, driver, positioning=None, x=None, y=None, width=None, height=None, container_width=0, container_height=0, screen_name=None): - self.driver = driver - if screen_name is not None: - screen_information = call_instance_function(self.driver, 'screenInformation') - if len(screen_information) != 1: - raise AssertionError('Expecting exactly one screen_information!') - self.screen_info = screen_information[0] - self.element = driver.find_element(By.CSS_SELECTOR, f'#test-screen-1') - return - - if positioning == ScreenPosition.FIXED: - command = f'initializeScreenWithFixedPosition({x}, {y}, {width}, {height})' - elif positioning == ScreenPosition.RELATIVE: - command = f'initializeScreenWithRelativePosition({x}, {y}, {width}, {height})' - elif positioning == ScreenPosition.IN_SCROLL_CONTAINER: - command = f'initializeScreenInScrollContainer({container_width}, {container_height}, {x}, {y}, {width}, {height})' - self.element = self.driver.execute_script( - f''' - return testSupport.{command}; - ''' - ) - if positioning == ScreenPosition.IN_SCROLL_CONTAINER: - self.element = self.element[1] - - screen_information = call_instance_function( - self.driver, 'screenInformation') - if len(screen_information) != 1: - raise AssertionError('Expecting exactly one screen_information!') - self.screen_info = screen_information[0] - - @property - def rect(self): - self.screen_info = call_instance_function( - self.driver, 'screenInformation')[0] - geo = self.screen_info['geometry'] - return Rect(geo['x'], geo['y'], geo['width'], geo['height']) - - @property - def name(self): - return self.screen_info['name'] - - def scroll_to(self): - ActionChains(self.driver).scroll_to_element(self.element).perform() - - def hit_test_point(self, x, y): - return self.driver.execute_script( - f''' - return testSupport.hitTestPoint({x}, {y}, '{self.element.get_attribute("id")}'); - ''' - ) - - def window_stack_at_point(self, x, y): - return [ - Window(self, element=element) for element in [ - *filter(lambda elem: (elem.get_attribute('id') if elem.get_attribute('id') is not None else '') - .startswith('qt-window-'), self.hit_test_point(x, y))]] - - def query_windows(self): - shadow_container = self.element.find_element(By.CSS_SELECTOR, f'#qt-shadow-container') - return [ - Window(self, element=element) for element in shadow_container.shadow_root.find_elements( - By.CSS_SELECTOR, f'div#{self.name} > div.qt-window')] - - def find_element(self, method, query): - shadow_container = self.element.find_element(By.CSS_SELECTOR, f'#qt-shadow-container') - return shadow_container.shadow_root.find_element(method, query) - - -class Window: - def __init__(self, parent=None, rect=None, title=None, element=None, visible=True): - self.driver = parent.driver - if element is not None: - self.element = element - self.title = element.find_element( - By.CSS_SELECTOR, f'.title-bar > .window-name').get_property("textContent") - information = self.__window_information() - self.screen = Screen(self.driver, screen_name=information['screen']['name']) - pass - else: - self.title = title = title if title is not None else 'window' - if isinstance(parent, Window): - self.driver.execute_script( - f''' - instance.createWindow({rect.x}, {rect.y}, {rect.width}, {rect.height}, 'window', '{parent.title}', '{title}'); - ''' - ) - self.screen = parent.screen - else: - assert(isinstance(parent, Screen)) - self.driver.execute_script( - f''' - instance.createWindow({rect.x}, {rect.y}, {rect.width}, {rect.height}, 'screen', '{parent.name}', '{title}'); - ''' - ) - self.screen = parent - self._window_id = self.__window_information()['id'] - self.element = self.screen.find_element( - By.CSS_SELECTOR, f'#qt-window-{self._window_id}') - if visible: - self.set_visible(True) - - def __eq__(self, other): - return self._window_id == other._window_id if isinstance(other, Window) else False - - def __window_information(self): - information = call_instance_function(self.driver, 'windowInformation') - #print(information) - return next(filter(lambda e: e['title'] == self.title, information)) - - @property - def rect(self): - geo = self.__window_information()["geometry"] - return Rect(geo['x'], geo['y'], geo['width'], geo['height']) - - @property - def frame_rect(self): - geo = self.__window_information()["frameGeometry"] - return Rect(geo['x'], geo['y'], geo['width'], geo['height']) - - @property - def events(self): - events = self.driver.execute_script( - f''' - return testSupport.events(); - ''' - ) - return [*filter(lambda e: e['windowTitle'] == self.title, events)] - - def set_visible(self, visible): - info = self.__window_information() - self.driver.execute_script( - f'''instance.setWindowVisible({info['id']}, {'true' if visible else 'false'});''') - - def drag(self, handle, direction): - ActionChains(self.driver) \ - .move_to_element_with_offset(self.element, *self.at(handle)['offset']) \ - .click_and_hold() \ - .move_by_offset(*translate_direction_to_offset(direction)) \ - .release().perform() - - def maximize(self): - maximize_button = self.element.find_element( - By.CSS_SELECTOR, f'.title-bar :nth-child(6)') - maximize_button.click() - - def at(self, handle): - """ Returns (window, offset) for given handle on window""" - width = self.frame_rect.width - height = self.frame_rect.height - - if handle == Handle.TOP_LEFT: - offset = (-width/2, -height/2) - elif handle == Handle.TOP: - offset = (0, -height/2) - elif handle == Handle.TOP_RIGHT: - offset = (width/2, -height/2) - elif handle == Handle.LEFT: - offset = (-width/2, 0) - elif handle == Handle.RIGHT: - offset = (width/2, 0) - elif handle == Handle.BOTTOM_LEFT: - offset = (-width/2, height/2) - elif handle == Handle.BOTTOM: - offset = (0, height/2) - elif handle == Handle.BOTTOM_RIGHT: - offset = (width/2, height/2) - elif handle == Handle.TOP_WINDOW_BAR: - frame_top = self.frame_rect.y - client_area_top = self.rect.y - top_frame_bar_width = client_area_top - frame_top - offset = (0, -height/2 + top_frame_bar_width/2) - return {'window': self, 'offset': offset} - - @property - def bounding_box(self): - raw = self.driver.execute_script(""" - return arguments[0].getBoundingClientRect(); - """, self.element) - return Rect(raw['x'], raw['y'], raw['width'], raw['height']) - - @property - def active(self): - return not self.inactive - # self.assertFalse('inactive' in window_element.get_attribute( - # 'class').split(' '), window_element.get_attribute('id')) - - @property - def inactive(self): - window_chain = [ - *self.element.find_elements(By.XPATH, "ancestor::div"), self.element] - return next(filter(lambda elem: 'qt-window' in elem.get_attribute('class').split(' ') and - 'inactive' in elem.get_attribute( - 'class').split(' '), - window_chain - ), None) is not None - - def click(self, x, y): - rect = self.bounding_box - - SELENIUM_IMPRECISION_COMPENSATION = 2 - ActionChains(self.driver).move_to_element( - self.element).move_by_offset(-rect.width / 2 + x + SELENIUM_IMPRECISION_COMPENSATION, - -rect.height / 2 + y + SELENIUM_IMPRECISION_COMPENSATION).click().perform() - - def set_parent(self, parent): - if isinstance(parent, Screen): - # TODO won't work with screen that is not parent.screen - self.screen = parent - self.driver.execute_script( - f''' - instance.setWindowParent('{self.title}', 'none'); - ''' - ) - else: - assert(isinstance(parent, Window)) - self.screen = parent.screen - self.driver.execute_script( - f''' - instance.setWindowParent('{self.title}', '{parent.title}'); - ''' - ) - - def close(self): - self.driver.execute_script( - f''' - instance.closeWindow('{self.title}'); - ''' - ) - - def color_at(self, x, y): - raw = self.driver.execute_script( - f''' - return arguments[0].querySelector('canvas') - .getContext('2d').getImageData({x}, {y}, 1, 1).data; - ''', self.element) - return Color(r=raw[0], g=raw[1], b=raw[2]) - - def set_background_color(self, color): - return self.driver.execute_script( - f''' - return instance.setWindowBackgroundColor('{self.title}', {color.r}, {color.g}, {color.b}); - ''' - ) - - -class TouchDragAction: - def __init__(self, origin, direction): - self.origin = origin - self.direction = direction - self.step = 2 - - -def perform_touch_drag_actions(actions): - driver = actions[0].origin['window'].driver - touch_action_builder = ActionBuilder(driver) - pointers = [PointerActions(source=touch_action_builder.add_pointer_input( - POINTER_TOUCH, f'touch_input_{i}')) for i in range(len(actions))] - - for action, pointer in zip(actions, pointers): - pointer.move_to( - action.origin['window'].element, *action.origin['offset']) - pointer.pointer_down(width=10, height=10, pressure=1) - moves = [translate_direction_to_offset(a.direction) for a in actions] - - def movement_finished(): - for move in moves: - if move != (0, 0): - return False - return True - - def sign(num): - if num > 0: - return 1 - elif num < 0: - return -1 - return 0 - - while not movement_finished(): - for i in range(len(actions)): - pointer = pointers[i] - move = moves[i] - step = actions[i].step - - current_move = ( - min(abs(move[0]), step) * sign(move[0]), min(abs(move[1]), step) * sign(move[1])) - moves[i] = (move[0] - current_move[0], move[1] - current_move[1]) - pointer.move_by(current_move[0], - current_move[1], width=10, height=10) - for pointer in pointers: - pointer.pointer_up() - - touch_action_builder.perform() - - -class TouchDragAction: - def __init__(self, origin, direction): - self.origin = origin - self.direction = direction - self.step = 2 - - -def perform_touch_drag_actions(actions): - driver = actions[0].origin['window'].driver - touch_action_builder = ActionBuilder(driver) - pointers = [PointerActions(source=touch_action_builder.add_pointer_input( - POINTER_TOUCH, f'touch_input_{i}')) for i in range(len(actions))] - - for action, pointer in zip(actions, pointers): - pointer.move_to( - action.origin['window'].element, *action.origin['offset']) - pointer.pointer_down(width=10, height=10, pressure=1) - - moves = [translate_direction_to_offset(a.direction) for a in actions] - - def movement_finished(): - for move in moves: - if move != (0, 0): - return False - return True - - def sign(num): - if num > 0: - return 1 - elif num < 0: - return -1 - return 0 - - while not movement_finished(): - for i in range(len(actions)): - pointer = pointers[i] - move = moves[i] - step = actions[i].step - - current_move = ( - min(abs(move[0]), step) * sign(move[0]), min(abs(move[1]), step) * sign(move[1])) - moves[i] = (move[0] - current_move[0], move[1] - current_move[1]) - pointer.move_by(current_move[0], - current_move[1], width=10, height=10) - - for pointer in pointers: - pointer.pointer_up() - - touch_action_builder.perform() - - -def translate_direction_to_offset(direction): - return (direction.val[1] - direction.val[3], direction.val[2] - direction.val[0]) - - -def call_instance_function(driver, name): - return driver.execute_script( - f'''let result; - window.{name}Callback = data => result = data; - instance.{name}(); - return eval(result);''') - -def wait_for_animation_frame(driver): - driver.execute_script( - ''' - window.requestAnimationFrame(() => { - const sync = document.createElement('div'); - sync.id = 'test-sync'; - document.body.appendChild(sync); - }); - ''' - ) - WebDriverWait(driver, 1).until( - presence_of_element_located((By.ID, 'test-sync')) - ) - driver.execute_script( - ''' - document.body.removeChild(document.body.querySelector('#test-sync')); - ''' - ) - -class Direction: - def __init__(self): - self.val = (0, 0, 0, 0) - - def __init__(self, north, east, south, west): - self.val = (north, east, south, west) - - def __add__(self, other): - return Direction(self.val[0] + other.val[0], - self.val[1] + other.val[1], - self.val[2] + other.val[2], - self.val[3] + other.val[3]) - - -class UP(Direction): - def __init__(self, step=1): - self.val = (step, 0, 0, 0) - - -class RIGHT(Direction): - def __init__(self, step=1): - self.val = (0, step, 0, 0) - - -class DOWN(Direction): - def __init__(self, step=1): - self.val = (0, 0, step, 0) - - -class LEFT(Direction): - def __init__(self, step=1): - self.val = (0, 0, 0, step) - - -class Handle(Enum): - TOP_LEFT = auto() - TOP = auto() - TOP_RIGHT = auto() - LEFT = auto() - RIGHT = auto() - BOTTOM_LEFT = auto() - BOTTOM = auto() - BOTTOM_RIGHT = auto() - TOP_WINDOW_BAR = auto() - -class Color: - def __init__(self, r, g, b): - self.r = r - self.g = g - self.b = b - -class Rect: - def __init__(self, x, y, width, height) -> None: - self.x = x - self.y = y - self.width = width - self.height = height - - def __str__(self): - return f'(x: {self.x}, y: {self.y}, width: {self.width}, height: {self.height})' - - @property - def center(self): - return self.x + self.width / 2, self.y + self.height / 2, - -def assert_colors_equal(color1, color2, msg=None): - if color1.r != color2.r or color1.g != color2.g or color1.b != color2.b: - raise AssertionError(f'Colors not equal: \n{color1} \nvs \n{color2}') - -def assert_rects_equal(geo1, geo2, msg=None): - if geo1.x != geo2.x or geo1.y != geo2.y or geo1.width != geo2.width or geo1.height != geo2.height: - raise AssertionError(f'Rectangles not equal: \n{geo1} \nvs \n{geo2}') - -unittest.main() diff --git a/tests/manual/wasm/selenium/qwasmwindow/qwasmwindow_harness.cpp b/tests/manual/wasm/selenium/qwasmwindow/qwasmwindow_harness.cpp deleted file mode 100644 index b1624822930..00000000000 --- a/tests/manual/wasm/selenium/qwasmwindow/qwasmwindow_harness.cpp +++ /dev/null @@ -1,270 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -#include <QtCore/QEvent> - -#include <QtGui/qevent.h> -#include <QtCore/qobject.h> -#include <QtCore/qregularexpression.h> -#include <QtGui/qpainter.h> -#include <QtGui/qrasterwindow.h> -#include <QtGui/qscreen.h> -#include <QtGui/qwindow.h> -#include <QtGui/qguiapplication.h> - -#include <emscripten.h> -#include <emscripten/bind.h> -#include <emscripten/val.h> - -#include <memory> -#include <sstream> -#include <vector> - -class TestWindow : public QRasterWindow -{ - Q_OBJECT - -public: - void setBackgroundColor(int r, int g, int b) - { - m_backgroundColor = QColor::fromRgb(r, g, b); - update(); - } - -private: - void closeEvent(QCloseEvent *ev) override - { - Q_UNUSED(ev); - delete this; - } - - void keyPressEvent(QKeyEvent *event) final - { - auto data = emscripten::val::object(); - data.set("type", emscripten::val("keyPress")); - data.set("windowId", emscripten::val(winId())); - data.set("windowTitle", emscripten::val(title().toStdString())); - data.set("key", emscripten::val(event->text().toStdString())); - emscripten::val::global("window")["testSupport"].call<void>("reportEvent", std::move(data)); - } - - void keyReleaseEvent(QKeyEvent *event) final - { - auto data = emscripten::val::object(); - data.set("type", emscripten::val("keyRelease")); - data.set("windowId", emscripten::val(winId())); - data.set("windowTitle", emscripten::val(title().toStdString())); - data.set("key", emscripten::val(event->text().toStdString())); - emscripten::val::global("window")["testSupport"].call<void>("reportEvent", std::move(data)); - } - - void paintEvent(QPaintEvent *e) final - { - QPainter painter(this); - painter.fillRect(e->rect(), m_backgroundColor); - } - - QColor m_backgroundColor = Qt::white; -}; - -namespace { -TestWindow *findWindowByTitle(const std::string &title) -{ - auto windows = qGuiApp->allWindows(); - auto window_it = std::find_if(windows.begin(), windows.end(), [&title](QWindow *window) { - return window->title() == QString::fromLatin1(title); - }); - return window_it == windows.end() ? nullptr : static_cast<TestWindow *>(*window_it); -} -} // namespace - -using namespace emscripten; - -std::string toJSArray(const std::vector<std::string> &elements) -{ - std::ostringstream out; - out << "["; - bool comma = false; - for (const auto &element : elements) { - out << (comma ? "," : ""); - out << element; - comma = true; - } - out << "]"; - return out.str(); -} - -std::string toJSString(const QString &qstring) -{ - Q_ASSERT_X(([qstring]() { - static QRegularExpression unescapedQuoteRegex(R"re((?:^|[^\\])')re"); - return qstring.indexOf(unescapedQuoteRegex) == -1; - })(), - Q_FUNC_INFO, "Unescaped single quotes found"); - return "'" + qstring.toStdString() + "'"; -} - -std::string rectToJSObject(const QRect &rect) -{ - std::ostringstream out; - out << "{" - << " x: " << std::to_string(rect.x()) << "," - << " y: " << std::to_string(rect.y()) << "," - << " width: " << std::to_string(rect.width()) << "," - << " height: " << std::to_string(rect.height()) << "}"; - return out.str(); -} - -std::string screenToJSObject(const QScreen &screen) -{ - std::ostringstream out; - out << "{" - << " name: " << toJSString(screen.name()) << "," - << " geometry: " << rectToJSObject(screen.geometry()) << "}"; - return out.str(); -} - -std::string windowToJSObject(const QWindow &window) -{ - std::ostringstream out; - out << "{" - << " id: " << std::to_string(window.winId()) << "," - << " geometry: " << rectToJSObject(window.geometry()) << "," - << " frameGeometry: " << rectToJSObject(window.frameGeometry()) << "," - << " screen: " << screenToJSObject(*window.screen()) << "," - << " title: '" << window.title().toStdString() << "' }"; - return out.str(); -} - -void windowInformation() -{ - auto windows = qGuiApp->allWindows(); - - std::vector<std::string> windowsAsJsObjects; - windowsAsJsObjects.reserve(windows.size()); - std::transform(windows.begin(), windows.end(), std::back_inserter(windowsAsJsObjects), - [](const QWindow *window) { return windowToJSObject(*window); }); - - emscripten::val::global("window").call<void>("windowInformationCallback", - emscripten::val(toJSArray(windowsAsJsObjects))); -} - -void screenInformation() -{ - auto screens = qGuiApp->screens(); - - std::vector<std::string> screensAsJsObjects; - screensAsJsObjects.reserve(screens.size()); - std::transform(screens.begin(), screens.end(), std::back_inserter(screensAsJsObjects), - [](const QScreen *screen) { return screenToJSObject(*screen); }); - emscripten::val::global("window").call<void>("screenInformationCallback", - emscripten::val(toJSArray(screensAsJsObjects))); -} - -void createWindow(int x, int y, int w, int h, std::string parentType, std::string parentId, - std::string title) -{ - QScreen *parentScreen = nullptr; - QWindow *parentWindow = nullptr; - if (parentType == "screen") { - auto screens = qGuiApp->screens(); - auto screen_it = std::find_if(screens.begin(), screens.end(), [&parentId](QScreen *screen) { - return screen->name() == QString::fromLatin1(parentId); - }); - if (screen_it == screens.end()) { - qWarning() << "No such screen: " << parentId; - return; - } - parentScreen = *screen_it; - } else if (parentType == "window") { - auto windows = qGuiApp->allWindows(); - auto window_it = std::find_if(windows.begin(), windows.end(), [&parentId](QWindow *window) { - return window->title() == QString::fromLatin1(parentId); - }); - if (window_it == windows.end()) { - qWarning() << "No such window: " << parentId; - return; - } - parentWindow = *window_it; - parentScreen = parentWindow->screen(); - } else { - qWarning() << "Wrong parent type " << parentType; - return; - } - - auto *window = new TestWindow; - - window->setFlag(Qt::WindowTitleHint); - window->setFlag(Qt::WindowMaximizeButtonHint); - window->setTitle(QString::fromLatin1(title)); - window->setGeometry(x, y, w, h); - window->setScreen(parentScreen); - window->setParent(parentWindow); -} - -void setWindowBackgroundColor(std::string title, int r, int g, int b) -{ - auto *window = findWindowByTitle(title); - if (!window) { - qWarning() << "No such window: " << title; - return; - } - window->setBackgroundColor(r, g, b); -} - -void setWindowVisible(int windowId, bool visible) { - auto windows = qGuiApp->allWindows(); - auto window_it = std::find_if(windows.begin(), windows.end(), [windowId](QWindow *window) { - return window->winId() == WId(windowId); - }); - if (window_it == windows.end()) { - qWarning() << "No such window: " << windowId; - return; - } - - (*window_it)->setVisible(visible); -} - -void setWindowParent(std::string windowTitle, std::string parentTitle) -{ - QWindow *window = findWindowByTitle(windowTitle); - if (!window) { - qWarning() << "Window could not be found " << parentTitle; - return; - } - QWindow *parent = nullptr; - if (parentTitle != "none") { - if ((parent = findWindowByTitle(parentTitle)) == nullptr) { - qWarning() << "Parent window could not be found " << parentTitle; - return; - } - } - window->setParent(parent); -} - -bool closeWindow(std::string title) -{ - QWindow *window = findWindowByTitle(title); - return window ? window->close() : false; -} - -EMSCRIPTEN_BINDINGS(qwasmwindow) -{ - emscripten::function("screenInformation", &screenInformation); - emscripten::function("windowInformation", &windowInformation); - emscripten::function("createWindow", &createWindow); - emscripten::function("setWindowVisible", &setWindowVisible); - emscripten::function("setWindowParent", &setWindowParent); - emscripten::function("closeWindow", &closeWindow); - emscripten::function("setWindowBackgroundColor", &setWindowBackgroundColor); -} - -int main(int argc, char **argv) -{ - QGuiApplication app(argc, argv); - - app.exec(); - return 0; -} - -#include "qwasmwindow_harness.moc" diff --git a/tests/manual/wasm/selenium/qwasmwindow/qwasmwindow_harness.html b/tests/manual/wasm/selenium/qwasmwindow/qwasmwindow_harness.html deleted file mode 100644 index 3e63e52e04b..00000000000 --- a/tests/manual/wasm/selenium/qwasmwindow/qwasmwindow_harness.html +++ /dev/null @@ -1,80 +0,0 @@ -<!doctype html> - -<head> - <script type="text/javascript" src="qwasmwindow_harness.js"></script> - <script> - (async () => { - const instance = await qwasmwindow_harness_entry({}); - window.instance = instance; - - const testSandbox = document.createElement('div'); - testSandbox.id = 'test-sandbox'; - let nextScreenId = 1; - document.body.appendChild(testSandbox); - - const eventList = []; - - const makeSizedDiv = (left, top, width, height) => { - const screenDiv = document.createElement('div'); - - screenDiv.style.left = `${left}px`; - screenDiv.style.top = `${top}px`; - screenDiv.style.width = `${width}px`; - screenDiv.style.height = `${height}px`; - screenDiv.style.backgroundColor = 'lightblue'; - screenDiv.id = `test-screen-${nextScreenId++}`; - - return screenDiv; - }; - - window.testSupport = { - initializeScreenWithFixedPosition: (left, top, width, height) => { - const screenDiv = makeSizedDiv(left, top, width, height); - testSandbox.appendChild(screenDiv); - - screenDiv.style.position = 'fixed'; - instance.qtAddContainerElement(screenDiv); - - return screenDiv; - }, - initializeScreenWithRelativePosition: (left, top, width, height) => { - const screenDiv = makeSizedDiv(left, top, width, height); - testSandbox.appendChild(screenDiv); - - screenDiv.style.position = 'relative'; - instance.qtAddContainerElement(screenDiv); - - return screenDiv; - }, - initializeScreenInScrollContainer: - (scrollWidth, scrollHeight, left, top, width, height) => { - const scrollContainer = document.createElement('div'); - scrollContainer.style.height = `${scrollHeight}px`; - scrollContainer.style.width = `${scrollWidth}px`; - testSandbox.appendChild(scrollContainer); - - const screenDiv = makeSizedDiv(left, top, width, height); - scrollContainer.appendChild(screenDiv); - screenDiv.style.position = 'relative'; - - instance.qtAddContainerElement(screenDiv); - - return [scrollContainer, screenDiv]; - }, - reportEvent: event => { - eventList.push(event); - }, - events: () => eventList, - hitTestPoint: (x, y, screenId) => { - return document - .querySelector(`#${screenId}`) - .querySelector('#qt-shadow-container') - .shadowRoot.elementsFromPoint(x, y); - } - }; - })(); - </script> -</head> - -<body> -</body> diff --git a/tests/manual/wasm/selenium/qwasmwindow/run.sh b/tests/manual/wasm/selenium/qwasmwindow/run.sh deleted file mode 100755 index f6271d6131a..00000000000 --- a/tests/manual/wasm/selenium/qwasmwindow/run.sh +++ /dev/null @@ -1,23 +0,0 @@ -#! /bin/bash - -# Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -set -m - -function removeServer() -{ - [ -z "$cleanupPid" ] || kill $cleanupPid -} - -trap removeServer EXIT - -script_dir=`dirname ${BASH_SOURCE[0]}` -cd "$script_dir" -python3 qtwasmserver.py -p 8001 > /dev/null 2>&1 & -cleanupPid=$! - -python3 qwasmwindow.py $@ - -echo 'Press any key to continue...' >&2 -read -n 1 |
