Files
create/src/Mod/BIM/bimtests/TestArchBaseGui.py
Furgo b23d580941 Add BIM workbench to .pre-commit-config.yaml (#21591)
* Add BIM workbench to .pre-commit-config.yaml

* pre-commit: ignore translations

* pre-commit: add additional ignore pattern

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-10-13 13:07:48 +02:00

75 lines
3.4 KiB
Python

# SPDX-License-Identifier: LGPL-2.1-or-later
# ***************************************************************************
# * *
# * Copyright (c) 2025 Furgo *
# * *
# * 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/>. *
# * *
# ***************************************************************************
import unittest
import FreeCAD
import FreeCADGui
from bimtests.TestArchBase import TestArchBase
class TestArchBaseGui(TestArchBase):
"""
The base class for all Arch/BIM GUI unit tests.
It inherits from TestArchBase to handle document setup and adds
GUI-specific initialization by activating the BIM workbench.
"""
@classmethod
def setUpClass(cls):
"""
Ensure the GUI is available and activate the BIM workbench once
before any tests in the inheriting class are run.
"""
if not FreeCAD.GuiUp:
raise unittest.SkipTest("Cannot run GUI tests in a CLI environment.")
# Activating the workbench ensures all GUI commands are loaded and ready.
# TODO: commenting out this line for now as it causes a timeout without further logging in
# CI
# FreeCADGui.activateWorkbench("BIMWorkbench")
def setUp(self):
"""
Run the parent's setup to create the uniquely named document.
The workbench is already activated by setUpClass.
"""
super().setUp()
def pump_gui_events(self, timeout_ms=200):
"""Run the Qt event loop briefly so queued GUI callbacks execute.
This helper starts a QEventLoop and quits it after `timeout_ms` milliseconds using
QTimer.singleShot. Any exception (e.g. missing Qt in the environment) is silently ignored so
tests can still run in pure-CLI environments where the GUI isn't available.
"""
try:
from PySide import QtCore
loop = QtCore.QEventLoop()
QtCore.QTimer.singleShot(int(timeout_ms), loop.quit)
loop.exec_()
except Exception:
# Best-effort: if Qt isn't present or event pumping fails, continue.
pass