Fix most tests with minor issues
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user