diff --git a/tests/README.md b/tests/README.md index e285fece..1d319b14 100644 --- a/tests/README.md +++ b/tests/README.md @@ -59,23 +59,25 @@ 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 | 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` | +| 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 | Build Novel Project Tool | nw/gui/build.py | `-m gui` | `-k testGuiBuild` | +| Integration | Item Editor Dialog | nw/gui/itemeditor.py | `-m gui` | `-k testGuiItemEditor` | +| 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/conftest.py b/tests/conftest.py index aef333ed..90de5a98 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -223,12 +223,3 @@ def nwTempGUI(tmpDir): if not os.path.isdir(guiDir): os.mkdir(guiDir) return guiDir - -@pytest.fixture(scope="session") -def nwTempBuild(tmpDir): - """A temporary folder for build tests. - """ - buildDir = os.path.join(tmpDir, "build") - if not os.path.isdir(buildDir): - os.mkdir(buildDir) - return buildDir diff --git a/tests/reference/build/1_LoremIpsum.htm b/tests/reference/guiBuild_Tool_Step1_Lorem_Ipsum.htm similarity index 100% rename from tests/reference/build/1_LoremIpsum.htm rename to tests/reference/guiBuild_Tool_Step1_Lorem_Ipsum.htm diff --git a/tests/reference/build/1_LoremIpsum.nwd b/tests/reference/guiBuild_Tool_Step1_Lorem_Ipsum.nwd similarity index 100% rename from tests/reference/build/1_LoremIpsum.nwd rename to tests/reference/guiBuild_Tool_Step1_Lorem_Ipsum.nwd diff --git a/tests/reference/build/2_LoremIpsum.htm b/tests/reference/guiBuild_Tool_Step2_Lorem_Ipsum.htm similarity index 100% rename from tests/reference/build/2_LoremIpsum.htm rename to tests/reference/guiBuild_Tool_Step2_Lorem_Ipsum.htm diff --git a/tests/reference/build/2_LoremIpsum.nwd b/tests/reference/guiBuild_Tool_Step2_Lorem_Ipsum.nwd similarity index 100% rename from tests/reference/build/2_LoremIpsum.nwd rename to tests/reference/guiBuild_Tool_Step2_Lorem_Ipsum.nwd diff --git a/tests/reference/build/3_LoremIpsum.htm b/tests/reference/guiBuild_Tool_Step3_Lorem_Ipsum.htm similarity index 100% rename from tests/reference/build/3_LoremIpsum.htm rename to tests/reference/guiBuild_Tool_Step3_Lorem_Ipsum.htm diff --git a/tests/reference/build/3_LoremIpsum.nwd b/tests/reference/guiBuild_Tool_Step3_Lorem_Ipsum.nwd similarity index 100% rename from tests/reference/build/3_LoremIpsum.nwd rename to tests/reference/guiBuild_Tool_Step3_Lorem_Ipsum.nwd diff --git a/tests/reference/build/4H_LoremIpsum.json b/tests/reference/guiBuild_Tool_Step4H_Lorem_Ipsum.json similarity index 100% rename from tests/reference/build/4H_LoremIpsum.json rename to tests/reference/guiBuild_Tool_Step4H_Lorem_Ipsum.json diff --git a/tests/reference/build/4M_LoremIpsum.json b/tests/reference/guiBuild_Tool_Step4M_Lorem_Ipsum.json similarity index 100% rename from tests/reference/build/4M_LoremIpsum.json rename to tests/reference/guiBuild_Tool_Step4M_Lorem_Ipsum.json diff --git a/tests/reference/build/4_LoremIpsum.htm b/tests/reference/guiBuild_Tool_Step4_Lorem_Ipsum.htm similarity index 100% rename from tests/reference/build/4_LoremIpsum.htm rename to tests/reference/guiBuild_Tool_Step4_Lorem_Ipsum.htm diff --git a/tests/reference/build/4_LoremIpsum.nwd b/tests/reference/guiBuild_Tool_Step4_Lorem_Ipsum.nwd similarity index 100% rename from tests/reference/build/4_LoremIpsum.nwd rename to tests/reference/guiBuild_Tool_Step4_Lorem_Ipsum.nwd diff --git a/tests/reference/gui/3_nwProject.nwx b/tests/reference/guiItemEditor_Dialog_nwProject.nwx similarity index 100% rename from tests/reference/gui/3_nwProject.nwx rename to tests/reference/guiItemEditor_Dialog_nwProject.nwx diff --git a/tests/reference/gui/4_73475cb40a568.nwd b/tests/reference/guiMerge_73475cb40a568.nwd similarity index 100% rename from tests/reference/gui/4_73475cb40a568.nwd rename to tests/reference/guiMerge_73475cb40a568.nwd diff --git a/tests/reference/gui/5_031b4af5197ec.nwd b/tests/reference/guiSplit_031b4af5197ec.nwd similarity index 100% rename from tests/reference/gui/5_031b4af5197ec.nwd rename to tests/reference/guiSplit_031b4af5197ec.nwd diff --git a/tests/reference/gui/5_25fc0e7096fc6.nwd b/tests/reference/guiSplit_25fc0e7096fc6.nwd similarity index 100% rename from tests/reference/gui/5_25fc0e7096fc6.nwd rename to tests/reference/guiSplit_25fc0e7096fc6.nwd diff --git a/tests/reference/gui/5_2858dcd1057d3.nwd b/tests/reference/guiSplit_2858dcd1057d3.nwd similarity index 100% rename from tests/reference/gui/5_2858dcd1057d3.nwd rename to tests/reference/guiSplit_2858dcd1057d3.nwd diff --git a/tests/reference/gui/5_2fca346db6561.nwd b/tests/reference/guiSplit_2fca346db6561.nwd similarity index 100% rename from tests/reference/gui/5_2fca346db6561.nwd rename to tests/reference/guiSplit_2fca346db6561.nwd diff --git a/tests/reference/gui/5_31489056e0916.nwd b/tests/reference/guiSplit_31489056e0916.nwd similarity index 100% rename from tests/reference/gui/5_31489056e0916.nwd rename to tests/reference/guiSplit_31489056e0916.nwd diff --git a/tests/reference/gui/5_41cfc0d1f2d12.nwd b/tests/reference/guiSplit_41cfc0d1f2d12.nwd similarity index 100% rename from tests/reference/gui/5_41cfc0d1f2d12.nwd rename to tests/reference/guiSplit_41cfc0d1f2d12.nwd diff --git a/tests/reference/gui/5_98010bd9270f9.nwd b/tests/reference/guiSplit_98010bd9270f9.nwd similarity index 100% rename from tests/reference/gui/5_98010bd9270f9.nwd rename to tests/reference/guiSplit_98010bd9270f9.nwd diff --git a/tests/test_gui_build.py b/tests/test_gui_build.py new file mode 100644 index 00000000..701312f8 --- /dev/null +++ b/tests/test_gui_build.py @@ -0,0 +1,209 @@ +# -*- coding: utf-8 -*- +"""novelWriter Build Dialog Class Tester +""" + +import pytest +import os + +from shutil import copyfile +from tools import cmpFiles, getGuiItem + +from PyQt5.QtCore import Qt +from PyQt5.QtWidgets import QAction, QMessageBox + +from nw.gui import GuiBuildNovel + +keyDelay = 2 +typeDelay = 1 +stepDelay = 20 + +@pytest.mark.gui +def testGuiBuild_Tool(qtbot, monkeypatch, nwGUI, nwLipsum, refDir, outDir): + """Test the build tool. + """ + # Block message box + monkeypatch.setattr(QMessageBox, "question", lambda *args: QMessageBox.Yes) + + # Check that we cannot open when there is no project + nwGUI.mainMenu.aBuildProject.activate(QAction.Trigger) + assert getGuiItem("GuiBuildNovel") is None + + # Open a project + assert nwGUI.openProject(nwLipsum) + nwGUI.mainConf.lastPath = nwLipsum + + # Open the tool + nwGUI.mainMenu.aBuildProject.activate(QAction.Trigger) + qtbot.waitUntil(lambda: getGuiItem("GuiBuildNovel") is not None, timeout=1000) + + nwBuild = getGuiItem("GuiBuildNovel") + assert isinstance(nwBuild, GuiBuildNovel) + + # Default Settings + qtbot.mouseClick(nwBuild.buildNovel, Qt.LeftButton) + + assert nwBuild._saveDocument(nwBuild.FMT_NWD) + assert nwBuild._saveDocument(nwBuild.FMT_HTM) + + projFile = os.path.join(nwLipsum, "Lorem Ipsum.nwd") + testFile = os.path.join(outDir, "guiBuild_Tool_Step1_Lorem_Ipsum.nwd") + compFile = os.path.join(refDir, "guiBuild_Tool_Step1_Lorem_Ipsum.nwd") + copyfile(projFile, testFile) + assert cmpFiles(testFile, compFile) + + projFile = os.path.join(nwLipsum, "Lorem Ipsum.htm") + testFile = os.path.join(outDir, "guiBuild_Tool_Step1_Lorem_Ipsum.htm") + compFile = os.path.join(refDir, "guiBuild_Tool_Step1_Lorem_Ipsum.htm") + copyfile(projFile, testFile) + assert cmpFiles(testFile, compFile) + + # Change Title Formats and Flip Switches + nwBuild.fmtChapter.setText(r"Chapter %chw%: %title%") + qtbot.wait(stepDelay) + nwBuild.fmtScene.setText(r"Scene %ch%.%sc%: %title%") + qtbot.wait(stepDelay) + nwBuild.fmtSection.setText(r"%ch%.%sc%.1: %title%") + qtbot.wait(stepDelay) + + qtbot.mouseClick(nwBuild.justifyText, Qt.LeftButton) + qtbot.wait(stepDelay) + qtbot.mouseClick(nwBuild.includeSynopsis, Qt.LeftButton) + qtbot.wait(stepDelay) + qtbot.mouseClick(nwBuild.includeComments, Qt.LeftButton) + qtbot.wait(stepDelay) + qtbot.mouseClick(nwBuild.includeKeywords, Qt.LeftButton) + qtbot.wait(stepDelay) + + qtbot.mouseClick(nwBuild.noteFiles, Qt.LeftButton) + qtbot.wait(stepDelay) + qtbot.mouseClick(nwBuild.ignoreFlag, Qt.LeftButton) + qtbot.wait(stepDelay) + + qtbot.mouseClick(nwBuild.buildNovel, Qt.LeftButton) + + assert nwBuild._saveDocument(nwBuild.FMT_NWD) + assert nwBuild._saveDocument(nwBuild.FMT_HTM) + + projFile = os.path.join(nwLipsum, "Lorem Ipsum.nwd") + testFile = os.path.join(outDir, "guiBuild_Tool_Step2_Lorem_Ipsum.nwd") + compFile = os.path.join(refDir, "guiBuild_Tool_Step2_Lorem_Ipsum.nwd") + copyfile(projFile, testFile) + assert cmpFiles(testFile, compFile) + + projFile = os.path.join(nwLipsum, "Lorem Ipsum.htm") + testFile = os.path.join(outDir, "guiBuild_Tool_Step2_Lorem_Ipsum.htm") + compFile = os.path.join(refDir, "guiBuild_Tool_Step2_Lorem_Ipsum.htm") + copyfile(projFile, testFile) + assert cmpFiles(testFile, compFile) + + # Replace Tabs with Spaces + qtbot.mouseClick(nwBuild.replaceTabs, Qt.LeftButton) + qtbot.wait(stepDelay) + + qtbot.mouseClick(nwBuild.buildNovel, Qt.LeftButton) + + # Save files that can be compared + assert nwBuild._saveDocument(nwBuild.FMT_NWD) + projFile = os.path.join(nwLipsum, "Lorem Ipsum.nwd") + testFile = os.path.join(outDir, "guiBuild_Tool_Step3_Lorem_Ipsum.nwd") + compFile = os.path.join(refDir, "guiBuild_Tool_Step3_Lorem_Ipsum.nwd") + copyfile(projFile, testFile) + assert cmpFiles(testFile, compFile) + + assert nwBuild._saveDocument(nwBuild.FMT_HTM) + projFile = os.path.join(nwLipsum, "Lorem Ipsum.htm") + testFile = os.path.join(outDir, "guiBuild_Tool_Step3_Lorem_Ipsum.htm") + compFile = os.path.join(refDir, "guiBuild_Tool_Step3_Lorem_Ipsum.htm") + copyfile(projFile, testFile) + assert cmpFiles(testFile, compFile) + + # Putline Mode + nwBuild.fmtChapter.setText(r"Chapter %chw%: %title%") + qtbot.wait(stepDelay) + nwBuild.fmtScene.setText(r"Scene %sca%: %title%") + qtbot.wait(stepDelay) + nwBuild.fmtSection.setText(r"Section: %title%") + qtbot.wait(stepDelay) + + qtbot.mouseClick(nwBuild.includeComments, Qt.LeftButton) + qtbot.wait(stepDelay) + qtbot.mouseClick(nwBuild.noteFiles, Qt.LeftButton) + qtbot.wait(stepDelay) + qtbot.mouseClick(nwBuild.ignoreFlag, Qt.LeftButton) + qtbot.wait(stepDelay) + qtbot.mouseClick(nwBuild.includeBody, Qt.LeftButton) + qtbot.wait(stepDelay) + + qtbot.mouseClick(nwBuild.buildNovel, Qt.LeftButton) + + # Save files that can be compared + assert nwBuild._saveDocument(nwBuild.FMT_NWD) + projFile = os.path.join(nwLipsum, "Lorem Ipsum.nwd") + testFile = os.path.join(outDir, "guiBuild_Tool_Step4_Lorem_Ipsum.nwd") + compFile = os.path.join(refDir, "guiBuild_Tool_Step4_Lorem_Ipsum.nwd") + copyfile(projFile, testFile) + assert cmpFiles(testFile, compFile) + + assert nwBuild._saveDocument(nwBuild.FMT_HTM) + projFile = os.path.join(nwLipsum, "Lorem Ipsum.htm") + testFile = os.path.join(outDir, "guiBuild_Tool_Step4_Lorem_Ipsum.htm") + compFile = os.path.join(refDir, "guiBuild_Tool_Step4_Lorem_Ipsum.htm") + copyfile(projFile, testFile) + assert cmpFiles(testFile, compFile) + + # Check the JSON files too at this stage + assert nwBuild._saveDocument(nwBuild.FMT_JSON_H) + projFile = os.path.join(nwLipsum, "Lorem Ipsum.json") + testFile = os.path.join(outDir, "guiBuild_Tool_Step4H_Lorem_Ipsum.json") + compFile = os.path.join(refDir, "guiBuild_Tool_Step4H_Lorem_Ipsum.json") + copyfile(projFile, testFile) + assert cmpFiles(testFile, compFile, [8]) + + assert nwBuild._saveDocument(nwBuild.FMT_JSON_M) + projFile = os.path.join(nwLipsum, "Lorem Ipsum.json") + testFile = os.path.join(outDir, "guiBuild_Tool_Step4M_Lorem_Ipsum.json") + compFile = os.path.join(refDir, "guiBuild_Tool_Step4M_Lorem_Ipsum.json") + copyfile(projFile, testFile) + assert cmpFiles(testFile, compFile, [8]) + + # Save other file types handled by Qt + # We assume the export itself by the Qt library works, so we just + # check that novelWriter successfully writes the files. + assert nwBuild._saveDocument(nwBuild.FMT_ODT) + assert os.path.isfile(os.path.join(nwLipsum, "Lorem Ipsum.odt")) + + if not nwGUI.mainConf.osDarwin: + assert nwBuild._saveDocument(nwBuild.FMT_PDF) + assert os.path.isfile(os.path.join(nwLipsum, "Lorem Ipsum.pdf")) + + assert nwBuild._saveDocument(nwBuild.FMT_MD) + assert os.path.isfile(os.path.join(nwLipsum, "Lorem Ipsum.md")) + + assert nwBuild._saveDocument(nwBuild.FMT_TXT) + assert os.path.isfile(os.path.join(nwLipsum, "Lorem Ipsum.txt")) + + # Close the build tool + htmlText = nwBuild.htmlText + htmlStyle = nwBuild.htmlStyle + nwdText = nwBuild.nwdText + buildTime = nwBuild.buildTime + nwBuild._doClose() + + # Re-open build dialog from cahce + nwGUI.mainMenu.aBuildProject.activate(QAction.Trigger) + qtbot.waitUntil(lambda: getGuiItem("GuiBuildNovel") is not None, timeout=1000) + + nwBuild = getGuiItem("GuiBuildNovel") + assert isinstance(nwBuild, GuiBuildNovel) + + assert nwBuild.viewCachedDoc() + assert nwBuild.htmlText == htmlText + assert nwBuild.htmlStyle == htmlStyle + assert nwBuild.nwdText == nwdText + assert nwBuild.buildTime == buildTime + + nwBuild._doClose() + + # qtbot.stopForInteraction() + +# END Test testGuiBuild_Tool diff --git a/tests/test_gui_dialogs.py b/tests/test_gui_dialogs.py index 191c5e8e..46c1cc02 100644 --- a/tests/test_gui_dialogs.py +++ b/tests/test_gui_dialogs.py @@ -16,433 +16,14 @@ from PyQt5.QtWidgets import ( QFileDialog, QFontDialog ) -from nw.gui import ( - GuiItemEditor, GuiBuildNovel, GuiDocMerge, GuiDocSplit, GuiProjectWizard, - GuiProjectLoad, GuiPreferences -) +from nw.gui import GuiProjectWizard, GuiProjectLoad, GuiPreferences from nw.gui.custom import QuotesDialog -from nw.constants import nwItemLayout, nwItemClass +from nw.constants import nwItemClass keyDelay = 2 typeDelay = 1 stepDelay = 20 -@pytest.mark.gui -def testItemEditor(qtbot, yesToAll, monkeypatch, fncDir, nwTempGUI, refDir, tmpDir): - nwGUI = nw.main(["--testmode", "--config=%s" % tmpDir, "--data=%s" % tmpDir]) - qtbot.addWidget(nwGUI) - nwGUI.show() - qtbot.waitForWindowShown(nwGUI) - qtbot.wait(stepDelay) - - # Create new, save, open project - nwGUI.theProject.projTree.setSeed(42) - assert nwGUI.newProject({"projPath": fncDir}) - assert nwGUI.openDocument("0e17daca5f3e1") - assert nwGUI.treeView.setSelectedHandle("0e17daca5f3e1", doScroll=True) - - monkeypatch.setattr(GuiItemEditor, "exec_", lambda *args: None) - nwGUI.mainMenu.aEditItem.activate(QAction.Trigger) - qtbot.waitUntil(lambda: getGuiItem("GuiItemEditor") is not None, timeout=1000) - - itemEdit = getGuiItem("GuiItemEditor") - assert isinstance(itemEdit, GuiItemEditor) - itemEdit.show() - - qtbot.addWidget(itemEdit) - - assert itemEdit.editName.text() == "New Scene" - assert itemEdit.editStatus.currentData() == "New" - assert itemEdit.editLayout.currentData() == nwItemLayout.SCENE - - for c in "Just a Page": - qtbot.keyClick(itemEdit.editName, c, delay=typeDelay) - itemEdit.editStatus.setCurrentIndex(1) - layoutIdx = itemEdit.editLayout.findData(nwItemLayout.PAGE) - itemEdit.editLayout.setCurrentIndex(layoutIdx) - - itemEdit.editExport.setChecked(False) - assert not itemEdit.editExport.isChecked() - itemEdit._doSave() - - nwGUI.mainMenu.aEditItem.activate(QAction.Trigger) - qtbot.waitUntil(lambda: getGuiItem("GuiItemEditor") is not None, timeout=1000) - - itemEdit = getGuiItem("GuiItemEditor") - assert isinstance(itemEdit, GuiItemEditor) - itemEdit.show() - - qtbot.addWidget(itemEdit) - assert itemEdit.editName.text() == "Just a Page" - assert itemEdit.editStatus.currentData() == "Note" - assert itemEdit.editLayout.currentData() == nwItemLayout.PAGE - itemEdit._doClose() - - # Check that the header is updated - nwGUI.docEditor.updateDocInfo("0e17daca5f3e1") - assert nwGUI.docEditor.docHeader.theTitle.text() == "Novel › New Chapter › Just a Page" - assert not nwGUI.docEditor.setCursorLine("where?") - assert nwGUI.docEditor.setCursorLine(2) - qtbot.wait(stepDelay) - assert nwGUI.docEditor.getCursorPosition() == 15 - - qtbot.wait(stepDelay) - assert nwGUI.saveProject() - qtbot.wait(stepDelay) - - # Check the files - projFile = os.path.join(fncDir, "nwProject.nwx") - testFile = os.path.join(nwTempGUI, "3_nwProject.nwx") - refFile = os.path.join(refDir, "gui", "3_nwProject.nwx") - copyfile(projFile, testFile) - assert cmpFiles(testFile, refFile, [2, 6, 7, 8]) - - # qtbot.stopForInteraction() - nwGUI.closeMain() - -@pytest.mark.gui -def testBuildTool(qtbot, yesToAll, nwTempBuild, nwLipsum, refDir, tmpDir): - - nwGUI = nw.main(["--testmode", "--config=%s" % nwLipsum, "--data=%s" % tmpDir]) - qtbot.addWidget(nwGUI) - nwGUI.show() - qtbot.waitForWindowShown(nwGUI) - qtbot.wait(stepDelay) - - # Check that we cannot open when there is no project - nwGUI.mainMenu.aBuildProject.activate(QAction.Trigger) - assert getGuiItem("GuiBuildNovel") is None - - # Open a project - assert nwGUI.openProject(nwLipsum) - nwGUI.mainConf.lastPath = nwLipsum - - # Open the tool - nwGUI.mainMenu.aBuildProject.activate(QAction.Trigger) - qtbot.waitUntil(lambda: getGuiItem("GuiBuildNovel") is not None, timeout=1000) - - nwBuild = getGuiItem("GuiBuildNovel") - assert isinstance(nwBuild, GuiBuildNovel) - - # Default Settings - qtbot.mouseClick(nwBuild.buildNovel, Qt.LeftButton) - - assert nwBuild._saveDocument(nwBuild.FMT_NWD) - assert nwBuild._saveDocument(nwBuild.FMT_HTM) - - projFile = os.path.join(nwLipsum, "Lorem Ipsum.nwd") - testFile = os.path.join(nwTempBuild, "1_LoremIpsum.nwd") - refFile = os.path.join(refDir, "build", "1_LoremIpsum.nwd") - copyfile(projFile, testFile) - assert cmpFiles(testFile, refFile) - - projFile = os.path.join(nwLipsum, "Lorem Ipsum.htm") - testFile = os.path.join(nwTempBuild, "1_LoremIpsum.htm") - refFile = os.path.join(refDir, "build", "1_LoremIpsum.htm") - copyfile(projFile, testFile) - assert cmpFiles(testFile, refFile) - - # Change Title Formats and Flip Switches - nwBuild.fmtChapter.setText(r"Chapter %chw%: %title%") - qtbot.wait(stepDelay) - nwBuild.fmtScene.setText(r"Scene %ch%.%sc%: %title%") - qtbot.wait(stepDelay) - nwBuild.fmtSection.setText(r"%ch%.%sc%.1: %title%") - qtbot.wait(stepDelay) - - qtbot.mouseClick(nwBuild.justifyText, Qt.LeftButton) - qtbot.wait(stepDelay) - qtbot.mouseClick(nwBuild.includeSynopsis, Qt.LeftButton) - qtbot.wait(stepDelay) - qtbot.mouseClick(nwBuild.includeComments, Qt.LeftButton) - qtbot.wait(stepDelay) - qtbot.mouseClick(nwBuild.includeKeywords, Qt.LeftButton) - qtbot.wait(stepDelay) - - qtbot.mouseClick(nwBuild.noteFiles, Qt.LeftButton) - qtbot.wait(stepDelay) - qtbot.mouseClick(nwBuild.ignoreFlag, Qt.LeftButton) - qtbot.wait(stepDelay) - - qtbot.mouseClick(nwBuild.buildNovel, Qt.LeftButton) - - assert nwBuild._saveDocument(nwBuild.FMT_NWD) - assert nwBuild._saveDocument(nwBuild.FMT_HTM) - - projFile = os.path.join(nwLipsum, "Lorem Ipsum.nwd") - testFile = os.path.join(nwTempBuild, "2_LoremIpsum.nwd") - refFile = os.path.join(refDir, "build", "2_LoremIpsum.nwd") - copyfile(projFile, testFile) - assert cmpFiles(testFile, refFile) - - projFile = os.path.join(nwLipsum, "Lorem Ipsum.htm") - testFile = os.path.join(nwTempBuild, "2_LoremIpsum.htm") - refFile = os.path.join(refDir, "build", "2_LoremIpsum.htm") - copyfile(projFile, testFile) - assert cmpFiles(testFile, refFile) - - # Replace Tabs with Spaces - qtbot.mouseClick(nwBuild.replaceTabs, Qt.LeftButton) - qtbot.wait(stepDelay) - - qtbot.mouseClick(nwBuild.buildNovel, Qt.LeftButton) - - # Save files that can be compared - assert nwBuild._saveDocument(nwBuild.FMT_NWD) - projFile = os.path.join(nwLipsum, "Lorem Ipsum.nwd") - testFile = os.path.join(nwTempBuild, "3_LoremIpsum.nwd") - refFile = os.path.join(refDir, "build", "3_LoremIpsum.nwd") - copyfile(projFile, testFile) - assert cmpFiles(testFile, refFile) - - assert nwBuild._saveDocument(nwBuild.FMT_HTM) - projFile = os.path.join(nwLipsum, "Lorem Ipsum.htm") - testFile = os.path.join(nwTempBuild, "3_LoremIpsum.htm") - refFile = os.path.join(refDir, "build", "3_LoremIpsum.htm") - copyfile(projFile, testFile) - assert cmpFiles(testFile, refFile) - - # Putline Mode - nwBuild.fmtChapter.setText(r"Chapter %chw%: %title%") - qtbot.wait(stepDelay) - nwBuild.fmtScene.setText(r"Scene %sca%: %title%") - qtbot.wait(stepDelay) - nwBuild.fmtSection.setText(r"Section: %title%") - qtbot.wait(stepDelay) - - qtbot.mouseClick(nwBuild.includeComments, Qt.LeftButton) - qtbot.wait(stepDelay) - qtbot.mouseClick(nwBuild.noteFiles, Qt.LeftButton) - qtbot.wait(stepDelay) - qtbot.mouseClick(nwBuild.ignoreFlag, Qt.LeftButton) - qtbot.wait(stepDelay) - qtbot.mouseClick(nwBuild.includeBody, Qt.LeftButton) - qtbot.wait(stepDelay) - - qtbot.mouseClick(nwBuild.buildNovel, Qt.LeftButton) - - # Save files that can be compared - assert nwBuild._saveDocument(nwBuild.FMT_NWD) - projFile = os.path.join(nwLipsum, "Lorem Ipsum.nwd") - testFile = os.path.join(nwTempBuild, "4_LoremIpsum.nwd") - refFile = os.path.join(refDir, "build", "4_LoremIpsum.nwd") - copyfile(projFile, testFile) - assert cmpFiles(testFile, refFile) - - assert nwBuild._saveDocument(nwBuild.FMT_HTM) - projFile = os.path.join(nwLipsum, "Lorem Ipsum.htm") - testFile = os.path.join(nwTempBuild, "4_LoremIpsum.htm") - refFile = os.path.join(refDir, "build", "4_LoremIpsum.htm") - copyfile(projFile, testFile) - assert cmpFiles(testFile, refFile) - - # Check the JSON files too at this stage - assert nwBuild._saveDocument(nwBuild.FMT_JSON_H) - projFile = os.path.join(nwLipsum, "Lorem Ipsum.json") - testFile = os.path.join(nwTempBuild, "4H_LoremIpsum.json") - refFile = os.path.join(refDir, "build", "4H_LoremIpsum.json") - copyfile(projFile, testFile) - assert cmpFiles(testFile, refFile, [8]) - - assert nwBuild._saveDocument(nwBuild.FMT_JSON_M) - projFile = os.path.join(nwLipsum, "Lorem Ipsum.json") - testFile = os.path.join(nwTempBuild, "4M_LoremIpsum.json") - refFile = os.path.join(refDir, "build", "4M_LoremIpsum.json") - copyfile(projFile, testFile) - assert cmpFiles(testFile, refFile, [8]) - - # Save other file types handled by Qt - # We assume the export itself by the Qt library works, so we just - # check that novelWriter successfully writes the files. - assert nwBuild._saveDocument(nwBuild.FMT_ODT) - assert os.path.isfile(os.path.join(nwLipsum, "Lorem Ipsum.odt")) - - if not nwGUI.mainConf.osDarwin: - assert nwBuild._saveDocument(nwBuild.FMT_PDF) - assert os.path.isfile(os.path.join(nwLipsum, "Lorem Ipsum.pdf")) - - assert nwBuild._saveDocument(nwBuild.FMT_MD) - assert os.path.isfile(os.path.join(nwLipsum, "Lorem Ipsum.md")) - - assert nwBuild._saveDocument(nwBuild.FMT_TXT) - assert os.path.isfile(os.path.join(nwLipsum, "Lorem Ipsum.txt")) - - # Close the build tool - htmlText = nwBuild.htmlText - htmlStyle = nwBuild.htmlStyle - nwdText = nwBuild.nwdText - buildTime = nwBuild.buildTime - nwBuild._doClose() - - # Re-open build dialog from cahce - nwGUI.mainMenu.aBuildProject.activate(QAction.Trigger) - qtbot.waitUntil(lambda: getGuiItem("GuiBuildNovel") is not None, timeout=1000) - - nwBuild = getGuiItem("GuiBuildNovel") - assert isinstance(nwBuild, GuiBuildNovel) - - assert nwBuild.viewCachedDoc() - assert nwBuild.htmlText == htmlText - assert nwBuild.htmlStyle == htmlStyle - assert nwBuild.nwdText == nwdText - assert nwBuild.buildTime == buildTime - - nwBuild._doClose() - - # qtbot.stopForInteraction() - nwGUI.closeMain() - -@pytest.mark.gui -def testMergeSplitTools(qtbot, monkeypatch, yesToAll, nwTempGUI, nwLipsum, refDir, tmpDir): - - nwGUI = nw.main(["--testmode", "--config=%s" % nwLipsum, "--data=%s" % tmpDir]) - qtbot.addWidget(nwGUI) - nwGUI.show() - qtbot.waitForWindowShown(nwGUI) - qtbot.wait(stepDelay) - - nwGUI.theProject.projTree.setSeed(42) - assert nwGUI.openProject(nwLipsum) - qtbot.wait(stepDelay) - - assert nwGUI.treeView.setSelectedHandle("45e6b01ca35c1") - qtbot.wait(stepDelay) - - monkeypatch.setattr(GuiDocMerge, "exec_", lambda *args: None) - nwGUI.mainMenu.aMergeDocs.activate(QAction.Trigger) - qtbot.waitUntil(lambda: getGuiItem("GuiDocMerge") is not None, timeout=1000) - - nwMerge = getGuiItem("GuiDocMerge") - assert isinstance(nwMerge, GuiDocMerge) - nwMerge.show() - qtbot.wait(stepDelay) - - nwMerge._doMerge() - qtbot.wait(stepDelay) - - assert nwGUI.theProject.projTree["73475cb40a568"] is not None - - projFile = os.path.join(nwLipsum, "content", "73475cb40a568.nwd") - testFile = os.path.join(nwTempGUI, "4_73475cb40a568.nwd") - refFile = os.path.join(refDir, "gui", "4_73475cb40a568.nwd") - copyfile(projFile, testFile) - assert cmpFiles(testFile, refFile) - - # Split By Chapter - assert nwGUI.treeView.setSelectedHandle("73475cb40a568") - qtbot.wait(stepDelay) - - monkeypatch.setattr(GuiDocSplit, "exec_", lambda *args: None) - nwGUI.mainMenu.aSplitDoc.activate(QAction.Trigger) - qtbot.waitUntil(lambda: getGuiItem("GuiDocSplit") is not None, timeout=1000) - - nwSplit = getGuiItem("GuiDocSplit") - assert isinstance(nwSplit, GuiDocSplit) - nwSplit.show() - qtbot.wait(stepDelay) - - nwSplit.splitLevel.setCurrentIndex(1) - qtbot.wait(stepDelay) - - nwSplit._doSplit() - assert nwGUI.theProject.projTree["71ee45a3c0db9"] is not None - - # This should give us back the file as it was before - projFile = os.path.join(nwLipsum, "content", "71ee45a3c0db9.nwd") - testFile = os.path.join(nwTempGUI, "4_71ee45a3c0db9.nwd") - refFile = os.path.join(refDir, "gui", "4_73475cb40a568.nwd") - copyfile(projFile, testFile) - assert cmpFiles(testFile, refFile, [1, 2, 3]) - - # Split By Scene - assert nwGUI.treeView.setSelectedHandle("73475cb40a568") - qtbot.wait(stepDelay) - nwGUI.mainMenu.aSplitDoc.activate(QAction.Trigger) - qtbot.waitUntil(lambda: getGuiItem("GuiDocSplit") is not None, timeout=1000) - - nwSplit = getGuiItem("GuiDocSplit") - assert isinstance(nwSplit, GuiDocSplit) - qtbot.wait(stepDelay) - nwSplit.splitLevel.setCurrentIndex(2) - qtbot.wait(stepDelay) - - nwSplit._doSplit() - - assert nwGUI.theProject.projTree["25fc0e7096fc6"] is not None - assert nwGUI.theProject.projTree["31489056e0916"] is not None - assert nwGUI.theProject.projTree["98010bd9270f9"] is not None - - projFile = os.path.join(nwLipsum, "content", "25fc0e7096fc6.nwd") - testFile = os.path.join(nwTempGUI, "5_25fc0e7096fc6.nwd") - refFile = os.path.join(refDir, "gui", "5_25fc0e7096fc6.nwd") - copyfile(projFile, testFile) - assert cmpFiles(testFile, refFile) - - projFile = os.path.join(nwLipsum, "content", "31489056e0916.nwd") - testFile = os.path.join(nwTempGUI, "5_31489056e0916.nwd") - refFile = os.path.join(refDir, "gui", "5_31489056e0916.nwd") - copyfile(projFile, testFile) - assert cmpFiles(testFile, refFile) - - projFile = os.path.join(nwLipsum, "content", "98010bd9270f9.nwd") - testFile = os.path.join(nwTempGUI, "5_98010bd9270f9.nwd") - refFile = os.path.join(refDir, "gui", "5_98010bd9270f9.nwd") - copyfile(projFile, testFile) - assert cmpFiles(testFile, refFile) - - # Split By Section - assert nwGUI.treeView.setSelectedHandle("73475cb40a568") - qtbot.wait(stepDelay) - nwGUI.mainMenu.aSplitDoc.activate(QAction.Trigger) - qtbot.waitUntil(lambda: getGuiItem("GuiDocSplit") is not None, timeout=1000) - - nwSplit = getGuiItem("GuiDocSplit") - assert isinstance(nwSplit, GuiDocSplit) - qtbot.wait(stepDelay) - nwSplit.splitLevel.setCurrentIndex(3) - qtbot.wait(stepDelay) - - nwSplit._doSplit() - - assert nwGUI.theProject.projTree["1a6562590ef19"] is not None - assert nwGUI.theProject.projTree["031b4af5197ec"] is not None - assert nwGUI.theProject.projTree["41cfc0d1f2d12"] is not None - assert nwGUI.theProject.projTree["2858dcd1057d3"] is not None - assert nwGUI.theProject.projTree["2fca346db6561"] is not None - - projFile = os.path.join(nwLipsum, "content", "1a6562590ef19.nwd") - testFile = os.path.join(nwTempGUI, "5_25fc0e7096fc6.nwd") - refFile = os.path.join(refDir, "gui", "5_25fc0e7096fc6.nwd") - copyfile(projFile, testFile) - assert cmpFiles(testFile, refFile, [1, 2, 3]) - - projFile = os.path.join(nwLipsum, "content", "031b4af5197ec.nwd") - testFile = os.path.join(nwTempGUI, "5_031b4af5197ec.nwd") - refFile = os.path.join(refDir, "gui", "5_031b4af5197ec.nwd") - copyfile(projFile, testFile) - assert cmpFiles(testFile, refFile) - - projFile = os.path.join(nwLipsum, "content", "41cfc0d1f2d12.nwd") - testFile = os.path.join(nwTempGUI, "5_41cfc0d1f2d12.nwd") - refFile = os.path.join(refDir, "gui", "5_41cfc0d1f2d12.nwd") - copyfile(projFile, testFile) - assert cmpFiles(testFile, refFile) - - projFile = os.path.join(nwLipsum, "content", "2858dcd1057d3.nwd") - testFile = os.path.join(nwTempGUI, "5_2858dcd1057d3.nwd") - refFile = os.path.join(refDir, "gui", "5_2858dcd1057d3.nwd") - copyfile(projFile, testFile) - assert cmpFiles(testFile, refFile) - - projFile = os.path.join(nwLipsum, "content", "2fca346db6561.nwd") - testFile = os.path.join(nwTempGUI, "5_2fca346db6561.nwd") - refFile = os.path.join(refDir, "gui", "5_2fca346db6561.nwd") - copyfile(projFile, testFile) - assert cmpFiles(testFile, refFile) - - # qtbot.stopForInteraction() - nwGUI.closeMain() - @pytest.mark.gui def testNewProjectWizard(qtbot, monkeypatch, yesToAll, nwMinimal, tmpDir): diff --git a/tests/test_gui_itemeditor.py b/tests/test_gui_itemeditor.py new file mode 100644 index 00000000..ae27e3c0 --- /dev/null +++ b/tests/test_gui_itemeditor.py @@ -0,0 +1,92 @@ +# -*- coding: utf-8 -*- +"""novelWriter Item Editor Dialog Class Tester +""" + +import pytest +import os + +from shutil import copyfile +from tools import cmpFiles, getGuiItem + +from PyQt5.QtWidgets import QAction, QMessageBox + +from nw.gui import GuiItemEditor +from nw.constants import nwItemLayout + +keyDelay = 2 +typeDelay = 1 +stepDelay = 20 + +@pytest.mark.gui +def testGuiItemEditor_Dialog(qtbot, monkeypatch, nwGUI, fncDir, fncProj, refDir, outDir): + """Test the full item editor dialog. + """ + projFile = os.path.join(fncProj, "nwProject.nwx") + testFile = os.path.join(outDir, "guiItemEditor_Dialog_nwProject.nwx") + compFile = os.path.join(refDir, "guiItemEditor_Dialog_nwProject.nwx") + + # Block message box + monkeypatch.setattr(QMessageBox, "question", lambda *args: QMessageBox.Yes) + + # Create new, save, open project + nwGUI.theProject.projTree.setSeed(42) + assert nwGUI.newProject({"projPath": fncProj}) + assert nwGUI.openDocument("0e17daca5f3e1") + assert nwGUI.treeView.setSelectedHandle("0e17daca5f3e1", doScroll=True) + + monkeypatch.setattr(GuiItemEditor, "exec_", lambda *args: None) + nwGUI.mainMenu.aEditItem.activate(QAction.Trigger) + qtbot.waitUntil(lambda: getGuiItem("GuiItemEditor") is not None, timeout=1000) + + itemEdit = getGuiItem("GuiItemEditor") + assert isinstance(itemEdit, GuiItemEditor) + itemEdit.show() + + qtbot.addWidget(itemEdit) + + assert itemEdit.editName.text() == "New Scene" + assert itemEdit.editStatus.currentData() == "New" + assert itemEdit.editLayout.currentData() == nwItemLayout.SCENE + + for c in "Just a Page": + qtbot.keyClick(itemEdit.editName, c, delay=typeDelay) + itemEdit.editStatus.setCurrentIndex(1) + layoutIdx = itemEdit.editLayout.findData(nwItemLayout.PAGE) + itemEdit.editLayout.setCurrentIndex(layoutIdx) + + itemEdit.editExport.setChecked(False) + assert not itemEdit.editExport.isChecked() + itemEdit._doSave() + + nwGUI.mainMenu.aEditItem.activate(QAction.Trigger) + qtbot.waitUntil(lambda: getGuiItem("GuiItemEditor") is not None, timeout=1000) + + itemEdit = getGuiItem("GuiItemEditor") + assert isinstance(itemEdit, GuiItemEditor) + itemEdit.show() + + qtbot.addWidget(itemEdit) + assert itemEdit.editName.text() == "Just a Page" + assert itemEdit.editStatus.currentData() == "Note" + assert itemEdit.editLayout.currentData() == nwItemLayout.PAGE + itemEdit._doClose() + + # Check that the header is updated + nwGUI.docEditor.updateDocInfo("0e17daca5f3e1") + assert nwGUI.docEditor.docHeader.theTitle.text() == "Novel › New Chapter › Just a Page" + assert not nwGUI.docEditor.setCursorLine("where?") + assert nwGUI.docEditor.setCursorLine(2) + qtbot.wait(stepDelay) + assert nwGUI.docEditor.getCursorPosition() == 15 + + qtbot.wait(stepDelay) + assert nwGUI.saveProject() + qtbot.wait(stepDelay) + + # Check the files + copyfile(projFile, testFile) + assert cmpFiles(testFile, compFile, [2, 6, 7, 8]) + + # qtbot.stopForInteraction() + +# END Test testGuiItemEditor_Dialog diff --git a/tests/test_gui_mergesplit.py b/tests/test_gui_mergesplit.py new file mode 100644 index 00000000..9024a0d9 --- /dev/null +++ b/tests/test_gui_mergesplit.py @@ -0,0 +1,167 @@ +# -*- coding: utf-8 -*- +"""novelWriter Merge and Split Dialog Classes Tester +""" + +import pytest +import os + +from shutil import copyfile +from tools import cmpFiles, getGuiItem + +from PyQt5.QtWidgets import QAction, QMessageBox + +from nw.gui import GuiDocMerge, GuiDocSplit + +keyDelay = 2 +typeDelay = 1 +stepDelay = 20 + +@pytest.mark.gui +def testGuiMergeSplit_Tools(qtbot, monkeypatch, nwGUI, nwLipsum, refDir, outDir): + """Test the full merge and split tools. + """ + # Block message box + monkeypatch.setattr(QMessageBox, "question", lambda *args: QMessageBox.Yes) + + nwGUI.theProject.projTree.setSeed(42) + assert nwGUI.openProject(nwLipsum) + qtbot.wait(stepDelay) + + assert nwGUI.treeView.setSelectedHandle("45e6b01ca35c1") + qtbot.wait(stepDelay) + + monkeypatch.setattr(GuiDocMerge, "exec_", lambda *args: None) + nwGUI.mainMenu.aMergeDocs.activate(QAction.Trigger) + qtbot.waitUntil(lambda: getGuiItem("GuiDocMerge") is not None, timeout=1000) + + nwMerge = getGuiItem("GuiDocMerge") + assert isinstance(nwMerge, GuiDocMerge) + nwMerge.show() + qtbot.wait(stepDelay) + + nwMerge._doMerge() + qtbot.wait(stepDelay) + + assert nwGUI.theProject.projTree["73475cb40a568"] is not None + + projFile = os.path.join(nwLipsum, "content", "73475cb40a568.nwd") + testFile = os.path.join(outDir, "guiMerge_73475cb40a568.nwd") + compFile = os.path.join(refDir, "guiMerge_73475cb40a568.nwd") + copyfile(projFile, testFile) + assert cmpFiles(testFile, compFile) + + # Split By Chapter + assert nwGUI.treeView.setSelectedHandle("73475cb40a568") + qtbot.wait(stepDelay) + + monkeypatch.setattr(GuiDocSplit, "exec_", lambda *args: None) + nwGUI.mainMenu.aSplitDoc.activate(QAction.Trigger) + qtbot.waitUntil(lambda: getGuiItem("GuiDocSplit") is not None, timeout=1000) + + nwSplit = getGuiItem("GuiDocSplit") + assert isinstance(nwSplit, GuiDocSplit) + nwSplit.show() + qtbot.wait(stepDelay) + + nwSplit.splitLevel.setCurrentIndex(1) + qtbot.wait(stepDelay) + + nwSplit._doSplit() + assert nwGUI.theProject.projTree["71ee45a3c0db9"] is not None + + # This should give us back the file as it was before + projFile = os.path.join(nwLipsum, "content", "71ee45a3c0db9.nwd") + testFile = os.path.join(outDir, "guiMerge_71ee45a3c0db9.nwd") + compFile = os.path.join(refDir, "guiMerge_73475cb40a568.nwd") + copyfile(projFile, testFile) + assert cmpFiles(testFile, compFile, [1, 2, 3]) + + # Split By Scene + assert nwGUI.treeView.setSelectedHandle("73475cb40a568") + qtbot.wait(stepDelay) + nwGUI.mainMenu.aSplitDoc.activate(QAction.Trigger) + qtbot.waitUntil(lambda: getGuiItem("GuiDocSplit") is not None, timeout=1000) + + nwSplit = getGuiItem("GuiDocSplit") + assert isinstance(nwSplit, GuiDocSplit) + qtbot.wait(stepDelay) + nwSplit.splitLevel.setCurrentIndex(2) + qtbot.wait(stepDelay) + + nwSplit._doSplit() + + assert nwGUI.theProject.projTree["25fc0e7096fc6"] is not None + assert nwGUI.theProject.projTree["31489056e0916"] is not None + assert nwGUI.theProject.projTree["98010bd9270f9"] is not None + + projFile = os.path.join(nwLipsum, "content", "25fc0e7096fc6.nwd") + testFile = os.path.join(outDir, "guiSplit_25fc0e7096fc6.nwd") + compFile = os.path.join(refDir, "guiSplit_25fc0e7096fc6.nwd") + copyfile(projFile, testFile) + assert cmpFiles(testFile, compFile) + + projFile = os.path.join(nwLipsum, "content", "31489056e0916.nwd") + testFile = os.path.join(outDir, "guiSplit_31489056e0916.nwd") + compFile = os.path.join(refDir, "guiSplit_31489056e0916.nwd") + copyfile(projFile, testFile) + assert cmpFiles(testFile, compFile) + + projFile = os.path.join(nwLipsum, "content", "98010bd9270f9.nwd") + testFile = os.path.join(outDir, "guiSplit_98010bd9270f9.nwd") + compFile = os.path.join(refDir, "guiSplit_98010bd9270f9.nwd") + copyfile(projFile, testFile) + assert cmpFiles(testFile, compFile) + + # Split By Section + assert nwGUI.treeView.setSelectedHandle("73475cb40a568") + qtbot.wait(stepDelay) + nwGUI.mainMenu.aSplitDoc.activate(QAction.Trigger) + qtbot.waitUntil(lambda: getGuiItem("GuiDocSplit") is not None, timeout=1000) + + nwSplit = getGuiItem("GuiDocSplit") + assert isinstance(nwSplit, GuiDocSplit) + qtbot.wait(stepDelay) + nwSplit.splitLevel.setCurrentIndex(3) + qtbot.wait(stepDelay) + + nwSplit._doSplit() + + assert nwGUI.theProject.projTree["1a6562590ef19"] is not None + assert nwGUI.theProject.projTree["031b4af5197ec"] is not None + assert nwGUI.theProject.projTree["41cfc0d1f2d12"] is not None + assert nwGUI.theProject.projTree["2858dcd1057d3"] is not None + assert nwGUI.theProject.projTree["2fca346db6561"] is not None + + projFile = os.path.join(nwLipsum, "content", "1a6562590ef19.nwd") + testFile = os.path.join(outDir, "guiSplit_1a6562590ef19.nwd") + compFile = os.path.join(refDir, "guiSplit_25fc0e7096fc6.nwd") + copyfile(projFile, testFile) + assert cmpFiles(testFile, compFile, [1, 2, 3]) + + projFile = os.path.join(nwLipsum, "content", "031b4af5197ec.nwd") + testFile = os.path.join(outDir, "guiSplit_031b4af5197ec.nwd") + compFile = os.path.join(refDir, "guiSplit_031b4af5197ec.nwd") + copyfile(projFile, testFile) + assert cmpFiles(testFile, compFile) + + projFile = os.path.join(nwLipsum, "content", "41cfc0d1f2d12.nwd") + testFile = os.path.join(outDir, "guiSplit_41cfc0d1f2d12.nwd") + compFile = os.path.join(refDir, "guiSplit_41cfc0d1f2d12.nwd") + copyfile(projFile, testFile) + assert cmpFiles(testFile, compFile) + + projFile = os.path.join(nwLipsum, "content", "2858dcd1057d3.nwd") + testFile = os.path.join(outDir, "guiSplit_2858dcd1057d3.nwd") + compFile = os.path.join(refDir, "guiSplit_2858dcd1057d3.nwd") + copyfile(projFile, testFile) + assert cmpFiles(testFile, compFile) + + projFile = os.path.join(nwLipsum, "content", "2fca346db6561.nwd") + testFile = os.path.join(outDir, "guiSplit_2fca346db6561.nwd") + compFile = os.path.join(refDir, "guiSplit_2fca346db6561.nwd") + copyfile(projFile, testFile) + assert cmpFiles(testFile, compFile) + + # qtbot.stopForInteraction() + +# END Test testGuiMergeSplit_Tools diff --git a/tests/test_gui_projsettings.py b/tests/test_gui_projsettings.py index 421d8f0c..2dcd92cb 100644 --- a/tests/test_gui_projsettings.py +++ b/tests/test_gui_projsettings.py @@ -30,9 +30,6 @@ def testGuiProjSettings_Dialog(qtbot, monkeypatch, nwGUI, fncDir, fncProj, outDi # Block message box monkeypatch.setattr(QMessageBox, "question", lambda *args: QMessageBox.Yes) - # monkeypatch.setattr(QMessageBox, "information", lambda *args: QMessageBox.Yes) - # monkeypatch.setattr(QMessageBox, "warning", lambda *args: QMessageBox.Yes) - # monkeypatch.setattr(QMessageBox, "critical", lambda *args: QMessageBox.Yes) # Check that we cannot open when there is no project nwGUI.mainMenu.aProjectSettings.activate(QAction.Trigger)