Switch test code to PyQt6

This commit is contained in:
Veronica Berglyd Olsen
2025-01-11 20:36:42 +01:00
parent 40c4e74d48
commit da036efdcf
47 changed files with 169 additions and 160 deletions
+6 -8
View File
@@ -27,8 +27,8 @@ from xml.etree import ElementTree as ET
import pytest
from PyQt5.QtCore import QMimeData, QUrl
from PyQt5.QtGui import QColor, QDesktopServices, QFont, QFontDatabase, QFontInfo
from PyQt6.QtCore import QMimeData, QUrl
from PyQt6.QtGui import QColor, QDesktopServices, QFont, QFontDatabase, QFontInfo
from novelwriter.common import (
NWConfigParser, checkBool, checkFloat, checkInt, checkIntTuple, checkPath,
@@ -522,8 +522,7 @@ def testBaseCommon_cssCol():
@pytest.mark.base
def testBaseCommon_describeFont():
"""Test the describeFont function."""
fontDB = QFontDatabase()
font = fontDB.systemFont(QFontDatabase.SystemFont.GeneralFont)
font = QFontDatabase.systemFont(QFontDatabase.SystemFont.GeneralFont)
font.setPointSize(12)
assert describeFont(font).startswith("12 pt")
assert describeFont(None) == "Error" # type: ignore
@@ -537,10 +536,9 @@ def testBaseCommon_fontMatcher(monkeypatch):
assert fontMatcher(nonsense) is nonsense
# General font
fontDB = QFontDatabase()
if len(fontDB.families()) > 1:
fontOne = QFont(fontDB.families()[0])
fontTwo = QFont(fontDB.families()[1])
if len(QFontDatabase.families()) > 1:
fontOne = QFont(QFontDatabase.families()[0])
fontTwo = QFont(QFontDatabase.families()[1])
check = QFont(fontOne)
check.setFamily(fontTwo.family())
with monkeypatch.context() as mp:
+8 -8
View File
@@ -42,7 +42,7 @@ def testBaseError_Dialog(qtbot, monkeypatch, nwGUI):
# Valid Error Message
with monkeypatch.context() as mp:
mp.setattr("PyQt5.QtCore.QSysInfo.kernelVersion", lambda: "1.2.3")
mp.setattr("PyQt6.QtCore.QSysInfo.kernelVersion", lambda: "1.2.3")
nwErr.setMessage(Exception, "Fine Error", None) # type: ignore
message = nwErr.msgBody.toPlainText()
assert message != ""
@@ -52,7 +52,7 @@ def testBaseError_Dialog(qtbot, monkeypatch, nwGUI):
# No kernel version retrieved
with monkeypatch.context() as mp:
mp.setattr("PyQt5.QtCore.QSysInfo.kernelVersion", causeException)
mp.setattr("PyQt6.QtCore.QSysInfo.kernelVersion", causeException)
nwErr.setMessage(Exception, "Almost Fine Error", None) # type: ignore
message = nwErr.msgBody.toPlainText()
assert message != ""
@@ -80,27 +80,27 @@ def testBaseError_Handler(qtbot, monkeypatch, nwGUI):
# Normal shutdown
with monkeypatch.context() as mp:
mp.setattr(NWErrorMessage, "exec", lambda *a: None)
mp.setattr("PyQt5.QtWidgets.QApplication.exit", lambda *a: None)
mp.setattr("PyQt6.QtWidgets.QApplication.exit", lambda *a: None)
exceptionHandler(Exception, "Error Message", None) # type: ignore
# Should not crash when no GUI is found
with monkeypatch.context() as mp:
mp.setattr(NWErrorMessage, "exec", lambda *a: None)
mp.setattr("PyQt5.QtWidgets.QApplication.exit", lambda *a: None)
mp.setattr("PyQt5.QtWidgets.QApplication.topLevelWidgets", lambda: [])
mp.setattr("PyQt6.QtWidgets.QApplication.exit", lambda *a: None)
mp.setattr("PyQt6.QtWidgets.QApplication.topLevelWidgets", lambda: [])
exceptionHandler(Exception, "Error Message", None) # type: ignore
# Should handle QApplication failing
with monkeypatch.context() as mp:
mp.setattr(NWErrorMessage, "exec", lambda *a: None)
mp.setattr("PyQt5.QtWidgets.QApplication.exit", lambda *a: None)
mp.setattr("PyQt5.QtWidgets.QApplication.topLevelWidgets", causeException)
mp.setattr("PyQt6.QtWidgets.QApplication.exit", lambda *a: None)
mp.setattr("PyQt6.QtWidgets.QApplication.topLevelWidgets", causeException)
exceptionHandler(Exception, "Error Message", None) # type: ignore
# Should handle failing to close main GUI
with monkeypatch.context() as mp:
mp.setattr(NWErrorMessage, "exec", lambda *a: None)
mp.setattr("PyQt5.QtWidgets.QApplication.exit", lambda *a: None)
mp.setattr("PyQt6.QtWidgets.QApplication.exit", lambda *a: None)
mp.setattr("novelwriter.guimain.GuiMain.closeMain", causeException)
exceptionHandler(Exception, "Error Message", None) # type: ignore
+13 -14
View File
@@ -63,13 +63,12 @@ def testBaseInit_Launch(caplog, monkeypatch, fncPath):
# Normal Launch
with monkeypatch.context() as mp:
mp.setattr("PyQt5.QtWidgets.QApplication.__init__", lambda *a: None)
mp.setattr("PyQt5.QtWidgets.QApplication.setApplicationName", lambda *a: None)
mp.setattr("PyQt5.QtWidgets.QApplication.setApplicationVersion", lambda *a: None)
mp.setattr("PyQt5.QtWidgets.QApplication.setWindowIcon", lambda *a: None)
mp.setattr("PyQt5.QtWidgets.QApplication.setOrganizationDomain", lambda *a: None)
mp.setattr("PyQt5.QtWidgets.QApplication.exec", lambda *a: 0)
# mp.setattr("PyQt5.QtWidgets.QApplication.focusChange.connect", lambda *a: None)
mp.setattr("PyQt6.QtWidgets.QApplication.__init__", lambda *a: None)
mp.setattr("PyQt6.QtWidgets.QApplication.setApplicationName", lambda *a: None)
mp.setattr("PyQt6.QtWidgets.QApplication.setApplicationVersion", lambda *a: None)
mp.setattr("PyQt6.QtWidgets.QApplication.setWindowIcon", lambda *a: None)
mp.setattr("PyQt6.QtWidgets.QApplication.setOrganizationDomain", lambda *a: None)
mp.setattr("PyQt6.QtWidgets.QApplication.exec", lambda *a: 0)
with pytest.raises(SystemExit) as ex:
main([f"--config={fncPath}", f"--data={fncPath}"])
assert ex.value.code == 0
@@ -165,11 +164,11 @@ def testBaseInit_Options(monkeypatch, fncPath):
def testBaseInit_Imports(caplog, monkeypatch, fncPath):
"""Check import error handling."""
monkeypatch.setattr("novelwriter.guimain.GuiMain", MockGuiMain)
monkeypatch.setattr("PyQt5.QtWidgets.QApplication.__init__", lambda *a: None)
monkeypatch.setattr("PyQt5.QtWidgets.QApplication.exec", lambda *a: 0)
monkeypatch.setattr("PyQt5.QtWidgets.QErrorMessage.__init__", lambda *a: None)
monkeypatch.setattr("PyQt5.QtWidgets.QErrorMessage.resize", lambda *a: None)
monkeypatch.setattr("PyQt5.QtWidgets.QErrorMessage.showMessage", lambda *a: None)
monkeypatch.setattr("PyQt6.QtWidgets.QApplication.__init__", lambda *a: None)
monkeypatch.setattr("PyQt6.QtWidgets.QApplication.exec", lambda *a: 0)
monkeypatch.setattr("PyQt6.QtWidgets.QErrorMessage.__init__", lambda *a: None)
monkeypatch.setattr("PyQt6.QtWidgets.QErrorMessage.resize", lambda *a: None)
monkeypatch.setattr("PyQt6.QtWidgets.QErrorMessage.showMessage", lambda *a: None)
monkeypatch.setattr("sys.hexversion", 0x0)
monkeypatch.setattr("novelwriter.CONFIG.verQtValue", 0x050000)
monkeypatch.setattr("novelwriter.CONFIG.verPyQtValue", 0x050000)
@@ -184,5 +183,5 @@ def testBaseInit_Imports(caplog, monkeypatch, fncPath):
assert ex.value.code & 16 == 16 # PyQt version not satisfied # type: ignore
assert "At least Python" in caplog.messages[0]
assert "At least Qt5" in caplog.messages[1]
assert "At least PyQt5" in caplog.messages[2]
assert "At least Qt6" in caplog.messages[1]
assert "At least PyQt6" in caplog.messages[2]
+3 -3
View File
@@ -24,9 +24,9 @@ from unittest.mock import MagicMock
import pytest
from PyQt5.QtCore import QUrl
from PyQt5.QtGui import QDesktopServices
from PyQt5.QtWidgets import QFileDialog, QMessageBox, QWidget
from PyQt6.QtCore import QUrl
from PyQt6.QtGui import QDesktopServices
from PyQt6.QtWidgets import QFileDialog, QMessageBox, QWidget
from novelwriter.core.project import NWProject
from novelwriter.shared import SharedData