123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- """
- Copyright (c) Contributors to the Open 3D Engine Project.
- For complete copyright and license terms please see the LICENSE at the root of this distribution.
- SPDX-License-Identifier: Apache-2.0 OR MIT
- """
- # fmt: off
- class Tests():
- undock_pane = ("Pane is undocked successfully", "Failed to undock pane")
- close_sc_window = ("Script Canvas window is closed", "Failed to close Script Canvas window")
- pane_closed = ("Pane is closed successfully", "Failed to close the pane")
- # fmt: on
- def Pane_Undocked_ClosesSuccessfully():
- """
- Summary:
- The Script Canvas window is opened with one of the pane undocked.
- Verify if undocked pane closes upon closing Script canvas window.
- Expected Behavior:
- The undocked pane closes when Script Canvas window closed.
- Test Steps:
- 1) Open Script Canvas window (Tools > Script Canvas)
- 2) Undock Node Palette pane
- 3) Connect to Pane visibility signal emitter to verify pane closed
- 4) Close Script Canvas window
- 5) Restore default layout
- Note:
- - This test file must be called from the Open 3D Engine Editor command terminal
- - Any passed and failed tests are written to the Editor.log file.
- Parsing the file or running a log_monitor are required to observe the test results.
- :return: None
- """
- from PySide2 import QtWidgets
- # Helper imports
- from utils import Report
- from utils import TestHelper as helper
- import pyside_utils
- # Open 3D Engine imports
- import azlmbr.legacy.general as general
- TEST_PANE = "NodePalette" # Chosen most commonly used pane
- def click_menu_option(window, option_text):
- action = pyside_utils.find_child_by_pattern(window, {"text": option_text, "type": QtWidgets.QAction})
- action.trigger()
- def find_pane(window, pane_name):
- return window.findChild(QtWidgets.QDockWidget, pane_name)
- def on_top_level_changed():
- # This function has test condition always True since it gets emitted only when condition satisfied
- Report.result(Tests.undock_pane, True)
- def on_pane_closed():
- # This function has test condition always True since it gets emitted only when condition satisfied
- Report.result(Tests.pane_closed, True)
- # Test starts here
- general.idle_enable(True)
- # 1) Open Script Canvas window (Tools > Script Canvas)
- general.open_pane("Script Canvas")
- helper.wait_for_condition(lambda: general.is_pane_visible("Script Canvas"), 5.0)
- # 2) Undock Node Palette pane
- # Make sure Node Palette pane is opened
- editor_window = pyside_utils.get_editor_main_window()
- sc = editor_window.findChild(QtWidgets.QDockWidget, "Script Canvas")
- pane = find_pane(sc, TEST_PANE)
- if not pane.isVisible():
- click_menu_option(sc, "Node Palette")
- pane = find_pane(sc, TEST_PANE) # New reference
- # We drag/drop pane over the graph since it doesn't allow docking, so this will undock it
- try:
- graph = find_pane(sc, "GraphCanvasEditorCentralWidget")
- try:
- pane.topLevelChanged.connect(on_top_level_changed)
- pyside_utils.drag_and_drop(pane, graph)
- finally:
- pane.topLevelChanged.disconnect(on_top_level_changed)
- # 3) Connect to Pane visibility signal emitter to verify pane closed
- # No need to disconnect this since pane widget gets deleted when SC window closed
- pane.visibilityChanged.connect(on_pane_closed)
- # 4) Close Script Canvas window
- sc.close()
- is_sc_visible = helper.wait_for_condition(lambda: general.is_pane_visible("Script Canvas"), 2.0)
- Report.result(Tests.close_sc_window, not is_sc_visible)
- finally:
- # 5) Restore default layout
- general.open_pane("Script Canvas")
- helper.wait_for_condition(lambda: general.is_pane_visible("Script Canvas"), 5.0)
- sc = editor_window.findChild(QtWidgets.QDockWidget, "Script Canvas")
- click_menu_option(sc, "Restore Default Layout")
- sc.close()
- if __name__ == "__main__":
- import ImportPathHelper as imports
- imports.init()
- from utils import Report
- Report.start_test(Pane_Undocked_ClosesSuccessfully)
|