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