Add comprehensive unit tests to verify the fix prevents AttributeError when accessing non-existent nodes.
81 lines
3.0 KiB
Python
81 lines
3.0 KiB
Python
# 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__ = []
|