Fix test coverage of outline class

This commit is contained in:
Veronica Berglyd Olsen
2023-06-13 22:15:14 +02:00
parent 26e6845439
commit b2bfaad73d
2 changed files with 38 additions and 35 deletions
+3 -9
View File
@@ -601,15 +601,9 @@ class GuiOutlineTree(QTreeWidget):
if hItem not in tmpOrder:
tmpOrder.append(hItem)
# Check that we now have a complete list, and only if so, save
# the order loaded from file. Otherwise, we keep the default.
if len(tmpOrder) == self._treeNCols:
self._treeOrder = tmpOrder
self._colHidden.update(tmpHidden)
self._colWidth.update(tmpWidth)
else:
logger.error("Failed to extract outline column order from previous session")
logger.error("Column count doesn't match %d != %d", len(tmpOrder), self._treeNCols)
self._treeOrder = tmpOrder
self._colHidden.update(tmpHidden)
self._colWidth.update(tmpWidth)
self.hiddenStateChanged.emit()
+35 -26
View File
@@ -33,8 +33,7 @@ from novelwriter.enum import nwItemClass, nwOutline, nwView
@pytest.mark.gui
def testGuiOutline_Main(qtbot, monkeypatch, nwGUI, projPath):
"""Test the outline view.
"""
"""Test the outline view."""
# Create a project
buildTestProject(nwGUI, projPath)
@@ -83,52 +82,61 @@ def testGuiOutline_Main(qtbot, monkeypatch, nwGUI, projPath):
# Save header state not allowed
outlineTree._lastBuild = 0
outlineTree._saveHeaderState()
assert pOptions.getValue("GuiOutline", "headerOrder", []) == []
assert pOptions.getValue("GuiOutline", "columnState", {}) == {}
# Allow saving header state
outlineTree._lastBuild = time.time()
outlineTree._saveHeaderState()
assert pOptions.getValue("GuiOutline", "headerOrder", []) == colNames
assert list(pOptions.getValue("GuiOutline", "columnState", {}).keys()) == colNames
assert outlineTree._treeOrder == colItems
assert outlineTree._colWidth == colWidth
assert outlineTree._colHidden == colHidden
# Get default values
optItems = pOptions.getValue("GuiOutline", "headerOrder", [])
optWidth = pOptions.getValue("GuiOutline", "columnWidth", {})
optHidden = pOptions.getValue("GuiOutline", "columnHidden", {})
columnState = pOptions.getValue("GuiOutline", "columnState", {})
# Add invalid column name
pOptions.setValue("GuiOutline", "headerOrder", optItems + ["blabla"])
outlineTree._loadHeaderState()
assert outlineTree._treeOrder == colItems
assert outlineTree._colHidden == colHidden
# Add duplicate column name
pOptions.setValue("GuiOutline", "headerOrder", optItems + [optItems[-1]])
newState = columnState.copy()
newState.update({"blabla": (False, 42)})
pOptions.setValue("GuiOutline", "columnState", newState)
outlineTree._loadHeaderState()
assert outlineTree._treeOrder == colItems
assert outlineTree._colHidden == colHidden
# Invalid column width data
pOptions.setValue("GuiOutline", "headerOrder", optItems)
pOptions.setValue("GuiOutline", "columnWidth", {"blabla": None})
newState = columnState.copy()
newState.update({"TITLE": (False, None)})
pOptions.setValue("GuiOutline", "columnState", newState)
outlineTree._loadHeaderState()
assert outlineTree._treeOrder == colItems
assert outlineTree._colHidden == colHidden
# Invalid column width data
pOptions.setValue("GuiOutline", "headerOrder", optItems)
pOptions.setValue("GuiOutline", "columnWidth", optWidth)
pOptions.setValue("GuiOutline", "columnHidden", {"bloabla": None})
# Invalid column state data
newState = columnState.copy()
newState.update({"TITLE": None})
pOptions.setValue("GuiOutline", "columnState", newState)
outlineTree._loadHeaderState()
assert outlineTree._treeOrder == colItems
assert outlineTree._colHidden == colHidden
# Drop a few columns
newState = columnState.copy()
del newState[nwOutline.CHAR.name]
del newState[nwOutline.WORLD.name]
del newState[nwOutline.LINE.name]
pOptions.setValue("GuiOutline", "columnState", newState)
outlineTree._loadHeaderState()
assert len(outlineTree._treeOrder) == len(colItems)
assert len(outlineTree._colHidden) == len(colHidden)
assert nwOutline.CHAR in outlineTree._treeOrder
assert nwOutline.CHAR in outlineTree._colHidden
assert nwOutline.WORLD in outlineTree._treeOrder
assert nwOutline.WORLD in outlineTree._colHidden
assert nwOutline.LINE in outlineTree._treeOrder
assert nwOutline.LINE in outlineTree._colHidden
# Valid settings
pOptions.setValue("GuiOutline", "headerOrder", optItems)
pOptions.setValue("GuiOutline", "columnWidth", optWidth)
pOptions.setValue("GuiOutline", "columnHidden", optHidden)
pOptions.setValue("GuiOutline", "columnState", columnState)
outlineTree._loadHeaderState()
assert outlineTree._treeOrder == colItems
assert outlineTree._colHidden == colHidden
@@ -143,7 +151,9 @@ def testGuiOutline_Main(qtbot, monkeypatch, nwGUI, projPath):
# Now no columns should be hidden
outlineTree._saveHeaderState()
assert not any(pOptions.getValue("GuiOutline", "columnHidden", None).values())
hiddenStates = [v[0] for v in pOptions.getValue("GuiOutline", "columnState", {}).values()]
assert len(hiddenStates) == len(columnState)
assert not any(hiddenStates)
# qtbot.stop()
@@ -152,8 +162,7 @@ def testGuiOutline_Main(qtbot, monkeypatch, nwGUI, projPath):
@pytest.mark.gui
def testGuiOutline_Content(qtbot, nwGUI, prjLipsum):
"""Test the outline view.
"""
"""Test the outline view."""
assert nwGUI.openProject(prjLipsum)
nwGUI.rebuildIndex()