diff --git a/tests/README.md b/tests/README.md index 772ce216..e285fece 100644 --- a/tests/README.md +++ b/tests/README.md @@ -59,21 +59,23 @@ Available markers are: To filter specific groups of tests, use the `-k` switch. The commands for the respective test categories are listed below. -| Type | Test Target | Source File(s) | Marker | Filter | -| :---------- | :----------------- | :--------------------- | :-------- | :----------------------- | -| Unit | Main function | nw/\_\_init\_\_.py | `-m base` | `-k testBaseInit` | -| Unit | Common functions | nw/common.py | `-m base` | `-k testBaseCommon` | -| Unit | Config class | nw/config.py | `-m base` | `-k testBaseConfig` | -| Unit | Error handlers | nw/error.py | `-m base` | `-k testBaseError` | -| Unit | Core functions | nw/core/tools.py | `-m core` | `-k testCoreTools` | -| Unit | NWDoc class | nw/core/document.py | `-m core` | `-k testCoreDocument` | -| Unit | NWIndex class | nw/core/index.py | `-m core` | `-k testCoreIndex` | -| Unit | NWItem class | nw/core/item.py | `-m core` | `-k testCoreItem` | -| Unit | NWProject class | nw/core/project.py | `-m core` | `-k testCoreProject` | -| Unit | NWSpell* classes | nw/core/spellcheck.py | `-m core` | `-k testCoreSpell` | -| Unit | NWStatus class | nw/core/status.py | `-m core` | `-k testCoreStatus` | -| Unit | NWTree class | nw/core/tree.py | `-m core` | `-k testCoreTree` | -| Unit | OptionsState class | nw/core/options.py | `-m core` | `-k testCoreOptions` | -| Unit | ToHtml class | nw/core/tohtml.py | `-m core` | `-k testCoreToHtml` | -| Unit | Tokenizer class | nw/core/tokenizer.py | `-m core` | `-k testCoreToken` | -| Integration | Writing Stats GUI | nw/gui/writingstats.py | `-m gui` | `-k testGuiWritingStats` | +| Type | Test Target | Source File(s) | Marker | Filter | +| :---------- | :---------------------- | :--------------------- | :-------- | :----------------------- | +| Unit | Main function | nw/\_\_init\_\_.py | `-m base` | `-k testBaseInit` | +| Unit | Common functions | nw/common.py | `-m base` | `-k testBaseCommon` | +| Unit | Config class | nw/config.py | `-m base` | `-k testBaseConfig` | +| Unit | Error handlers | nw/error.py | `-m base` | `-k testBaseError` | +| Unit | Core functions | nw/core/tools.py | `-m core` | `-k testCoreTools` | +| Unit | NWDoc class | nw/core/document.py | `-m core` | `-k testCoreDocument` | +| Unit | NWIndex class | nw/core/index.py | `-m core` | `-k testCoreIndex` | +| Unit | NWItem class | nw/core/item.py | `-m core` | `-k testCoreItem` | +| Unit | NWProject class | nw/core/project.py | `-m core` | `-k testCoreProject` | +| Unit | NWSpell* classes | nw/core/spellcheck.py | `-m core` | `-k testCoreSpell` | +| Unit | NWStatus class | nw/core/status.py | `-m core` | `-k testCoreStatus` | +| Unit | NWTree class | nw/core/tree.py | `-m core` | `-k testCoreTree` | +| Unit | OptionsState class | nw/core/options.py | `-m core` | `-k testCoreOptions` | +| Unit | ToHtml class | nw/core/tohtml.py | `-m core` | `-k testCoreToHtml` | +| Unit | Tokenizer class | nw/core/tokenizer.py | `-m core` | `-k testCoreToken` | +| Integration | About Dialogs | nw/gui/about.py | `-m gui` | `-k testGuiAbout` | +| Integration | Project Settings Dialog | nw/gui/projsettings.py | `-m gui` | `-k testGuiProjSettings` | +| Integration | Writing Stats Dialog | nw/gui/writingstats.py | `-m gui` | `-k testGuiWritingStats` | diff --git a/tests/test_gui_about.py b/tests/test_gui_about.py new file mode 100644 index 00000000..498e26b5 --- /dev/null +++ b/tests/test_gui_about.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +"""novelWriter About Dialog Class Tester +""" + +import pytest + +from tools import getGuiItem + +from PyQt5.QtWidgets import QAction, QMessageBox + +from nw.gui import GuiAbout + +keyDelay = 2 +typeDelay = 1 +stepDelay = 20 + +@pytest.mark.gui +def testGuiAbout_Dialog(qtbot, monkeypatch, nwGUI): + """Test the full about dialogs. + """ + # NW About + monkeypatch.setattr(GuiAbout, "exec_", lambda *args: None) + nwGUI.mainMenu.aAboutNW.activate(QAction.Trigger) + qtbot.waitUntil(lambda: getGuiItem("GuiAbout") is not None, timeout=1000) + + msgAbout = getGuiItem("GuiAbout") + assert isinstance(msgAbout, GuiAbout) + msgAbout.show() + + assert msgAbout.pageAbout.document().characterCount() > 100 + assert msgAbout.pageNotes.document().characterCount() > 100 + assert msgAbout.pageLicense.document().characterCount() > 100 + + msgAbout.mainConf.assetPath = "whatever" + + msgAbout._fillNotesPage() + assert msgAbout.pageNotes.toPlainText() == "Error loading release notes text ..." + + msgAbout._fillLicensePage() + assert msgAbout.pageLicense.toPlainText() == "Error loading license text ..." + + msgAbout.showReleaseNotes() + assert msgAbout.tabBox.currentWidget() == msgAbout.pageNotes + + # Qt About + monkeypatch.setattr(QMessageBox, "aboutQt", lambda *args, **kwargs: None) + nwGUI.mainMenu.aAboutQt.activate(QAction.Trigger) + + # qtbot.stopForInteraction() + msgAbout._doClose() + +# END Test testGuiAbout_Dialog diff --git a/tests/test_gui_dialogs.py b/tests/test_gui_dialogs.py index 70f996da..191c5e8e 100644 --- a/tests/test_gui_dialogs.py +++ b/tests/test_gui_dialogs.py @@ -13,12 +13,12 @@ from tools import cmpFiles, getGuiItem from PyQt5.QtCore import Qt, QItemSelectionModel from PyQt5.QtWidgets import ( QDialogButtonBox, QTreeWidgetItem, QListWidgetItem, QDialog, QAction, - QMessageBox, QFileDialog, QFontDialog + QFileDialog, QFontDialog ) from nw.gui import ( - GuiItemEditor, GuiAbout, GuiBuildNovel, GuiDocMerge, GuiDocSplit, - GuiProjectWizard, GuiProjectLoad, GuiPreferences + GuiItemEditor, GuiBuildNovel, GuiDocMerge, GuiDocSplit, GuiProjectWizard, + GuiProjectLoad, GuiPreferences ) from nw.gui.custom import QuotesDialog from nw.constants import nwItemLayout, nwItemClass @@ -100,46 +100,6 @@ def testItemEditor(qtbot, yesToAll, monkeypatch, fncDir, nwTempGUI, refDir, tmpD # qtbot.stopForInteraction() nwGUI.closeMain() -@pytest.mark.gui -def testAboutBox(qtbot, monkeypatch, fncDir, tmpDir): - nwGUI = nw.main(["--testmode", "--config=%s" % fncDir, "--data=%s" % tmpDir]) - qtbot.addWidget(nwGUI) - nwGUI.show() - qtbot.waitForWindowShown(nwGUI) - qtbot.wait(stepDelay) - - # NW About - monkeypatch.setattr(GuiAbout, "exec_", lambda *args: None) - nwGUI.mainMenu.aAboutNW.activate(QAction.Trigger) - qtbot.waitUntil(lambda: getGuiItem("GuiAbout") is not None, timeout=1000) - - msgAbout = getGuiItem("GuiAbout") - assert isinstance(msgAbout, GuiAbout) - msgAbout.show() - - assert msgAbout.pageAbout.document().characterCount() > 100 - assert msgAbout.pageNotes.document().characterCount() > 100 - assert msgAbout.pageLicense.document().characterCount() > 100 - - msgAbout.mainConf.assetPath = "whatever" - - msgAbout._fillNotesPage() - assert msgAbout.pageNotes.toPlainText() == "Error loading release notes text ..." - - msgAbout._fillLicensePage() - assert msgAbout.pageLicense.toPlainText() == "Error loading license text ..." - - msgAbout.showReleaseNotes() - assert msgAbout.tabBox.currentWidget() == msgAbout.pageNotes - - # Qt About - monkeypatch.setattr(QMessageBox, "aboutQt", lambda *args, **kwargs: None) - nwGUI.mainMenu.aAboutQt.activate(QAction.Trigger) - - # qtbot.stopForInteraction() - msgAbout._doClose() - nwGUI.closeMain() - @pytest.mark.gui def testBuildTool(qtbot, yesToAll, nwTempBuild, nwLipsum, refDir, tmpDir):