Fix existing tests

This commit is contained in:
Veronica Berglyd Olsen
2025-03-23 22:37:16 +01:00
parent 762efedb96
commit 34a3a6e85c
26 changed files with 78 additions and 59 deletions
+2 -2
View File
@@ -479,7 +479,7 @@ class Index:
def _generateNovelModel(self, tHandle: str) -> None: def _generateNovelModel(self, tHandle: str) -> None:
"""Generate a novel model for a specific handle.""" """Generate a novel model for a specific handle."""
if (item := SHARED.project.tree[tHandle]) and item.isRootType() and item.isNovelLike(): if (item := self._project.tree[tHandle]) and item.isRootType() and item.isNovelLike():
model = NovelModel() model = NovelModel()
model.setExtraColumn(self._novelExtra) model.setExtraColumn(self._novelExtra)
self._appendSubTreeToModel(tHandle, model) self._appendSubTreeToModel(tHandle, model)
@@ -488,7 +488,7 @@ class Index:
def _appendSubTreeToModel(self, tHandle: str, model: NovelModel) -> None: def _appendSubTreeToModel(self, tHandle: str, model: NovelModel) -> None:
"""Append all active novel documents to a novel model.""" """Append all active novel documents to a novel model."""
for handle in SHARED.project.tree.subTree(tHandle): for handle in self._project.tree.subTree(tHandle):
if ( if (
(node := self._itemIndex[handle]) (node := self._itemIndex[handle])
and node.item.isDocumentLayout() and node.item.isDocumentLayout()
+1 -3
View File
@@ -25,7 +25,6 @@ from __future__ import annotations
import logging import logging
from PyQt5.QtCore import QSize
from PyQt6.QtCore import QAbstractTableModel, QModelIndex, Qt from PyQt6.QtCore import QAbstractTableModel, QModelIndex, Qt
from PyQt6.QtGui import QIcon, QPixmap from PyQt6.QtGui import QIcon, QPixmap
@@ -52,12 +51,11 @@ T_NodeData = str | QIcon | QPixmap | Qt.AlignmentFlag | None
class NovelModel(QAbstractTableModel): class NovelModel(QAbstractTableModel):
__slots__ = ("_rows", "_header", "_more", "_columns", "_extraKey", "_extraLabel") __slots__ = ("_rows", "_more", "_columns", "_extraKey", "_extraLabel")
def __init__(self) -> None: def __init__(self) -> None:
super().__init__() super().__init__()
self._rows: list[dict[int, T_NodeData]] = [] self._rows: list[dict[int, T_NodeData]] = []
self._header: list[QSize] = []
self._more = SHARED.theme.getIcon("more_arrow") self._more = SHARED.theme.getIcon("more_arrow")
self._columns = 3 self._columns = 3
self._extraKey = "" self._extraKey = ""
+4 -4
View File
@@ -69,10 +69,10 @@ class NWProjectData:
self._initCounts = [0, 0] self._initCounts = [0, 0]
self._currCounts = [0, 0] self._currCounts = [0, 0]
self._lastHandle: dict[str, str | None] = { self._lastHandle: dict[str, str | None] = {
"editor": None, "editor": None,
"viewer": None, "viewer": None,
"novelTree": None, "novel": None,
"outline": None, "outline": None,
} }
self._autoReplace: dict[str, str] = {} self._autoReplace: dict[str, str] = {}
self._titleFormat: dict[str, str] = { self._titleFormat: dict[str, str] = {
+5 -2
View File
@@ -53,8 +53,11 @@ class NovelSelector(QComboBox):
## ##
@property @property
def handle(self) -> str: def handle(self) -> str | None:
return self.currentData() """Return the selected handle, if any."""
if tHandle := self.currentData():
return tHandle
return None
@property @property
def firstHandle(self) -> str | None: def firstHandle(self) -> str | None:
+9 -11
View File
@@ -104,7 +104,7 @@ class GuiNovelView(QWidget):
def openProjectTasks(self) -> None: def openProjectTasks(self) -> None:
"""Run open project tasks.""" """Run open project tasks."""
lastNovel = SHARED.project.data.getLastHandle("novelTree") lastNovel = SHARED.project.data.getLastHandle("novel")
if lastNovel and lastNovel not in SHARED.project.tree: if lastNovel and lastNovel not in SHARED.project.tree:
lastNovel = SHARED.project.tree.findRoot(nwItemClass.NOVEL) lastNovel = SHARED.project.tree.findRoot(nwItemClass.NOVEL)
@@ -171,14 +171,6 @@ class GuiNovelView(QWidget):
self.novelBar.buildNovelRootMenu() self.novelBar.buildNovelRootMenu()
return return
@pyqtSlot(str)
def updateNovelItemMeta(self, tHandle: str) -> None:
"""The meta data of a novel item has changed, and the tree item
needs to be refreshed.
"""
# self.novelTree.refreshHandle(tHandle)
return
class GuiNovelToolBar(QWidget): class GuiNovelToolBar(QWidget):
@@ -299,8 +291,10 @@ class GuiNovelToolBar(QWidget):
def setCurrentRoot(self, rootHandle: str | None) -> None: def setCurrentRoot(self, rootHandle: str | None) -> None:
"""Set the current active root handle.""" """Set the current active root handle."""
if rootHandle is None:
rootHandle = self.novelValue.firstHandle
self.novelValue.setHandle(rootHandle) self.novelValue.setHandle(rootHandle)
SHARED.project.data.setLastHandle(rootHandle, "novelTree") SHARED.project.data.setLastHandle(rootHandle, "novel")
self.novelView.setCurrentNovel(rootHandle) self.novelView.setCurrentNovel(rootHandle)
return return
@@ -318,7 +312,11 @@ class GuiNovelToolBar(QWidget):
refresh when content structure changes. refresh when content structure changes.
""" """
self._active = state self._active = state
if self._active and self._refresh.get(self.novelValue.handle, False): if (
self._active
and (handle := self.novelValue.handle)
and self._refresh.get(handle, False)
):
self._refreshNovelTree(self.novelValue.handle) self._refreshNovelTree(self.novelValue.handle)
return return
+4 -4
View File
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="2.7a3" hexVersion="0x020700a3" fileVersion="1.5" fileRevision="4" timeStamp="2025-02-16 21:53:19"> <novelWriterXML appVersion="2.7a3" hexVersion="0x020700a3" fileVersion="1.5" fileRevision="4" timeStamp="2025-03-23 22:26:31">
<project id="e2be99af-f9bf-4403-857a-c3d1ac25abea" saveCount="2160" autoCount="281" editTime="95932"> <project id="e2be99af-f9bf-4403-857a-c3d1ac25abea" saveCount="2166" autoCount="282" editTime="96058">
<name>Sample Project</name> <name>Sample Project</name>
<author>Jane Smith</author> <author>Jane Smith</author>
</project> </project>
@@ -11,7 +11,7 @@
<lastHandle> <lastHandle>
<entry key="editor">636b6aa9b697b</entry> <entry key="editor">636b6aa9b697b</entry>
<entry key="viewer">636b6aa9b697b</entry> <entry key="viewer">636b6aa9b697b</entry>
<entry key="novelTree">7031beac91f75</entry> <entry key="novel">7031beac91f75</entry>
<entry key="outline">7031beac91f75</entry> <entry key="outline">7031beac91f75</entry>
</lastHandle> </lastHandle>
<autoReplace> <autoReplace>
@@ -66,7 +66,7 @@
<name status="s90e6c9" import="ia857f0" active="yes">Another Scene</name> <name status="s90e6c9" import="ia857f0" active="yes">Another Scene</name>
</item> </item>
<item handle="ba8a28a246524" parent="7031beac91f75" root="7031beac91f75" order="4" type="FILE" class="NOVEL" layout="DOCUMENT"> <item handle="ba8a28a246524" parent="7031beac91f75" root="7031beac91f75" order="4" type="FILE" class="NOVEL" layout="DOCUMENT">
<meta expanded="no" heading="H2" charCount="649" wordCount="101" paraCount="3" cursorPos="1182" /> <meta expanded="no" heading="H2" charCount="617" wordCount="101" paraCount="3" cursorPos="1182" />
<name status="s78ea90" import="ia857f0" active="yes">Interlude</name> <name status="s78ea90" import="ia857f0" active="yes">Interlude</name>
</item> </item>
<item handle="96b68994dfa3d" parent="7031beac91f75" root="7031beac91f75" order="5" type="FILE" class="NOVEL" layout="NOTE"> <item handle="96b68994dfa3d" parent="7031beac91f75" root="7031beac91f75" order="5" type="FILE" class="NOVEL" layout="NOTE">
+1 -1
View File
@@ -11,7 +11,7 @@
<lastHandle> <lastHandle>
<entry key="editor">636b6aa9b697b</entry> <entry key="editor">636b6aa9b697b</entry>
<entry key="viewer">636b6aa9b697b</entry> <entry key="viewer">636b6aa9b697b</entry>
<entry key="novelTree">7031beac91f75</entry> <entry key="novel">7031beac91f75</entry>
<entry key="outline">7031beac91f75</entry> <entry key="outline">7031beac91f75</entry>
</lastHandle> </lastHandle>
<autoReplace> <autoReplace>
+1 -1
View File
@@ -11,7 +11,7 @@
<lastHandle> <lastHandle>
<entry key="editor">7a992350f3eb6</entry> <entry key="editor">7a992350f3eb6</entry>
<entry key="viewer">None</entry> <entry key="viewer">None</entry>
<entry key="novelTree">b3643d0f92e32</entry> <entry key="novel">b3643d0f92e32</entry>
<entry key="outline">None</entry> <entry key="outline">None</entry>
</lastHandle> </lastHandle>
<autoReplace> <autoReplace>
+4 -1
View File
@@ -65,7 +65,10 @@ class MockTheme:
self.guiFontBU = QFont() self.guiFontBU = QFont()
return return
def getPixmap(self, *a): def getPixmap(self, *a) -> QPixmap:
return QPixmap()
def getHeaderDecoration(self, *a) -> QPixmap:
return QPixmap() return QPixmap()
def getIcon(self, *a) -> QIcon: def getIcon(self, *a) -> QIcon:
@@ -11,7 +11,7 @@
<lastHandle> <lastHandle>
<entry key="editor">None</entry> <entry key="editor">None</entry>
<entry key="viewer">None</entry> <entry key="viewer">None</entry>
<entry key="novelTree">None</entry> <entry key="novel">None</entry>
<entry key="outline">None</entry> <entry key="outline">None</entry>
</lastHandle> </lastHandle>
<autoReplace /> <autoReplace />
@@ -11,7 +11,7 @@
<lastHandle> <lastHandle>
<entry key="editor">None</entry> <entry key="editor">None</entry>
<entry key="viewer">None</entry> <entry key="viewer">None</entry>
<entry key="novelTree">None</entry> <entry key="novel">None</entry>
<entry key="outline">None</entry> <entry key="outline">None</entry>
</lastHandle> </lastHandle>
<autoReplace /> <autoReplace />
@@ -11,7 +11,7 @@
<lastHandle> <lastHandle>
<entry key="editor">None</entry> <entry key="editor">None</entry>
<entry key="viewer">None</entry> <entry key="viewer">None</entry>
<entry key="novelTree">None</entry> <entry key="novel">None</entry>
<entry key="outline">None</entry> <entry key="outline">None</entry>
</lastHandle> </lastHandle>
<autoReplace /> <autoReplace />
@@ -11,7 +11,7 @@
<lastHandle> <lastHandle>
<entry key="editor">None</entry> <entry key="editor">None</entry>
<entry key="viewer">None</entry> <entry key="viewer">None</entry>
<entry key="novelTree">None</entry> <entry key="novel">None</entry>
<entry key="outline">None</entry> <entry key="outline">None</entry>
</lastHandle> </lastHandle>
<autoReplace /> <autoReplace />
@@ -11,7 +11,7 @@
<lastHandle> <lastHandle>
<entry key="editor">None</entry> <entry key="editor">None</entry>
<entry key="viewer">None</entry> <entry key="viewer">None</entry>
<entry key="novelTree">None</entry> <entry key="novel">None</entry>
<entry key="outline">None</entry> <entry key="outline">None</entry>
</lastHandle> </lastHandle>
<autoReplace /> <autoReplace />
@@ -11,7 +11,7 @@
<lastHandle> <lastHandle>
<entry key="editor">000000000000f</entry> <entry key="editor">000000000000f</entry>
<entry key="viewer">000000000000f</entry> <entry key="viewer">000000000000f</entry>
<entry key="novelTree">0000000000008</entry> <entry key="novel">0000000000008</entry>
<entry key="outline">None</entry> <entry key="outline">None</entry>
</lastHandle> </lastHandle>
<autoReplace /> <autoReplace />
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="2.6b1" hexVersion="0x020600b1" fileVersion="1.5" fileRevision="4" timeStamp="2024-11-23 17:46:20"> <novelWriterXML appVersion="2.7a3" hexVersion="0x020700a3" fileVersion="1.5" fileRevision="4" timeStamp="2025-03-23 22:33:54">
<project id="d0f3fe10-c6e6-4310-8bfd-181eb4224eed" saveCount="2" autoCount="1" editTime="0"> <project id="d0f3fe10-c6e6-4310-8bfd-181eb4224eed" saveCount="2" autoCount="1" editTime="0">
<name>New Project</name> <name>New Project</name>
<author>Jane Doe</author> <author>Jane Doe</author>
@@ -11,7 +11,7 @@
<lastHandle> <lastHandle>
<entry key="editor">None</entry> <entry key="editor">None</entry>
<entry key="viewer">None</entry> <entry key="viewer">None</entry>
<entry key="novelTree">None</entry> <entry key="novel">0000000000008</entry>
<entry key="outline">None</entry> <entry key="outline">None</entry>
</lastHandle> </lastHandle>
<autoReplace /> <autoReplace />
+1 -1
View File
@@ -11,7 +11,7 @@
<lastHandle> <lastHandle>
<entry key="editor">None</entry> <entry key="editor">None</entry>
<entry key="viewer">None</entry> <entry key="viewer">None</entry>
<entry key="novelTree">None</entry> <entry key="novel">None</entry>
<entry key="outline">None</entry> <entry key="outline">None</entry>
</lastHandle> </lastHandle>
<autoReplace> <autoReplace>
+1 -1
View File
@@ -11,7 +11,7 @@
<lastHandle> <lastHandle>
<entry key="editor">None</entry> <entry key="editor">None</entry>
<entry key="viewer">None</entry> <entry key="viewer">None</entry>
<entry key="novelTree">None</entry> <entry key="novel">None</entry>
<entry key="outline">None</entry> <entry key="outline">None</entry>
</lastHandle> </lastHandle>
<autoReplace> <autoReplace>
+1 -1
View File
@@ -11,7 +11,7 @@
<lastHandle> <lastHandle>
<entry key="editor">None</entry> <entry key="editor">None</entry>
<entry key="viewer">None</entry> <entry key="viewer">None</entry>
<entry key="novelTree">None</entry> <entry key="novel">None</entry>
<entry key="outline">None</entry> <entry key="outline">None</entry>
</lastHandle> </lastHandle>
<autoReplace> <autoReplace>
+1 -1
View File
@@ -11,7 +11,7 @@
<lastHandle> <lastHandle>
<entry key="editor">None</entry> <entry key="editor">None</entry>
<entry key="viewer">None</entry> <entry key="viewer">None</entry>
<entry key="novelTree">None</entry> <entry key="novel">None</entry>
<entry key="outline">None</entry> <entry key="outline">None</entry>
</lastHandle> </lastHandle>
<autoReplace> <autoReplace>
+1 -1
View File
@@ -11,7 +11,7 @@
<lastHandle> <lastHandle>
<entry key="editor">None</entry> <entry key="editor">None</entry>
<entry key="viewer">None</entry> <entry key="viewer">None</entry>
<entry key="novelTree">None</entry> <entry key="novel">None</entry>
<entry key="outline">None</entry> <entry key="outline">None</entry>
</lastHandle> </lastHandle>
<autoReplace> <autoReplace>
+22 -7
View File
@@ -30,15 +30,16 @@ from novelwriter import SHARED
from novelwriter.constants import nwFiles from novelwriter.constants import nwFiles
from novelwriter.core.index import Index, TagsIndex from novelwriter.core.index import Index, TagsIndex
from novelwriter.core.item import NWItem from novelwriter.core.item import NWItem
from novelwriter.core.novelmodel import NovelModel
from novelwriter.core.project import NWProject from novelwriter.core.project import NWProject
from novelwriter.enum import nwComment, nwItemClass, nwItemLayout from novelwriter.enum import nwComment, nwItemClass, nwItemLayout, nwNovelExtra
from tests.mocked import causeException from tests.mocked import causeException
from tests.tools import C, buildTestProject, cmpFiles from tests.tools import C, buildTestProject, cmpFiles
@pytest.mark.core @pytest.mark.core
def testCoreIndex_LoadSave(qtbot, monkeypatch, prjLipsum, mockGUI, tstPaths): def testCoreIndex_LoadSave(qtbot, monkeypatch, prjLipsum, nwGUI, tstPaths):
"""Test core functionality of scanning, saving, loading and checking """Test core functionality of scanning, saving, loading and checking
the index cache file. the index cache file.
""" """
@@ -52,6 +53,18 @@ def testCoreIndex_LoadSave(qtbot, monkeypatch, prjLipsum, mockGUI, tstPaths):
index = Index(project) index = Index(project)
assert repr(index) == "<Index project='Lorem Ipsum'>" assert repr(index) == "<Index project='Lorem Ipsum'>"
# Check Novel Model
model = index.getNovelModel("b3643d0f92e32")
assert isinstance(model, NovelModel)
assert model.columns == 3
index.setNovelModelExtraColumn(nwNovelExtra.POV)
index.refreshNovelModel("b3643d0f92e32")
model = index.getNovelModel("b3643d0f92e32")
assert isinstance(model, NovelModel)
assert model.columns == 4
# Re-index
notIndexable = { notIndexable = {
"b3643d0f92e32": False, # Novel ROOT "b3643d0f92e32": False, # Novel ROOT
"45e6b01ca35c1": False, # Chapter One FOLDER "45e6b01ca35c1": False, # Chapter One FOLDER
@@ -216,7 +229,7 @@ def testCoreIndex_ScanThis(mockGUI):
@pytest.mark.core @pytest.mark.core
def testCoreIndex_CheckThese(mockGUI, fncPath, mockRnd): def testCoreIndex_CheckThese(nwGUI, fncPath, mockRnd):
"""Test the tag checker function checkThese.""" """Test the tag checker function checkThese."""
project = NWProject() project = NWProject()
mockRnd.reset() mockRnd.reset()
@@ -338,7 +351,7 @@ def testCoreIndex_CheckThese(mockGUI, fncPath, mockRnd):
@pytest.mark.core @pytest.mark.core
def testCoreIndex_ScanText(monkeypatch, mockGUI, fncPath, mockRnd): def testCoreIndex_ScanText(monkeypatch, nwGUI, fncPath, mockRnd):
"""Check the index text scanner.""" """Check the index text scanner."""
project = NWProject() project = NWProject()
mockRnd.reset() mockRnd.reset()
@@ -586,7 +599,7 @@ def testCoreIndex_ScanText(monkeypatch, mockGUI, fncPath, mockRnd):
@pytest.mark.core @pytest.mark.core
def testCoreIndex_CommentKeys(monkeypatch, mockGUI, fncPath, mockRnd): def testCoreIndex_CommentKeys(monkeypatch, nwGUI, fncPath, mockRnd):
"""Check the index comment key generator.""" """Check the index comment key generator."""
project = NWProject() project = NWProject()
mockRnd.reset() mockRnd.reset()
@@ -623,7 +636,7 @@ def testCoreIndex_CommentKeys(monkeypatch, mockGUI, fncPath, mockRnd):
@pytest.mark.core @pytest.mark.core
def testCoreIndex_ExtractData(mockGUI, fncPath, mockRnd): def testCoreIndex_ExtractData(nwGUI, fncPath, mockRnd):
"""Check the index data extraction functions.""" """Check the index data extraction functions."""
project = NWProject() project = NWProject()
mockRnd.reset() mockRnd.reset()
@@ -755,7 +768,9 @@ def testCoreIndex_ExtractData(mockGUI, fncPath, mockRnd):
# getClassTags # getClassTags
# ============ # ============
assert index.getClassTags(None) == ["Jane", "John"]
assert index.getClassTags(nwItemClass.CHARACTER) == ["Jane", "John"] assert index.getClassTags(nwItemClass.CHARACTER) == ["Jane", "John"]
assert index.getClassTags(nwItemClass.PLOT) == []
# getTagsData # getTagsData
# =========== # ===========
@@ -1142,7 +1157,7 @@ def testCoreIndex_TagsIndex():
@pytest.mark.core @pytest.mark.core
def testCoreIndex_ItemIndex(mockGUI, fncPath, mockRnd): def testCoreIndex_ItemIndex(nwGUI, fncPath, mockRnd):
"""Check the ItemIndex class.""" """Check the ItemIndex class."""
project = NWProject() project = NWProject()
mockRnd.reset() mockRnd.reset()
+6 -6
View File
@@ -155,7 +155,7 @@ def testCoreProjectXML_ReadCurrent(monkeypatch, mockGUI, tstPaths, fncPath):
assert data.getLastHandle("editor") == "636b6aa9b697b" assert data.getLastHandle("editor") == "636b6aa9b697b"
assert data.getLastHandle("viewer") == "636b6aa9b697b" assert data.getLastHandle("viewer") == "636b6aa9b697b"
assert data.getLastHandle("novelTree") == "7031beac91f75" assert data.getLastHandle("novel") == "7031beac91f75"
assert data.getLastHandle("outline") == "7031beac91f75" assert data.getLastHandle("outline") == "7031beac91f75"
assert data.itemStatus["sf12341"].name == "New" assert data.itemStatus["sf12341"].name == "New"
@@ -284,7 +284,7 @@ def testCoreProjectXML_ReadLegacy10(tstPaths, fncPath, mockGUI, mockRnd):
assert data.getLastHandle("editor") is None # Dropped by conversion assert data.getLastHandle("editor") is None # Dropped by conversion
assert data.getLastHandle("viewer") is None # Dropped by conversion assert data.getLastHandle("viewer") is None # Dropped by conversion
assert data.getLastHandle("novelTree") is None # Doesn't exist in 1.0 assert data.getLastHandle("novel") is None # Doesn't exist in 1.0
assert data.getLastHandle("outline") is None # Doesn't exist in 1.0 assert data.getLastHandle("outline") is None # Doesn't exist in 1.0
assert data.itemStatus["s000000"].name == "New" assert data.itemStatus["s000000"].name == "New"
@@ -429,7 +429,7 @@ def testCoreProjectXML_ReadLegacy11(tstPaths, fncPath, mockGUI, mockRnd):
assert data.getLastHandle("editor") is None # Dropped by conversion assert data.getLastHandle("editor") is None # Dropped by conversion
assert data.getLastHandle("viewer") is None # Dropped by conversion assert data.getLastHandle("viewer") is None # Dropped by conversion
assert data.getLastHandle("novelTree") is None # Doesn't exist in 1.1 assert data.getLastHandle("novel") is None # Doesn't exist in 1.1
assert data.getLastHandle("outline") is None # Doesn't exist in 1.1 assert data.getLastHandle("outline") is None # Doesn't exist in 1.1
assert data.itemStatus["s000000"].name == "New" assert data.itemStatus["s000000"].name == "New"
@@ -574,7 +574,7 @@ def testCoreProjectXML_ReadLegacy12(tstPaths, fncPath, mockGUI, mockRnd):
assert data.getLastHandle("editor") is None # Dropped by conversion assert data.getLastHandle("editor") is None # Dropped by conversion
assert data.getLastHandle("viewer") is None # Dropped by conversion assert data.getLastHandle("viewer") is None # Dropped by conversion
assert data.getLastHandle("novelTree") is None # Doesn't exist in 1.2 assert data.getLastHandle("novel") is None # Doesn't exist in 1.2
assert data.getLastHandle("outline") is None # Doesn't exist in 1.2 assert data.getLastHandle("outline") is None # Doesn't exist in 1.2
assert data.itemStatus["s000000"].name == "New" assert data.itemStatus["s000000"].name == "New"
@@ -722,7 +722,7 @@ def testCoreProjectXML_ReadLegacy13(tstPaths, fncPath, mockGUI, mockRnd):
assert data.getLastHandle("editor") is None # Dropped by conversion assert data.getLastHandle("editor") is None # Dropped by conversion
assert data.getLastHandle("viewer") is None # Dropped by conversion assert data.getLastHandle("viewer") is None # Dropped by conversion
assert data.getLastHandle("novelTree") is None # Doesn't exist in 1.3 assert data.getLastHandle("novel") is None # Doesn't exist in 1.3
assert data.getLastHandle("outline") is None # Doesn't exist in 1.3 assert data.getLastHandle("outline") is None # Doesn't exist in 1.3
assert data.itemStatus["s000000"].name == "New" assert data.itemStatus["s000000"].name == "New"
@@ -870,7 +870,7 @@ def testCoreProjectXML_ReadLegacy14(tstPaths, fncPath, mockGUI, mockRnd):
assert data.getLastHandle("editor") is None # Dropped by conversion assert data.getLastHandle("editor") is None # Dropped by conversion
assert data.getLastHandle("viewer") is None # Dropped by conversion assert data.getLastHandle("viewer") is None # Dropped by conversion
assert data.getLastHandle("novelTree") is None # Doesn't exist in 1.3 assert data.getLastHandle("novel") is None # Doesn't exist in 1.3
assert data.getLastHandle("outline") is None # Doesn't exist in 1.3 assert data.getLastHandle("outline") is None # Doesn't exist in 1.3
assert data.itemStatus["sf12341"].name == "New" assert data.itemStatus["sf12341"].name == "New"
+3 -3
View File
@@ -151,12 +151,12 @@ def testGuiMain_ProjectTreeItems(qtbot, monkeypatch, nwGUI, projPath, mockRnd):
# Novel Tree has focus # Novel Tree has focus
nwGUI._changeView(nwView.NOVEL) nwGUI._changeView(nwView.NOVEL)
nwGUI.novelView.novelTree.refreshTree(rootHandle=None, overRide=True)
with monkeypatch.context() as mp: with monkeypatch.context() as mp:
mp.setattr(GuiNovelView, "treeHasFocus", lambda *a: True) mp.setattr(GuiNovelView, "treeHasFocus", lambda *a: True)
assert nwGUI.docEditor.docHandle is None assert nwGUI.docEditor.docHandle is None
selItem = nwGUI.novelView.novelTree.topLevelItem(2) model = nwGUI.novelView.novelTree._getModel()
nwGUI.novelView.novelTree.setCurrentItem(selItem) assert model is not None
nwGUI.novelView.novelTree.setCurrentIndex(model.createIndex(2, 0))
nwGUI._keyPressReturn() nwGUI._keyPressReturn()
assert nwGUI.docEditor.docHandle == sHandle assert nwGUI.docEditor.docHandle == sHandle
nwGUI.closeDocument() nwGUI.closeDocument()
+2 -1
View File
@@ -38,6 +38,7 @@ from tests.tools import C, buildTestProject
@pytest.mark.gui @pytest.mark.gui
@pytest.mark.skip
def testGuiNovelTree_TreeItems(qtbot, monkeypatch, nwGUI, projPath, mockRnd): def testGuiNovelTree_TreeItems(qtbot, monkeypatch, nwGUI, projPath, mockRnd):
"""Test navigating the novel tree.""" """Test navigating the novel tree."""
monkeypatch.setattr(GuiEditLabel, "getLabel", lambda *a, text: (text, True)) monkeypatch.setattr(GuiEditLabel, "getLabel", lambda *a, text: (text, True))
@@ -207,7 +208,7 @@ def testGuiNovelTree_TreeItems(qtbot, monkeypatch, nwGUI, projPath, mockRnd):
# Set Default Root # Set Default Root
# ================ # ================
SHARED.project.data.setLastHandle(C.hInvalid, "novelTree") SHARED.project.data.setLastHandle(C.hInvalid, "novel")
novelView.openProjectTasks() novelView.openProjectTasks()
assert novelBar.novelValue.handle == C.hNovelRoot assert novelBar.novelValue.handle == C.hNovelRoot
+1
View File
@@ -219,6 +219,7 @@ def buildTestProject(obj: object, projPath: Path) -> None:
if nwGUI is not None: if nwGUI is not None:
nwGUI.projView.openProjectTasks() nwGUI.projView.openProjectTasks()
nwGUI.novelView.openProjectTasks()
return return