From 334f946870d491d9068f3282dfec4722a020f007 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Tue, 3 Jun 2025 22:47:17 +0200 Subject: [PATCH] Add remaining missing coverage and revert loadTheme return type --- novelwriter/gui/theme.py | 14 ++++++++------ tests/test_base/test_base_common.py | 6 ++++++ tests/test_gui/test_gui_guimain.py | 25 ++++++++++++++++++++----- 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/novelwriter/gui/theme.py b/novelwriter/gui/theme.py index 5c7533ae..4ab4f7d8 100644 --- a/novelwriter/gui/theme.py +++ b/novelwriter/gui/theme.py @@ -270,8 +270,10 @@ class GuiTheme: return QColor(*result) return default - def loadTheme(self, force: bool = False) -> None: - """Load the currently specified GUI theme.""" + def loadTheme(self, force: bool = False) -> bool: + """Load the currently specified GUI theme. The boolean return + can be used to determine if the GUI needs refreshing. + """ match CONFIG.themeMode: case nwTheme.LIGHT: darkMode = False @@ -292,12 +294,12 @@ class GuiTheme: if theme == self._currentTheme and not force: logger.info("Theme '%s' is already loaded", theme) - return + return False entry = self._allThemes.get(theme) if not entry: logger.error("Could not load GUI theme") - return + return False CONFIG.splashMessage(f"Loading colour theme: {entry.name}") logger.info("Loading GUI theme '%s'", theme) @@ -307,7 +309,7 @@ class GuiTheme: except Exception: logger.error("Could not read file: %s", entry.path) logException() - return + return False # Reset Palette self._resetTheme() @@ -477,7 +479,7 @@ class GuiTheme: QApplication.setPalette(self._guiPalette) self._buildStyleSheets(self._guiPalette) - return + return True def getStyleSheet(self, name: str) -> str: """Load a standard style sheet.""" diff --git a/tests/test_base/test_base_common.py b/tests/test_base/test_base_common.py index 006daa42..ef16baaa 100644 --- a/tests/test_base/test_base_common.py +++ b/tests/test_base/test_base_common.py @@ -41,6 +41,7 @@ from novelwriter.common import ( readTextFile, simplified, transferCase, uniqueCompact, xmlElement, xmlIndent, xmlSubElem, yesNo ) +from novelwriter.enum import nwItemClass from tests.mocked import causeOSError from tests.tools import writeFile @@ -804,6 +805,7 @@ def testBaseCommon_NWConfigParser(fncPath): "list1 = a, b, c\n" "list2 = 17, 18, 19\n" "float1 = 4.2\n" + "enum1 = NOVEL\n" f"path1 = {fncPath}\n" )) @@ -875,3 +877,7 @@ def testBaseCommon_NWConfigParser(fncPath): assert cfgParser.rdIntList("nope", "list2", [1]) == [1] assert cfgParser.rdIntList("main", "blabla", [1]) == [1] + + # Read Enum + assert cfgParser.rdEnum("main", "enum1", nwItemClass.NO_CLASS) == nwItemClass.NOVEL + assert cfgParser.rdEnum("main", "blabla", nwItemClass.NO_CLASS) == nwItemClass.NO_CLASS diff --git a/tests/test_gui/test_gui_guimain.py b/tests/test_gui/test_gui_guimain.py index 91207d09..5010094d 100644 --- a/tests/test_gui/test_gui_guimain.py +++ b/tests/test_gui/test_gui_guimain.py @@ -24,6 +24,7 @@ import shutil from pathlib import Path from shutil import copyfile +from unittest.mock import Mock import pytest @@ -32,6 +33,7 @@ from PyQt6.QtGui import QPalette from PyQt6.QtWidgets import QInputDialog, QMessageBox from novelwriter import CONFIG, SHARED +from novelwriter.config import DEF_GUI_DARK, DEF_GUI_LIGHT from novelwriter.constants import nwFiles from novelwriter.dialogs.editlabel import GuiEditLabel from novelwriter.enum import nwDocAction, nwDocMode, nwFocus, nwItemType, nwTheme, nwView @@ -179,22 +181,35 @@ def testGuiMain_ProjectTreeItems(qtbot, monkeypatch, nwGUI, projPath, mockRnd): @pytest.mark.gui def testGuiMain_UpdateTheme(qtbot, nwGUI): """Test updating the theme in the GUI.""" - mainTheme = SHARED.theme + theme = SHARED.theme CONFIG.themeMode = nwTheme.DARK - CONFIG.darkTheme = "default_dark" - CONFIG.lightTheme = "default_light" - mainTheme.loadTheme() + CONFIG.darkTheme = DEF_GUI_DARK + CONFIG.lightTheme = DEF_GUI_LIGHT + theme.loadTheme() + assert theme.isDarkTheme is True nwGUI._processConfigChanges(False, True, False, False) nwGUI._processConfigChanges(True, True, True, True) + # Check editor syntax syntax = SHARED.theme.syntaxTheme - assert nwGUI.docEditor.palette().color(QPalette.ColorRole.Window) == syntax.back assert nwGUI.docEditor.docHeader.palette().color(QPalette.ColorRole.Window) == syntax.back assert nwGUI.docViewer.palette().color(QPalette.ColorRole.Window) == syntax.back assert nwGUI.docViewer.docHeader.palette().color(QPalette.ColorRole.Window) == syntax.back + # Update by check + CONFIG.themeMode = nwTheme.LIGHT + nwGUI.checkThemeUpdate() + assert theme.isDarkTheme is False + + # Through change event + event = Mock() + event.type.return_value = 210 + CONFIG.themeMode = nwTheme.DARK + nwGUI.changeEvent(event) + assert theme.isDarkTheme is True + # qtbot.stop()