Fix test coverage of outline class
This commit is contained in:
@@ -601,15 +601,9 @@ class GuiOutlineTree(QTreeWidget):
|
|||||||
if hItem not in tmpOrder:
|
if hItem not in tmpOrder:
|
||||||
tmpOrder.append(hItem)
|
tmpOrder.append(hItem)
|
||||||
|
|
||||||
# Check that we now have a complete list, and only if so, save
|
self._treeOrder = tmpOrder
|
||||||
# the order loaded from file. Otherwise, we keep the default.
|
self._colHidden.update(tmpHidden)
|
||||||
if len(tmpOrder) == self._treeNCols:
|
self._colWidth.update(tmpWidth)
|
||||||
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.hiddenStateChanged.emit()
|
self.hiddenStateChanged.emit()
|
||||||
|
|
||||||
|
|||||||
@@ -33,8 +33,7 @@ from novelwriter.enum import nwItemClass, nwOutline, nwView
|
|||||||
|
|
||||||
@pytest.mark.gui
|
@pytest.mark.gui
|
||||||
def testGuiOutline_Main(qtbot, monkeypatch, nwGUI, projPath):
|
def testGuiOutline_Main(qtbot, monkeypatch, nwGUI, projPath):
|
||||||
"""Test the outline view.
|
"""Test the outline view."""
|
||||||
"""
|
|
||||||
# Create a project
|
# Create a project
|
||||||
buildTestProject(nwGUI, projPath)
|
buildTestProject(nwGUI, projPath)
|
||||||
|
|
||||||
@@ -83,52 +82,61 @@ def testGuiOutline_Main(qtbot, monkeypatch, nwGUI, projPath):
|
|||||||
# Save header state not allowed
|
# Save header state not allowed
|
||||||
outlineTree._lastBuild = 0
|
outlineTree._lastBuild = 0
|
||||||
outlineTree._saveHeaderState()
|
outlineTree._saveHeaderState()
|
||||||
assert pOptions.getValue("GuiOutline", "headerOrder", []) == []
|
assert pOptions.getValue("GuiOutline", "columnState", {}) == {}
|
||||||
|
|
||||||
# Allow saving header state
|
# Allow saving header state
|
||||||
outlineTree._lastBuild = time.time()
|
outlineTree._lastBuild = time.time()
|
||||||
outlineTree._saveHeaderState()
|
outlineTree._saveHeaderState()
|
||||||
assert pOptions.getValue("GuiOutline", "headerOrder", []) == colNames
|
assert list(pOptions.getValue("GuiOutline", "columnState", {}).keys()) == colNames
|
||||||
assert outlineTree._treeOrder == colItems
|
assert outlineTree._treeOrder == colItems
|
||||||
assert outlineTree._colWidth == colWidth
|
assert outlineTree._colWidth == colWidth
|
||||||
assert outlineTree._colHidden == colHidden
|
assert outlineTree._colHidden == colHidden
|
||||||
|
|
||||||
# Get default values
|
# Get default values
|
||||||
optItems = pOptions.getValue("GuiOutline", "headerOrder", [])
|
columnState = pOptions.getValue("GuiOutline", "columnState", {})
|
||||||
optWidth = pOptions.getValue("GuiOutline", "columnWidth", {})
|
|
||||||
optHidden = pOptions.getValue("GuiOutline", "columnHidden", {})
|
|
||||||
|
|
||||||
# Add invalid column name
|
# Add invalid column name
|
||||||
pOptions.setValue("GuiOutline", "headerOrder", optItems + ["blabla"])
|
newState = columnState.copy()
|
||||||
outlineTree._loadHeaderState()
|
newState.update({"blabla": (False, 42)})
|
||||||
assert outlineTree._treeOrder == colItems
|
pOptions.setValue("GuiOutline", "columnState", newState)
|
||||||
assert outlineTree._colHidden == colHidden
|
|
||||||
|
|
||||||
# Add duplicate column name
|
|
||||||
pOptions.setValue("GuiOutline", "headerOrder", optItems + [optItems[-1]])
|
|
||||||
outlineTree._loadHeaderState()
|
outlineTree._loadHeaderState()
|
||||||
assert outlineTree._treeOrder == colItems
|
assert outlineTree._treeOrder == colItems
|
||||||
assert outlineTree._colHidden == colHidden
|
assert outlineTree._colHidden == colHidden
|
||||||
|
|
||||||
# Invalid column width data
|
# Invalid column width data
|
||||||
pOptions.setValue("GuiOutline", "headerOrder", optItems)
|
newState = columnState.copy()
|
||||||
pOptions.setValue("GuiOutline", "columnWidth", {"blabla": None})
|
newState.update({"TITLE": (False, None)})
|
||||||
|
pOptions.setValue("GuiOutline", "columnState", newState)
|
||||||
outlineTree._loadHeaderState()
|
outlineTree._loadHeaderState()
|
||||||
assert outlineTree._treeOrder == colItems
|
assert outlineTree._treeOrder == colItems
|
||||||
assert outlineTree._colHidden == colHidden
|
assert outlineTree._colHidden == colHidden
|
||||||
|
|
||||||
# Invalid column width data
|
# Invalid column state data
|
||||||
pOptions.setValue("GuiOutline", "headerOrder", optItems)
|
newState = columnState.copy()
|
||||||
pOptions.setValue("GuiOutline", "columnWidth", optWidth)
|
newState.update({"TITLE": None})
|
||||||
pOptions.setValue("GuiOutline", "columnHidden", {"bloabla": None})
|
pOptions.setValue("GuiOutline", "columnState", newState)
|
||||||
outlineTree._loadHeaderState()
|
outlineTree._loadHeaderState()
|
||||||
assert outlineTree._treeOrder == colItems
|
assert outlineTree._treeOrder == colItems
|
||||||
assert outlineTree._colHidden == colHidden
|
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
|
# Valid settings
|
||||||
pOptions.setValue("GuiOutline", "headerOrder", optItems)
|
pOptions.setValue("GuiOutline", "columnState", columnState)
|
||||||
pOptions.setValue("GuiOutline", "columnWidth", optWidth)
|
|
||||||
pOptions.setValue("GuiOutline", "columnHidden", optHidden)
|
|
||||||
outlineTree._loadHeaderState()
|
outlineTree._loadHeaderState()
|
||||||
assert outlineTree._treeOrder == colItems
|
assert outlineTree._treeOrder == colItems
|
||||||
assert outlineTree._colHidden == colHidden
|
assert outlineTree._colHidden == colHidden
|
||||||
@@ -143,7 +151,9 @@ def testGuiOutline_Main(qtbot, monkeypatch, nwGUI, projPath):
|
|||||||
|
|
||||||
# Now no columns should be hidden
|
# Now no columns should be hidden
|
||||||
outlineTree._saveHeaderState()
|
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()
|
# qtbot.stop()
|
||||||
|
|
||||||
@@ -152,8 +162,7 @@ def testGuiOutline_Main(qtbot, monkeypatch, nwGUI, projPath):
|
|||||||
|
|
||||||
@pytest.mark.gui
|
@pytest.mark.gui
|
||||||
def testGuiOutline_Content(qtbot, nwGUI, prjLipsum):
|
def testGuiOutline_Content(qtbot, nwGUI, prjLipsum):
|
||||||
"""Test the outline view.
|
"""Test the outline view."""
|
||||||
"""
|
|
||||||
assert nwGUI.openProject(prjLipsum)
|
assert nwGUI.openProject(prjLipsum)
|
||||||
|
|
||||||
nwGUI.rebuildIndex()
|
nwGUI.rebuildIndex()
|
||||||
|
|||||||
Reference in New Issue
Block a user