Fix existing tests
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
@@ -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 = ""
|
||||||
|
|||||||
@@ -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] = {
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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
@@ -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 />
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user