|
|
|
@@ -160,11 +160,11 @@ def testGuiProjTree_NewItems(qtbot, caplog, monkeypatch, nwGUI, fncDir, mockRnd)
|
|
|
|
|
# ============
|
|
|
|
|
|
|
|
|
|
# Also check error handling in reveal function
|
|
|
|
|
assert projView.revealNewTreeItem("abc") is False
|
|
|
|
|
assert projView.projTree.revealNewTreeItem("abc") is False
|
|
|
|
|
|
|
|
|
|
# Add an item that cannot be displayed in the tree
|
|
|
|
|
nHandle = theProject.newFile("Test", None)
|
|
|
|
|
assert projView.revealNewTreeItem(nHandle) is False
|
|
|
|
|
assert projView.projTree.revealNewTreeItem(nHandle) is False
|
|
|
|
|
|
|
|
|
|
# Clean up
|
|
|
|
|
# qtbot.stop()
|
|
|
|
@@ -184,10 +184,11 @@ def testGuiProjTree_MoveItems(qtbot, monkeypatch, nwGUI, fncDir, mockRnd):
|
|
|
|
|
monkeypatch.setattr(QMessageBox, "information", lambda *a: QMessageBox.Yes)
|
|
|
|
|
monkeypatch.setattr(GuiEditLabel, "getLabel", lambda *a, text: (text, True))
|
|
|
|
|
|
|
|
|
|
nwTree = nwGUI.projView
|
|
|
|
|
projView = nwGUI.projView
|
|
|
|
|
projTree = nwGUI.projView.projTree
|
|
|
|
|
|
|
|
|
|
# Try to move item with no project
|
|
|
|
|
assert nwTree.projTree.moveTreeItem(1) is False
|
|
|
|
|
assert projView.projTree.moveTreeItem(1) is False
|
|
|
|
|
|
|
|
|
|
# Create a project
|
|
|
|
|
prjDir = os.path.join(fncDir, "project")
|
|
|
|
@@ -197,68 +198,68 @@ def testGuiProjTree_MoveItems(qtbot, monkeypatch, nwGUI, fncDir, mockRnd):
|
|
|
|
|
# ==============
|
|
|
|
|
|
|
|
|
|
# Add some files
|
|
|
|
|
nwTree.setSelectedHandle(C.hChapterDir)
|
|
|
|
|
assert nwTree.projTree.newTreeItem(nwItemType.FILE) is True
|
|
|
|
|
assert nwTree.projTree.newTreeItem(nwItemType.FILE) is True
|
|
|
|
|
assert nwTree.projTree.newTreeItem(nwItemType.FILE) is True
|
|
|
|
|
assert nwTree.getTreeFromHandle(C.hChapterDir) == [
|
|
|
|
|
projView.setSelectedHandle(C.hChapterDir)
|
|
|
|
|
assert projTree.newTreeItem(nwItemType.FILE) is True
|
|
|
|
|
assert projTree.newTreeItem(nwItemType.FILE) is True
|
|
|
|
|
assert projTree.newTreeItem(nwItemType.FILE) is True
|
|
|
|
|
assert projTree.getTreeFromHandle(C.hChapterDir) == [
|
|
|
|
|
C.hChapterDir, C.hChapterDoc, C.hSceneDoc,
|
|
|
|
|
"0000000000010", "0000000000011", "0000000000012",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
# Move with no selections
|
|
|
|
|
nwTree.projTree.clearSelection()
|
|
|
|
|
assert nwTree.projTree.moveTreeItem(1) is False
|
|
|
|
|
projTree.clearSelection()
|
|
|
|
|
assert projTree.moveTreeItem(1) is False
|
|
|
|
|
|
|
|
|
|
# Move second item up twice (should give same result)
|
|
|
|
|
nwTree.setSelectedHandle(C.hSceneDoc)
|
|
|
|
|
assert nwTree.projTree.moveTreeItem(-1) is True
|
|
|
|
|
assert nwTree.getTreeFromHandle(C.hChapterDir) == [
|
|
|
|
|
projView.setSelectedHandle(C.hSceneDoc)
|
|
|
|
|
assert projTree.moveTreeItem(-1) is True
|
|
|
|
|
assert projTree.getTreeFromHandle(C.hChapterDir) == [
|
|
|
|
|
C.hChapterDir, C.hSceneDoc, C.hChapterDoc,
|
|
|
|
|
"0000000000010", "0000000000011", "0000000000012",
|
|
|
|
|
]
|
|
|
|
|
assert nwTree.projTree.moveTreeItem(-1) is False
|
|
|
|
|
assert nwTree.getTreeFromHandle(C.hChapterDir) == [
|
|
|
|
|
assert projTree.moveTreeItem(-1) is False
|
|
|
|
|
assert projTree.getTreeFromHandle(C.hChapterDir) == [
|
|
|
|
|
C.hChapterDir, C.hSceneDoc, C.hChapterDoc,
|
|
|
|
|
"0000000000010", "0000000000011", "0000000000012",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
# Restore
|
|
|
|
|
assert nwTree.projTree.moveTreeItem(1) is True
|
|
|
|
|
assert nwTree.getTreeFromHandle(C.hChapterDir) == [
|
|
|
|
|
assert projTree.moveTreeItem(1) is True
|
|
|
|
|
assert projTree.getTreeFromHandle(C.hChapterDir) == [
|
|
|
|
|
C.hChapterDir, C.hChapterDoc, C.hSceneDoc,
|
|
|
|
|
"0000000000010", "0000000000011", "0000000000012",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
# Move fifth item down twice (should give same result)
|
|
|
|
|
nwTree.setSelectedHandle("0000000000011")
|
|
|
|
|
assert nwTree.projTree.moveTreeItem(1) is True
|
|
|
|
|
assert nwTree.getTreeFromHandle(C.hChapterDir) == [
|
|
|
|
|
projView.setSelectedHandle("0000000000011")
|
|
|
|
|
assert projTree.moveTreeItem(1) is True
|
|
|
|
|
assert projTree.getTreeFromHandle(C.hChapterDir) == [
|
|
|
|
|
C.hChapterDir, C.hChapterDoc, C.hSceneDoc,
|
|
|
|
|
"0000000000010", "0000000000012", "0000000000011",
|
|
|
|
|
]
|
|
|
|
|
assert nwTree.projTree.moveTreeItem(1) is False
|
|
|
|
|
assert nwTree.getTreeFromHandle(C.hChapterDir) == [
|
|
|
|
|
assert projTree.moveTreeItem(1) is False
|
|
|
|
|
assert projTree.getTreeFromHandle(C.hChapterDir) == [
|
|
|
|
|
C.hChapterDir, C.hChapterDoc, C.hSceneDoc,
|
|
|
|
|
"0000000000010", "0000000000012", "0000000000011",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
# Restore
|
|
|
|
|
assert nwTree.projTree.moveTreeItem(-1) is True
|
|
|
|
|
assert nwTree.getTreeFromHandle(C.hChapterDir) == [
|
|
|
|
|
assert projTree.moveTreeItem(-1) is True
|
|
|
|
|
assert projTree.getTreeFromHandle(C.hChapterDir) == [
|
|
|
|
|
C.hChapterDir, C.hChapterDoc, C.hSceneDoc,
|
|
|
|
|
"0000000000010", "0000000000011", "0000000000012",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
# Move down again, and restore via undo
|
|
|
|
|
nwTree.setSelectedHandle("0000000000011")
|
|
|
|
|
assert nwTree.projTree.moveTreeItem(1) is True
|
|
|
|
|
assert nwTree.getTreeFromHandle(C.hChapterDir) == [
|
|
|
|
|
projView.setSelectedHandle("0000000000011")
|
|
|
|
|
assert projTree.moveTreeItem(1) is True
|
|
|
|
|
assert projTree.getTreeFromHandle(C.hChapterDir) == [
|
|
|
|
|
C.hChapterDir, C.hChapterDoc, C.hSceneDoc,
|
|
|
|
|
"0000000000010", "0000000000012", "0000000000011",
|
|
|
|
|
]
|
|
|
|
|
assert nwTree.projTree.undoLastMove() is True
|
|
|
|
|
assert nwTree.getTreeFromHandle(C.hChapterDir) == [
|
|
|
|
|
assert projTree.undoLastMove() is True
|
|
|
|
|
assert projTree.getTreeFromHandle(C.hChapterDir) == [
|
|
|
|
|
C.hChapterDir, C.hChapterDoc, C.hSceneDoc,
|
|
|
|
|
"0000000000010", "0000000000011", "0000000000012",
|
|
|
|
|
]
|
|
|
|
@@ -266,19 +267,19 @@ def testGuiProjTree_MoveItems(qtbot, monkeypatch, nwGUI, fncDir, mockRnd):
|
|
|
|
|
# Root Folder
|
|
|
|
|
# ===========
|
|
|
|
|
|
|
|
|
|
nwTree.setSelectedHandle(C.hNovelRoot)
|
|
|
|
|
projView.setSelectedHandle(C.hNovelRoot)
|
|
|
|
|
assert nwGUI.theProject.tree._treeOrder.index(C.hNovelRoot) == 0
|
|
|
|
|
|
|
|
|
|
# Move novel folder up
|
|
|
|
|
assert nwTree.projTree.moveTreeItem(-1) is False
|
|
|
|
|
assert projTree.moveTreeItem(-1) is False
|
|
|
|
|
assert nwGUI.theProject.tree._treeOrder.index(C.hNovelRoot) == 0
|
|
|
|
|
|
|
|
|
|
# Move novel folder down
|
|
|
|
|
assert nwTree.projTree.moveTreeItem(1) is True
|
|
|
|
|
assert projTree.moveTreeItem(1) is True
|
|
|
|
|
assert nwGUI.theProject.tree._treeOrder.index(C.hNovelRoot) == 1
|
|
|
|
|
|
|
|
|
|
# Move novel folder up again
|
|
|
|
|
assert nwTree.projTree.moveTreeItem(-1) is True
|
|
|
|
|
assert projTree.moveTreeItem(-1) is True
|
|
|
|
|
assert nwGUI.theProject.tree._treeOrder.index(C.hNovelRoot) == 0
|
|
|
|
|
|
|
|
|
|
# Clean up
|
|
|
|
@@ -299,76 +300,77 @@ def testGuiProjTree_RequestDeleteItem(qtbot, caplog, monkeypatch, nwGUI, fncDir,
|
|
|
|
|
monkeypatch.setattr(QMessageBox, "information", lambda *a: QMessageBox.Yes)
|
|
|
|
|
monkeypatch.setattr(GuiEditLabel, "getLabel", lambda *a, text: (text, True))
|
|
|
|
|
|
|
|
|
|
nwView = nwGUI.projView
|
|
|
|
|
projView = nwGUI.projView
|
|
|
|
|
projTree = nwGUI.projView.projTree
|
|
|
|
|
|
|
|
|
|
# Try to run with no project
|
|
|
|
|
assert nwView.requestDeleteItem() is False
|
|
|
|
|
assert projView.requestDeleteItem() is False
|
|
|
|
|
|
|
|
|
|
# Create a project
|
|
|
|
|
prjDir = os.path.join(fncDir, "project")
|
|
|
|
|
buildTestProject(nwGUI, prjDir)
|
|
|
|
|
|
|
|
|
|
# Try emptying the trash already now, when there is no trash folder
|
|
|
|
|
assert nwView.emptyTrash() is False
|
|
|
|
|
assert projView.emptyTrash() is False
|
|
|
|
|
|
|
|
|
|
# Add some files
|
|
|
|
|
nwView.setSelectedHandle(C.hChapterDir)
|
|
|
|
|
assert nwView.projTree.newTreeItem(nwItemType.FILE) is True
|
|
|
|
|
assert nwView.projTree.newTreeItem(nwItemType.FILE) is True
|
|
|
|
|
assert nwView.projTree.newTreeItem(nwItemType.FILE) is True
|
|
|
|
|
assert nwView.getTreeFromHandle(C.hChapterDir) == [
|
|
|
|
|
projView.setSelectedHandle(C.hChapterDir)
|
|
|
|
|
assert projTree.newTreeItem(nwItemType.FILE) is True
|
|
|
|
|
assert projTree.newTreeItem(nwItemType.FILE) is True
|
|
|
|
|
assert projTree.newTreeItem(nwItemType.FILE) is True
|
|
|
|
|
assert projTree.getTreeFromHandle(C.hChapterDir) == [
|
|
|
|
|
C.hChapterDir, C.hChapterDoc, C.hSceneDoc,
|
|
|
|
|
"0000000000010", "0000000000011", "0000000000012",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
# Delete item without focus -> blocked
|
|
|
|
|
monkeypatch.setattr(GuiProjectTree, "hasFocus", lambda *a: False)
|
|
|
|
|
nwView.setSelectedHandle("0000000000012")
|
|
|
|
|
assert nwView.requestDeleteItem() is False
|
|
|
|
|
projView.setSelectedHandle("0000000000012")
|
|
|
|
|
assert projView.requestDeleteItem() is False
|
|
|
|
|
monkeypatch.setattr(GuiProjectTree, "hasFocus", lambda *a: True)
|
|
|
|
|
|
|
|
|
|
# No selection made
|
|
|
|
|
nwView.projTree.clearSelection()
|
|
|
|
|
projTree.clearSelection()
|
|
|
|
|
caplog.clear()
|
|
|
|
|
assert nwView.requestDeleteItem() is False
|
|
|
|
|
assert projView.requestDeleteItem() is False
|
|
|
|
|
assert "no item to delete" in caplog.text
|
|
|
|
|
|
|
|
|
|
# Not a valid handle
|
|
|
|
|
nwView.projTree.clearSelection()
|
|
|
|
|
projTree.clearSelection()
|
|
|
|
|
caplog.clear()
|
|
|
|
|
assert nwView.requestDeleteItem("0000000000000") is False
|
|
|
|
|
assert projView.requestDeleteItem("0000000000000") is False
|
|
|
|
|
assert "No tree item with handle '0000000000000'" in caplog.text
|
|
|
|
|
|
|
|
|
|
# Delete Root Folders
|
|
|
|
|
# ===================
|
|
|
|
|
|
|
|
|
|
assert nwView.requestDeleteItem(C.hNovelRoot) is False # Novel Root is blocked
|
|
|
|
|
assert nwView.requestDeleteItem(C.hCharRoot) is True # Character Root
|
|
|
|
|
assert projView.requestDeleteItem(C.hNovelRoot) is False # Novel Root is blocked
|
|
|
|
|
assert projView.requestDeleteItem(C.hCharRoot) is True # Character Root
|
|
|
|
|
|
|
|
|
|
# Delete File
|
|
|
|
|
# ===========
|
|
|
|
|
|
|
|
|
|
# Block adding trash folder
|
|
|
|
|
funcPointer = nwView.projTree._addTrashRoot
|
|
|
|
|
nwView.projTree._addTrashRoot = lambda *a: None
|
|
|
|
|
assert nwView.requestDeleteItem("0000000000012") is False
|
|
|
|
|
nwView.projTree._addTrashRoot = funcPointer
|
|
|
|
|
funcPointer = projTree._addTrashRoot
|
|
|
|
|
projTree._addTrashRoot = lambda *a: None
|
|
|
|
|
assert projView.requestDeleteItem("0000000000012") is False
|
|
|
|
|
projTree._addTrashRoot = funcPointer
|
|
|
|
|
|
|
|
|
|
# Delete last two documents, which also adds the trash folder
|
|
|
|
|
assert nwView.requestDeleteItem("0000000000012") is True
|
|
|
|
|
assert nwView.requestDeleteItem("0000000000011") is True
|
|
|
|
|
assert nwView.getTreeFromHandle(C.hChapterDir) == [
|
|
|
|
|
assert projView.requestDeleteItem("0000000000012") is True
|
|
|
|
|
assert projView.requestDeleteItem("0000000000011") is True
|
|
|
|
|
assert projTree.getTreeFromHandle(C.hChapterDir) == [
|
|
|
|
|
C.hChapterDir, C.hChapterDoc, C.hSceneDoc,
|
|
|
|
|
"0000000000010"
|
|
|
|
|
]
|
|
|
|
|
trashHandle = nwGUI.theProject.tree.trashRoot()
|
|
|
|
|
assert nwView.getTreeFromHandle(trashHandle) == [
|
|
|
|
|
assert projTree.getTreeFromHandle(trashHandle) == [
|
|
|
|
|
trashHandle, "0000000000012", "0000000000011"
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
# Try to delete the trash folder
|
|
|
|
|
caplog.clear()
|
|
|
|
|
assert nwView.requestDeleteItem("0000000000013") is False
|
|
|
|
|
assert projView.requestDeleteItem("0000000000013") is False
|
|
|
|
|
assert "Cannot delete the Trash folder" in caplog.text
|
|
|
|
|
|
|
|
|
|
nwGUI.closeProject()
|
|
|
|
|