From 747a1a212c00413e919a602f7bacb10827f38684 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Mon, 10 Oct 2022 15:48:45 +0200 Subject: [PATCH] Make some minor improvements to code and tests --- novelwriter/dialogs/docmerge.py | 4 +- novelwriter/gui/outline.py | 2 +- novelwriter/gui/projtree.py | 2 +- tests/test_dialogs/test_dlg_docmerge.py | 33 ++-- tests/test_gui/test_gui_guimain.py | 38 ++--- tests/test_gui/test_gui_mainmenu.py | 8 +- tests/test_gui/test_gui_noveltree.py | 18 +-- tests/test_gui/test_gui_projtree.py | 206 +++++++++++------------- tests/test_gui/test_gui_statusbar.py | 4 +- tests/test_tools/test_tools_lipsum.py | 4 +- tests/tools.py | 16 ++ 11 files changed, 162 insertions(+), 173 deletions(-) diff --git a/novelwriter/dialogs/docmerge.py b/novelwriter/dialogs/docmerge.py index 89149ab8..7113fc0f 100644 --- a/novelwriter/dialogs/docmerge.py +++ b/novelwriter/dialogs/docmerge.py @@ -29,8 +29,8 @@ import novelwriter from PyQt5.QtCore import Qt, QSize from PyQt5.QtWidgets import ( - QDialog, QVBoxLayout, QLabel, QListWidget, QAbstractItemView, - QListWidgetItem, QDialogButtonBox, QGridLayout + QAbstractItemView, QDialog, QDialogButtonBox, QGridLayout, QLabel, + QListWidget, QListWidgetItem, QVBoxLayout, ) from novelwriter.gui.custom import QHelpLabel, QSwitch diff --git a/novelwriter/gui/outline.py b/novelwriter/gui/outline.py index e8514c15..b5e67b2e 100644 --- a/novelwriter/gui/outline.py +++ b/novelwriter/gui/outline.py @@ -1048,7 +1048,7 @@ class GuiOutlineDetails(QScrollArea): self.titleLabel.setText("%s" % self.tr("Title")) self.titleValue.setText(novIdx.title) - itemStatus, _ = nwItem.getImportStatus() + itemStatus, _ = nwItem.getImportStatus(incIcon=False) self.fileValue.setText(nwItem.itemName) self.itemValue.setText(itemStatus) diff --git a/novelwriter/gui/projtree.py b/novelwriter/gui/projtree.py index ac257b93..15a2417c 100644 --- a/novelwriter/gui/projtree.py +++ b/novelwriter/gui/projtree.py @@ -34,7 +34,7 @@ from time import time from PyQt5.QtGui import QPalette from PyQt5.QtCore import Qt, QSize, pyqtSignal, pyqtSlot from PyQt5.QtWidgets import ( - QAbstractItemView, QFrame, QHBoxLayout, QHeaderView, QLabel, QDialog, + QAbstractItemView, QDialog, QFrame, QHBoxLayout, QHeaderView, QLabel, QMenu, QShortcut, QSizePolicy, QToolButton, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget ) diff --git a/tests/test_dialogs/test_dlg_docmerge.py b/tests/test_dialogs/test_dlg_docmerge.py index 3291e23f..70acf961 100644 --- a/tests/test_dialogs/test_dlg_docmerge.py +++ b/tests/test_dialogs/test_dlg_docmerge.py @@ -21,7 +21,7 @@ along with this program. If not, see . import pytest -from tools import buildTestProject +from tools import buildTestProject, C from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QMessageBox @@ -40,20 +40,15 @@ def testDlgMerge_Main(qtbot, monkeypatch, nwGUI, fncProj, mockRnd): # Create a new project buildTestProject(nwGUI, fncProj) - hInvalid = "0000000000000" - hChapterDir = "000000000000d" - hChapterDoc = "000000000000e" - hSceneDoc = "000000000000f" - # Check that the dialog kan handle invalid items - nwMerge = GuiDocMerge(nwGUI, hInvalid, [hInvalid]) + nwMerge = GuiDocMerge(nwGUI, C.hInvalid, [C.hInvalid]) qtbot.addWidget(nwMerge) nwMerge.show() assert nwMerge.listBox.count() == 0 nwMerge.reject() # Load items from chapter dir - nwMerge = GuiDocMerge(nwGUI, hChapterDir, [hChapterDir, hChapterDoc, hSceneDoc]) + nwMerge = GuiDocMerge(nwGUI, C.hChapterDir, [C.hChapterDir, C.hChapterDoc, C.hSceneDoc]) qtbot.addWidget(nwMerge) nwMerge.show() @@ -62,36 +57,36 @@ def testDlgMerge_Main(qtbot, monkeypatch, nwGUI, fncProj, mockRnd): itemOne = nwMerge.listBox.item(0) itemTwo = nwMerge.listBox.item(1) - assert itemOne.data(Qt.UserRole) == hChapterDoc - assert itemTwo.data(Qt.UserRole) == hSceneDoc + assert itemOne.data(Qt.UserRole) == C.hChapterDoc + assert itemTwo.data(Qt.UserRole) == C.hSceneDoc assert itemOne.checkState() == Qt.Checked assert itemTwo.checkState() == Qt.Checked data = nwMerge.getData() - assert data["sHandle"] == hChapterDir - assert data["origItems"] == [hChapterDir, hChapterDoc, hSceneDoc] + assert data["sHandle"] == C.hChapterDir + assert data["origItems"] == [C.hChapterDir, C.hChapterDoc, C.hSceneDoc] assert data["moveToTrash"] is False - assert data["finalItems"] == [hChapterDoc, hSceneDoc] + assert data["finalItems"] == [C.hChapterDoc, C.hSceneDoc] # Uncheck second item and toggle trash switch itemTwo.setCheckState(Qt.Unchecked) nwMerge.trashSwitch.setChecked(True) data = nwMerge.getData() - assert data["sHandle"] == hChapterDir - assert data["origItems"] == [hChapterDir, hChapterDoc, hSceneDoc] + assert data["sHandle"] == C.hChapterDir + assert data["origItems"] == [C.hChapterDir, C.hChapterDoc, C.hSceneDoc] assert data["moveToTrash"] is True - assert data["finalItems"] == [hChapterDoc] + assert data["finalItems"] == [C.hChapterDoc] # Restore default values nwMerge._resetList() data = nwMerge.getData() - assert data["sHandle"] == hChapterDir - assert data["origItems"] == [hChapterDir, hChapterDoc, hSceneDoc] + assert data["sHandle"] == C.hChapterDir + assert data["origItems"] == [C.hChapterDir, C.hChapterDoc, C.hSceneDoc] assert data["moveToTrash"] is True - assert data["finalItems"] == [hChapterDoc, hSceneDoc] + assert data["finalItems"] == [C.hChapterDoc, C.hSceneDoc] # qtbot.stop() diff --git a/tests/test_gui/test_gui_guimain.py b/tests/test_gui/test_gui_guimain.py index 5c75c406..76651260 100644 --- a/tests/test_gui/test_gui_guimain.py +++ b/tests/test_gui/test_gui_guimain.py @@ -23,7 +23,7 @@ import os import pytest from shutil import copyfile -from tools import cmpFiles, buildTestProject, XML_IGNORE, writeFile +from tools import C, cmpFiles, buildTestProject, XML_IGNORE, writeFile from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QMessageBox, QInputDialog @@ -216,14 +216,14 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, fncProj, refDir, outDir, mock assert nwGUI.theProject.spellCheck is False # Check that tree items have been created - assert nwGUI.projView.projTree._getTreeItem("0000000000008") is not None - assert nwGUI.projView.projTree._getTreeItem("0000000000009") is not None - assert nwGUI.projView.projTree._getTreeItem("000000000000a") is not None - assert nwGUI.projView.projTree._getTreeItem("000000000000b") is not None - assert nwGUI.projView.projTree._getTreeItem("000000000000c") is not None - assert nwGUI.projView.projTree._getTreeItem("000000000000d") is not None - assert nwGUI.projView.projTree._getTreeItem("000000000000e") is not None - assert nwGUI.projView.projTree._getTreeItem("000000000000f") is not None + assert nwGUI.projView.projTree._getTreeItem(C.hNovelRoot) is not None + assert nwGUI.projView.projTree._getTreeItem(C.hPlotRoot) is not None + assert nwGUI.projView.projTree._getTreeItem(C.hCharRoot) is not None + assert nwGUI.projView.projTree._getTreeItem(C.hWorldRoot) is not None + assert nwGUI.projView.projTree._getTreeItem(C.hTitlePage) is not None + assert nwGUI.projView.projTree._getTreeItem(C.hChapterDir) is not None + assert nwGUI.projView.projTree._getTreeItem(C.hChapterDoc) is not None + assert nwGUI.projView.projTree._getTreeItem(C.hSceneDoc) is not None nwGUI.mainMenu.aSpellCheck.setChecked(True) assert nwGUI.mainMenu._toggleSpellCheck() @@ -237,7 +237,7 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, fncProj, refDir, outDir, mock # Add a Character File nwGUI.switchFocus(nwWidget.TREE) nwGUI.projView.projTree.clearSelection() - nwGUI.projView.projTree._getTreeItem("000000000000a").setSelected(True) + nwGUI.projView.projTree._getTreeItem(C.hCharRoot).setSelected(True) nwGUI.projView.projTree.newTreeItem(nwItemType.FILE, None, isNote=True) assert nwGUI.openSelectedItem() @@ -259,7 +259,7 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, fncProj, refDir, outDir, mock # Add a Plot File nwGUI.switchFocus(nwWidget.TREE) nwGUI.projView.projTree.clearSelection() - nwGUI.projView.projTree._getTreeItem("0000000000009").setSelected(True) + nwGUI.projView.projTree._getTreeItem(C.hPlotRoot).setSelected(True) nwGUI.projView.projTree.newTreeItem(nwItemType.FILE, None, isNote=True) assert nwGUI.openSelectedItem() @@ -281,7 +281,7 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, fncProj, refDir, outDir, mock # Add a World File nwGUI.switchFocus(nwWidget.TREE) nwGUI.projView.projTree.clearSelection() - nwGUI.projView.projTree._getTreeItem("000000000000b").setSelected(True) + nwGUI.projView.projTree._getTreeItem(C.hWorldRoot).setSelected(True) nwGUI.projView.projTree.newTreeItem(nwItemType.FILE, None, isNote=True) assert nwGUI.openSelectedItem() @@ -312,9 +312,9 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, fncProj, refDir, outDir, mock # Select the 'New Scene' file nwGUI.switchFocus(nwWidget.TREE) nwGUI.projView.projTree.clearSelection() - nwGUI.projView.projTree._getTreeItem("0000000000008").setExpanded(True) - nwGUI.projView.projTree._getTreeItem("000000000000d").setExpanded(True) - nwGUI.projView.projTree._getTreeItem("000000000000f").setSelected(True) + nwGUI.projView.projTree._getTreeItem(C.hNovelRoot).setExpanded(True) + nwGUI.projView.projTree._getTreeItem(C.hChapterDir).setExpanded(True) + nwGUI.projView.projTree._getTreeItem(C.hSceneDoc).setSelected(True) assert nwGUI.openSelectedItem() # Type something into the document @@ -492,8 +492,8 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, fncProj, refDir, outDir, mock # Open and view the edited document nwGUI.switchFocus(nwWidget.VIEWER) - assert nwGUI.openDocument("000000000000f") - assert nwGUI.viewDocument("000000000000f") + assert nwGUI.openDocument(C.hSceneDoc) + assert nwGUI.viewDocument(C.hSceneDoc) qtbot.wait(stepDelay) assert nwGUI.saveProject() assert nwGUI.closeDocViewer() @@ -561,8 +561,8 @@ def testGuiMain_FocusFullMode(qtbot, monkeypatch, nwGUI, fncProj, mockRnd): assert nwGUI.toggleFocusMode() is False # Open a file in editor and viewer - assert nwGUI.openDocument("000000000000f") - assert nwGUI.viewDocument("000000000000f") + assert nwGUI.openDocument(C.hSceneDoc) + assert nwGUI.viewDocument(C.hSceneDoc) # Enable focus mode assert nwGUI.toggleFocusMode() is True diff --git a/tests/test_gui/test_gui_mainmenu.py b/tests/test_gui/test_gui_mainmenu.py index f579a1a0..0097b65b 100644 --- a/tests/test_gui/test_gui_mainmenu.py +++ b/tests/test_gui/test_gui_mainmenu.py @@ -26,7 +26,7 @@ from PyQt5.QtCore import Qt from PyQt5.QtGui import QTextCursor, QTextBlock from PyQt5.QtWidgets import QAction, QFileDialog, QMessageBox -from tools import writeFile, buildTestProject +from tools import C, writeFile, buildTestProject from novelwriter.gui.doceditor import GuiDocEditor from novelwriter.enum import nwDocAction, nwDocInsert @@ -467,8 +467,8 @@ def testGuiMenu_Insert(qtbot, monkeypatch, nwGUI, fncDir, fncProj, mockRnd): buildTestProject(nwGUI, fncProj) - assert nwGUI.projView.projTree._getTreeItem("000000000000f") is not None - assert nwGUI.openDocument("000000000000f") is True + assert nwGUI.projView.projTree._getTreeItem(C.hSceneDoc) is not None + assert nwGUI.openDocument(C.hSceneDoc) is True nwGUI.docEditor.clear() # Test Faulty Inserts @@ -677,7 +677,7 @@ def testGuiMenu_Insert(qtbot, monkeypatch, nwGUI, fncDir, fncProj, mockRnd): assert not nwGUI.importDocument() # Open the document from before, and add some text to it - nwGUI.openDocument("000000000000f") + nwGUI.openDocument(C.hSceneDoc) nwGUI.docEditor.setText("Bar") assert nwGUI.docEditor.getText() == "Bar" diff --git a/tests/test_gui/test_gui_noveltree.py b/tests/test_gui/test_gui_noveltree.py index f8f18875..fcbacdb2 100644 --- a/tests/test_gui/test_gui_noveltree.py +++ b/tests/test_gui/test_gui_noveltree.py @@ -22,7 +22,7 @@ along with this program. If not, see . import os import pytest -from tools import buildTestProject, writeFile +from tools import C, buildTestProject, writeFile from PyQt5.QtGui import QFocusEvent from PyQt5.QtCore import Qt, QEvent @@ -46,7 +46,7 @@ def testGuiNovelTree_TreeItems(qtbot, monkeypatch, nwGUI, fncProj, mockRnd): nwGUI.switchFocus(nwWidget.TREE) nwGUI.projView.projTree.clearSelection() - nwGUI.projView.projTree._getTreeItem("000000000000a").setSelected(True) + nwGUI.projView.projTree._getTreeItem(C.hCharRoot).setSelected(True) nwGUI.projView.projTree.newTreeItem(nwItemType.FILE) writeFile( @@ -94,7 +94,7 @@ def testGuiNovelTree_TreeItems(qtbot, monkeypatch, nwGUI, fncProj, mockRnd): assert not topItem.isSelected() topItem.setSelected(True) assert novelTree.selectedItems()[0] == topItem - assert novelView.getSelectedHandle() == ("000000000000c", 0) + assert novelView.getSelectedHandle() == (C.hTitlePage, 0) # Refresh using the slot for the butoom novelBar._refreshNovelTree() @@ -119,7 +119,7 @@ def testGuiNovelTree_TreeItems(qtbot, monkeypatch, nwGUI, fncProj, mockRnd): assert scItem.isSelected() assert nwGUI.docEditor.docHandle() is None novelTree._treeDoubleClick(scItem, 0) - assert nwGUI.docEditor.docHandle() == "000000000000f" + assert nwGUI.docEditor.docHandle() == C.hSceneDoc # Open item with middle mouse button scItem.setSelected(True) @@ -136,7 +136,7 @@ def testGuiNovelTree_TreeItems(qtbot, monkeypatch, nwGUI, fncProj, mockRnd): scItem.setData(novelTree.C_TITLE, novelTree.D_HANDLE, oldData) qtbot.mouseClick(vPort, Qt.MiddleButton, pos=scRect.center(), delay=10) - assert nwGUI.docViewer.docHandle() == "000000000000f" + assert nwGUI.docViewer.docHandle() == C.hSceneDoc # Last Column # =========== @@ -144,26 +144,26 @@ def testGuiNovelTree_TreeItems(qtbot, monkeypatch, nwGUI, fncProj, mockRnd): novelBar.setLastColType(NovelTreeColumn.HIDDEN) assert novelTree.isColumnHidden(novelTree.C_EXTRA) is True assert novelTree.lastColType == NovelTreeColumn.HIDDEN - assert novelTree._getLastColumnText("000000000000f", "T000001") == ("", "") + assert novelTree._getLastColumnText(C.hSceneDoc, "T000001") == ("", "") novelBar.setLastColType(NovelTreeColumn.POV) assert novelTree.isColumnHidden(novelTree.C_EXTRA) is False assert novelTree.lastColType == NovelTreeColumn.POV - assert novelTree._getLastColumnText("000000000000f", "T000001") == ( + assert novelTree._getLastColumnText(C.hSceneDoc, "T000001") == ( "Jane", "Point of View: Jane" ) novelBar.setLastColType(NovelTreeColumn.FOCUS) assert novelTree.isColumnHidden(novelTree.C_EXTRA) is False assert novelTree.lastColType == NovelTreeColumn.FOCUS - assert novelTree._getLastColumnText("000000000000f", "T000001") == ( + assert novelTree._getLastColumnText(C.hSceneDoc, "T000001") == ( "Jane", "Focus: Jane" ) novelBar.setLastColType(NovelTreeColumn.PLOT) assert novelTree.isColumnHidden(novelTree.C_EXTRA) is False assert novelTree.lastColType == NovelTreeColumn.PLOT - assert novelTree._getLastColumnText("000000000000f", "T000001") == ( + assert novelTree._getLastColumnText(C.hSceneDoc, "T000001") == ( "", "Plot: " ) diff --git a/tests/test_gui/test_gui_projtree.py b/tests/test_gui/test_gui_projtree.py index e46418b9..f4bfa1c8 100644 --- a/tests/test_gui/test_gui_projtree.py +++ b/tests/test_gui/test_gui_projtree.py @@ -22,7 +22,7 @@ along with this program. If not, see . import os import pytest -from tools import buildTestProject +from tools import C, buildTestProject from PyQt5.QtWidgets import QMessageBox, QMenu @@ -78,24 +78,24 @@ def testGuiProjTree_NewItems(qtbot, caplog, monkeypatch, nwGUI, fncDir, mockRnd) assert "Did not find anywhere" in caplog.text # Create new folder as child of Novel folder - projView.setSelectedHandle("0000000000008") + projView.setSelectedHandle(C.hNovelRoot) assert projView.projTree.newTreeItem(nwItemType.FOLDER) is True - assert theProject.tree["0000000000011"].itemParent == "0000000000008" - assert theProject.tree["0000000000011"].itemRoot == "0000000000008" + assert theProject.tree["0000000000011"].itemParent == C.hNovelRoot + assert theProject.tree["0000000000011"].itemRoot == C.hNovelRoot assert theProject.tree["0000000000011"].itemClass == nwItemClass.NOVEL # Add a new file in the new folder projView.setSelectedHandle("0000000000011") assert projView.projTree.newTreeItem(nwItemType.FILE) is True assert theProject.tree["0000000000012"].itemParent == "0000000000011" - assert theProject.tree["0000000000012"].itemRoot == "0000000000008" + assert theProject.tree["0000000000012"].itemRoot == C.hNovelRoot assert theProject.tree["0000000000012"].itemClass == nwItemClass.NOVEL # Add a new chapter next to the other new file projView.setSelectedHandle("0000000000012") assert projView.projTree.newTreeItem(nwItemType.FILE, hLevel=2) is True assert theProject.tree["0000000000013"].itemParent == "0000000000011" - assert theProject.tree["0000000000013"].itemRoot == "0000000000008" + assert theProject.tree["0000000000013"].itemRoot == C.hNovelRoot assert theProject.tree["0000000000013"].itemClass == nwItemClass.NOVEL assert nwGUI.openDocument("0000000000013") assert nwGUI.docEditor.getText() == "## New Chapter\n\n" @@ -104,16 +104,16 @@ def testGuiProjTree_NewItems(qtbot, caplog, monkeypatch, nwGUI, fncDir, mockRnd) projView.setSelectedHandle("0000000000012") assert projView.projTree.newTreeItem(nwItemType.FILE, hLevel=3) is True assert theProject.tree["0000000000014"].itemParent == "0000000000011" - assert theProject.tree["0000000000014"].itemRoot == "0000000000008" + assert theProject.tree["0000000000014"].itemRoot == C.hNovelRoot assert theProject.tree["0000000000014"].itemClass == nwItemClass.NOVEL assert nwGUI.openDocument("0000000000014") assert nwGUI.docEditor.getText() == "### New Scene\n\n" # Add a new file to the characters folder - projView.setSelectedHandle("000000000000a") + projView.setSelectedHandle(C.hCharRoot) assert projView.projTree.newTreeItem(nwItemType.FILE, hLevel=1, isNote=True) is True - assert theProject.tree["0000000000015"].itemParent == "000000000000a" - assert theProject.tree["0000000000015"].itemRoot == "000000000000a" + assert theProject.tree["0000000000015"].itemParent == C.hCharRoot + assert theProject.tree["0000000000015"].itemRoot == C.hCharRoot assert theProject.tree["0000000000015"].itemClass == nwItemClass.CHARACTER assert nwGUI.openDocument("0000000000015") assert nwGUI.docEditor.getText() == "# New Note\n\n" @@ -145,8 +145,8 @@ def testGuiProjTree_NewItems(qtbot, caplog, monkeypatch, nwGUI, fncDir, mockRnd) # Rename plot folder with monkeypatch.context() as mp: mp.setattr(GuiEditLabel, "getLabel", lambda *a, **k: ("Stuff", True)) - projTree.renameTreeItem("0000000000009") is True - assert theProject.tree["0000000000009"].itemName == "Stuff" + projTree.renameTreeItem(C.hPlotRoot) is True + assert theProject.tree[C.hPlotRoot].itemName == "Stuff" # Rename invalid folder projTree.renameTreeItem("0000000000000") is False @@ -192,12 +192,12 @@ def testGuiProjTree_MoveItems(qtbot, monkeypatch, nwGUI, fncDir, mockRnd): # ============== # Add some files - nwTree.setSelectedHandle("000000000000d") + 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("000000000000d") == [ - "000000000000d", "000000000000e", "000000000000f", + assert nwTree.getTreeFromHandle(C.hChapterDir) == [ + C.hChapterDir, C.hChapterDoc, C.hSceneDoc, "0000000000010", "0000000000011", "0000000000012", ] @@ -206,75 +206,75 @@ def testGuiProjTree_MoveItems(qtbot, monkeypatch, nwGUI, fncDir, mockRnd): assert nwTree.projTree.moveTreeItem(1) is False # Move second item up twice (should give same result) - nwTree.setSelectedHandle("000000000000f") + nwTree.setSelectedHandle(C.hSceneDoc) assert nwTree.projTree.moveTreeItem(-1) is True - assert nwTree.getTreeFromHandle("000000000000d") == [ - "000000000000d", "000000000000f", "000000000000e", + assert nwTree.getTreeFromHandle(C.hChapterDir) == [ + C.hChapterDir, C.hSceneDoc, C.hChapterDoc, "0000000000010", "0000000000011", "0000000000012", ] assert nwTree.projTree.moveTreeItem(-1) is False - assert nwTree.getTreeFromHandle("000000000000d") == [ - "000000000000d", "000000000000f", "000000000000e", + assert nwTree.getTreeFromHandle(C.hChapterDir) == [ + C.hChapterDir, C.hSceneDoc, C.hChapterDoc, "0000000000010", "0000000000011", "0000000000012", ] # Restore assert nwTree.projTree.moveTreeItem(1) is True - assert nwTree.getTreeFromHandle("000000000000d") == [ - "000000000000d", "000000000000e", "000000000000f", + assert nwTree.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("000000000000d") == [ - "000000000000d", "000000000000e", "000000000000f", + assert nwTree.getTreeFromHandle(C.hChapterDir) == [ + C.hChapterDir, C.hChapterDoc, C.hSceneDoc, "0000000000010", "0000000000012", "0000000000011", ] assert nwTree.projTree.moveTreeItem(1) is False - assert nwTree.getTreeFromHandle("000000000000d") == [ - "000000000000d", "000000000000e", "000000000000f", + assert nwTree.getTreeFromHandle(C.hChapterDir) == [ + C.hChapterDir, C.hChapterDoc, C.hSceneDoc, "0000000000010", "0000000000012", "0000000000011", ] # Restore assert nwTree.projTree.moveTreeItem(-1) is True - assert nwTree.getTreeFromHandle("000000000000d") == [ - "000000000000d", "000000000000e", "000000000000f", + assert nwTree.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("000000000000d") == [ - "000000000000d", "000000000000e", "000000000000f", + assert nwTree.getTreeFromHandle(C.hChapterDir) == [ + C.hChapterDir, C.hChapterDoc, C.hSceneDoc, "0000000000010", "0000000000012", "0000000000011", ] assert nwTree.projTree.undoLastMove() is True - assert nwTree.getTreeFromHandle("000000000000d") == [ - "000000000000d", "000000000000e", "000000000000f", + assert nwTree.getTreeFromHandle(C.hChapterDir) == [ + C.hChapterDir, C.hChapterDoc, C.hSceneDoc, "0000000000010", "0000000000011", "0000000000012", ] # Root Folder # =========== - nwTree.setSelectedHandle("0000000000008") - assert nwGUI.theProject.tree._treeOrder.index("0000000000008") == 0 + nwTree.setSelectedHandle(C.hNovelRoot) + assert nwGUI.theProject.tree._treeOrder.index(C.hNovelRoot) == 0 # Move novel folder up assert nwTree.projTree.moveTreeItem(-1) is False - assert nwGUI.theProject.tree._treeOrder.index("0000000000008") == 0 + assert nwGUI.theProject.tree._treeOrder.index(C.hNovelRoot) == 0 # Move novel folder down assert nwTree.projTree.moveTreeItem(1) is True - assert nwGUI.theProject.tree._treeOrder.index("0000000000008") == 1 + assert nwGUI.theProject.tree._treeOrder.index(C.hNovelRoot) == 1 # Move novel folder up again assert nwTree.projTree.moveTreeItem(-1) is True - assert nwGUI.theProject.tree._treeOrder.index("0000000000008") == 0 + assert nwGUI.theProject.tree._treeOrder.index(C.hNovelRoot) == 0 # Clean up # qtbot.stopForInteraction() @@ -307,12 +307,12 @@ def testGuiProjTree_RequestDeleteItem(qtbot, caplog, monkeypatch, nwGUI, fncDir, assert nwView.emptyTrash() is False # Add some files - nwView.setSelectedHandle("000000000000d") + 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("000000000000d") == [ - "000000000000d", "000000000000e", "000000000000f", + assert nwView.getTreeFromHandle(C.hChapterDir) == [ + C.hChapterDir, C.hChapterDoc, C.hSceneDoc, "0000000000010", "0000000000011", "0000000000012", ] @@ -337,8 +337,8 @@ def testGuiProjTree_RequestDeleteItem(qtbot, caplog, monkeypatch, nwGUI, fncDir, # Delete Root Folders # =================== - assert nwView.requestDeleteItem("0000000000008") is False # Novel Root is blocked - assert nwView.requestDeleteItem("000000000000a") is True # Character Root + assert nwView.requestDeleteItem(C.hNovelRoot) is False # Novel Root is blocked + assert nwView.requestDeleteItem(C.hCharRoot) is True # Character Root # Delete File # =========== @@ -352,8 +352,8 @@ def testGuiProjTree_RequestDeleteItem(qtbot, caplog, monkeypatch, nwGUI, fncDir, # 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("000000000000d") == [ - "000000000000d", "000000000000e", "000000000000f", + assert nwView.getTreeFromHandle(C.hChapterDir) == [ + C.hChapterDir, C.hChapterDoc, C.hSceneDoc, "0000000000010" ] trashHandle = nwGUI.theProject.tree.trashRoot() @@ -389,18 +389,14 @@ def testGuiProjTree_MoveItemToTrash(qtbot, caplog, monkeypatch, nwGUI, fncDir, m prjDir = os.path.join(fncDir, "project") buildTestProject(nwGUI, prjDir) - hInvalid = "0000000000000" - hNovelRoot = "0000000000008" - hTitlePage = "000000000000c" - # Invalid item caplog.clear() - assert projTree.moveItemToTrash(hInvalid) is False + assert projTree.moveItemToTrash(C.hInvalid) is False assert "Could not find tree item for deletion" in caplog.text # Root folders cannot be moved to Trash caplog.clear() - assert projTree.moveItemToTrash(hNovelRoot) is False + assert projTree.moveItemToTrash(C.hNovelRoot) is False assert "Root folders cannot be moved to Trash" in caplog.text # Block adding trash folder @@ -408,8 +404,8 @@ def testGuiProjTree_MoveItemToTrash(qtbot, caplog, monkeypatch, nwGUI, fncDir, m projTree._addTrashRoot = lambda *a: None caplog.clear() - assert projTree.moveItemToTrash(hTitlePage) is False - assert theProject.tree.isTrash(hTitlePage) is False + assert projTree.moveItemToTrash(C.hTitlePage) is False + assert theProject.tree.isTrash(C.hTitlePage) is False assert "Could not delete item" in caplog.text projTree._addTrashRoot = funcPointer @@ -417,16 +413,16 @@ def testGuiProjTree_MoveItemToTrash(qtbot, caplog, monkeypatch, nwGUI, fncDir, m # User cancels action with monkeypatch.context() as mp: mp.setattr(QMessageBox, "question", lambda *a: QMessageBox.No) - assert projTree.moveItemToTrash(hTitlePage) is False - assert theProject.tree.isTrash(hTitlePage) is False + assert projTree.moveItemToTrash(C.hTitlePage) is False + assert theProject.tree.isTrash(C.hTitlePage) is False # Move a document to Trash - assert projTree.moveItemToTrash(hTitlePage) is True - assert theProject.tree.isTrash(hTitlePage) is True + assert projTree.moveItemToTrash(C.hTitlePage) is True + assert theProject.tree.isTrash(C.hTitlePage) is True # Cannot be moved again caplog.clear() - assert projTree.moveItemToTrash(hTitlePage) is False + assert projTree.moveItemToTrash(C.hTitlePage) is False assert "Item is already in the Trash folder" in caplog.text nwGUI.closeProject() @@ -452,48 +448,40 @@ def testGuiProjTree_PermanentlyDeleteItem(qtbot, caplog, monkeypatch, nwGUI, fnc prjDir = os.path.join(fncDir, "project") buildTestProject(nwGUI, prjDir) - hInvalid = "0000000000000" - hNovelRoot = "0000000000008" - hPlotRoot = "0000000000009" - hTitlePage = "000000000000c" - hChapterDir = "000000000000d" - hChapterDoc = "000000000000e" - hSceneDoc = "000000000000f" - # Invalid item caplog.clear() - assert projTree.permanentlyDeleteItem(hInvalid) is False + assert projTree.permanentlyDeleteItem(C.hInvalid) is False assert "Could not find tree item for deletion" in caplog.text # Not deleting root item in use caplog.clear() - assert projTree.permanentlyDeleteItem(hNovelRoot) is False + assert projTree.permanentlyDeleteItem(C.hNovelRoot) is False assert "Root folders can only be deleted when they are empty" in caplog.text - assert hNovelRoot in theProject.tree + assert C.hNovelRoot in theProject.tree # Deleting unused root item is allowed caplog.clear() - assert projTree.permanentlyDeleteItem(hPlotRoot) is True - assert hPlotRoot not in theProject.tree + assert projTree.permanentlyDeleteItem(C.hPlotRoot) is True + assert C.hPlotRoot not in theProject.tree # User cancels action with monkeypatch.context() as mp: mp.setattr(QMessageBox, "question", lambda *a: QMessageBox.No) - assert projTree.permanentlyDeleteItem(hTitlePage) is False - assert hTitlePage in theProject.tree + assert projTree.permanentlyDeleteItem(C.hTitlePage) is False + assert C.hTitlePage in theProject.tree # Deleting file is OK, and if it is open, it should close - assert nwGUI.openDocument(hTitlePage) is True - assert nwGUI.docEditor.docHandle() == hTitlePage - assert projTree.permanentlyDeleteItem(hTitlePage) is True - assert hTitlePage not in theProject.tree + assert nwGUI.openDocument(C.hTitlePage) is True + assert nwGUI.docEditor.docHandle() == C.hTitlePage + assert projTree.permanentlyDeleteItem(C.hTitlePage) is True + assert C.hTitlePage not in theProject.tree assert nwGUI.docEditor.docHandle() is None # Deleting folder + files recursiely is ok - assert projTree.permanentlyDeleteItem(hChapterDir) is True - assert hChapterDir not in theProject.tree - assert hChapterDoc not in theProject.tree - assert hSceneDoc not in theProject.tree + assert projTree.permanentlyDeleteItem(C.hChapterDir) is True + assert C.hChapterDir not in theProject.tree + assert C.hChapterDoc not in theProject.tree + assert C.hSceneDoc not in theProject.tree nwGUI.closeProject() @@ -523,38 +511,33 @@ def testGuiProjTree_EmptyTrash(qtbot, caplog, monkeypatch, nwGUI, fncDir, mockRn prjDir = os.path.join(fncDir, "project") buildTestProject(nwGUI, prjDir) - hTitlePage = "000000000000c" - hChapterDir = "000000000000d" - hChapterDoc = "000000000000e" - hSceneDoc = "000000000000f" - # No Trash folder assert projTree.emptyTrash() is False # Move some documents to Trash - assert projTree.moveItemToTrash(hTitlePage) is True - assert projTree.moveItemToTrash(hChapterDir) is True + assert projTree.moveItemToTrash(C.hTitlePage) is True + assert projTree.moveItemToTrash(C.hChapterDir) is True - assert theProject.tree.isTrash(hTitlePage) is True - assert theProject.tree.isTrash(hChapterDir) is True - assert theProject.tree.isTrash(hChapterDoc) is True - assert theProject.tree.isTrash(hSceneDoc) is True + assert theProject.tree.isTrash(C.hTitlePage) is True + assert theProject.tree.isTrash(C.hChapterDir) is True + assert theProject.tree.isTrash(C.hChapterDoc) is True + assert theProject.tree.isTrash(C.hSceneDoc) is True # User cancels with monkeypatch.context() as mp: mp.setattr(QMessageBox, "question", lambda *a: QMessageBox.No) assert projTree.emptyTrash() is False - assert hTitlePage in theProject.tree - assert hChapterDir in theProject.tree - assert hChapterDoc in theProject.tree - assert hSceneDoc in theProject.tree + assert C.hTitlePage in theProject.tree + assert C.hChapterDir in theProject.tree + assert C.hChapterDoc in theProject.tree + assert C.hSceneDoc in theProject.tree # Run again to empty all items assert projTree.emptyTrash() is True - assert hTitlePage not in theProject.tree - assert hChapterDir not in theProject.tree - assert hChapterDoc not in theProject.tree - assert hSceneDoc not in theProject.tree + assert C.hTitlePage not in theProject.tree + assert C.hChapterDir not in theProject.tree + assert C.hChapterDoc not in theProject.tree + assert C.hSceneDoc not in theProject.tree # Running Emtpy Trash again is cancelled due to empty folder assert projTree.emptyTrash() is False @@ -584,13 +567,8 @@ def testGuiProjTree_ContextMenu(qtbot, monkeypatch, nwGUI, fncDir, mockRnd): buildTestProject(nwGUI, prjDir) # Handles for new objects - hNovelRoot = "0000000000008" - hTitlePage = "000000000000c" - hChapterDir = "000000000000d" - hChapterFile = "000000000000e" - hCharRoot = "000000000000a" - hCharNote = "0000000000011" - hNovelNote = "0000000000012" + hCharNote = "0000000000011" + hNovelNote = "0000000000012" projTree = nwGUI.projView.projTree projTree.setExpandedFromHandle(None, True) @@ -598,9 +576,9 @@ def testGuiProjTree_ContextMenu(qtbot, monkeypatch, nwGUI, fncDir, mockRnd): projTree._addTrashRoot() hTrashRoot = projTree.theProject.tree.trashRoot() - projTree.setSelectedHandle(hCharRoot) + projTree.setSelectedHandle(C.hCharRoot) projTree.newTreeItem(nwItemType.FILE) - projTree.setSelectedHandle(hNovelRoot) + projTree.setSelectedHandle(C.hNovelRoot) projTree.newTreeItem(nwItemType.FILE, isNote=True) def itemPos(tHandle): @@ -611,16 +589,16 @@ def testGuiProjTree_ContextMenu(qtbot, monkeypatch, nwGUI, fncDir, mockRnd): # Generate the possible menu combinarions assert projTree._openContextMenu(itemPos(hTrashRoot)) is True - assert projTree._openContextMenu(itemPos(hNovelRoot)) is True + assert projTree._openContextMenu(itemPos(C.hNovelRoot)) is True assert projTree._openContextMenu(itemPos(hNovelNote)) is True - assert projTree._openContextMenu(itemPos(hTitlePage)) is True - assert projTree._openContextMenu(itemPos(hChapterDir)) is True - assert projTree._openContextMenu(itemPos(hChapterFile)) is True - assert projTree._openContextMenu(itemPos(hCharRoot)) is True + assert projTree._openContextMenu(itemPos(C.hTitlePage)) is True + assert projTree._openContextMenu(itemPos(C.hChapterDir)) is True + assert projTree._openContextMenu(itemPos(C.hChapterDoc)) is True + assert projTree._openContextMenu(itemPos(C.hCharRoot)) is True assert projTree._openContextMenu(itemPos(hCharNote)) is True # Check the keyboard shortcut handler as well - projTree.setSelectedHandle(hNovelRoot) + projTree.setSelectedHandle(C.hNovelRoot) assert projTree.openContextOnSelected() is True projTree.clearSelection() assert projTree.openContextOnSelected() is False diff --git a/tests/test_gui/test_gui_statusbar.py b/tests/test_gui/test_gui_statusbar.py index 0c6b1e81..18f969f6 100644 --- a/tests/test_gui/test_gui_statusbar.py +++ b/tests/test_gui/test_gui_statusbar.py @@ -22,7 +22,7 @@ along with this program. If not, see . import time import pytest -from tools import buildTestProject +from tools import C, buildTestProject from PyQt5.QtWidgets import QMessageBox @@ -37,7 +37,7 @@ def testGuiStatusBar_Main(qtbot, monkeypatch, nwGUI, fncProj, mockRnd): monkeypatch.setattr(QMessageBox, "question", lambda *a: QMessageBox.Yes) buildTestProject(nwGUI, fncProj) - cHandle = nwGUI.theProject.newFile("A Note", "000000000000a") + cHandle = nwGUI.theProject.newFile("A Note", C.hCharRoot) newDoc = NWDoc(nwGUI.theProject, cHandle) newDoc.writeDocument("# A Note\n\n") nwGUI.projView.revealNewTreeItem(cHandle) diff --git a/tests/test_tools/test_tools_lipsum.py b/tests/test_tools/test_tools_lipsum.py index 629deb56..de70a428 100644 --- a/tests/test_tools/test_tools_lipsum.py +++ b/tests/test_tools/test_tools_lipsum.py @@ -21,7 +21,7 @@ along with this program. If not, see . import pytest -from tools import getGuiItem, buildTestProject +from tools import C, getGuiItem, buildTestProject from PyQt5.QtWidgets import QAction, QMessageBox @@ -41,7 +41,7 @@ def testToolLipsum_Main(qtbot, monkeypatch, nwGUI, fncProj, mockRnd): # Create a new project buildTestProject(nwGUI, fncProj) - assert nwGUI.openDocument("000000000000f") is True + assert nwGUI.openDocument(C.hSceneDoc) is True assert len(nwGUI.docEditor.getText()) == 15 # Open the tool diff --git a/tests/tools.py b/tests/tools.py index fcdd3817..5c126707 100644 --- a/tests/tools.py +++ b/tests/tools.py @@ -28,6 +28,22 @@ from PyQt5.QtWidgets import qApp XML_IGNORE = ("