diff --git a/novelwriter/gui/dochighlight.py b/novelwriter/gui/dochighlight.py index 0e378390..40d6c657 100644 --- a/novelwriter/gui/dochighlight.py +++ b/novelwriter/gui/dochighlight.py @@ -473,7 +473,7 @@ class TextBlockData(QTextBlockUserData): self._text = "" self._offset = 0 self._metaData: list[tuple[int, int, str, str]] = [] - self._spellErrors: list[tuple[int, int,]] = [] + self._spellErrors: list[tuple[int, int]] = [] return @property diff --git a/tests/reference/guiEditor_Main_Final_000000000000f.nwd b/tests/reference/guiEditor_Main_Final_000000000000f.nwd index e59f324e..da365c9d 100644 --- a/tests/reference/guiEditor_Main_Final_000000000000f.nwd +++ b/tests/reference/guiEditor_Main_Final_000000000000f.nwd @@ -1,8 +1,8 @@ %%~name: New Scene %%~path: 000000000000d/000000000000f %%~kind: NOVEL/DOCUMENT -%%~hash: e4148ea77e78c90c334d5dc46c38a2b7904ac117 -%%~date: 2024-11-01 21:15:57/2024-11-01 21:16:01 +%%~hash: e3cdc10e73d6250cc4eb9c24fcc4fed1e72392ff +%%~date: 2025-03-30 23:25:06/2025-03-30 23:25:11 # Novel ## Chapter @@ -60,5 +60,3 @@ But don’t add a double space : See? >>‘Right-aligned text’ -Some text with tesst in it. - diff --git a/tests/reference/guiEditor_Main_Final_nwProject.nwx b/tests/reference/guiEditor_Main_Final_nwProject.nwx index d6a5ecae..e90fa531 100644 --- a/tests/reference/guiEditor_Main_Final_nwProject.nwx +++ b/tests/reference/guiEditor_Main_Final_nwProject.nwx @@ -1,6 +1,6 @@ - - + + New Project Jane Doe @@ -28,7 +28,7 @@ Main - + Novel @@ -46,7 +46,7 @@ New Chapter - + New Scene diff --git a/tests/test_gui/test_gui_doceditor.py b/tests/test_gui/test_gui_doceditor.py index 7b257670..7d2d4c52 100644 --- a/tests/test_gui/test_gui_doceditor.py +++ b/tests/test_gui/test_gui_doceditor.py @@ -37,6 +37,7 @@ from novelwriter.constants import nwKeyWords, nwUnicode from novelwriter.dialogs.editlabel import GuiEditLabel from novelwriter.enum import nwDocAction, nwDocInsert, nwItemClass, nwItemLayout from novelwriter.gui.doceditor import GuiDocEditor, _TagAction +from novelwriter.gui.dochighlight import TextBlockData from novelwriter.text.counting import standardCounter from novelwriter.types import ( QtAlignJustify, QtAlignLeft, QtKeepAnchor, QtModCtrl, QtModNone, @@ -58,7 +59,7 @@ def getMenuForPos(editor: GuiDocEditor, pos: int, select: bool = False) -> QMenu if select: cursor.select(QTextCursor.SelectionType.WordUnderCursor) editor.setTextCursor(cursor) - editor._openContextMenu(editor.cursorRect().center()) + editor._openContextFromCursor() for obj in editor.children(): if isinstance(obj, QMenu) and obj.objectName() == "ContextMenu": return obj @@ -514,9 +515,20 @@ def testGuiEditor_SpellChecking(qtbot, monkeypatch, nwGUI, projPath, ipsumText, # ============== SHARED.project.data.setSpellCheck(True) + cursor = docEditor.textCursor() + cursor.setPosition(16) + data = cursor.block().userData() + assert cursor.block().text().startswith("Lorem") + assert isinstance(data, TextBlockData) + data._spellErrors = [(0, 5)] + + # No known position + assert docEditor._qDocument.spellErrorAtPos(-1) == ("", -1, -1, []) + # With Suggestion with monkeypatch.context() as mp: - mp.setattr(docEditor._qDocument, "spellErrorAtPos", lambda *a: ("Lorem", 0, 5, ["Lorax"])) + mp.setattr(SHARED.spelling, "suggestWords", lambda *a: ["Lorax"]) + ctxMenu = getMenuForPos(docEditor, 16) assert ctxMenu is not None actions = [x.text() for x in ctxMenu.actions() if x.text()] @@ -530,7 +542,8 @@ def testGuiEditor_SpellChecking(qtbot, monkeypatch, nwGUI, projPath, ipsumText, # Without Suggestion with monkeypatch.context() as mp: - mp.setattr(docEditor._qDocument, "spellErrorAtPos", lambda *a: ("Lorax", 0, 5, [])) + mp.setattr(SHARED.spelling, "suggestWords", lambda *a: []) + ctxMenu = getMenuForPos(docEditor, 16) assert ctxMenu is not None actions = [x.text() for x in ctxMenu.actions() if x.text()] @@ -541,7 +554,8 @@ def testGuiEditor_SpellChecking(qtbot, monkeypatch, nwGUI, projPath, ipsumText, # Add to Dictionary with monkeypatch.context() as mp: - mp.setattr(docEditor._qDocument, "spellErrorAtPos", lambda *a: ("Lorax", 0, 5, [])) + mp.setattr(SHARED.spelling, "suggestWords", lambda *a: []) + ctxMenu = getMenuForPos(docEditor, 16) assert ctxMenu is not None actions = [x.text() for x in ctxMenu.actions() if x.text()] diff --git a/tests/test_gui/test_gui_guimain.py b/tests/test_gui/test_gui_guimain.py index c0b5e517..e030aa44 100644 --- a/tests/test_gui/test_gui_guimain.py +++ b/tests/test_gui/test_gui_guimain.py @@ -21,7 +21,6 @@ along with this program. If not, see . from __future__ import annotations import shutil -import sys from pathlib import Path from shutil import copyfile @@ -30,7 +29,7 @@ import pytest from PyQt6.QtCore import Qt from PyQt6.QtGui import QPalette -from PyQt6.QtWidgets import QInputDialog, QMenu, QMessageBox +from PyQt6.QtWidgets import QInputDialog, QMessageBox from novelwriter import CONFIG, SHARED from novelwriter.constants import nwFiles @@ -569,28 +568,28 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, projPath, tstPaths, mockRnd): # Spell Checking # ============== - for c in "Some text with tesst in it.": - qtbot.keyClick(docEditor, c, delay=KEY_DELAY) - qtbot.keyClick(docEditor, Qt.Key.Key_Return, delay=KEY_DELAY) - qtbot.keyClick(docEditor, Qt.Key.Key_Return, delay=KEY_DELAY) + # for c in "Some text with tesst in it.": + # qtbot.keyClick(docEditor, c, delay=KEY_DELAY) + # qtbot.keyClick(docEditor, Qt.Key.Key_Return, delay=KEY_DELAY) + # qtbot.keyClick(docEditor, Qt.Key.Key_Return, delay=KEY_DELAY) - currPos = docEditor.getCursorPosition() - assert docEditor._qDocument.spellErrorAtPos(currPos) == ("", -1, -1, []) + # currPos = docEditor.getCursorPosition() + # assert docEditor._qDocument.spellErrorAtPos(currPos) == ("", -1, -1, []) - errPos = currPos - 13 - if not sys.platform.startswith("win32"): - # Skip on Windows as spell checking is off there - # This check will fail without an 'en' dictionary, like aspell-en - word, cPos, cLen, suggest = docEditor._qDocument.spellErrorAtPos(errPos) - assert word == "tesst" - assert cPos == 15 - assert cLen == 5 - assert "test" in suggest + # errPos = currPos - 13 + # if not sys.platform.startswith("win32"): + # # Skip on Windows as spell checking is off there + # # This check will fail without an 'en' dictionary, like aspell-en + # word, cPos, cLen, suggest = docEditor._qDocument.spellErrorAtPos(errPos) + # assert word == "tesst" + # assert cPos == 15 + # assert cLen == 5 + # assert "test" in suggest - with monkeypatch.context() as mp: - mp.setattr(QMenu, "exec", lambda *a: None) - docEditor.setCursorPosition(errPos) - docEditor._openContextFromCursor() + # with monkeypatch.context() as mp: + # mp.setattr(QMenu, "exec", lambda *a: None) + # docEditor.setCursorPosition(errPos) + # docEditor._openContextFromCursor() # Check Files # ===========