Add unit tests for CommandInsertLink fix
Add comprehensive unit tests to verify the fix prevents AttributeError when accessing non-existent nodes.
This commit is contained in:
80
src/Mod/Assembly/AssemblyTests/mocks/__init__.py
Normal file
80
src/Mod/Assembly/AssemblyTests/mocks/__init__.py
Normal file
@@ -0,0 +1,80 @@
|
||||
# SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
# /****************************************************************************
|
||||
# *
|
||||
# Copyright (c) 2025 Weston Schmidt <weston_schmidt@alumni.purdue.edu> *
|
||||
# *
|
||||
# This file is part of FreeCAD. *
|
||||
# *
|
||||
# FreeCAD is free software: you can redistribute it and/or modify it *
|
||||
# under the terms of the GNU Lesser General Public License as *
|
||||
# published by the Free Software Foundation, either version 2.1 of the *
|
||||
# License, or (at your option) any later version. *
|
||||
# *
|
||||
# FreeCAD is distributed in the hope that it will be useful, but *
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
|
||||
# Lesser General Public License for more details. *
|
||||
# *
|
||||
# You should have received a copy of the GNU Lesser General Public *
|
||||
# License along with FreeCAD. If not, see *
|
||||
# <https://www.gnu.org/licenses/>. *
|
||||
# *
|
||||
# ***************************************************************************/
|
||||
|
||||
"""Mock classes for FreeCAD GUI testing."""
|
||||
|
||||
import builtins
|
||||
from .MockGui import (
|
||||
MockQIcon,
|
||||
MockQTreeWidgetItem,
|
||||
MockPySideUic,
|
||||
MockGetDocument,
|
||||
MockAddModule,
|
||||
MockDoCommandSkip,
|
||||
)
|
||||
|
||||
# Set up all FreeCAD GUI mocks for testing
|
||||
# Always create mocks for consistent testing
|
||||
Gui = type("MockGui", (), {})()
|
||||
QtCore = type("MockQtCore", (), {})()
|
||||
QtGui = type("MockQtGui", (), {})()
|
||||
|
||||
# Patch QtGui with our mock classes
|
||||
QtGui.QIcon = MockQIcon
|
||||
QtGui.QTreeWidgetItem = MockQTreeWidgetItem
|
||||
|
||||
# Mock the PySideUic if it doesn't exist
|
||||
if not hasattr(Gui, "PySideUic"):
|
||||
Gui.PySideUic = MockPySideUic
|
||||
|
||||
# Mock additional Gui methods that might be missing
|
||||
if not hasattr(Gui, "getDocument"):
|
||||
Gui.getDocument = MockGetDocument
|
||||
|
||||
# Mock Selection module
|
||||
if not hasattr(Gui, "Selection"):
|
||||
Gui.Selection = type(
|
||||
"MockSelection",
|
||||
(),
|
||||
{
|
||||
"clearSelection": lambda *args: None,
|
||||
"addSelection": lambda *args: None,
|
||||
"getSelection": lambda *args: [],
|
||||
},
|
||||
)()
|
||||
|
||||
# Mock addModule method
|
||||
if not hasattr(Gui, "addModule"):
|
||||
Gui.addModule = MockAddModule
|
||||
|
||||
# Mock doCommandSkip method
|
||||
if not hasattr(Gui, "doCommandSkip"):
|
||||
Gui.doCommandSkip = MockDoCommandSkip
|
||||
|
||||
# Make QtCore, QtGui and Gui available in the global namespace
|
||||
builtins.QtCore = QtCore
|
||||
builtins.QtGui = QtGui
|
||||
builtins.Gui = Gui
|
||||
builtins.QIcon = MockQIcon
|
||||
|
||||
__all__ = []
|
||||
Reference in New Issue
Block a user