210 lines
7.5 KiB
Python
210 lines
7.5 KiB
Python
# -*- 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
|