Fix old tests

This commit is contained in:
Veronica K. B. Olsen
2020-12-01 10:23:35 +01:00
parent b4b359475d
commit 2c0eaeb557
14 changed files with 345 additions and 344 deletions
+1 -1
View File
@@ -43,7 +43,7 @@ class NWItem():
self.itemName = "" self.itemName = ""
self.itemHandle = None self.itemHandle = None
self.itemParent = None self.itemParent = None
self.itemOrder = None self.itemOrder = 0
self.itemType = nwItemType.NO_TYPE self.itemType = nwItemType.NO_TYPE
self.itemClass = nwItemClass.NO_CLASS self.itemClass = nwItemClass.NO_CLASS
self.itemLayout = nwItemLayout.NO_LAYOUT self.itemLayout = nwItemLayout.NO_LAYOUT
+138 -137
View File
@@ -9,7 +9,7 @@ import os
from nwdummy import DummyMain from nwdummy import DummyMain
# from PyQt5.QtWidgets import QMessageBox from PyQt5.QtWidgets import QMessageBox
sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir))) sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir)))
@@ -33,28 +33,10 @@ def tmpDir():
os.mkdir(tempDir) os.mkdir(tempDir)
return tempDir return tempDir
# @pytest.fixture(scope="session")
# def nwRef():
# """The folder where all the reference files are stored for verifying
# the results of tests.
# """
# testDir = os.path.dirname(__file__)
# refDir = os.path.join(testDir, "reference")
# return refDir
## ##
# novelWriter Objects # novelWriter Objects
## ##
# @pytest.fixture(scope="session")
# def tmpConf(nwTemp):
# """Create a temporary novelWriter configuration object.
# """
# theConf = Config()
# theConf.initConfig(nwTemp, nwTemp)
# theConf.setLastPath("")
# return theConf
@pytest.fixture(scope="session") @pytest.fixture(scope="session")
def tmpConf(tmpDir): def tmpConf(tmpDir):
"""Create a temporary novelWriter configuration object. """Create a temporary novelWriter configuration object.
@@ -64,15 +46,6 @@ def tmpConf(tmpDir):
theConf.setLastPath("") theConf.setLastPath("")
return theConf return theConf
# @pytest.fixture(scope="session")
# def nwConf(nwRef, nwTemp):
# """Temporary novelWriter configuration used for the dummy instance
# of novelWriter's main GUI.
# """
# theConf = Config()
# theConf.initConfig(nwRef, nwTemp)
# return theConf
@pytest.fixture(scope="session") @pytest.fixture(scope="session")
def dummyGUI(tmpConf): def dummyGUI(tmpConf):
"""Create a dummy instance of novelWriter's main GUI class. """Create a dummy instance of novelWriter's main GUI class.
@@ -81,131 +54,159 @@ def dummyGUI(tmpConf):
theDummy.mainConf = tmpConf theDummy.mainConf = tmpConf
return theDummy return theDummy
# =============================================================================================== #
##
# Core Test Folders
##
@pytest.fixture(scope="session")
def nwRef():
"""The folder where all the reference files are stored for verifying
the results of tests.
"""
testDir = os.path.dirname(__file__)
refDir = os.path.join(testDir, "reference")
return refDir
##
# novelWriter Objects
##
@pytest.fixture(scope="session")
def nwConf(nwRef, tmpDir):
"""Temporary novelWriter configuration used for the dummy instance
of novelWriter's main GUI.
"""
theConf = Config()
theConf.initConfig(nwRef, tmpDir)
return theConf
## ##
# Temporary Test Folders # Temporary Test Folders
## ##
# @pytest.fixture(scope="session") @pytest.fixture(scope="session")
# def nwTempProj(nwTemp): def nwTempProj(tmpDir):
# """A temporary folder for project tests. """A temporary folder for project tests.
# """ """
# projDir = os.path.join(nwTemp, "proj") projDir = os.path.join(tmpDir, "proj")
# if not os.path.isdir(projDir): if not os.path.isdir(projDir):
# os.mkdir(projDir) os.mkdir(projDir)
# return projDir return projDir
# @pytest.fixture(scope="session") @pytest.fixture(scope="session")
# def nwTempGUI(nwTemp): def nwTempGUI(tmpDir):
# """A temporary folder for GUI tests. """A temporary folder for GUI tests.
# """ """
# guiDir = os.path.join(nwTemp, "gui") guiDir = os.path.join(tmpDir, "gui")
# if not os.path.isdir(guiDir): if not os.path.isdir(guiDir):
# os.mkdir(guiDir) os.mkdir(guiDir)
# return guiDir return guiDir
# @pytest.fixture(scope="session") @pytest.fixture(scope="session")
# def nwTempBuild(nwTemp): def nwTempBuild(tmpDir):
# """A temporary folder for build tests. """A temporary folder for build tests.
# """ """
# buildDir = os.path.join(nwTemp, "build") buildDir = os.path.join(tmpDir, "build")
# if not os.path.isdir(buildDir): if not os.path.isdir(buildDir):
# os.mkdir(buildDir) os.mkdir(buildDir)
# return buildDir return buildDir
# @pytest.fixture(scope="function") @pytest.fixture(scope="function")
# def nwFuncTemp(nwTemp): def nwFuncTemp(tmpDir):
# """A temporary folder for a single test function. """A temporary folder for a single test function.
# """ """
# funcDir = os.path.join(nwTemp, "ftemp") funcDir = os.path.join(tmpDir, "ftemp")
# if os.path.isdir(funcDir): if os.path.isdir(funcDir):
# shutil.rmtree(funcDir) shutil.rmtree(funcDir)
# if not os.path.isdir(funcDir): if not os.path.isdir(funcDir):
# os.mkdir(funcDir) os.mkdir(funcDir)
# yield funcDir yield funcDir
# if os.path.isdir(funcDir): if os.path.isdir(funcDir):
# shutil.rmtree(funcDir) shutil.rmtree(funcDir)
# return return
## ##
# Temp Folders for Projects # Temp Folders for Projects
## ##
# @pytest.fixture(scope="function") @pytest.fixture(scope="function")
# def nwMinimal(nwTemp): def nwMinimal(tmpDir):
# """A minimal novelWriter example project. """A minimal novelWriter example project.
# """ """
# testDir = os.path.dirname(__file__) testDir = os.path.dirname(__file__)
# minimalStore = os.path.join(testDir, "minimal") minimalStore = os.path.join(testDir, "minimal")
# minimalDir = os.path.join(nwTemp, "minimal") minimalDir = os.path.join(tmpDir, "minimal")
# if os.path.isdir(minimalDir): if os.path.isdir(minimalDir):
# shutil.rmtree(minimalDir) shutil.rmtree(minimalDir)
# shutil.copytree(minimalStore, minimalDir) shutil.copytree(minimalStore, minimalDir)
# cacheDir = os.path.join(minimalDir, "cache") cacheDir = os.path.join(minimalDir, "cache")
# if os.path.isdir(cacheDir): if os.path.isdir(cacheDir):
# shutil.rmtree(cacheDir) shutil.rmtree(cacheDir)
# metaDir = os.path.join(minimalDir, "meta") metaDir = os.path.join(minimalDir, "meta")
# if os.path.isdir(metaDir): if os.path.isdir(metaDir):
# shutil.rmtree(metaDir) shutil.rmtree(metaDir)
# yield minimalDir yield minimalDir
# if os.path.isdir(minimalDir): if os.path.isdir(minimalDir):
# shutil.rmtree(minimalDir) shutil.rmtree(minimalDir)
# return return
# @pytest.fixture(scope="function") @pytest.fixture(scope="function")
# def nwLipsum(nwTemp): def nwLipsum(tmpDir):
# """A medium sized novelWriter example project with a lot of Lorem """A medium sized novelWriter example project with a lot of Lorem
# Ipsum dummy text. Ipsum dummy text.
# """ """
# testDir = os.path.dirname(__file__) testDir = os.path.dirname(__file__)
# lipsumStore = os.path.join(testDir, "lipsum") lipsumStore = os.path.join(testDir, "lipsum")
# lipsumDir = os.path.join(nwTemp, "lipsum") lipsumDir = os.path.join(tmpDir, "lipsum")
# if os.path.isdir(lipsumDir): if os.path.isdir(lipsumDir):
# shutil.rmtree(lipsumDir) shutil.rmtree(lipsumDir)
# shutil.copytree(lipsumStore, lipsumDir) shutil.copytree(lipsumStore, lipsumDir)
# cacheDir = os.path.join(lipsumDir, "cache") cacheDir = os.path.join(lipsumDir, "cache")
# if os.path.isdir(cacheDir): if os.path.isdir(cacheDir):
# shutil.rmtree(cacheDir) shutil.rmtree(cacheDir)
# metaDir = os.path.join(lipsumDir, "meta") metaDir = os.path.join(lipsumDir, "meta")
# if os.path.isdir(metaDir): if os.path.isdir(metaDir):
# shutil.rmtree(metaDir) shutil.rmtree(metaDir)
# yield lipsumDir yield lipsumDir
# if os.path.isdir(lipsumDir): if os.path.isdir(lipsumDir):
# shutil.rmtree(lipsumDir) shutil.rmtree(lipsumDir)
# return return
# @pytest.fixture(scope="function") @pytest.fixture(scope="function")
# def nwOldProj(nwTemp): def nwOldProj(tmpDir):
# """A minimal movelWriter project using the old folder structure. """A minimal movelWriter project using the old folder structure.
# """ """
# testDir = os.path.dirname(__file__) testDir = os.path.dirname(__file__)
# oldProjStore = os.path.join(testDir, "oldproj") oldProjStore = os.path.join(testDir, "oldproj")
# oldProjDir = os.path.join(nwTemp, "oldproj") oldProjDir = os.path.join(tmpDir, "oldproj")
# if os.path.isdir(oldProjDir): if os.path.isdir(oldProjDir):
# shutil.rmtree(oldProjDir) shutil.rmtree(oldProjDir)
# shutil.copytree(oldProjStore, oldProjDir) shutil.copytree(oldProjStore, oldProjDir)
# yield oldProjDir yield oldProjDir
# if os.path.isdir(oldProjDir): if os.path.isdir(oldProjDir):
# shutil.rmtree(oldProjDir) shutil.rmtree(oldProjDir)
# return return
## ##
# Monkey Patch Dialogs # Monkey Patch Dialogs
## ##
# @pytest.fixture(scope="function") @pytest.fixture(scope="function")
# def yesToAll(monkeypatch): def yesToAll(monkeypatch):
# """Make the message boxes/questions always say yes. """Make the message boxes/questions always say yes.
# """ """
# monkeypatch.setattr( monkeypatch.setattr(
# QMessageBox, "question", lambda *args, **kwargs: QMessageBox.Yes QMessageBox, "question", lambda *args, **kwargs: QMessageBox.Yes
# ) )
# monkeypatch.setattr( monkeypatch.setattr(
# QMessageBox, "information", lambda *args, **kwargs: QMessageBox.Yes QMessageBox, "information", lambda *args, **kwargs: QMessageBox.Yes
# ) )
# monkeypatch.setattr( monkeypatch.setattr(
# QMessageBox, "warning", lambda *args, **kwargs: QMessageBox.Yes QMessageBox, "warning", lambda *args, **kwargs: QMessageBox.Yes
# ) )
# monkeypatch.setattr( monkeypatch.setattr(
# QMessageBox, "critical", lambda *args, **kwargs: QMessageBox.Yes QMessageBox, "critical", lambda *args, **kwargs: QMessageBox.Yes
# ) )
# return return
+8 -8
View File
@@ -39,35 +39,35 @@
</importance> </importance>
</settings> </settings>
<content count="8"> <content count="8">
<item handle="73475cb40a568" order="None" parent="None"> <item handle="73475cb40a568" order="0" parent="None">
<name>Novel</name> <name>Novel</name>
<type>ROOT</type> <type>ROOT</type>
<class>NOVEL</class> <class>NOVEL</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="44cb730c42048" order="None" parent="None"> <item handle="44cb730c42048" order="0" parent="None">
<name>Plot</name> <name>Plot</name>
<type>ROOT</type> <type>ROOT</type>
<class>PLOT</class> <class>PLOT</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="71ee45a3c0db9" order="None" parent="None"> <item handle="71ee45a3c0db9" order="0" parent="None">
<name>Characters</name> <name>Characters</name>
<type>ROOT</type> <type>ROOT</type>
<class>CHARACTER</class> <class>CHARACTER</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="811786ad1ae74" order="None" parent="None"> <item handle="811786ad1ae74" order="0" parent="None">
<name>World</name> <name>World</name>
<type>ROOT</type> <type>ROOT</type>
<class>WORLD</class> <class>WORLD</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="25fc0e7096fc6" order="None" parent="73475cb40a568"> <item handle="25fc0e7096fc6" order="0" parent="73475cb40a568">
<name>Title Page</name> <name>Title Page</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -79,14 +79,14 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="31489056e0916" order="None" parent="73475cb40a568"> <item handle="31489056e0916" order="0" parent="73475cb40a568">
<name>New Chapter</name> <name>New Chapter</name>
<type>FOLDER</type> <type>FOLDER</type>
<class>NOVEL</class> <class>NOVEL</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="98010bd9270f9" order="None" parent="31489056e0916"> <item handle="98010bd9270f9" order="0" parent="31489056e0916">
<name>New Chapter</name> <name>New Chapter</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -98,7 +98,7 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="0e17daca5f3e1" order="None" parent="31489056e0916"> <item handle="0e17daca5f3e1" order="0" parent="31489056e0916">
<name>New Scene</name> <name>New Scene</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
+12 -12
View File
@@ -39,35 +39,35 @@
</importance> </importance>
</settings> </settings>
<content count="12"> <content count="12">
<item handle="73475cb40a568" order="None" parent="None"> <item handle="73475cb40a568" order="0" parent="None">
<name>Novel</name> <name>Novel</name>
<type>ROOT</type> <type>ROOT</type>
<class>NOVEL</class> <class>NOVEL</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="44cb730c42048" order="None" parent="None"> <item handle="44cb730c42048" order="0" parent="None">
<name>Plot</name> <name>Plot</name>
<type>ROOT</type> <type>ROOT</type>
<class>PLOT</class> <class>PLOT</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="71ee45a3c0db9" order="None" parent="None"> <item handle="71ee45a3c0db9" order="0" parent="None">
<name>Characters</name> <name>Characters</name>
<type>ROOT</type> <type>ROOT</type>
<class>CHARACTER</class> <class>CHARACTER</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="811786ad1ae74" order="None" parent="None"> <item handle="811786ad1ae74" order="0" parent="None">
<name>World</name> <name>World</name>
<type>ROOT</type> <type>ROOT</type>
<class>WORLD</class> <class>WORLD</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="25fc0e7096fc6" order="None" parent="73475cb40a568"> <item handle="25fc0e7096fc6" order="0" parent="73475cb40a568">
<name>Title Page</name> <name>Title Page</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -79,14 +79,14 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="31489056e0916" order="None" parent="73475cb40a568"> <item handle="31489056e0916" order="0" parent="73475cb40a568">
<name>New Chapter</name> <name>New Chapter</name>
<type>FOLDER</type> <type>FOLDER</type>
<class>NOVEL</class> <class>NOVEL</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="98010bd9270f9" order="None" parent="31489056e0916"> <item handle="98010bd9270f9" order="0" parent="31489056e0916">
<name>New Chapter</name> <name>New Chapter</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -98,7 +98,7 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="0e17daca5f3e1" order="None" parent="31489056e0916"> <item handle="0e17daca5f3e1" order="0" parent="31489056e0916">
<name>New Scene</name> <name>New Scene</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -110,28 +110,28 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="1a6562590ef19" order="None" parent="None"> <item handle="1a6562590ef19" order="0" parent="None">
<name>Timeline</name> <name>Timeline</name>
<type>ROOT</type> <type>ROOT</type>
<class>TIMELINE</class> <class>TIMELINE</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="031b4af5197ec" order="None" parent="None"> <item handle="031b4af5197ec" order="0" parent="None">
<name>Object</name> <name>Object</name>
<type>ROOT</type> <type>ROOT</type>
<class>OBJECT</class> <class>OBJECT</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="41cfc0d1f2d12" order="None" parent="None"> <item handle="41cfc0d1f2d12" order="0" parent="None">
<name>Custom1</name> <name>Custom1</name>
<type>ROOT</type> <type>ROOT</type>
<class>CUSTOM</class> <class>CUSTOM</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="2858dcd1057d3" order="None" parent="None"> <item handle="2858dcd1057d3" order="0" parent="None">
<name>Custom2</name> <name>Custom2</name>
<type>ROOT</type> <type>ROOT</type>
<class>CUSTOM</class> <class>CUSTOM</class>
+10 -10
View File
@@ -39,35 +39,35 @@
</importance> </importance>
</settings> </settings>
<content count="10"> <content count="10">
<item handle="73475cb40a568" order="None" parent="None"> <item handle="73475cb40a568" order="0" parent="None">
<name>Novel</name> <name>Novel</name>
<type>ROOT</type> <type>ROOT</type>
<class>NOVEL</class> <class>NOVEL</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="44cb730c42048" order="None" parent="None"> <item handle="44cb730c42048" order="0" parent="None">
<name>Plot</name> <name>Plot</name>
<type>ROOT</type> <type>ROOT</type>
<class>PLOT</class> <class>PLOT</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="71ee45a3c0db9" order="None" parent="None"> <item handle="71ee45a3c0db9" order="0" parent="None">
<name>Characters</name> <name>Characters</name>
<type>ROOT</type> <type>ROOT</type>
<class>CHARACTER</class> <class>CHARACTER</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="811786ad1ae74" order="None" parent="None"> <item handle="811786ad1ae74" order="0" parent="None">
<name>World</name> <name>World</name>
<type>ROOT</type> <type>ROOT</type>
<class>WORLD</class> <class>WORLD</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="25fc0e7096fc6" order="None" parent="73475cb40a568"> <item handle="25fc0e7096fc6" order="0" parent="73475cb40a568">
<name>Title Page</name> <name>Title Page</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -79,14 +79,14 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="31489056e0916" order="None" parent="73475cb40a568"> <item handle="31489056e0916" order="0" parent="73475cb40a568">
<name>New Chapter</name> <name>New Chapter</name>
<type>FOLDER</type> <type>FOLDER</type>
<class>NOVEL</class> <class>NOVEL</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="98010bd9270f9" order="None" parent="31489056e0916"> <item handle="98010bd9270f9" order="0" parent="31489056e0916">
<name>New Chapter</name> <name>New Chapter</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -98,7 +98,7 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="0e17daca5f3e1" order="None" parent="31489056e0916"> <item handle="0e17daca5f3e1" order="0" parent="31489056e0916">
<name>New Scene</name> <name>New Scene</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -110,7 +110,7 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="1a6562590ef19" order="None" parent="31489056e0916"> <item handle="1a6562590ef19" order="0" parent="31489056e0916">
<name>Hello</name> <name>Hello</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -122,7 +122,7 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="031b4af5197ec" order="None" parent="71ee45a3c0db9"> <item handle="031b4af5197ec" order="0" parent="71ee45a3c0db9">
<name>Jane</name> <name>Jane</name>
<type>FILE</type> <type>FILE</type>
<class>CHARACTER</class> <class>CHARACTER</class>
+23 -23
View File
@@ -41,56 +41,56 @@
</importance> </importance>
</settings> </settings>
<content count="23"> <content count="23">
<item handle="73475cb40a568" order="None" parent="None"> <item handle="73475cb40a568" order="0" parent="None">
<name>Novel</name> <name>Novel</name>
<type>ROOT</type> <type>ROOT</type>
<class>NOVEL</class> <class>NOVEL</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="44cb730c42048" order="None" parent="None"> <item handle="44cb730c42048" order="0" parent="None">
<name>Plot</name> <name>Plot</name>
<type>ROOT</type> <type>ROOT</type>
<class>PLOT</class> <class>PLOT</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="71ee45a3c0db9" order="None" parent="None"> <item handle="71ee45a3c0db9" order="0" parent="None">
<name>Characters</name> <name>Characters</name>
<type>ROOT</type> <type>ROOT</type>
<class>CHARACTER</class> <class>CHARACTER</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="811786ad1ae74" order="None" parent="None"> <item handle="811786ad1ae74" order="0" parent="None">
<name>Locations</name> <name>Locations</name>
<type>ROOT</type> <type>ROOT</type>
<class>WORLD</class> <class>WORLD</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="25fc0e7096fc6" order="None" parent="None"> <item handle="25fc0e7096fc6" order="0" parent="None">
<name>Timeline</name> <name>Timeline</name>
<type>ROOT</type> <type>ROOT</type>
<class>TIMELINE</class> <class>TIMELINE</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="31489056e0916" order="None" parent="None"> <item handle="31489056e0916" order="0" parent="None">
<name>Objects</name> <name>Objects</name>
<type>ROOT</type> <type>ROOT</type>
<class>OBJECT</class> <class>OBJECT</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="98010bd9270f9" order="None" parent="None"> <item handle="98010bd9270f9" order="0" parent="None">
<name>Entity</name> <name>Entity</name>
<type>ROOT</type> <type>ROOT</type>
<class>ENTITY</class> <class>ENTITY</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="0e17daca5f3e1" order="None" parent="73475cb40a568"> <item handle="0e17daca5f3e1" order="0" parent="73475cb40a568">
<name>Title Page</name> <name>Title Page</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -102,14 +102,14 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="1a6562590ef19" order="None" parent="73475cb40a568"> <item handle="1a6562590ef19" order="0" parent="73475cb40a568">
<name>Chapter 1</name> <name>Chapter 1</name>
<type>FOLDER</type> <type>FOLDER</type>
<class>NOVEL</class> <class>NOVEL</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="031b4af5197ec" order="None" parent="1a6562590ef19"> <item handle="031b4af5197ec" order="0" parent="1a6562590ef19">
<name>Chapter 1</name> <name>Chapter 1</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -121,7 +121,7 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="41cfc0d1f2d12" order="None" parent="1a6562590ef19"> <item handle="41cfc0d1f2d12" order="0" parent="1a6562590ef19">
<name>Scene 1.1</name> <name>Scene 1.1</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -133,7 +133,7 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="2858dcd1057d3" order="None" parent="1a6562590ef19"> <item handle="2858dcd1057d3" order="0" parent="1a6562590ef19">
<name>Scene 1.2</name> <name>Scene 1.2</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -145,7 +145,7 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="2fca346db6561" order="None" parent="1a6562590ef19"> <item handle="2fca346db6561" order="0" parent="1a6562590ef19">
<name>Scene 1.3</name> <name>Scene 1.3</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -157,14 +157,14 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="02d20bbd7e394" order="None" parent="73475cb40a568"> <item handle="02d20bbd7e394" order="0" parent="73475cb40a568">
<name>Chapter 2</name> <name>Chapter 2</name>
<type>FOLDER</type> <type>FOLDER</type>
<class>NOVEL</class> <class>NOVEL</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="7688b6ef52555" order="None" parent="02d20bbd7e394"> <item handle="7688b6ef52555" order="0" parent="02d20bbd7e394">
<name>Chapter 2</name> <name>Chapter 2</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -176,7 +176,7 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="c837649cce43f" order="None" parent="02d20bbd7e394"> <item handle="c837649cce43f" order="0" parent="02d20bbd7e394">
<name>Scene 2.1</name> <name>Scene 2.1</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -188,7 +188,7 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="6208ef0f7750c" order="None" parent="02d20bbd7e394"> <item handle="6208ef0f7750c" order="0" parent="02d20bbd7e394">
<name>Scene 2.2</name> <name>Scene 2.2</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -200,7 +200,7 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="3e1e967e9b793" order="None" parent="02d20bbd7e394"> <item handle="3e1e967e9b793" order="0" parent="02d20bbd7e394">
<name>Scene 2.3</name> <name>Scene 2.3</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -212,14 +212,14 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="39fa9ec190eee" order="None" parent="73475cb40a568"> <item handle="39fa9ec190eee" order="0" parent="73475cb40a568">
<name>Chapter 3</name> <name>Chapter 3</name>
<type>FOLDER</type> <type>FOLDER</type>
<class>NOVEL</class> <class>NOVEL</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="d029fa3a95e17" order="None" parent="39fa9ec190eee"> <item handle="d029fa3a95e17" order="0" parent="39fa9ec190eee">
<name>Chapter 3</name> <name>Chapter 3</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -231,7 +231,7 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="81b8a03f97e87" order="None" parent="39fa9ec190eee"> <item handle="81b8a03f97e87" order="0" parent="39fa9ec190eee">
<name>Scene 3.1</name> <name>Scene 3.1</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -243,7 +243,7 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="da4ea2a5506f2" order="None" parent="39fa9ec190eee"> <item handle="da4ea2a5506f2" order="0" parent="39fa9ec190eee">
<name>Scene 3.2</name> <name>Scene 3.2</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -255,7 +255,7 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="a68b412c42825" order="None" parent="39fa9ec190eee"> <item handle="a68b412c42825" order="0" parent="39fa9ec190eee">
<name>Scene 3.3</name> <name>Scene 3.3</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
+14 -14
View File
@@ -41,56 +41,56 @@
</importance> </importance>
</settings> </settings>
<content count="14"> <content count="14">
<item handle="73475cb40a568" order="None" parent="None"> <item handle="73475cb40a568" order="0" parent="None">
<name>Novel</name> <name>Novel</name>
<type>ROOT</type> <type>ROOT</type>
<class>NOVEL</class> <class>NOVEL</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="44cb730c42048" order="None" parent="None"> <item handle="44cb730c42048" order="0" parent="None">
<name>Plot</name> <name>Plot</name>
<type>ROOT</type> <type>ROOT</type>
<class>PLOT</class> <class>PLOT</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="71ee45a3c0db9" order="None" parent="None"> <item handle="71ee45a3c0db9" order="0" parent="None">
<name>Characters</name> <name>Characters</name>
<type>ROOT</type> <type>ROOT</type>
<class>CHARACTER</class> <class>CHARACTER</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="811786ad1ae74" order="None" parent="None"> <item handle="811786ad1ae74" order="0" parent="None">
<name>Locations</name> <name>Locations</name>
<type>ROOT</type> <type>ROOT</type>
<class>WORLD</class> <class>WORLD</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="25fc0e7096fc6" order="None" parent="None"> <item handle="25fc0e7096fc6" order="0" parent="None">
<name>Timeline</name> <name>Timeline</name>
<type>ROOT</type> <type>ROOT</type>
<class>TIMELINE</class> <class>TIMELINE</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="31489056e0916" order="None" parent="None"> <item handle="31489056e0916" order="0" parent="None">
<name>Objects</name> <name>Objects</name>
<type>ROOT</type> <type>ROOT</type>
<class>OBJECT</class> <class>OBJECT</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="98010bd9270f9" order="None" parent="None"> <item handle="98010bd9270f9" order="0" parent="None">
<name>Entity</name> <name>Entity</name>
<type>ROOT</type> <type>ROOT</type>
<class>ENTITY</class> <class>ENTITY</class>
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
</item> </item>
<item handle="0e17daca5f3e1" order="None" parent="73475cb40a568"> <item handle="0e17daca5f3e1" order="0" parent="73475cb40a568">
<name>Title Page</name> <name>Title Page</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -102,7 +102,7 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="1a6562590ef19" order="None" parent="73475cb40a568"> <item handle="1a6562590ef19" order="0" parent="73475cb40a568">
<name>Scene 1</name> <name>Scene 1</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -114,7 +114,7 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="031b4af5197ec" order="None" parent="73475cb40a568"> <item handle="031b4af5197ec" order="0" parent="73475cb40a568">
<name>Scene 2</name> <name>Scene 2</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -126,7 +126,7 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="41cfc0d1f2d12" order="None" parent="73475cb40a568"> <item handle="41cfc0d1f2d12" order="0" parent="73475cb40a568">
<name>Scene 3</name> <name>Scene 3</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -138,7 +138,7 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="2858dcd1057d3" order="None" parent="73475cb40a568"> <item handle="2858dcd1057d3" order="0" parent="73475cb40a568">
<name>Scene 4</name> <name>Scene 4</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -150,7 +150,7 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="2fca346db6561" order="None" parent="73475cb40a568"> <item handle="2fca346db6561" order="0" parent="73475cb40a568">
<name>Scene 5</name> <name>Scene 5</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
@@ -162,7 +162,7 @@
<paraCount>0</paraCount> <paraCount>0</paraCount>
<cursorPos>0</cursorPos> <cursorPos>0</cursorPos>
</item> </item>
<item handle="02d20bbd7e394" order="None" parent="73475cb40a568"> <item handle="02d20bbd7e394" order="0" parent="73475cb40a568">
<name>Scene 6</name> <name>Scene 6</name>
<type>FILE</type> <type>FILE</type>
<class>NOVEL</class> <class>NOVEL</class>
+18 -18
View File
@@ -8,11 +8,11 @@ import os
from nwtools import cmpFiles from nwtools import cmpFiles
@pytest.mark.core @pytest.mark.core
def testConfigCore(tmpConf, nwTemp, nwRef): def testConfigCore(tmpConf, tmpDir, nwRef):
refConf = os.path.join(nwRef, "novelwriter.conf") refConf = os.path.join(nwRef, "novelwriter.conf")
testConf = os.path.join(tmpConf.confPath, "novelwriter.conf") testConf = os.path.join(tmpConf.confPath, "novelwriter.conf")
assert tmpConf.confPath == nwTemp assert tmpConf.confPath == tmpDir
assert tmpConf.saveConfig() assert tmpConf.saveConfig()
assert cmpFiles(testConf, refConf, [2, 9]) assert cmpFiles(testConf, refConf, [2, 9])
assert not tmpConf.confChanged assert not tmpConf.confChanged
@@ -21,29 +21,29 @@ def testConfigCore(tmpConf, nwTemp, nwRef):
assert not tmpConf.confChanged assert not tmpConf.confChanged
@pytest.mark.core @pytest.mark.core
def testConfigSetConfPath(tmpConf, nwTemp): def testConfigSetConfPath(tmpConf, tmpDir):
assert tmpConf.setConfPath(None) assert tmpConf.setConfPath(None)
assert not tmpConf.setConfPath(os.path.join("somewhere", "over", "the", "rainbow")) assert not tmpConf.setConfPath(os.path.join("somewhere", "over", "the", "rainbow"))
assert tmpConf.setConfPath(os.path.join(nwTemp, "novelwriter.conf")) assert tmpConf.setConfPath(os.path.join(tmpDir, "novelwriter.conf"))
assert tmpConf.confPath == nwTemp assert tmpConf.confPath == tmpDir
assert tmpConf.confFile == "novelwriter.conf" assert tmpConf.confFile == "novelwriter.conf"
assert not tmpConf.confChanged assert not tmpConf.confChanged
@pytest.mark.core @pytest.mark.core
def testConfigSetDataPath(tmpConf, nwTemp): def testConfigSetDataPath(tmpConf, tmpDir):
assert tmpConf.setDataPath(None) assert tmpConf.setDataPath(None)
assert not tmpConf.setDataPath(os.path.join("somewhere", "over", "the", "rainbow")) assert not tmpConf.setDataPath(os.path.join("somewhere", "over", "the", "rainbow"))
assert tmpConf.setDataPath(nwTemp) assert tmpConf.setDataPath(tmpDir)
assert tmpConf.dataPath == nwTemp assert tmpConf.dataPath == tmpDir
assert not tmpConf.confChanged assert not tmpConf.confChanged
@pytest.mark.core @pytest.mark.core
def testConfigSetWinSize(tmpConf, nwTemp, nwRef): def testConfigSetWinSize(tmpConf, tmpDir, nwRef):
refConf = os.path.join(nwRef, "novelwriter.conf") refConf = os.path.join(nwRef, "novelwriter.conf")
testConf = os.path.join(tmpConf.confPath, "novelwriter.conf") testConf = os.path.join(tmpConf.confPath, "novelwriter.conf")
tmpConf.guiScale = 1.0 tmpConf.guiScale = 1.0
assert tmpConf.confPath == nwTemp assert tmpConf.confPath == tmpDir
assert tmpConf.setWinSize(1205, 655) assert tmpConf.setWinSize(1205, 655)
assert not tmpConf.confChanged assert not tmpConf.confChanged
assert tmpConf.setWinSize(70, 70) assert tmpConf.setWinSize(70, 70)
@@ -55,11 +55,11 @@ def testConfigSetWinSize(tmpConf, nwTemp, nwRef):
assert not tmpConf.confChanged assert not tmpConf.confChanged
@pytest.mark.core @pytest.mark.core
def testConfigSetTreeColWidths(tmpConf, nwTemp, nwRef): def testConfigSetTreeColWidths(tmpConf, tmpDir, nwRef):
refConf = os.path.join(nwRef, "novelwriter.conf") refConf = os.path.join(nwRef, "novelwriter.conf")
testConf = os.path.join(tmpConf.confPath, "novelwriter.conf") testConf = os.path.join(tmpConf.confPath, "novelwriter.conf")
assert tmpConf.confPath == nwTemp assert tmpConf.confPath == tmpDir
tmpConf.guiScale = 1.0 tmpConf.guiScale = 1.0
assert tmpConf.setTreeColWidths([10, 20, 25]) assert tmpConf.setTreeColWidths([10, 20, 25])
@@ -77,11 +77,11 @@ def testConfigSetTreeColWidths(tmpConf, nwTemp, nwRef):
assert not tmpConf.confChanged assert not tmpConf.confChanged
@pytest.mark.core @pytest.mark.core
def testConfigSetPanePos(tmpConf, nwTemp, nwRef): def testConfigSetPanePos(tmpConf, tmpDir, nwRef):
refConf = os.path.join(nwRef, "novelwriter.conf") refConf = os.path.join(nwRef, "novelwriter.conf")
testConf = os.path.join(tmpConf.confPath, "novelwriter.conf") testConf = os.path.join(tmpConf.confPath, "novelwriter.conf")
assert tmpConf.confPath == nwTemp assert tmpConf.confPath == tmpDir
tmpConf.guiScale = 2.0 tmpConf.guiScale = 2.0
assert tmpConf.setMainPanePos([200, 700]) assert tmpConf.setMainPanePos([200, 700])
@@ -113,11 +113,11 @@ def testConfigSetPanePos(tmpConf, nwTemp, nwRef):
assert not tmpConf.confChanged assert not tmpConf.confChanged
@pytest.mark.core @pytest.mark.core
def testConfigFlags(tmpConf, nwTemp, nwRef): def testConfigFlags(tmpConf, tmpDir, nwRef):
refConf = os.path.join(nwRef, "novelwriter.conf") refConf = os.path.join(nwRef, "novelwriter.conf")
testConf = os.path.join(tmpConf.confPath, "novelwriter.conf") testConf = os.path.join(tmpConf.confPath, "novelwriter.conf")
assert tmpConf.confPath == nwTemp assert tmpConf.confPath == tmpDir
assert not tmpConf.setShowRefPanel(False) assert not tmpConf.setShowRefPanel(False)
assert tmpConf.setShowRefPanel(True) assert tmpConf.setShowRefPanel(True)
@@ -137,8 +137,8 @@ def testConfigFlags(tmpConf, nwTemp, nwRef):
assert not tmpConf.confChanged assert not tmpConf.confChanged
@pytest.mark.core @pytest.mark.core
def testTextSizes(tmpConf, nwTemp, nwRef): def testTextSizes(tmpConf, tmpDir, nwRef):
assert tmpConf.confPath == nwTemp assert tmpConf.confPath == tmpDir
tmpConf.guiScale = 2.0 tmpConf.guiScale = 2.0
assert tmpConf.getTextWidth() == 1200 assert tmpConf.getTextWidth() == 1200
+8 -8
View File
@@ -345,30 +345,30 @@ def testCoreTree_XMLPackUnpack(dummyGUI, dummyItems):
assert etree.tostring(nwXML, pretty_print=False, encoding="utf-8") == ( assert etree.tostring(nwXML, pretty_print=False, encoding="utf-8") == (
b"<novelWriterXML>" b"<novelWriterXML>"
b"<content count=\"8\">" b"<content count=\"8\">"
b"<item handle=\"a000000000001\" order=\"None\" parent=\"None\">" b"<item handle=\"a000000000001\" order=\"0\" parent=\"None\">"
b"<name>Novel</name><type>ROOT</type><class>NOVEL</class><status>None</status>" b"<name>Novel</name><type>ROOT</type><class>NOVEL</class><status>None</status>"
b"<expanded>True</expanded></item>" b"<expanded>True</expanded></item>"
b"<item handle=\"b000000000001\" order=\"None\" parent=\"a000000000001\">" b"<item handle=\"b000000000001\" order=\"0\" parent=\"a000000000001\">"
b"<name>Act One</name><type>FOLDER</type><class>NOVEL</class><status>None</status>" b"<name>Act One</name><type>FOLDER</type><class>NOVEL</class><status>None</status>"
b"<expanded>True</expanded></item>" b"<expanded>True</expanded></item>"
b"<item handle=\"c000000000001\" order=\"None\" parent=\"b000000000001\">" b"<item handle=\"c000000000001\" order=\"0\" parent=\"b000000000001\">"
b"<name>Chapter One</name><type>FILE</type><class>NOVEL</class><status>None</status>" b"<name>Chapter One</name><type>FILE</type><class>NOVEL</class><status>None</status>"
b"<exported>True</exported><layout>UNNUMBERED</layout><charCount>300</charCount>" b"<exported>True</exported><layout>UNNUMBERED</layout><charCount>300</charCount>"
b"<wordCount>50</wordCount><paraCount>2</paraCount><cursorPos>0</cursorPos></item>" b"<wordCount>50</wordCount><paraCount>2</paraCount><cursorPos>0</cursorPos></item>"
b"<item handle=\"c000000000002\" order=\"None\" parent=\"b000000000001\">" b"<item handle=\"c000000000002\" order=\"0\" parent=\"b000000000001\">"
b"<name>Scene One</name><type>FILE</type><class>NOVEL</class><status>None</status>" b"<name>Scene One</name><type>FILE</type><class>NOVEL</class><status>None</status>"
b"<exported>True</exported><layout>SCENE</layout><charCount>3000</charCount>" b"<exported>True</exported><layout>SCENE</layout><charCount>3000</charCount>"
b"<wordCount>500</wordCount><paraCount>20</paraCount><cursorPos>0</cursorPos></item>" b"<wordCount>500</wordCount><paraCount>20</paraCount><cursorPos>0</cursorPos></item>"
b"<item handle=\"a000000000002\" order=\"None\" parent=\"None\">" b"<item handle=\"a000000000002\" order=\"0\" parent=\"None\">"
b"<name>Outtakes</name><type>ROOT</type><class>ARCHIVE</class><status>None</status>" b"<name>Outtakes</name><type>ROOT</type><class>ARCHIVE</class><status>None</status>"
b"<expanded>False</expanded></item>" b"<expanded>False</expanded></item>"
b"<item handle=\"a000000000003\" order=\"None\" parent=\"None\">" b"<item handle=\"a000000000003\" order=\"0\" parent=\"None\">"
b"<name>Trash</name><type>TRASH</type><class>TRASH</class><status>None</status>" b"<name>Trash</name><type>TRASH</type><class>TRASH</class><status>None</status>"
b"<expanded>False</expanded></item>" b"<expanded>False</expanded></item>"
b"<item handle=\"a000000000004\" order=\"None\" parent=\"None\">" b"<item handle=\"a000000000004\" order=\"0\" parent=\"None\">"
b"<name>Characters</name><type>ROOT</type><class>CHARACTER</class><status>None</status>" b"<name>Characters</name><type>ROOT</type><class>CHARACTER</class><status>None</status>"
b"<expanded>True</expanded></item>" b"<expanded>True</expanded></item>"
b"<item handle=\"b000000000002\" order=\"None\" parent=\"a000000000002\">" b"<item handle=\"b000000000002\" order=\"0\" parent=\"a000000000002\">"
b"<name>Jane Doe</name><type>FILE</type><class>CHARACTER</class><status>None</status>" b"<name>Jane Doe</name><type>FILE</type><class>CHARACTER</class><status>None</status>"
b"<exported>True</exported><layout>NOTE</layout><charCount>2000</charCount>" b"<exported>True</exported><layout>NOTE</layout><charCount>2000</charCount>"
b"<wordCount>400</wordCount><paraCount>16</paraCount><cursorPos>0</cursorPos></item>" b"<wordCount>400</wordCount><paraCount>16</paraCount><cursorPos>0</cursorPos></item>"
+25 -25
View File
@@ -30,8 +30,8 @@ typeDelay = 1
stepDelay = 20 stepDelay = 20
@pytest.mark.gui @pytest.mark.gui
def testProjectSettings(qtbot, monkeypatch, yesToAll, nwFuncTemp, nwTempGUI, nwRef, nwTemp): def testProjectSettings(qtbot, monkeypatch, yesToAll, nwFuncTemp, nwTempGUI, nwRef, tmpDir):
nwGUI = nw.main(["--testmode", "--config=%s" % nwTemp, "--data=%s" % nwTemp]) nwGUI = nw.main(["--testmode", "--config=%s" % tmpDir, "--data=%s" % tmpDir])
qtbot.addWidget(nwGUI) qtbot.addWidget(nwGUI)
nwGUI.show() nwGUI.show()
qtbot.waitForWindowShown(nwGUI) qtbot.waitForWindowShown(nwGUI)
@@ -145,8 +145,8 @@ def testProjectSettings(qtbot, monkeypatch, yesToAll, nwFuncTemp, nwTempGUI, nwR
nwGUI.closeMain() nwGUI.closeMain()
@pytest.mark.gui @pytest.mark.gui
def testItemEditor(qtbot, yesToAll, monkeypatch, nwFuncTemp, nwTempGUI, nwRef, nwTemp): def testItemEditor(qtbot, yesToAll, monkeypatch, nwFuncTemp, nwTempGUI, nwRef, tmpDir):
nwGUI = nw.main(["--testmode", "--config=%s" % nwTemp, "--data=%s" % nwTemp]) nwGUI = nw.main(["--testmode", "--config=%s" % tmpDir, "--data=%s" % tmpDir])
qtbot.addWidget(nwGUI) qtbot.addWidget(nwGUI)
nwGUI.show() nwGUI.show()
qtbot.waitForWindowShown(nwGUI) qtbot.waitForWindowShown(nwGUI)
@@ -218,8 +218,8 @@ def testItemEditor(qtbot, yesToAll, monkeypatch, nwFuncTemp, nwTempGUI, nwRef, n
nwGUI.closeMain() nwGUI.closeMain()
@pytest.mark.gui @pytest.mark.gui
def testWritingStatsExport(qtbot, monkeypatch, yesToAll, nwFuncTemp, nwTemp): def testWritingStatsExport(qtbot, monkeypatch, yesToAll, nwFuncTemp, tmpDir):
nwGUI = nw.main(["--testmode", "--config=%s" % nwTemp, "--data=%s" % nwTemp]) nwGUI = nw.main(["--testmode", "--config=%s" % tmpDir, "--data=%s" % tmpDir])
qtbot.addWidget(nwGUI) qtbot.addWidget(nwGUI)
nwGUI.show() nwGUI.show()
qtbot.waitForWindowShown(nwGUI) qtbot.waitForWindowShown(nwGUI)
@@ -357,8 +357,8 @@ def testWritingStatsExport(qtbot, monkeypatch, yesToAll, nwFuncTemp, nwTemp):
nwGUI.closeMain() nwGUI.closeMain()
@pytest.mark.gui @pytest.mark.gui
def testAboutBox(qtbot, monkeypatch, nwFuncTemp, nwTemp): def testAboutBox(qtbot, monkeypatch, nwFuncTemp, tmpDir):
nwGUI = nw.main(["--testmode", "--config=%s" % nwFuncTemp, "--data=%s" % nwTemp]) nwGUI = nw.main(["--testmode", "--config=%s" % nwFuncTemp, "--data=%s" % tmpDir])
qtbot.addWidget(nwGUI) qtbot.addWidget(nwGUI)
nwGUI.show() nwGUI.show()
qtbot.waitForWindowShown(nwGUI) qtbot.waitForWindowShown(nwGUI)
@@ -397,9 +397,9 @@ def testAboutBox(qtbot, monkeypatch, nwFuncTemp, nwTemp):
nwGUI.closeMain() nwGUI.closeMain()
@pytest.mark.gui @pytest.mark.gui
def testBuildTool(qtbot, yesToAll, nwTempBuild, nwLipsum, nwRef, nwTemp): def testBuildTool(qtbot, yesToAll, nwTempBuild, nwLipsum, nwRef, tmpDir):
nwGUI = nw.main(["--testmode", "--config=%s" % nwLipsum, "--data=%s" % nwTemp]) nwGUI = nw.main(["--testmode", "--config=%s" % nwLipsum, "--data=%s" % tmpDir])
qtbot.addWidget(nwGUI) qtbot.addWidget(nwGUI)
nwGUI.show() nwGUI.show()
qtbot.waitForWindowShown(nwGUI) qtbot.waitForWindowShown(nwGUI)
@@ -589,9 +589,9 @@ def testBuildTool(qtbot, yesToAll, nwTempBuild, nwLipsum, nwRef, nwTemp):
nwGUI.closeMain() nwGUI.closeMain()
@pytest.mark.gui @pytest.mark.gui
def testMergeSplitTools(qtbot, monkeypatch, yesToAll, nwTempGUI, nwLipsum, nwRef, nwTemp): def testMergeSplitTools(qtbot, monkeypatch, yesToAll, nwTempGUI, nwLipsum, nwRef, tmpDir):
nwGUI = nw.main(["--testmode", "--config=%s" % nwLipsum, "--data=%s" % nwTemp]) nwGUI = nw.main(["--testmode", "--config=%s" % nwLipsum, "--data=%s" % tmpDir])
qtbot.addWidget(nwGUI) qtbot.addWidget(nwGUI)
nwGUI.show() nwGUI.show()
qtbot.waitForWindowShown(nwGUI) qtbot.waitForWindowShown(nwGUI)
@@ -740,7 +740,7 @@ def testMergeSplitTools(qtbot, monkeypatch, yesToAll, nwTempGUI, nwLipsum, nwRef
nwGUI.closeMain() nwGUI.closeMain()
@pytest.mark.gui @pytest.mark.gui
def testNewProjectWizard(qtbot, monkeypatch, yesToAll, nwMinimal, nwTemp): def testNewProjectWizard(qtbot, monkeypatch, yesToAll, nwMinimal, tmpDir):
if sys.platform.startswith("darwin"): if sys.platform.startswith("darwin"):
# Disable for macOS because the test segfaults on QWizard.show() # Disable for macOS because the test segfaults on QWizard.show()
@@ -752,7 +752,7 @@ def testNewProjectWizard(qtbot, monkeypatch, yesToAll, nwMinimal, nwTemp):
ProjWizardCustomPage, ProjWizardFinalPage ProjWizardCustomPage, ProjWizardFinalPage
) )
nwGUI = nw.main(["--testmode", "--config=%s" % nwTemp, "--data=%s" % nwTemp]) nwGUI = nw.main(["--testmode", "--config=%s" % tmpDir, "--data=%s" % tmpDir])
qtbot.addWidget(nwGUI) qtbot.addWidget(nwGUI)
nwGUI.show() nwGUI.show()
qtbot.waitForWindowShown(nwGUI) qtbot.waitForWindowShown(nwGUI)
@@ -937,8 +937,8 @@ def testNewProjectWizard(qtbot, monkeypatch, yesToAll, nwMinimal, nwTemp):
nwGUI.close() nwGUI.close()
@pytest.mark.gui @pytest.mark.gui
def testLoadProject(qtbot, monkeypatch, yesToAll, nwMinimal, nwTemp): def testLoadProject(qtbot, monkeypatch, yesToAll, nwMinimal, tmpDir):
nwGUI = nw.main(["--testmode", "--config=%s" % nwMinimal, "--data=%s" % nwTemp]) nwGUI = nw.main(["--testmode", "--config=%s" % nwMinimal, "--data=%s" % tmpDir])
qtbot.addWidget(nwGUI) qtbot.addWidget(nwGUI)
nwGUI.show() nwGUI.show()
qtbot.waitForWindowShown(nwGUI) qtbot.waitForWindowShown(nwGUI)
@@ -1017,8 +1017,8 @@ def testLoadProject(qtbot, monkeypatch, yesToAll, nwMinimal, nwTemp):
nwGUI.close() nwGUI.close()
@pytest.mark.gui @pytest.mark.gui
def testPreferences(qtbot, monkeypatch, yesToAll, nwMinimal, nwTemp, nwRef, tmpConf): def testPreferences(qtbot, monkeypatch, yesToAll, nwMinimal, tmpDir, nwRef, tmpConf):
nwGUI = nw.main(["--testmode", "--config=%s" % nwMinimal, "--data=%s" % nwTemp]) nwGUI = nw.main(["--testmode", "--config=%s" % nwMinimal, "--data=%s" % tmpDir])
qtbot.addWidget(nwGUI) qtbot.addWidget(nwGUI)
nwGUI.show() nwGUI.show()
qtbot.waitForWindowShown(nwGUI) qtbot.waitForWindowShown(nwGUI)
@@ -1205,7 +1205,7 @@ def testPreferences(qtbot, monkeypatch, yesToAll, nwMinimal, nwTemp, nwRef, tmpC
refConf = os.path.join(nwRef, "novelwriter_prefs.conf") refConf = os.path.join(nwRef, "novelwriter_prefs.conf")
projConf = os.path.join(nwGUI.mainConf.confPath, "novelwriter.conf") projConf = os.path.join(nwGUI.mainConf.confPath, "novelwriter.conf")
testConf = os.path.join(nwTemp, "novelwriter_prefs.conf") testConf = os.path.join(tmpDir, "novelwriter_prefs.conf")
copyfile(projConf, testConf) copyfile(projConf, testConf)
ignoreLines = [ ignoreLines = [
2, # Timestamp 2, # Timestamp
@@ -1216,8 +1216,8 @@ def testPreferences(qtbot, monkeypatch, yesToAll, nwMinimal, nwTemp, nwRef, tmpC
assert cmpFiles(testConf, refConf, ignoreLines) assert cmpFiles(testConf, refConf, ignoreLines)
@pytest.mark.gui @pytest.mark.gui
def testQuotesDialog(qtbot, yesToAll, nwMinimal, nwTemp): def testQuotesDialog(qtbot, yesToAll, nwMinimal, tmpDir):
nwGUI = nw.main(["--testmode", "--config=%s" % nwMinimal, "--data=%s" % nwTemp, nwMinimal]) nwGUI = nw.main(["--testmode", "--config=%s" % nwMinimal, "--data=%s" % tmpDir, nwMinimal])
qtbot.addWidget(nwGUI) qtbot.addWidget(nwGUI)
nwGUI.show() nwGUI.show()
qtbot.waitForWindowShown(nwGUI) qtbot.waitForWindowShown(nwGUI)
@@ -1246,15 +1246,15 @@ def testQuotesDialog(qtbot, yesToAll, nwMinimal, nwTemp):
nwGUI.close() nwGUI.close()
@pytest.mark.gui @pytest.mark.gui
def testDialogsOpenClose(qtbot, monkeypatch, yesToAll, nwMinimal, nwTemp): def testDialogsOpenClose(qtbot, monkeypatch, yesToAll, nwMinimal, tmpDir):
nwGUI = nw.main(["--testmode", "--config=%s" % nwMinimal, "--data=%s" % nwTemp, nwMinimal]) nwGUI = nw.main(["--testmode", "--config=%s" % nwMinimal, "--data=%s" % tmpDir, nwMinimal])
qtbot.addWidget(nwGUI) qtbot.addWidget(nwGUI)
nwGUI.show() nwGUI.show()
qtbot.waitForWindowShown(nwGUI) qtbot.waitForWindowShown(nwGUI)
qtbot.wait(stepDelay) qtbot.wait(stepDelay)
monkeypatch.setattr(QFileDialog, "getExistingDirectory", lambda *args, **kwargs: nwTemp) monkeypatch.setattr(QFileDialog, "getExistingDirectory", lambda *args, **kwargs: tmpDir)
assert nwGUI.selectProjectPath() == nwTemp assert nwGUI.selectProjectPath() == tmpDir
# qtbot.stopForInteraction() # qtbot.stopForInteraction()
nwGUI.closeMain() nwGUI.closeMain()
+2 -2
View File
@@ -10,9 +10,9 @@ from PyQt5.QtWidgets import qApp
from nw.error import NWErrorMessage, exceptionHandler from nw.error import NWErrorMessage, exceptionHandler
@pytest.mark.error @pytest.mark.error
def testErrorDialog(qtbot, nwFuncTemp, nwTemp): def testErrorDialog(qtbot, nwFuncTemp, tmpDir):
qApp.closeAllWindows() qApp.closeAllWindows()
nwGUI = nw.main(["--testmode", "--config=%s" % nwFuncTemp, "--data=%s" % nwTemp]) nwGUI = nw.main(["--testmode", "--config=%s" % nwFuncTemp, "--data=%s" % tmpDir])
qtbot.addWidget(nwGUI) qtbot.addWidget(nwGUI)
nwGUI.show() nwGUI.show()
qtbot.waitForWindowShown(nwGUI) qtbot.waitForWindowShown(nwGUI)
+29 -29
View File
@@ -27,11 +27,11 @@ typeDelay = 1
stepDelay = 20 stepDelay = 20
@pytest.mark.gui @pytest.mark.gui
def testLaunch(qtbot, monkeypatch, nwFuncTemp, nwTemp): def testLaunch(qtbot, monkeypatch, nwFuncTemp, tmpDir):
# Defaults # Defaults
nwGUI = nw.main( nwGUI = nw.main(
["--testmode", "--config=%s" % nwFuncTemp, "--data=%s" % nwTemp, "--style=Fusion"] ["--testmode", "--config=%s" % nwFuncTemp, "--data=%s" % tmpDir, "--style=Fusion"]
) )
assert nw.logger.getEffectiveLevel() == logging.WARNING assert nw.logger.getEffectiveLevel() == logging.WARNING
nwGUI.closeMain() nwGUI.closeMain()
@@ -39,21 +39,21 @@ def testLaunch(qtbot, monkeypatch, nwFuncTemp, nwTemp):
# Log Levels # Log Levels
nwGUI = nw.main( nwGUI = nw.main(
["--testmode", "--info", "--config=%s" % nwFuncTemp, "--data=%s" % nwTemp] ["--testmode", "--info", "--config=%s" % nwFuncTemp, "--data=%s" % tmpDir]
) )
assert nw.logger.getEffectiveLevel() == logging.INFO assert nw.logger.getEffectiveLevel() == logging.INFO
nwGUI.closeMain() nwGUI.closeMain()
nwGUI.close() nwGUI.close()
nwGUI = nw.main( nwGUI = nw.main(
["--testmode", "--debug", "--config=%s" % nwFuncTemp, "--data=%s" % nwTemp] ["--testmode", "--debug", "--config=%s" % nwFuncTemp, "--data=%s" % tmpDir]
) )
assert nw.logger.getEffectiveLevel() == logging.DEBUG assert nw.logger.getEffectiveLevel() == logging.DEBUG
nwGUI.closeMain() nwGUI.closeMain()
nwGUI.close() nwGUI.close()
nwGUI = nw.main( nwGUI = nw.main(
["--testmode", "--verbose", "--config=%s" % nwFuncTemp, "--data=%s" % nwTemp] ["--testmode", "--verbose", "--config=%s" % nwFuncTemp, "--data=%s" % tmpDir]
) )
assert nw.logger.getEffectiveLevel() == 5 assert nw.logger.getEffectiveLevel() == 5
nwGUI.closeMain() nwGUI.closeMain()
@@ -62,7 +62,7 @@ def testLaunch(qtbot, monkeypatch, nwFuncTemp, nwTemp):
# Help and Version # Help and Version
with pytest.raises(SystemExit) as ex: with pytest.raises(SystemExit) as ex:
nwGUI = nw.main( nwGUI = nw.main(
["--testmode", "--help", "--config=%s" % nwFuncTemp, "--data=%s" % nwTemp] ["--testmode", "--help", "--config=%s" % nwFuncTemp, "--data=%s" % tmpDir]
) )
nwGUI.closeMain() nwGUI.closeMain()
nwGUI.close() nwGUI.close()
@@ -70,7 +70,7 @@ def testLaunch(qtbot, monkeypatch, nwFuncTemp, nwTemp):
with pytest.raises(SystemExit) as ex: with pytest.raises(SystemExit) as ex:
nwGUI = nw.main( nwGUI = nw.main(
["--testmode", "--version", "--config=%s" % nwFuncTemp, "--data=%s" % nwTemp] ["--testmode", "--version", "--config=%s" % nwFuncTemp, "--data=%s" % tmpDir]
) )
nwGUI.closeMain() nwGUI.closeMain()
nwGUI.close() nwGUI.close()
@@ -79,7 +79,7 @@ def testLaunch(qtbot, monkeypatch, nwFuncTemp, nwTemp):
# Invalid options # Invalid options
with pytest.raises(SystemExit) as ex: with pytest.raises(SystemExit) as ex:
nwGUI = nw.main( nwGUI = nw.main(
["--testmode", "--invalid", "--config=%s" % nwFuncTemp, "--data=%s" % nwTemp] ["--testmode", "--invalid", "--config=%s" % nwFuncTemp, "--data=%s" % tmpDir]
) )
nwGUI.closeMain() nwGUI.closeMain()
nwGUI.close() nwGUI.close()
@@ -92,7 +92,7 @@ def testLaunch(qtbot, monkeypatch, nwFuncTemp, nwTemp):
monkeypatch.setattr("nw.CONFIG.verPyQtValue", 50000) monkeypatch.setattr("nw.CONFIG.verPyQtValue", 50000)
with pytest.raises(SystemExit) as ex: with pytest.raises(SystemExit) as ex:
nwGUI = nw.main( nwGUI = nw.main(
["--testmode", "--config=%s" % nwFuncTemp, "--data=%s" % nwTemp] ["--testmode", "--config=%s" % nwFuncTemp, "--data=%s" % tmpDir]
) )
nwGUI.closeMain() nwGUI.closeMain()
nwGUI.close() nwGUI.close()
@@ -103,9 +103,9 @@ def testLaunch(qtbot, monkeypatch, nwFuncTemp, nwTemp):
monkeypatch.undo() monkeypatch.undo()
@pytest.mark.gui @pytest.mark.gui
def testDocEditor(qtbot, yesToAll, nwFuncTemp, nwTempGUI, nwRef, nwTemp): def testDocEditor(qtbot, yesToAll, nwFuncTemp, nwTempGUI, nwRef, tmpDir):
nwGUI = nw.main(["--testmode", "--config=%s" % nwTemp, "--data=%s" % nwTemp]) nwGUI = nw.main(["--testmode", "--config=%s" % tmpDir, "--data=%s" % tmpDir])
qtbot.addWidget(nwGUI) qtbot.addWidget(nwGUI)
nwGUI.show() nwGUI.show()
qtbot.waitForWindowShown(nwGUI) qtbot.waitForWindowShown(nwGUI)
@@ -414,9 +414,9 @@ def testDocEditor(qtbot, yesToAll, nwFuncTemp, nwTempGUI, nwRef, nwTemp):
nwGUI.close() nwGUI.close()
@pytest.mark.gui @pytest.mark.gui
def testDocViewer(qtbot, yesToAll, nwLipsum, nwTemp): def testDocViewer(qtbot, yesToAll, nwLipsum, tmpDir):
nwGUI = nw.main(["--testmode", "--config=%s" % nwLipsum, "--data=%s" % nwTemp]) nwGUI = nw.main(["--testmode", "--config=%s" % nwLipsum, "--data=%s" % tmpDir])
qtbot.addWidget(nwGUI) qtbot.addWidget(nwGUI)
nwGUI.show() nwGUI.show()
qtbot.waitForWindowShown(nwGUI) qtbot.waitForWindowShown(nwGUI)
@@ -566,9 +566,9 @@ def testDocViewer(qtbot, yesToAll, nwLipsum, nwTemp):
nwGUI.close() nwGUI.close()
@pytest.mark.gui @pytest.mark.gui
def testProjectTree(qtbot, yesToAll, nwMinimal, nwTemp): def testProjectTree(qtbot, yesToAll, nwMinimal, tmpDir):
nwGUI = nw.main(["--testmode", "--config=%s" % nwMinimal, "--data=%s" % nwTemp, nwMinimal]) nwGUI = nw.main(["--testmode", "--config=%s" % nwMinimal, "--data=%s" % tmpDir, nwMinimal])
qtbot.addWidget(nwGUI) qtbot.addWidget(nwGUI)
nwGUI.show() nwGUI.show()
qtbot.waitForWindowShown(nwGUI) qtbot.waitForWindowShown(nwGUI)
@@ -690,9 +690,9 @@ def testProjectTree(qtbot, yesToAll, nwMinimal, nwTemp):
nwGUI.close() nwGUI.close()
@pytest.mark.gui @pytest.mark.gui
def testEditFormatMenu(qtbot, yesToAll, nwLipsum, nwTemp): def testEditFormatMenu(qtbot, yesToAll, nwLipsum, tmpDir):
nwGUI = nw.main(["--testmode", "--config=%s" % nwLipsum, "--data=%s" % nwTemp]) nwGUI = nw.main(["--testmode", "--config=%s" % nwLipsum, "--data=%s" % tmpDir])
qtbot.addWidget(nwGUI) qtbot.addWidget(nwGUI)
nwGUI.show() nwGUI.show()
qtbot.waitForWindowShown(nwGUI) qtbot.waitForWindowShown(nwGUI)
@@ -927,9 +927,9 @@ def testEditFormatMenu(qtbot, yesToAll, nwLipsum, nwTemp):
nwGUI.close() nwGUI.close()
@pytest.mark.gui @pytest.mark.gui
def testContextMenu(qtbot, yesToAll, nwLipsum, nwTemp): def testContextMenu(qtbot, yesToAll, nwLipsum, tmpDir):
nwGUI = nw.main(["--testmode", "--config=%s" % nwLipsum, "--data=%s" % nwTemp]) nwGUI = nw.main(["--testmode", "--config=%s" % nwLipsum, "--data=%s" % tmpDir])
qtbot.addWidget(nwGUI) qtbot.addWidget(nwGUI)
nwGUI.show() nwGUI.show()
qtbot.waitForWindowShown(nwGUI) qtbot.waitForWindowShown(nwGUI)
@@ -1013,8 +1013,8 @@ def testContextMenu(qtbot, yesToAll, nwLipsum, nwTemp):
nwGUI.close() nwGUI.close()
@pytest.mark.gui @pytest.mark.gui
def testInsertMenu(qtbot, monkeypatch, nwFuncTemp, nwTemp): def testInsertMenu(qtbot, monkeypatch, nwFuncTemp, tmpDir):
nwGUI = nw.main(["--testmode", "--config=%s" % nwTemp, "--data=%s" % nwTemp]) nwGUI = nw.main(["--testmode", "--config=%s" % tmpDir, "--data=%s" % tmpDir])
qtbot.addWidget(nwGUI) qtbot.addWidget(nwGUI)
nwGUI.show() nwGUI.show()
qtbot.waitForWindowShown(nwGUI) qtbot.waitForWindowShown(nwGUI)
@@ -1162,7 +1162,7 @@ def testInsertMenu(qtbot, monkeypatch, nwFuncTemp, nwTemp):
assert not nwGUI.importDocument() assert not nwGUI.importDocument()
# Then a valid path, but bot a file that exists # Then a valid path, but bot a file that exists
theFile = os.path.join(nwTemp, "import.txt") theFile = os.path.join(tmpDir, "import.txt")
monkeypatch.setattr(QFileDialog, "getOpenFileName", lambda *args, **kwards: (theFile, "")) monkeypatch.setattr(QFileDialog, "getOpenFileName", lambda *args, **kwards: (theFile, ""))
assert not nwGUI.importDocument() assert not nwGUI.importDocument()
@@ -1212,9 +1212,9 @@ def testInsertMenu(qtbot, monkeypatch, nwFuncTemp, nwTemp):
nwGUI.close() nwGUI.close()
@pytest.mark.gui @pytest.mark.gui
def testTextSearch(qtbot, monkeypatch, yesToAll, nwLipsum, nwTemp): def testTextSearch(qtbot, monkeypatch, yesToAll, nwLipsum, tmpDir):
nwGUI = nw.main(["--testmode", "--config=%s" % nwLipsum, "--data=%s" % nwTemp]) nwGUI = nw.main(["--testmode", "--config=%s" % nwLipsum, "--data=%s" % tmpDir])
qtbot.addWidget(nwGUI) qtbot.addWidget(nwGUI)
nwGUI.show() nwGUI.show()
qtbot.waitForWindowShown(nwGUI) qtbot.waitForWindowShown(nwGUI)
@@ -1392,9 +1392,9 @@ def testTextSearch(qtbot, monkeypatch, yesToAll, nwLipsum, nwTemp):
nwGUI.close() nwGUI.close()
@pytest.mark.gui @pytest.mark.gui
def testOutline(qtbot, yesToAll, nwLipsum, nwTemp): def testOutline(qtbot, yesToAll, nwLipsum, tmpDir):
nwGUI = nw.main(["--testmode", "--config=%s" % nwLipsum, "--data=%s" % nwTemp]) nwGUI = nw.main(["--testmode", "--config=%s" % nwLipsum, "--data=%s" % tmpDir])
qtbot.addWidget(nwGUI) qtbot.addWidget(nwGUI)
nwGUI.show() nwGUI.show()
qtbot.waitForWindowShown(nwGUI) qtbot.waitForWindowShown(nwGUI)
@@ -1453,9 +1453,9 @@ def testOutline(qtbot, yesToAll, nwLipsum, nwTemp):
nwGUI.close() nwGUI.close()
@pytest.mark.gui @pytest.mark.gui
def testThemes(qtbot, yesToAll, nwMinimal, nwTemp): def testThemes(qtbot, yesToAll, nwMinimal, tmpDir):
nwGUI = nw.main(["--testmode", "--config=%s" % nwMinimal, "--data=%s" % nwTemp, nwMinimal]) nwGUI = nw.main(["--testmode", "--config=%s" % nwMinimal, "--data=%s" % tmpDir, nwMinimal])
qtbot.addWidget(nwGUI) qtbot.addWidget(nwGUI)
nwGUI.show() nwGUI.show()
qtbot.waitForWindowShown(nwGUI) qtbot.waitForWindowShown(nwGUI)
@@ -1478,7 +1478,7 @@ def testThemes(qtbot, yesToAll, nwMinimal, nwTemp):
# Re-open # Re-open
assert nw.CONFIG.confPath == nwMinimal assert nw.CONFIG.confPath == nwMinimal
nwGUI = nw.main(["--testmode", "--config=%s" % nwMinimal, "--data=%s" % nwTemp, nwMinimal]) nwGUI = nw.main(["--testmode", "--config=%s" % nwMinimal, "--data=%s" % tmpDir, nwMinimal])
assert nwGUI.mainConf.confPath == nwMinimal assert nwGUI.mainConf.confPath == nwMinimal
qtbot.addWidget(nwGUI) qtbot.addWidget(nwGUI)
nwGUI.show() nwGUI.show()
+15 -15
View File
@@ -15,7 +15,7 @@ from nw.core.index import NWIndex
from nw.constants import nwItemClass, nwItemLayout from nw.constants import nwItemClass, nwItemLayout
@pytest.mark.project @pytest.mark.project
def testIndexBuildCheck(monkeypatch, nwLipsum, nwDummy, nwTempProj, nwRef): def testIndexBuildCheck(monkeypatch, nwLipsum, dummyGUI, nwTempProj, nwRef):
"""Test core functionality of scaning, saving, loading and checking """Test core functionality of scaning, saving, loading and checking
the index cache file. the index cache file.
""" """
@@ -23,13 +23,13 @@ def testIndexBuildCheck(monkeypatch, nwLipsum, nwDummy, nwTempProj, nwRef):
testFile = os.path.join(nwTempProj, "1_tagsIndex.json") testFile = os.path.join(nwTempProj, "1_tagsIndex.json")
refFile = os.path.join(nwRef, "proj", "1_tagsIndex.json") refFile = os.path.join(nwRef, "proj", "1_tagsIndex.json")
theProject = NWProject(nwDummy) theProject = NWProject(dummyGUI)
theProject.projTree.setSeed(42) theProject.projTree.setSeed(42)
assert theProject.openProject(nwLipsum) assert theProject.openProject(nwLipsum)
monkeypatch.setattr("nw.core.index.time", lambda: 123.4) monkeypatch.setattr("nw.core.index.time", lambda: 123.4)
theIndex = NWIndex(theProject, nwDummy) theIndex = NWIndex(theProject, dummyGUI)
notIndexable = { notIndexable = {
"b3643d0f92e32": False, # Novel ROOT "b3643d0f92e32": False, # Novel ROOT
"45e6b01ca35c1": False, # Chapter One FOLDER "45e6b01ca35c1": False, # Chapter One FOLDER
@@ -139,14 +139,14 @@ def testIndexBuildCheck(monkeypatch, nwLipsum, nwDummy, nwTempProj, nwRef):
assert cmpFiles(testFile, refFile) assert cmpFiles(testFile, refFile)
@pytest.mark.project @pytest.mark.project
def testIndexScanThis(nwMinimal, nwDummy): def testIndexScanThis(nwMinimal, dummyGUI):
"""Test the tag scanner function scanThis. """Test the tag scanner function scanThis.
""" """
theProject = NWProject(nwDummy) theProject = NWProject(dummyGUI)
theProject.projTree.setSeed(42) theProject.projTree.setSeed(42)
assert theProject.openProject(nwMinimal) assert theProject.openProject(nwMinimal)
theIndex = NWIndex(theProject, nwDummy) theIndex = NWIndex(theProject, dummyGUI)
isValid, theBits, thePos = theIndex.scanThis("tag: this, and this") isValid, theBits, thePos = theIndex.scanThis("tag: this, and this")
assert not isValid assert not isValid
@@ -188,14 +188,14 @@ def testIndexScanThis(nwMinimal, nwDummy):
assert theProject.closeProject() assert theProject.closeProject()
@pytest.mark.project @pytest.mark.project
def testIndexCheckThese(nwMinimal, nwDummy): def testIndexCheckThese(nwMinimal, dummyGUI):
"""Test the tag checker function checkThese. """Test the tag checker function checkThese.
""" """
theProject = NWProject(nwDummy) theProject = NWProject(dummyGUI)
theProject.projTree.setSeed(42) theProject.projTree.setSeed(42)
assert theProject.openProject(nwMinimal) assert theProject.openProject(nwMinimal)
theIndex = NWIndex(theProject, nwDummy) theIndex = NWIndex(theProject, dummyGUI)
nHandle = theProject.newFile("Hello", nwItemClass.NOVEL, "a508bb932959c") nHandle = theProject.newFile("Hello", nwItemClass.NOVEL, "a508bb932959c")
cHandle = theProject.newFile("Jane", nwItemClass.CHARACTER, "afb3043c7b2b3") cHandle = theProject.newFile("Jane", nwItemClass.CHARACTER, "afb3043c7b2b3")
nItem = theProject.projTree[nHandle] nItem = theProject.projTree[nHandle]
@@ -224,14 +224,14 @@ def testIndexCheckThese(nwMinimal, nwDummy):
assert theProject.closeProject() assert theProject.closeProject()
@pytest.mark.project @pytest.mark.project
def testIndexScanText(nwMinimal, nwDummy): def testIndexScanText(nwMinimal, dummyGUI):
"""Check the index data extraction functions. """Check the index data extraction functions.
""" """
theProject = NWProject(nwDummy) theProject = NWProject(dummyGUI)
theProject.projTree.setSeed(42) theProject.projTree.setSeed(42)
assert theProject.openProject(nwMinimal) assert theProject.openProject(nwMinimal)
theIndex = NWIndex(theProject, nwDummy) theIndex = NWIndex(theProject, dummyGUI)
# Some items for fail to scan tests # Some items for fail to scan tests
dHandle = theProject.newFolder("Folder", nwItemClass.NOVEL, "a508bb932959c") dHandle = theProject.newFolder("Folder", nwItemClass.NOVEL, "a508bb932959c")
@@ -399,14 +399,14 @@ def testIndexScanText(nwMinimal, nwDummy):
assert theProject.closeProject() assert theProject.closeProject()
@pytest.mark.project @pytest.mark.project
def testIndexExtractData(nwMinimal, nwDummy): def testIndexExtractData(nwMinimal, dummyGUI):
"""Check the index data extraction functions. """Check the index data extraction functions.
""" """
theProject = NWProject(nwDummy) theProject = NWProject(dummyGUI)
theProject.projTree.setSeed(42) theProject.projTree.setSeed(42)
assert theProject.openProject(nwMinimal) assert theProject.openProject(nwMinimal)
theIndex = NWIndex(theProject, nwDummy) theIndex = NWIndex(theProject, dummyGUI)
nHandle = theProject.newFile("Hello", nwItemClass.NOVEL, "a508bb932959c") nHandle = theProject.newFile("Hello", nwItemClass.NOVEL, "a508bb932959c")
cHandle = theProject.newFile("Jane", nwItemClass.CHARACTER, "afb3043c7b2b3") cHandle = theProject.newFile("Jane", nwItemClass.CHARACTER, "afb3043c7b2b3")
+42 -42
View File
@@ -16,14 +16,14 @@ from nw.core.spellcheck import NWSpellEnchant, NWSpellSimple
from nw.constants import nwConst, nwItemClass, nwItemType, nwItemLayout, nwFiles from nw.constants import nwConst, nwItemClass, nwItemType, nwItemLayout, nwFiles
@pytest.mark.project @pytest.mark.project
def testProjectNewOpenSave(nwFuncTemp, nwTempProj, nwRef, nwTemp, nwDummy): def testProjectNewOpenSave(nwFuncTemp, nwTempProj, nwRef, tmpDir, dummyGUI):
"""Test that a basic project can be created, and opened and saved. """Test that a basic project can be created, and opened and saved.
""" """
projFile = os.path.join(nwFuncTemp, "nwProject.nwx") projFile = os.path.join(nwFuncTemp, "nwProject.nwx")
testFile = os.path.join(nwTempProj, "1_nwProject.nwx") testFile = os.path.join(nwTempProj, "1_nwProject.nwx")
refFile = os.path.join(nwRef, "proj", "1_nwProject.nwx") refFile = os.path.join(nwRef, "proj", "1_nwProject.nwx")
theProject = NWProject(nwDummy) theProject = NWProject(dummyGUI)
theProject.projTree.setSeed(42) theProject.projTree.setSeed(42)
# Setting no data should fail # Setting no data should fail
@@ -62,14 +62,14 @@ def testProjectNewOpenSave(nwFuncTemp, nwTempProj, nwRef, nwTemp, nwDummy):
assert cmpFiles(testFile, refFile, [2, 6, 7, 8]) assert cmpFiles(testFile, refFile, [2, 6, 7, 8])
@pytest.mark.project @pytest.mark.project
def testProjectNewRoot(nwFuncTemp, nwTempProj, nwRef, nwDummy): def testProjectNewRoot(nwFuncTemp, nwTempProj, nwRef, dummyGUI):
"""Check that new root folders can be added to the project. """Check that new root folders can be added to the project.
""" """
projFile = os.path.join(nwFuncTemp, "nwProject.nwx") projFile = os.path.join(nwFuncTemp, "nwProject.nwx")
testFile = os.path.join(nwTempProj, "2_nwProject.nwx") testFile = os.path.join(nwTempProj, "2_nwProject.nwx")
refFile = os.path.join(nwRef, "proj", "2_nwProject.nwx") refFile = os.path.join(nwRef, "proj", "2_nwProject.nwx")
theProject = NWProject(nwDummy) theProject = NWProject(dummyGUI)
theProject.projTree.setSeed(42) theProject.projTree.setSeed(42)
assert theProject.newProject({"projPath": nwFuncTemp}) assert theProject.newProject({"projPath": nwFuncTemp})
@@ -96,14 +96,14 @@ def testProjectNewRoot(nwFuncTemp, nwTempProj, nwRef, nwDummy):
assert not theProject.projChanged assert not theProject.projChanged
@pytest.mark.project @pytest.mark.project
def testProjectNewFile(nwFuncTemp, nwTempProj, nwRef, nwDummy): def testProjectNewFile(nwFuncTemp, nwTempProj, nwRef, dummyGUI):
"""Check that new files can be added to the project. """Check that new files can be added to the project.
""" """
projFile = os.path.join(nwFuncTemp, "nwProject.nwx") projFile = os.path.join(nwFuncTemp, "nwProject.nwx")
testFile = os.path.join(nwTempProj, "3_nwProject.nwx") testFile = os.path.join(nwTempProj, "3_nwProject.nwx")
refFile = os.path.join(nwRef, "proj", "3_nwProject.nwx") refFile = os.path.join(nwRef, "proj", "3_nwProject.nwx")
theProject = NWProject(nwDummy) theProject = NWProject(dummyGUI)
theProject.projTree.setSeed(42) theProject.projTree.setSeed(42)
assert theProject.newProject({"projPath": nwFuncTemp}) assert theProject.newProject({"projPath": nwFuncTemp})
@@ -123,7 +123,7 @@ def testProjectNewFile(nwFuncTemp, nwTempProj, nwRef, nwDummy):
assert not theProject.projChanged assert not theProject.projChanged
@pytest.mark.project @pytest.mark.project
def testProjectNewCustomA(nwFuncTemp, nwTempProj, nwRef, nwDummy): def testProjectNewCustomA(nwFuncTemp, nwTempProj, nwRef, dummyGUI):
"""Create a new project from a project wizard dictionary. """Create a new project from a project wizard dictionary.
Custom type with chapters and scenes. Custom type with chapters and scenes.
""" """
@@ -151,7 +151,7 @@ def testProjectNewCustomA(nwFuncTemp, nwTempProj, nwRef, nwDummy):
"numScenes": 3, "numScenes": 3,
"chFolders": True, "chFolders": True,
} }
theProject = NWProject(nwDummy) theProject = NWProject(dummyGUI)
theProject.projTree.setSeed(42) theProject.projTree.setSeed(42)
assert theProject.newProject(projData) assert theProject.newProject(projData)
@@ -162,7 +162,7 @@ def testProjectNewCustomA(nwFuncTemp, nwTempProj, nwRef, nwDummy):
assert cmpFiles(testFile, refFile, [2, 6, 7, 8]) assert cmpFiles(testFile, refFile, [2, 6, 7, 8])
@pytest.mark.project @pytest.mark.project
def testProjectNewCustomB(nwFuncTemp, nwTempProj, nwRef, nwDummy): def testProjectNewCustomB(nwFuncTemp, nwTempProj, nwRef, dummyGUI):
"""Create a new project from a project wizard dictionary. """Create a new project from a project wizard dictionary.
Custom type without chapters, but with scenes. Custom type without chapters, but with scenes.
""" """
@@ -190,7 +190,7 @@ def testProjectNewCustomB(nwFuncTemp, nwTempProj, nwRef, nwDummy):
"numScenes": 6, "numScenes": 6,
"chFolders": True, "chFolders": True,
} }
theProject = NWProject(nwDummy) theProject = NWProject(dummyGUI)
theProject.projTree.setSeed(42) theProject.projTree.setSeed(42)
assert theProject.newProject(projData) assert theProject.newProject(projData)
@@ -201,7 +201,7 @@ def testProjectNewCustomB(nwFuncTemp, nwTempProj, nwRef, nwDummy):
assert cmpFiles(testFile, refFile, [2, 6, 7, 8]) assert cmpFiles(testFile, refFile, [2, 6, 7, 8])
@pytest.mark.project @pytest.mark.project
def testProjectNewSampleA(nwFuncTemp, nwConf, nwDummy, nwTemp): def testProjectNewSampleA(nwFuncTemp, nwConf, dummyGUI, tmpDir):
"""Check that we can create a new project can be created from the """Check that we can create a new project can be created from the
provided sample project via a zip file. provided sample project via a zip file.
""" """
@@ -214,7 +214,7 @@ def testProjectNewSampleA(nwFuncTemp, nwConf, nwDummy, nwTemp):
"popMinimal": False, "popMinimal": False,
"popCustom": False, "popCustom": False,
} }
theProject = NWProject(nwDummy) theProject = NWProject(dummyGUI)
theProject.projTree.setSeed(42) theProject.projTree.setSeed(42)
theProject.mainConf = nwConf theProject.mainConf = nwConf
@@ -223,8 +223,8 @@ def testProjectNewSampleA(nwFuncTemp, nwConf, nwDummy, nwTemp):
# Force the lookup path for assets to our temp folder # Force the lookup path for assets to our temp folder
srcSample = os.path.abspath(os.path.join(nwConf.appRoot, "sample")) srcSample = os.path.abspath(os.path.join(nwConf.appRoot, "sample"))
dstSample = os.path.join(nwTemp, "sample.zip") dstSample = os.path.join(tmpDir, "sample.zip")
nwConf.assetPath = nwTemp nwConf.assetPath = tmpDir
# Create and open a defective zip file # Create and open a defective zip file
with open(dstSample, mode="w+") as outFile: with open(dstSample, mode="w+") as outFile:
@@ -248,7 +248,7 @@ def testProjectNewSampleA(nwFuncTemp, nwConf, nwDummy, nwTemp):
os.unlink(dstSample) os.unlink(dstSample)
@pytest.mark.project @pytest.mark.project
def testProjectNewSampleB(monkeypatch, nwFuncTemp, nwConf, nwDummy, nwTemp): def testProjectNewSampleB(monkeypatch, nwFuncTemp, nwConf, dummyGUI, tmpDir):
"""Check that we can create a new project can be created from the """Check that we can create a new project can be created from the
provided sample project folder. provided sample project folder.
""" """
@@ -261,12 +261,12 @@ def testProjectNewSampleB(monkeypatch, nwFuncTemp, nwConf, nwDummy, nwTemp):
"popMinimal": False, "popMinimal": False,
"popCustom": False, "popCustom": False,
} }
theProject = NWProject(nwDummy) theProject = NWProject(dummyGUI)
theProject.projTree.setSeed(42) theProject.projTree.setSeed(42)
theProject.mainConf = nwConf theProject.mainConf = nwConf
# Make sure we do not pick up the nw/assets/sample.zip file # Make sure we do not pick up the nw/assets/sample.zip file
nwConf.assetPath = nwTemp nwConf.assetPath = tmpDir
# Set a fake project file name # Set a fake project file name
monkeypatch.setattr(nwFiles, "PROJ_FILE", "nothing.nwx") monkeypatch.setattr(nwFiles, "PROJ_FILE", "nothing.nwx")
@@ -280,14 +280,14 @@ def testProjectNewSampleB(monkeypatch, nwFuncTemp, nwConf, nwDummy, nwTemp):
assert theProject.closeProject() assert theProject.closeProject()
# Misdirect the appRoot path so neither is possible # Misdirect the appRoot path so neither is possible
nwConf.appRoot = nwTemp nwConf.appRoot = tmpDir
assert not theProject.newProject(projData) assert not theProject.newProject(projData)
@pytest.mark.project @pytest.mark.project
def testProjectMethods(monkeypatch, nwMinimal, nwDummy): def testProjectMethods(monkeypatch, nwMinimal, dummyGUI):
"""Test other project class methods and functions. """Test other project class methods and functions.
""" """
theProject = NWProject(nwDummy) theProject = NWProject(dummyGUI)
theProject.projTree.setSeed(42) theProject.projTree.setSeed(42)
assert theProject.openProject(nwMinimal) assert theProject.openProject(nwMinimal)
assert theProject.projPath == nwMinimal assert theProject.projPath == nwMinimal
@@ -326,14 +326,14 @@ def testProjectMethods(monkeypatch, nwMinimal, nwDummy):
assert theProject.bookAuthors == ["Jane Doe", "John Doh"] assert theProject.bookAuthors == ["Jane Doe", "John Doh"]
@pytest.mark.project @pytest.mark.project
def testDocMeta(nwDummy, nwLipsum): def testDocMeta(dummyGUI, nwLipsum):
"""Check that the document meta data string is parsed correctly. """Check that the document meta data string is parsed correctly.
""" """
theProject = NWProject(nwDummy) theProject = NWProject(dummyGUI)
theProject.projTree.setSeed(42) theProject.projTree.setSeed(42)
assert theProject.openProject(nwLipsum) assert theProject.openProject(nwLipsum)
aDoc = NWDoc(theProject, nwDummy) aDoc = NWDoc(theProject, dummyGUI)
assert aDoc.openDocument("47666c91c7ccf") assert aDoc.openDocument("47666c91c7ccf")
theName, theParent, theClass, theLayout = aDoc.getMeta() theName, theParent, theClass, theLayout = aDoc.getMeta()
@@ -350,8 +350,8 @@ def testDocMeta(nwDummy, nwLipsum):
assert theLayout is None assert theLayout is None
@pytest.mark.project @pytest.mark.project
def testSpellEnchant(nwTemp, nwConf): def testSpellEnchant(tmpDir, nwConf):
wList = os.path.join(nwTemp, "wordlist.txt") wList = os.path.join(tmpDir, "wordlist.txt")
with open(wList, mode="w") as wFile: with open(wList, mode="w") as wFile:
wFile.write("a_word\nb_word\nc_word\n") wFile.write("a_word\nb_word\nc_word\n")
@@ -379,8 +379,8 @@ def testSpellEnchant(nwTemp, nwConf):
assert aName != "" assert aName != ""
@pytest.mark.project @pytest.mark.project
def testSpellSimple(nwTemp, nwConf): def testSpellSimple(tmpDir, nwConf):
wList = os.path.join(nwTemp, "wordlist.txt") wList = os.path.join(tmpDir, "wordlist.txt")
with open(wList, mode="w") as wFile: with open(wList, mode="w") as wFile:
wFile.write("a_word\nb_word\nc_word\n") wFile.write("a_word\nb_word\nc_word\n")
@@ -408,12 +408,12 @@ def testSpellSimple(nwTemp, nwConf):
assert aName == nwConst.SP_INTERNAL assert aName == nwConst.SP_INTERNAL
@pytest.mark.project @pytest.mark.project
def testProjectOptions(nwDummy, nwLipsum): def testProjectOptions(dummyGUI, nwLipsum):
"""Test the class that holds all the GUI state user options that are """Test the class that holds all the GUI state user options that are
tied to the current open project. Non-project related GUI options tied to the current open project. Non-project related GUI options
are handled by the Config class. are handled by the Config class.
""" """
theProject = NWProject(nwDummy) theProject = NWProject(dummyGUI)
assert theProject.projMeta is None assert theProject.projMeta is None
theOpts = theProject.optState theOpts = theProject.optState
@@ -471,13 +471,13 @@ def testProjectOptions(nwDummy, nwLipsum):
assert theOpts.getFloat("GuiWritingStats", "winWidth", False) is False assert theOpts.getFloat("GuiWritingStats", "winWidth", False) is False
@pytest.mark.project @pytest.mark.project
def testProjectOrphanedFiles(nwDummy, nwLipsum): def testProjectOrphanedFiles(dummyGUI, nwLipsum):
"""Check that files in the content folder that are not tracked in """Check that files in the content folder that are not tracked in
the project XML file are handled correctly by the orphaned files the project XML file are handled correctly by the orphaned files
function. It should also restore as much meta data as possible from function. It should also restore as much meta data as possible from
the meta line at the top of the document file. the meta line at the top of the document file.
""" """
theProject = NWProject(nwDummy) theProject = NWProject(dummyGUI)
assert theProject.openProject(nwLipsum) assert theProject.openProject(nwLipsum)
assert theProject.projTree["636b6aa9b697b"] is None assert theProject.projTree["636b6aa9b697b"] is None
assert theProject.closeProject() assert theProject.closeProject()
@@ -540,13 +540,13 @@ def testProjectOrphanedFiles(nwDummy, nwLipsum):
assert theProject.closeProject() assert theProject.closeProject()
@pytest.mark.project @pytest.mark.project
def testProjectOldFormat(nwDummy, nwOldProj): def testProjectOldFormat(dummyGUI, nwOldProj):
"""Test that a project folder structure of version 1.0 can be """Test that a project folder structure of version 1.0 can be
converted to the latest folder structure. Version 1.0 split the converted to the latest folder structure. Version 1.0 split the
documents into 'data_0' ... 'data_f' folders, which are now all documents into 'data_0' ... 'data_f' folders, which are now all
contained in a single 'content' folder. contained in a single 'content' folder.
""" """
theProject = NWProject(nwDummy) theProject = NWProject(dummyGUI)
theProject.mainConf.showGUI = False theProject.mainConf.showGUI = False
# Create dummy files for known legacy files # Create dummy files for known legacy files
@@ -630,13 +630,13 @@ def testProjectOldFormat(nwDummy, nwOldProj):
assert os.path.isfile(os.path.join(nwOldProj, "ToC.txt")) assert os.path.isfile(os.path.join(nwOldProj, "ToC.txt"))
@pytest.mark.project @pytest.mark.project
def testProjectBackup(nwDummy, nwMinimal, nwTemp): def testProjectBackup(dummyGUI, nwMinimal, tmpDir):
"""Test the automated backup feature of the project class. The test """Test the automated backup feature of the project class. The test
creates a backup of the Minimal test project, and then unzips the creates a backup of the Minimal test project, and then unzips the
backupd file and checks that the project XML file is identical to backupd file and checks that the project XML file is identical to
the original file. the original file.
""" """
theProject = NWProject(nwDummy) theProject = NWProject(dummyGUI)
assert theProject.openProject(nwMinimal) assert theProject.openProject(nwMinimal)
# Test faulty settings # Test faulty settings
@@ -645,12 +645,12 @@ def testProjectBackup(nwDummy, nwMinimal, nwTemp):
assert not theProject.zipIt(doNotify=False) assert not theProject.zipIt(doNotify=False)
# Missing project name # Missing project name
theProject.mainConf.backupPath = nwTemp theProject.mainConf.backupPath = tmpDir
theProject.projName = "" theProject.projName = ""
assert not theProject.zipIt(doNotify=False) assert not theProject.zipIt(doNotify=False)
# Non-existent folder # Non-existent folder
theProject.mainConf.backupPath = os.path.join(nwTemp, "nonexistent") theProject.mainConf.backupPath = os.path.join(tmpDir, "nonexistent")
theProject.projName = "Test Minimal" theProject.projName = "Test Minimal"
assert not theProject.zipIt(doNotify=False) assert not theProject.zipIt(doNotify=False)
@@ -659,10 +659,10 @@ def testProjectBackup(nwDummy, nwMinimal, nwTemp):
assert not theProject.zipIt(doNotify=False) assert not theProject.zipIt(doNotify=False)
# Test correct settings # Test correct settings
theProject.mainConf.backupPath = nwTemp theProject.mainConf.backupPath = tmpDir
assert theProject.zipIt(doNotify=False) assert theProject.zipIt(doNotify=False)
theFiles = os.listdir(os.path.join(nwTemp, "Test Minimal")) theFiles = os.listdir(os.path.join(tmpDir, "Test Minimal"))
assert len(theFiles) == 1 assert len(theFiles) == 1
theZip = theFiles[0] theZip = theFiles[0]
@@ -670,10 +670,10 @@ def testProjectBackup(nwDummy, nwMinimal, nwTemp):
assert theZip[-4:] == ".zip" assert theZip[-4:] == ".zip"
# Extract the archive # Extract the archive
with ZipFile(os.path.join(nwTemp, "Test Minimal", theZip), "r") as inZip: with ZipFile(os.path.join(tmpDir, "Test Minimal", theZip), "r") as inZip:
inZip.extractall(os.path.join(nwTemp, "extract")) inZip.extractall(os.path.join(tmpDir, "extract"))
# Check that the main project file was restored # Check that the main project file was restored
assert cmpFiles( assert cmpFiles(
os.path.join(nwMinimal, "nwProject.nwx"), os.path.join(nwTemp, "extract", "nwProject.nwx") os.path.join(nwMinimal, "nwProject.nwx"), os.path.join(tmpDir, "extract", "nwProject.nwx")
) )