Update project settings tests

This commit is contained in:
Veronica Berglyd Olsen
2024-01-26 22:32:20 +01:00
parent a7a2eaff55
commit 40a8d728bb
2 changed files with 143 additions and 158 deletions
+8 -8
View File
@@ -90,6 +90,8 @@ class GuiProjectSettings(QDialog):
self.buttonBox.rejected.connect(self.close) self.buttonBox.rejected.connect(self.close)
# Content # Content
SHARED.project.countStatus()
self.settingsPage = _SettingsPage(self) self.settingsPage = _SettingsPage(self)
self.statusPage = _StatusPage(self, True) self.statusPage = _StatusPage(self, True)
self.importPage = _StatusPage(self, False) self.importPage = _StatusPage(self, False)
@@ -307,12 +309,12 @@ class _StatusPage(NFixedPage):
super().__init__(parent=parent) super().__init__(parent=parent)
if isStatus: if isStatus:
self.theStatus = SHARED.project.data.itemStatus status = SHARED.project.data.itemStatus
pageLabel = self.tr("Novel File Status Levels") pageLabel = self.tr("Novel Document Status Levels")
colSetting = "statusColW" colSetting = "statusColW"
else: else:
self.theStatus = SHARED.project.data.itemImport status = SHARED.project.data.itemImport
pageLabel = self.tr("Note File Importance Levels") pageLabel = self.tr("Project Note Importance Levels")
colSetting = "importColW" colSetting = "importColW"
wCol0 = CONFIG.pxInt( wCol0 = CONFIG.pxInt(
@@ -333,14 +335,12 @@ class _StatusPage(NFixedPage):
# List Box # List Box
self.listBox = QTreeWidget(self) self.listBox = QTreeWidget(self)
self.listBox.setHeaderLabels([ self.listBox.setHeaderLabels([self.tr("Label"), self.tr("Usage")])
self.tr("Label"), self.tr("Usage"),
])
self.listBox.itemSelectionChanged.connect(self._selectedItem) self.listBox.itemSelectionChanged.connect(self._selectedItem)
self.listBox.setColumnWidth(self.COL_LABEL, wCol0) self.listBox.setColumnWidth(self.COL_LABEL, wCol0)
self.listBox.setIndentation(0) self.listBox.setIndentation(0)
for key, entry in self.theStatus.items(): for key, entry in status.items():
self._addItem(key, entry["name"], entry["cols"], entry["count"]) self._addItem(key, entry["name"], entry["cols"], entry["count"])
# List Controls # List Controls
@@ -31,7 +31,7 @@ from PyQt5.QtWidgets import QDialog, QAction, QColorDialog
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.enum import nwItemType from novelwriter.enum import nwItemType
from novelwriter.dialogs.editlabel import GuiEditLabel from novelwriter.dialogs.editlabel import GuiEditLabel
from novelwriter.dialogs.projsettings import GuiProjectSettings from novelwriter.dialogs.projectsettings import GuiProjectSettings
KEY_DELAY = 1 KEY_DELAY = 1
@@ -63,17 +63,17 @@ def testDlgProjSettings_Dialog(qtbot, monkeypatch, nwGUI):
qtbot.addWidget(projSettings) qtbot.addWidget(projSettings)
# Switch Tabs # Switch Tabs
projSettings._focusTab(GuiProjectSettings.TAB_REPLACE) projSettings.sidebar.button(GuiProjectSettings.PAGE_SETTINGS).click()
assert projSettings._tabBox.currentWidget() == projSettings.tabReplace assert projSettings.mainStack.currentWidget() == projSettings.settingsPage
projSettings._focusTab(GuiProjectSettings.TAB_IMPORT) projSettings.sidebar.button(GuiProjectSettings.PAGE_STATUS).click()
assert projSettings._tabBox.currentWidget() == projSettings.tabImport assert projSettings.mainStack.currentWidget() == projSettings.statusPage
projSettings._focusTab(GuiProjectSettings.TAB_STATUS) projSettings.sidebar.button(GuiProjectSettings.PAGE_IMPORT).click()
assert projSettings._tabBox.currentWidget() == projSettings.tabStatus assert projSettings.mainStack.currentWidget() == projSettings.importPage
projSettings._focusTab(GuiProjectSettings.TAB_MAIN) projSettings.sidebar.button(GuiProjectSettings.PAGE_REPLACE).click()
assert projSettings._tabBox.currentWidget() == projSettings.tabMain assert projSettings.mainStack.currentWidget() == projSettings.replacePage
# Clean Up # Clean Up
projSettings.close() projSettings.close()
@@ -83,9 +83,11 @@ def testDlgProjSettings_Dialog(qtbot, monkeypatch, nwGUI):
@pytest.mark.gui @pytest.mark.gui
def testDlgProjSettings_Main(qtbot, monkeypatch, nwGUI, fncPath, projPath, mockRnd): def testDlgProjSettings_SettingsPage(qtbot, monkeypatch, nwGUI, fncPath, projPath, mockRnd):
"""Test the main tab of the project settings dialog.""" """Test the settings page of the dialog."""
monkeypatch.setattr(SHARED._spelling, "listDictionaries", lambda: [("en", "English [en]")]) languages = [("en", "English"), ("de", "German")]
monkeypatch.setattr(SHARED._spelling, "listDictionaries", lambda *a: languages)
monkeypatch.setattr(CONFIG, "listLanguages", lambda *a: languages)
# Create new project # Create new project
buildTestProject(nwGUI, projPath) buildTestProject(nwGUI, projPath)
@@ -94,72 +96,57 @@ def testDlgProjSettings_Main(qtbot, monkeypatch, nwGUI, fncPath, projPath, mockR
# Set some values # Set some values
project = SHARED.project project = SHARED.project
project.data.setLanguage("en")
project.data.setSpellLang("en") project.data.setSpellLang("en")
project.data.setAuthor("Jane Smith") project.data.setAuthor("Jane Smith")
project.data.setAutoReplace({"A": "B", "C": "D"}) project.data.setAutoReplace({"A": "B", "C": "D"})
# Create Dialog # Create Dialog
projSettings = GuiProjectSettings(nwGUI, GuiProjectSettings.TAB_MAIN) projSettings = GuiProjectSettings(nwGUI, GuiProjectSettings.PAGE_SETTINGS)
projSettings.show() projSettings.show()
qtbot.addWidget(projSettings) qtbot.addWidget(projSettings)
# Settings Tab # Settings Tab
# ============ settings = projSettings.settingsPage
tabMain = projSettings.tabMain assert settings.projName.text() == "New Project"
assert settings.projAuthor.text() == "Jane Smith"
assert settings.projLang.currentData() == "en"
assert settings.spellLang.currentData() == "en"
assert settings.doBackup.isChecked() is False
assert tabMain.editName.text() == "New Project" settings.projName.setText("Project Name")
assert tabMain.editTitle.text() == "New Novel" settings.projAuthor.setText("Jane Doe")
assert tabMain.editAuthor.text() == "Jane Smith" settings.projLang.setCurrentIndex(settings.projLang.findData("de"))
assert tabMain.spellLang.currentData() == "en" settings.spellLang.setCurrentIndex(settings.spellLang.findData("de"))
assert tabMain.doBackup.isChecked() is False settings.doBackup.setChecked(True)
tabMain.editName.setText("")
for c in "Project Name":
qtbot.keyClick(tabMain.editName, c, delay=KEY_DELAY)
tabMain.editTitle.setText("")
for c in "Project Title":
qtbot.keyClick(tabMain.editTitle, c, delay=KEY_DELAY)
tabMain.editAuthor.clear()
for c in "Jane Doe":
qtbot.keyClick(tabMain.editAuthor, c, delay=KEY_DELAY)
assert tabMain.editName.text() == "Project Name"
assert tabMain.editTitle.text() == "Project Title"
assert tabMain.editAuthor.text() == "Jane Doe"
projSettings._doSave() projSettings._doSave()
assert project.data.name == "Project Name" assert project.data.name == "Project Name"
assert project.data.title == "Project Title"
assert project.data.author == "Jane Doe" assert project.data.author == "Jane Doe"
assert project.data.language == "de"
assert project.data.spellLang == "de"
assert project.data.doBackup is False
nwGUI._processProjectSettingsChanges() nwGUI._processProjectSettingsChanges(False)
assert nwGUI.windowTitle() == "novelWriter - Project Name" assert nwGUI.windowTitle() == "novelWriter - Project Name"
# qtbot.stop() # qtbot.stop()
# END Test testDlgProjSettings_Main # END Test testDlgProjSettings_SettingsPage
@pytest.mark.gui @pytest.mark.gui
def testDlgProjSettings_StatusImport(qtbot, monkeypatch, nwGUI, fncPath, projPath, mockRnd): def testDlgProjSettings_StatusImport(qtbot, monkeypatch, nwGUI, projPath, mockRnd):
"""Test the status and importance tabs of the project settings """Test the status and importance pages of the dialog."""
dialog.
"""
monkeypatch.setattr(GuiEditLabel, "getLabel", lambda *a, text: (text, True)) monkeypatch.setattr(GuiEditLabel, "getLabel", lambda *a, text: (text, True))
monkeypatch.setattr(SHARED._spelling, "listDictionaries", lambda: [("en", "English [en]")])
# Create new project
mockRnd.reset()
buildTestProject(nwGUI, projPath) buildTestProject(nwGUI, projPath)
CONFIG.setBackupPath(fncPath)
# Set some values # Set some values
theProject = SHARED.project project = SHARED.project
theProject.tree[C.hTitlePage].setStatus(C.sFinished) # type: ignore project.tree[C.hTitlePage].setStatus(C.sFinished) # type: ignore
theProject.tree[C.hChapterDoc].setStatus(C.sDraft) # type: ignore project.tree[C.hChapterDoc].setStatus(C.sDraft) # type: ignore
theProject.tree[C.hSceneDoc].setStatus(C.sDraft) # type: ignore project.tree[C.hSceneDoc].setStatus(C.sDraft) # type: ignore
nwGUI.projView.projTree.setSelectedHandle(C.hPlotRoot) nwGUI.projView.projTree.setSelectedHandle(C.hPlotRoot)
nwGUI.projView.projTree.newTreeItem(nwItemType.FILE, hLevel=1, isNote=True) nwGUI.projView.projTree.newTreeItem(nwItemType.FILE, hLevel=1, isNote=True)
@@ -172,51 +159,54 @@ def testDlgProjSettings_StatusImport(qtbot, monkeypatch, nwGUI, fncPath, projPat
hCharNote = "0000000000011" hCharNote = "0000000000011"
hWorldNote = "0000000000012" hWorldNote = "0000000000012"
theProject.tree[hPlotNote].setImport(C.iMajor) # type: ignore project.tree[hPlotNote].setImport(C.iMajor) # type: ignore
theProject.tree[hCharNote].setImport(C.iMajor) # type: ignore project.tree[hCharNote].setImport(C.iMajor) # type: ignore
theProject.tree[hWorldNote].setImport(C.iMain) # type: ignore project.tree[hWorldNote].setImport(C.iMain) # type: ignore
nwGUI.rebuildTrees()
project.countStatus()
assert [e["count"] for _, e in project.data.itemStatus.items()] == [2, 0, 2, 1]
assert [e["count"] for _, e in project.data.itemImport.items()] == [3, 0, 2, 1]
# Create Dialog # Create Dialog
projSettings = GuiProjectSettings(nwGUI, GuiProjectSettings.TAB_STATUS) projSettings = GuiProjectSettings(nwGUI, GuiProjectSettings.PAGE_STATUS)
projSettings.show() projSettings.show()
qtbot.addWidget(projSettings) qtbot.addWidget(projSettings)
# Status Tab # Status Tab
# ========== # ==========
tabStatus = projSettings.tabStatus status = projSettings.statusPage
assert tabStatus.colChanged is False assert status.wasChanged is False
assert tabStatus.getNewList() == ([], []) assert status.getNewList() == ([], [])
assert tabStatus.listBox.topLevelItemCount() == 4 assert status.listBox.topLevelItemCount() == 4
# Can't delete the first item (it's in use) # Can't delete the first item (it's in use)
tabStatus.listBox.clearSelection() status.listBox.clearSelection()
tabStatus.listBox.setCurrentItem(tabStatus.listBox.topLevelItem(0)) status.listBox.setCurrentItem(status.listBox.topLevelItem(0))
qtbot.mouseClick(tabStatus.delButton, Qt.LeftButton) qtbot.mouseClick(status.delButton, Qt.LeftButton)
assert tabStatus.listBox.topLevelItemCount() == 4 assert status.listBox.topLevelItemCount() == 4
# Can delete the second item # Can delete the second item
tabStatus.listBox.clearSelection() status.listBox.clearSelection()
tabStatus.listBox.setCurrentItem(tabStatus.listBox.topLevelItem(1)) status.listBox.setCurrentItem(status.listBox.topLevelItem(1))
qtbot.mouseClick(tabStatus.delButton, Qt.LeftButton) qtbot.mouseClick(status.delButton, Qt.LeftButton)
assert tabStatus.listBox.topLevelItemCount() == 3 assert status.listBox.topLevelItemCount() == 3
# Add a new item # Add a new item
with monkeypatch.context() as mp: with monkeypatch.context() as mp:
mp.setattr(QColorDialog, "getColor", lambda *a: QColor(20, 30, 40)) mp.setattr(QColorDialog, "getColor", lambda *a: QColor(20, 30, 40))
qtbot.mouseClick(tabStatus.addButton, Qt.LeftButton) status.addButton.click()
tabStatus.listBox.setCurrentItem(tabStatus.listBox.topLevelItem(3)) status.listBox.setCurrentItem(status.listBox.topLevelItem(3))
for _ in range(8): status.editName.setText("Final")
qtbot.keyClick(tabStatus.editName, Qt.Key_Backspace, delay=KEY_DELAY) status.colButton.click()
for c in "Final": status.saveButton.click()
qtbot.keyClick(tabStatus.editName, c, delay=KEY_DELAY) assert status.listBox.topLevelItemCount() == 4
qtbot.mouseClick(tabStatus.colButton, Qt.LeftButton)
qtbot.mouseClick(tabStatus.saveButton, Qt.LeftButton)
assert tabStatus.listBox.topLevelItemCount() == 4
assert tabStatus.colChanged is True assert status.wasChanged is True
assert tabStatus.getNewList() == ( assert status.getNewList() == (
[ [
{ {
"key": C.sNew, "key": C.sNew,
@@ -241,62 +231,62 @@ def testDlgProjSettings_StatusImport(qtbot, monkeypatch, nwGUI, fncPath, projPat
) )
# Move items, none selected -> no change # Move items, none selected -> no change
tabStatus.listBox.clearSelection() status.listBox.clearSelection()
tabStatus._moveItem(1) status._moveItem(1)
assert [x["key"] for x in tabStatus.getNewList()[0]] == [ assert [x["key"] for x in status.getNewList()[0]] == [
C.sNew, C.sDraft, C.sFinished, None C.sNew, C.sDraft, C.sFinished, None
] ]
# Move items, first selected, move up -> no change # Move items, first selected, move up -> no change
tabStatus.listBox.clearSelection() status.listBox.clearSelection()
tabStatus.listBox.setCurrentItem(tabStatus.listBox.topLevelItem(0)) status.listBox.setCurrentItem(status.listBox.topLevelItem(0))
tabStatus._moveItem(-1) status._moveItem(-1)
assert [x["key"] for x in tabStatus.getNewList()[0]] == [ assert [x["key"] for x in status.getNewList()[0]] == [
C.sNew, C.sDraft, C.sFinished, None C.sNew, C.sDraft, C.sFinished, None
] ]
# Move items, last selected, move up -> allowed # Move items, last selected, move up -> allowed
tabStatus.listBox.clearSelection() status.listBox.clearSelection()
tabStatus.listBox.setCurrentItem(tabStatus.listBox.topLevelItem(3)) status.listBox.setCurrentItem(status.listBox.topLevelItem(3))
tabStatus._moveItem(-1) status._moveItem(-1)
assert [x["key"] for x in tabStatus.getNewList()[0]] == [ assert [x["key"] for x in status.getNewList()[0]] == [
C.sNew, C.sDraft, None, C.sFinished C.sNew, C.sDraft, None, C.sFinished
] ]
# Move items, same selected, move down -> allowed # Move items, same selected, move down -> allowed
tabStatus._moveItem(1) status._moveItem(1)
assert [x["key"] for x in tabStatus.getNewList()[0]] == [ assert [x["key"] for x in status.getNewList()[0]] == [
C.sNew, C.sDraft, C.sFinished, None C.sNew, C.sDraft, C.sFinished, None
] ]
# Importance Tab # Importance Tab
# ============== # ==============
tabImport = projSettings.tabImport importance = projSettings.importPage
projSettings._focusTab(GuiProjectSettings.TAB_IMPORT) projSettings._sidebarClicked(GuiProjectSettings.PAGE_IMPORT)
# Delete unused entry # Delete unused entry
tabImport.listBox.clearSelection() importance.listBox.clearSelection()
tabImport.listBox.setCurrentItem(tabImport.listBox.topLevelItem(1)) importance.listBox.setCurrentItem(importance.listBox.topLevelItem(1))
qtbot.mouseClick(tabImport.delButton, Qt.LeftButton) qtbot.mouseClick(importance.delButton, Qt.LeftButton)
assert tabImport.listBox.topLevelItemCount() == 3 assert importance.listBox.topLevelItemCount() == 3
# Add a new entry # Add a new entry
with monkeypatch.context() as mp: with monkeypatch.context() as mp:
mp.setattr(QColorDialog, "getColor", lambda *a: QColor(20, 30, 40)) mp.setattr(QColorDialog, "getColor", lambda *a: QColor(20, 30, 40))
qtbot.mouseClick(tabImport.addButton, Qt.LeftButton) qtbot.mouseClick(importance.addButton, Qt.LeftButton)
tabImport.listBox.clearSelection() importance.listBox.clearSelection()
tabImport.listBox.setCurrentItem(tabImport.listBox.topLevelItem(3)) importance.listBox.setCurrentItem(importance.listBox.topLevelItem(3))
for _ in range(8): for _ in range(8):
qtbot.keyClick(tabImport.editName, Qt.Key_Backspace, delay=KEY_DELAY) qtbot.keyClick(importance.editName, Qt.Key_Backspace, delay=KEY_DELAY)
for c in "Final": for c in "Final":
qtbot.keyClick(tabImport.editName, c, delay=KEY_DELAY) qtbot.keyClick(importance.editName, c, delay=KEY_DELAY)
qtbot.mouseClick(tabImport.colButton, Qt.LeftButton) qtbot.mouseClick(importance.colButton, Qt.LeftButton)
qtbot.mouseClick(tabImport.saveButton, Qt.LeftButton) qtbot.mouseClick(importance.saveButton, Qt.LeftButton)
assert tabImport.listBox.topLevelItemCount() == 4 assert importance.listBox.topLevelItemCount() == 4
assert tabImport.colChanged is True assert importance.wasChanged is True
assert tabImport.getNewList() == ( assert importance.getNewList() == (
[ [
{ {
"key": C.iNew, "key": C.iNew,
@@ -323,13 +313,13 @@ def testDlgProjSettings_StatusImport(qtbot, monkeypatch, nwGUI, fncPath, projPat
# Check Project # Check Project
projSettings._doSave() projSettings._doSave()
statusItems = dict(theProject.data.itemStatus.items()) statusItems = dict(project.data.itemStatus.items())
assert statusItems[C.sNew]["name"] == "New" assert statusItems[C.sNew]["name"] == "New"
assert statusItems[C.sDraft]["name"] == "Draft" assert statusItems[C.sDraft]["name"] == "Draft"
assert statusItems[C.sFinished]["name"] == "Finished" assert statusItems[C.sFinished]["name"] == "Finished"
assert statusItems["s000013"]["name"] == "Final" assert statusItems["s000013"]["name"] == "Final"
importItems = dict(theProject.data.itemImport.items()) importItems = dict(project.data.itemImport.items())
assert importItems[C.iNew]["name"] == "New" assert importItems[C.iNew]["name"] == "New"
assert importItems[C.iMajor]["name"] == "Major" assert importItems[C.iMajor]["name"] == "Major"
assert importItems[C.iMain]["name"] == "Main" assert importItems[C.iMain]["name"] == "Main"
@@ -341,83 +331,78 @@ def testDlgProjSettings_StatusImport(qtbot, monkeypatch, nwGUI, fncPath, projPat
@pytest.mark.gui @pytest.mark.gui
def testDlgProjSettings_Replace(qtbot, monkeypatch, nwGUI, fncPath, projPath, mockRnd): def testDlgProjSettings_Replace(qtbot, monkeypatch, nwGUI, projPath, mockRnd):
"""Test the auto-replace tab of the project settings dialog.""" """Test the auto-replace page of the dialog."""
monkeypatch.setattr(GuiEditLabel, "getLabel", lambda *a, text: (text, True)) monkeypatch.setattr(GuiEditLabel, "getLabel", lambda *a, text: (text, True))
monkeypatch.setattr(SHARED._spelling, "listDictionaries", lambda: [("en", "English [en]")])
# Create new project
mockRnd.reset()
buildTestProject(nwGUI, projPath) buildTestProject(nwGUI, projPath)
CONFIG.setBackupPath(fncPath)
# Set some values # Set some values
theProject = SHARED.project project = SHARED.project
theProject.data.setAutoReplace({ project.data.setAutoReplace({
"A": "B", "C": "D" "A": "B", "C": "D"
}) })
# Create Dialog # Create Dialog
projSettings = GuiProjectSettings(nwGUI, GuiProjectSettings.TAB_REPLACE) projSettings = GuiProjectSettings(nwGUI, GuiProjectSettings.PAGE_REPLACE)
projSettings.show() projSettings.show()
qtbot.addWidget(projSettings) qtbot.addWidget(projSettings)
# Auto-Replace Tab # Auto-Replace Tab
# ================ # ================
tabReplace = projSettings.tabReplace replace = projSettings.replacePage
assert tabReplace.listBox.topLevelItem(0).text(0) == "<A>" # type: ignore assert replace.listBox.topLevelItem(0).text(0) == "<A>" # type: ignore
assert tabReplace.listBox.topLevelItem(0).text(1) == "B" # type: ignore assert replace.listBox.topLevelItem(0).text(1) == "B" # type: ignore
assert tabReplace.listBox.topLevelItem(1).text(0) == "<C>" # type: ignore assert replace.listBox.topLevelItem(1).text(0) == "<C>" # type: ignore
assert tabReplace.listBox.topLevelItem(1).text(1) == "D" # type: ignore assert replace.listBox.topLevelItem(1).text(1) == "D" # type: ignore
assert tabReplace.listBox.topLevelItemCount() == 2 assert replace.listBox.topLevelItemCount() == 2
# Nothing to save or delete # Nothing to save or delete
tabReplace.listBox.clearSelection() replace.listBox.clearSelection()
tabReplace._saveEntry() replace._saveEntry()
tabReplace._delEntry() replace._delEntry()
assert tabReplace.listBox.topLevelItemCount() == 2 assert replace.listBox.topLevelItemCount() == 2
# Create a new entry # Create a new entry
qtbot.mouseClick(tabReplace.addButton, Qt.LeftButton) qtbot.mouseClick(replace.addButton, Qt.LeftButton)
assert tabReplace.listBox.topLevelItemCount() == 3 assert replace.listBox.topLevelItemCount() == 3
assert tabReplace.listBox.topLevelItem(2).text(0) == "<keyword3>" # type: ignore assert replace.listBox.topLevelItem(2).text(0) == "<keyword3>" # type: ignore
assert tabReplace.listBox.topLevelItem(2).text(1) == "" # type: ignore assert replace.listBox.topLevelItem(2).text(1) == "" # type: ignore
# Edit the entry # Edit the entry
tabReplace.listBox.setCurrentItem(tabReplace.listBox.topLevelItem(2)) replace.listBox.setCurrentItem(replace.listBox.topLevelItem(2))
tabReplace.editKey.setText("") replace.editKey.setText("")
for c in "Th is ": for c in "Th is ":
qtbot.keyClick(tabReplace.editKey, c, delay=KEY_DELAY) qtbot.keyClick(replace.editKey, c, delay=KEY_DELAY)
tabReplace.editValue.setText("") replace.editValue.setText("")
for c in "With This Stuff ": for c in "With This Stuff ":
qtbot.keyClick(tabReplace.editValue, c, delay=KEY_DELAY) qtbot.keyClick(replace.editValue, c, delay=KEY_DELAY)
qtbot.mouseClick(tabReplace.saveButton, Qt.LeftButton) qtbot.mouseClick(replace.saveButton, Qt.LeftButton)
assert tabReplace.listBox.topLevelItem(2).text(0) == "<This>" # type: ignore assert replace.listBox.topLevelItem(2).text(0) == "<This>" # type: ignore
assert tabReplace.listBox.topLevelItem(2).text(1) == "With This Stuff " # type: ignore assert replace.listBox.topLevelItem(2).text(1) == "With This Stuff " # type: ignore
# Create a new entry again # Create a new entry again
tabReplace.listBox.clearSelection() replace.listBox.clearSelection()
qtbot.mouseClick(tabReplace.addButton, Qt.LeftButton) qtbot.mouseClick(replace.addButton, Qt.LeftButton)
assert tabReplace.listBox.topLevelItemCount() == 4 assert replace.listBox.topLevelItemCount() == 4
# The list is sorted, so we must find it # The list is sorted, so we must find it
newIdx = -1 newIdx = -1
for i in range(tabReplace.listBox.topLevelItemCount()): for i in range(replace.listBox.topLevelItemCount()):
if tabReplace.listBox.topLevelItem(i).text(0) == "<keyword4>": # type: ignore if replace.listBox.topLevelItem(i).text(0) == "<keyword4>": # type: ignore
newIdx = i newIdx = i
break break
assert newIdx >= 0 assert newIdx >= 0
# Then delete the new item # Then delete the new item
tabReplace.listBox.setCurrentItem(tabReplace.listBox.topLevelItem(newIdx)) replace.listBox.setCurrentItem(replace.listBox.topLevelItem(newIdx))
qtbot.mouseClick(tabReplace.delButton, Qt.LeftButton) qtbot.mouseClick(replace.delButton, Qt.LeftButton)
assert tabReplace.listBox.topLevelItemCount() == 3 assert replace.listBox.topLevelItemCount() == 3
# Check Project # Check Project
projSettings._doSave() projSettings._doSave()
assert theProject.data.autoReplace == { assert project.data.autoReplace == {
"A": "B", "C": "D", "This": "With This Stuff" "A": "B", "C": "D", "This": "With This Stuff"
} }