Fix most tests with minor issues

This commit is contained in:
Veronica Berglyd Olsen
2024-11-20 19:58:34 +01:00
parent 4897f6ad69
commit 26b4da9eb4
21 changed files with 109 additions and 192 deletions
+9 -15
View File
@@ -93,7 +93,7 @@ def testCoreDocBuild_OpenDocument(monkeypatch, mockGUI, prjLipsum, fncPath, tstP
assert docBuild._outline is True
assert len(docBuild) == 21
assert len(docBuild) == 22
# Check FODT Build
# ================
@@ -151,7 +151,7 @@ def testCoreDocBuild_OpenDocument(monkeypatch, mockGUI, prjLipsum, fncPath, tstP
with monkeypatch.context() as mp:
mp.setattr("novelwriter.formats.toodt.ToOdt.doConvert", causeException)
assert len(docBuild) == 21
assert len(docBuild) == 22
count = 0
error = []
@@ -196,7 +196,7 @@ def testCoreDocBuild_HTML(monkeypatch, mockGUI, prjLipsum, fncPath, tstPaths):
docBuild = NWBuildDocument(project, build)
docBuild.queueAll()
assert len(docBuild) == 21
assert len(docBuild) == 22
# Check HTML5 Build
# =================
@@ -264,7 +264,7 @@ def testCoreDocBuild_Markdown(monkeypatch, mockGUI, prjLipsum, fncPath, tstPaths
docBuild = NWBuildDocument(project, build)
docBuild.queueAll()
assert len(docBuild) == 21
assert len(docBuild) == 22
# Check Standard Markdown Build
# =============================
@@ -332,7 +332,7 @@ def testCoreDocBuild_DocX(mockGUI, prjLipsum, fncPath):
docBuild = NWBuildDocument(project, build)
docBuild.queueAll()
assert len(docBuild) == 21
assert len(docBuild) == 22
# Check Build
# ===========
@@ -365,7 +365,7 @@ def testCoreDocBuild_PDF(mockGUI, prjLipsum, fncPath):
docBuild = NWBuildDocument(project, build)
docBuild.queueAll()
assert len(docBuild) == 21
assert len(docBuild) == 22
# Check Build
# ===========
@@ -397,7 +397,7 @@ def testCoreDocBuild_NWD(mockGUI, prjLipsum, fncPath, tstPaths):
docBuild = NWBuildDocument(project, build)
docBuild.queueAll()
assert len(docBuild) == 21
assert len(docBuild) == 22
# Check NWD Build
# ===============
@@ -474,8 +474,8 @@ def testCoreDocBuild_Custom(mockGUI, fncPath: Path):
# Add an invalid item to the project
nHandle = "0123456789def"
project.tree._order.append(nHandle)
project.tree._tree[nHandle] = None # type: ignore
project.tree._items[nHandle] = None # type: ignore
project.tree._nodes[nHandle] = None # type: ignore
docBuild.queueAll()
assert len(docBuild) == 8
@@ -517,12 +517,6 @@ def testCoreDocBuild_IterBuild(mockGUI, fncPath: Path, mockRnd):
project.storage.getDocument(hPlotDoc).writeDocument("# Main Plot\n**Text**")
project.storage.getDocument(hCharDoc).writeDocument("# Jane Doe\n~~Text~~")
# Fix project order as this has never been opened in a GUI
project.tree.setOrder([ # type: ignore
C.hNovelRoot, C.hTitlePage, C.hChapterDir, C.hChapterDoc, C.hSceneDoc,
C.hPlotRoot, hPlotDoc, C.hCharRoot, hCharDoc, C.hWorldRoot
])
docBuild = NWBuildDocument(project, build)
docBuild.queueAll()
assert len(docBuild) == 10
+17 -8
View File
@@ -59,6 +59,7 @@ def testCoreIndex_LoadSave(qtbot, monkeypatch, prjLipsum, mockGUI, tstPaths):
"67a8707f2f249": False, # Character ROOT
"6c6afb1247750": False, # Plot ROOT
"60bdf227455cc": False, # World ROOT
"1ace7ab1a0fc6": False, # Trash ROOT
}
for tItem in project.tree:
index.reIndexHandle(tItem.itemHandle)
@@ -346,6 +347,7 @@ def testCoreIndex_ScanText(monkeypatch, mockGUI, fncPath, mockRnd):
# Some items for fail to scan tests
dHandle = project.newFolder("Folder", C.hNovelRoot)
xHandle = project.newFile("No Layout", C.hNovelRoot)
xIndex = project.tree.model.indexFromHandle(xHandle)
assert isinstance(dHandle, str)
assert isinstance(xHandle, str)
@@ -363,10 +365,13 @@ def testCoreIndex_ScanText(monkeypatch, mockGUI, fncPath, mockRnd):
assert index.scanText(xHandle, "Hello World!") is False
# Create the trash folder
tHandle = project.trashFolder()
tNode = project.tree.trash
assert tNode is not None
tIndex = project.tree.model.indexFromNode(tNode)
tHandle = tNode.item.itemHandle
assert project.tree[tHandle] is not None
xItem.setParent(tHandle)
project.tree.updateItemData(xItem.itemHandle)
project.tree.model.multiMove([xIndex], tIndex)
assert xItem.itemRoot == tHandle
assert xItem.itemClass == nwItemClass.TRASH
assert index.scanText(xHandle, "## Hello World!") is True
@@ -374,9 +379,10 @@ def testCoreIndex_ScanText(monkeypatch, mockGUI, fncPath, mockRnd):
# Create the archive root
aHandle = project.newRoot(nwItemClass.ARCHIVE)
aIndex = project.tree.model.indexFromHandle(aHandle)
assert project.tree[aHandle] is not None
xItem.setParent(aHandle)
project.tree.updateItemData(xItem.itemHandle)
project.tree.model.multiMove([xIndex], aIndex)
assert index.scanText(xHandle, "### Hello World!") is True
assert xItem.mainHeading == "H3"
@@ -901,7 +907,8 @@ def testCoreIndex_ExtractData(mockGUI, fncPath, mockRnd):
]
# Add a fake handle to the tree and check that it's ignored
project.tree._order.append("0000000000000")
project.tree._items["0000000000000"] = None # type: ignore
project.tree._nodes["0000000000000"] = None # type: ignore
assert [(h, t) for h, t, _ in index._itemIndex.iterNovelStructure(activeOnly=False)] == [
(C.hTitlePage, "T0001"),
(C.hChapterDoc, "T0001"),
@@ -912,7 +919,8 @@ def testCoreIndex_ExtractData(mockGUI, fncPath, mockRnd):
(sHandle, "T0001"),
(tHandle, "T0001"),
]
project.tree._order.remove("0000000000000")
del project.tree._items["0000000000000"]
del project.tree._nodes["0000000000000"]
# Extract stats
assert index.getNovelWordCount(activeOnly=False) == 43
@@ -1281,7 +1289,8 @@ def testCoreIndex_ItemIndex(mockGUI, fncPath, mockRnd):
assert nStruct[0][0] == uHandle
# Inject garbage into tree
project.tree._order.append("stuff")
project.tree._items["stuff"] = None # type: ignore
project.tree._nodes["stuff"] = None # type: ignore
nStruct = list(itemIndex.iterNovelStructure())
assert len(nStruct) == 4
assert nStruct[0][0] == nHandle
+1 -93
View File
@@ -29,12 +29,8 @@ from PyQt5.QtWidgets import QMessageBox
from novelwriter import CONFIG, SHARED
from novelwriter.constants import nwFiles
from novelwriter.core.index import NWIndex
from novelwriter.core.item import NWItem
from novelwriter.core.options import OptionState
from novelwriter.core.project import NWProject, NWProjectState
from novelwriter.core.projectxml import ProjectXMLReader, ProjectXMLWriter, XMLReadState
from novelwriter.core.tree import NWTree
from novelwriter.enum import nwItemClass
from tests.mocked import causeOSError
@@ -284,7 +280,7 @@ def testCoreProject_Open(monkeypatch, caplog, mockGUI, fncPath, mockRnd):
# Fail checking items should still pass
with monkeypatch.context() as mp:
mp.setattr("novelwriter.core.tree.NWTree.updateItemData", lambda *a: False)
mp.setattr("novelwriter.core.tree.NWTree.checkConsistency", lambda *a: (1, 0))
assert project.openProject(fncPath, clearLock=True) is True
# Trigger an index rebuild
@@ -326,70 +322,6 @@ def testCoreProject_Save(monkeypatch, mockGUI, mockRnd, fncPath):
project.closeProject()
@pytest.mark.core
def testCoreProject_AccessItems(mockGUI, fncPath, mockRnd):
"""Test helper functions for the project folder."""
project = NWProject()
buildTestProject(project, fncPath)
# Storage Objects
assert isinstance(project.index, NWIndex)
assert isinstance(project.tree, NWTree)
assert isinstance(project.options, OptionState)
# Move Novel ROOT to after its files
oldOrder = [
C.hNovelRoot,
C.hPlotRoot,
C.hCharRoot,
C.hWorldRoot,
C.hTitlePage,
C.hChapterDir,
C.hChapterDoc,
C.hSceneDoc,
]
newOrder = [
C.hTitlePage,
C.hChapterDoc,
C.hSceneDoc,
C.hChapterDir,
C.hNovelRoot,
C.hPlotRoot,
C.hCharRoot,
C.hWorldRoot,
]
assert project.tree.handles() == oldOrder
project.setTreeOrder(newOrder)
assert project.tree.handles() == newOrder
# Add a non-existing item
project.tree._order.append(C.hInvalid)
# Add an item with a non-existent parent
nHandle = project.newFile("Test File", C.hChapterDir)
nItem = project.tree[nHandle]
assert isinstance(nItem, NWItem)
nItem.setParent("cba9876543210")
assert nItem.itemParent == "cba9876543210"
retOrder = []
for tItem in project.iterProjectItems():
retOrder.append(tItem.itemHandle)
assert retOrder == [
C.hNovelRoot,
C.hPlotRoot,
C.hCharRoot,
C.hWorldRoot,
nHandle,
C.hTitlePage,
C.hChapterDir,
C.hChapterDoc,
C.hSceneDoc,
]
assert nItem.itemParent is None
@pytest.mark.core
def testCoreProject_Methods(monkeypatch, mockGUI, fncPath, mockRnd):
"""Test other project class methods and functions."""
@@ -411,13 +343,6 @@ def testCoreProject_Methods(monkeypatch, mockGUI, fncPath, mockRnd):
mp.setattr("novelwriter.core.project.time", lambda: 1600005600)
assert project.currentEditTime == 6834
# Trash folder
# Should create on first call, and just returned on later calls
hTrash = "0000000000010"
assert project.tree[hTrash] is None
assert project.trashFolder() == hTrash
assert project.trashFolder() == hTrash
# Spell check
project.setProjectChanged(False)
project.data.setSpellCheck(True)
@@ -480,23 +405,6 @@ def testCoreProject_Methods(monkeypatch, mockGUI, fncPath, mockRnd):
assert project.data.autoReplace == {"A": "B", "C": "D"}
assert project.projChanged
# Change project tree order
oldOrder = [
"0000000000008", "0000000000009", "000000000000a",
"000000000000b", "000000000000c", "000000000000d",
"000000000000e", "000000000000f", "0000000000010",
]
newOrder = [
"000000000000b", "000000000000c", "000000000000d",
"0000000000008", "0000000000009", "000000000000a",
"000000000000e", "000000000000f",
]
assert project.tree.handles() == oldOrder
project.setTreeOrder(newOrder)
assert project.tree.handles() == newOrder
project.setTreeOrder(oldOrder)
assert project.tree.handles() == oldOrder
@pytest.mark.core
def testCoreProject_Backup(monkeypatch, mockGUI, fncPath, tstPaths):