From 77b1d50e314ebece722e9b882b4165906258aa79 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Fri, 14 Aug 2020 19:50:29 +0200 Subject: [PATCH 1/5] Cleaned up tests for syntax --- tests/conftest.py | 4 +- tests/nwdummy.py | 2 - tests/nwtools.py | 4 +- tests/profilestats.py | 4 +- tests/test_common.py | 79 ++++++++++++++++++++--------------- tests/test_config.py | 38 ++++++++--------- tests/test_gui.py | 96 +++++++++++++++++++++++++------------------ tests/test_item.py | 1 - tests/test_project.py | 42 +++++++++---------- 9 files changed, 148 insertions(+), 122 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 09031f4f..8c0d7ba2 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -2,7 +2,9 @@ """novelWriter Test Config """ -import sys, pytest, shutil +import sys +import pytest +import shutil from os import path, mkdir sys.path.insert(1, path.abspath(path.join(path.dirname(__file__), path.pardir))) diff --git a/tests/nwdummy.py b/tests/nwdummy.py index a6460c99..41b25907 100644 --- a/tests/nwdummy.py +++ b/tests/nwdummy.py @@ -2,8 +2,6 @@ """novelWriter Test Dummy GUI Classes """ -from nw.constants import nwAlert - class DummyMain(): def __init__(self): diff --git a/tests/nwtools.py b/tests/nwtools.py index 9baefe2d..a92047ca 100644 --- a/tests/nwtools.py +++ b/tests/nwtools.py @@ -15,13 +15,13 @@ def ensureDir(theDir): def cmpFiles(fileOne, fileTwo, ignoreLines=[]): try: - foOne = open(fileOne,mode="r",encoding="utf8") + foOne = open(fileOne, mode="r", encoding="utf8") except Exception as e: print(str(e)) return False try: - foTwo = open(fileTwo,mode="r",encoding="utf8") + foTwo = open(fileTwo, mode="r", encoding="utf8") except Exception as e: print(str(e)) return False diff --git a/tests/profilestats.py b/tests/profilestats.py index cbb18aeb..f130d93c 100755 --- a/tests/profilestats.py +++ b/tests/profilestats.py @@ -5,12 +5,12 @@ import pstats from os import path -profDir = path.abspath(path.join(path.dirname(__file__),"..","prof")) +profDir = path.abspath(path.join(path.dirname(__file__), path.pardir, "prof")) print("") print("Profiles directory: %s" % profDir) print("") -profMainWindows = pstats.Stats(path.join(profDir,"testMainWindows.prof")) +profMainWindows = pstats.Stats(path.join(profDir, "testMainWindows.prof")) profMainWindows.sort_stats("cumtime") profMainWindows.print_stats("nw/") diff --git a/tests/test_common.py b/tests/test_common.py index 6e5b1e5b..f2b895e2 100644 --- a/tests/test_common.py +++ b/tests/test_common.py @@ -2,48 +2,63 @@ """novelWriter Common Class Tester """ -import nw, pytest -from nw.common import * +import pytest +from nw.common import checkString, checkBool, checkInt, colRange from nwtools import cmpList @pytest.mark.core def testCheckString(): - assert checkString(None, "NotNone",True) is None - assert checkString("None","NotNone",True) is None - assert checkString("None","NotNone",False) == "None" - assert checkString(None, "NotNone",False) == "NotNone" - assert checkString(1, "NotNone",False) == "NotNone" - assert checkString(1.0, "NotNone",False) == "NotNone" - assert checkString(True, "NotNone",False) == "NotNone" + assert checkString(None, "NotNone", True) is None + assert checkString("None", "NotNone", True) is None + assert checkString("None", "NotNone", False) == "None" + assert checkString(None, "NotNone", False) == "NotNone" + assert checkString(1, "NotNone", False) == "NotNone" + assert checkString(1.0, "NotNone", False) == "NotNone" + assert checkString(True, "NotNone", False) == "NotNone" @pytest.mark.core def testCheckInt(): - assert checkInt(None, 3,True) is None - assert checkInt("None",3,True) is None - assert checkInt(None, 3,False) == 3 - assert checkInt(1, 3,False) == 1 - assert checkInt(1.0, 3,False) == 1 - assert checkInt(True, 3,False) == 1 + assert checkInt(None, 3, True) is None + assert checkInt("None", 3, True) is None + assert checkInt(None, 3, False) == 3 + assert checkInt(1, 3, False) == 1 + assert checkInt(1.0, 3, False) == 1 + assert checkInt(True, 3, False) == 1 @pytest.mark.core def testCheckBool(): - assert checkBool(None, 3, True) is None - assert checkBool("None", 3, True) is None - assert checkBool("True", False,False) == True - assert checkBool("False",True, False) == False - assert checkBool("Boo", None, False) is None - assert checkBool(0, None, False) == False - assert checkBool(1, None, False) == True - assert checkBool(2, None, False) is None - assert checkBool(0.0, None, False) is None - assert checkBool(1.0, None, False) is None - assert checkBool(2.0, None, False) is None + assert checkBool(None, 3, True) is None + assert checkBool("None", 3, True) is None + assert checkBool("True", False, False) + assert not checkBool("False", True, False) + assert checkBool("Boo", None, False) is None + assert not checkBool(0, None, False) + assert checkBool(1, None, False) + assert checkBool(2, None, False) is None + assert checkBool(0.0, None, False) is None + assert checkBool(1.0, None, False) is None + assert checkBool(2.0, None, False) is None @pytest.mark.core def testColRange(): - assert colRange([0,0], [0,0], 0) is None - assert cmpList(colRange([200,50,0], [50,200,0], 1), [200,50,0]) - assert cmpList(colRange([200,50,0], [50,200,0], 2), [[200,50,0],[50,200,0]]) - assert cmpList(colRange([200,50,0], [50,200,0], 3), [[200,50,0],[125,125,0],[50,200,0]]) - assert cmpList(colRange([200,50,0], [50,200,0], 4), [[200,50,0],[150,100,0],[100,150,0],[50,200,0]]) - assert cmpList(colRange([200,50,0], [50,200,0], 5), [[200,50,0],[162,87,0],[124,124,0],[86,161,0],[50,200,0]]) + assert colRange([0, 0], [0, 0], 0) is None + assert cmpList( + colRange([200, 50, 0], [50, 200, 0], 1), + [200, 50, 0] + ) + assert cmpList( + colRange([200, 50, 0], [50, 200, 0], 2), + [[200, 50, 0], [50, 200, 0]] + ) + assert cmpList( + colRange([200, 50, 0], [50, 200, 0], 3), + [[200, 50, 0], [125, 125, 0], [50, 200, 0]] + ) + assert cmpList( + colRange([200, 50, 0], [50, 200, 0], 4), + [[200, 50, 0], [150, 100, 0], [100, 150, 0], [50, 200, 0]] + ) + assert cmpList( + colRange([200, 50, 0], [50, 200, 0], 5), + [[200, 50, 0], [162, 87, 0], [124, 124, 0], [86, 161, 0], [50, 200, 0]] + ) diff --git a/tests/test_config.py b/tests/test_config.py index 7f0226cc..cfff5d5d 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -2,16 +2,16 @@ """novelWriter Config Class Tester """ -import nw, pytest -from nwtools import * +import pytest +from nwtools import cmpFiles from os import path from nw.config import Config theConf = Config() @pytest.mark.core -def testConfigInit(nwTemp,nwRef): - tmpConf = path.join(nwTemp,"novelwriter.conf") +def testConfigInit(nwTemp, nwRef): + tmpConf = path.join(nwTemp, "novelwriter.conf") refConf = path.join(nwRef, "novelwriter.conf") assert theConf.initConfig(nwTemp, nwTemp) assert theConf.setLastPath("") @@ -20,8 +20,8 @@ def testConfigInit(nwTemp,nwRef): assert not theConf.confChanged @pytest.mark.core -def testConfigSave(nwTemp,nwRef): - tmpConf = path.join(nwTemp,"novelwriter.conf") +def testConfigSave(nwTemp, nwRef): + tmpConf = path.join(nwTemp, "novelwriter.conf") refConf = path.join(nwRef, "novelwriter.conf") assert theConf.confPath == nwTemp assert theConf.saveConfig() @@ -31,8 +31,8 @@ def testConfigSave(nwTemp,nwRef): @pytest.mark.core def testConfigSetConfPath(nwTemp): assert theConf.setConfPath(None) - assert not theConf.setConfPath(path.join("somewhere","over","the","rainbow")) - assert theConf.setConfPath(path.join(nwTemp,"novelwriter.conf")) + assert not theConf.setConfPath(path.join("somewhere", "over", "the", "rainbow")) + assert theConf.setConfPath(path.join(nwTemp, "novelwriter.conf")) assert theConf.confPath == nwTemp assert theConf.confFile == "novelwriter.conf" assert not theConf.confChanged @@ -40,7 +40,7 @@ def testConfigSetConfPath(nwTemp): @pytest.mark.core def testConfigSetDataPath(nwTemp): assert theConf.setDataPath(None) - assert not theConf.setDataPath(path.join("somewhere","over","the","rainbow")) + assert not theConf.setDataPath(path.join("somewhere", "over", "the", "rainbow")) assert theConf.setDataPath(nwTemp) assert theConf.dataPath == nwTemp assert not theConf.confChanged @@ -51,12 +51,12 @@ def testConfigLoad(): assert not theConf.confChanged @pytest.mark.core -def testConfigSetWinSize(nwTemp,nwRef): - tmpConf = path.join(nwTemp,"novelwriter.conf") +def testConfigSetWinSize(nwTemp, nwRef): + tmpConf = path.join(nwTemp, "novelwriter.conf") refConf = path.join(nwRef, "novelwriter.conf") assert theConf.setWinSize(1105, 655) assert not theConf.confChanged - assert theConf.setWinSize(70,70) + assert theConf.setWinSize(70, 70) assert theConf.confChanged assert theConf.setWinSize(1100, 650) assert theConf.saveConfig() @@ -64,8 +64,8 @@ def testConfigSetWinSize(nwTemp,nwRef): assert not theConf.confChanged @pytest.mark.core -def testConfigSetTreeColWidths(nwTemp,nwRef): - tmpConf = path.join(nwTemp,"novelwriter.conf") +def testConfigSetTreeColWidths(nwTemp, nwRef): + tmpConf = path.join(nwTemp, "novelwriter.conf") refConf = path.join(nwRef, "novelwriter.conf") assert theConf.setTreeColWidths([0, 0, 0]) assert theConf.confChanged @@ -76,8 +76,8 @@ def testConfigSetTreeColWidths(nwTemp,nwRef): assert not theConf.confChanged @pytest.mark.core -def testConfigSetPanePos(nwTemp,nwRef): - tmpConf = path.join(nwTemp,"novelwriter.conf") +def testConfigSetPanePos(nwTemp, nwRef): + tmpConf = path.join(nwTemp, "novelwriter.conf") refConf = path.join(nwRef, "novelwriter.conf") assert theConf.setMainPanePos([0, 0]) assert theConf.confChanged @@ -90,8 +90,8 @@ def testConfigSetPanePos(nwTemp,nwRef): assert not theConf.confChanged @pytest.mark.core -def testConfigFlags(nwTemp,nwRef): - tmpConf = path.join(nwTemp,"novelwriter.conf") +def testConfigFlags(nwTemp, nwRef): + tmpConf = path.join(nwTemp, "novelwriter.conf") refConf = path.join(nwRef, "novelwriter.conf") assert not theConf.setShowRefPanel(False) assert theConf.setShowRefPanel(True) @@ -102,7 +102,7 @@ def testConfigFlags(nwTemp,nwRef): @pytest.mark.core def testConfigErrors(nwTemp): - nonPath = path.join("somewhere","over","the","rainbow") + nonPath = path.join("somewhere", "over", "the", "rainbow") assert theConf.initConfig(nonPath, nonPath) assert theConf.hasError assert not theConf.loadConfig() diff --git a/tests/test_gui.py b/tests/test_gui.py index ebafbab5..77f92609 100644 --- a/tests/test_gui.py +++ b/tests/test_gui.py @@ -2,24 +2,26 @@ """novelWriter Main GUI Class Tester """ -import nw, pytest, sys, json -from nwtools import * +import nw +import pytest +import json +from nwtools import cmpFiles -from os import path, unlink +from os import path from PyQt5.QtCore import Qt from nw.gui import ( GuiProjectSettings, GuiItemEditor, GuiAbout, GuiBuildNovel, GuiDocMerge, GuiDocSplit, GuiWritingStats, GuiProjectWizard ) -from nw.constants import * +from nw.constants import nwItemType, nwItemLayout, nwItemClass, nwDocAction -keyDelay = 2 +keyDelay = 2 stepDelay = 20 @pytest.mark.gui def testMainWindows(qtbot, nwTempGUI, nwRef, nwTemp): - nwGUI = nw.main(["--testmode","--config=%s" % nwTempGUI, "--data=%s" % nwTemp]) + nwGUI = nw.main(["--testmode", "--config=%s" % nwTempGUI, "--data=%s" % nwTemp]) qtbot.addWidget(nwGUI) nwGUI.show() qtbot.waitForWindowShown(nwGUI) @@ -41,11 +43,11 @@ def testMainWindows(qtbot, nwTempGUI, nwRef, nwTemp): assert nwGUI.theProject.projName == "" assert nwGUI.theProject.bookTitle == "" assert len(nwGUI.theProject.bookAuthors) == 0 - assert nwGUI.theProject.spellCheck == False + assert not nwGUI.theProject.spellCheck # Check the files - projFile = path.join(nwTempGUI,"nwProject.nwx") - assert cmpFiles(projFile, path.join(nwRef,"gui","0_nwProject.nwx"), [2, 6, 7, 8]) + projFile = path.join(nwTempGUI, "nwProject.nwx") + assert cmpFiles(projFile, path.join(nwRef, "gui", "0_nwProject.nwx"), [2, 6, 7, 8]) qtbot.wait(stepDelay) # qtbot.stopForInteraction() @@ -60,12 +62,12 @@ def testMainWindows(qtbot, nwTempGUI, nwRef, nwTemp): assert len(nwGUI.theProject.projTree._treeRoots) == 4 assert nwGUI.theProject.projTree.trashRoot() is None assert nwGUI.theProject.projPath == nwTempGUI - assert nwGUI.theProject.projMeta == path.join(nwTempGUI,"meta") + assert nwGUI.theProject.projMeta == path.join(nwTempGUI, "meta") assert nwGUI.theProject.projFile == "nwProject.nwx" assert nwGUI.theProject.projName == "New Project" assert nwGUI.theProject.bookTitle == "" assert len(nwGUI.theProject.bookAuthors) == 0 - assert nwGUI.theProject.spellCheck == False + assert not nwGUI.theProject.spellCheck # Check that tree items have been created assert nwGUI.treeView._getTreeItem("73475cb40a568") is not None @@ -214,7 +216,10 @@ def testMainWindows(qtbot, nwTempGUI, nwRef, nwTemp): qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay) qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay) - for c in "This is another paragraph of much longer dummy text. It is in fact very very dumb dummy text! ": + for c in ( + "This is another paragraph of much longer dummy text. " + "It is in fact very very dumb dummy text! " + ): qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay) for c in "We can also try replacing \"quotes\", even single's quotes are replaced. ": qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay) @@ -273,7 +278,7 @@ def testMainWindows(qtbot, nwTempGUI, nwRef, nwTemp): @pytest.mark.gui def testProjectEditor(qtbot, nwTempGUI, nwRef, nwTemp): - nwGUI = nw.main(["--testmode","--config=%s" % nwTempGUI, "--data=%s" % nwTemp]) + nwGUI = nw.main(["--testmode", "--config=%s" % nwTempGUI, "--data=%s" % nwTemp]) qtbot.addWidget(nwGUI) nwGUI.show() qtbot.waitForWindowShown(nwGUI) @@ -354,7 +359,7 @@ def testProjectEditor(qtbot, nwTempGUI, nwRef, nwTemp): qtbot.wait(stepDelay) # Check the files - projFile = path.join(nwTempGUI,"nwProject.nwx") + projFile = path.join(nwTempGUI, "nwProject.nwx") assert cmpFiles(projFile, path.join(nwRef, "gui", "2_nwProject.nwx"), [2, 8, 9, 10]) nwGUI.closeMain() @@ -362,7 +367,7 @@ def testProjectEditor(qtbot, nwTempGUI, nwRef, nwTemp): @pytest.mark.gui def testItemEditor(qtbot, nwTempGUI, nwRef, nwTemp): - nwGUI = nw.main(["--testmode","--config=%s" % nwTempGUI, "--data=%s" % nwTemp]) + nwGUI = nw.main(["--testmode", "--config=%s" % nwTempGUI, "--data=%s" % nwTemp]) qtbot.addWidget(nwGUI) nwGUI.show() qtbot.waitForWindowShown(nwGUI) @@ -410,7 +415,7 @@ def testItemEditor(qtbot, nwTempGUI, nwRef, nwTemp): qtbot.wait(stepDelay) # Check the files - projFile = path.join(nwTempGUI,"nwProject.nwx") + projFile = path.join(nwTempGUI, "nwProject.nwx") assert cmpFiles(projFile, path.join(nwRef, "gui", "3_nwProject.nwx"), [2, 6, 7, 8]) nwGUI.closeMain() @@ -418,7 +423,7 @@ def testItemEditor(qtbot, nwTempGUI, nwRef, nwTemp): @pytest.mark.gui def testWritingStatsExport(qtbot, nwTempGUI, nwRef, nwTemp): - nwGUI = nw.main(["--testmode","--config=%s" % nwTempGUI, "--data=%s" % nwTemp]) + nwGUI = nw.main(["--testmode", "--config=%s" % nwTempGUI, "--data=%s" % nwTemp]) qtbot.addWidget(nwGUI) nwGUI.show() qtbot.waitForWindowShown(nwGUI) @@ -527,7 +532,7 @@ def testWritingStatsExport(qtbot, nwTempGUI, nwRef, nwTemp): @pytest.mark.gui def testAboutBox(qtbot, nwTempGUI, nwRef, nwTemp): - nwGUI = nw.main(["--testmode","--config=%s" % nwTempGUI, "--data=%s" % nwTemp]) + nwGUI = nw.main(["--testmode", "--config=%s" % nwTempGUI, "--data=%s" % nwTemp]) qtbot.addWidget(nwGUI) nwGUI.show() qtbot.waitForWindowShown(nwGUI) @@ -545,7 +550,7 @@ def testAboutBox(qtbot, nwTempGUI, nwRef, nwTemp): @pytest.mark.gui def testBuildTool(qtbot, nwTempBuild, nwLipsum, nwRef, nwTemp): - nwGUI = nw.main(["--testmode","--config=%s" % nwTempBuild, "--data=%s" % nwTemp]) + nwGUI = nw.main(["--testmode", "--config=%s" % nwTempBuild, "--data=%s" % nwTemp]) qtbot.addWidget(nwGUI) nwGUI.show() qtbot.waitForWindowShown(nwGUI) @@ -634,7 +639,7 @@ def testBuildTool(qtbot, nwTempBuild, nwLipsum, nwRef, nwTemp): @pytest.mark.gui def testMergeTool(qtbot, nwTempGUI, nwLipsum, nwRef, nwTemp): - nwGUI = nw.main(["--testmode","--config=%s" % nwTempGUI, "--data=%s" % nwTemp]) + nwGUI = nw.main(["--testmode", "--config=%s" % nwTempGUI, "--data=%s" % nwTemp]) qtbot.addWidget(nwGUI) nwGUI.show() qtbot.waitForWindowShown(nwGUI) @@ -664,7 +669,7 @@ def testMergeTool(qtbot, nwTempGUI, nwLipsum, nwRef, nwTemp): @pytest.mark.gui def testSplitTool(qtbot, nwTempGUI, nwLipsum, nwRef, nwTemp): - nwGUI = nw.main(["--testmode","--config=%s" % nwTempGUI, "--data=%s" % nwTemp]) + nwGUI = nw.main(["--testmode", "--config=%s" % nwTempGUI, "--data=%s" % nwTemp]) qtbot.addWidget(nwGUI) nwGUI.show() qtbot.waitForWindowShown(nwGUI) @@ -749,7 +754,7 @@ def testNewProjectWizard(qtbot, nwTempGUI, nwLipsum, nwRef, nwTemp): ProjWizardCustomPage, ProjWizardFinalPage ) - nwGUI = nw.main(["--testmode","--config=%s" % nwTempGUI, "--data=%s" % nwTemp]) + nwGUI = nw.main(["--testmode", "--config=%s" % nwTempGUI, "--data=%s" % nwTemp]) qtbot.addWidget(nwGUI) nwGUI.show() qtbot.waitForWindowShown(nwGUI) @@ -849,7 +854,7 @@ def testNewProjectWizard(qtbot, nwTempGUI, nwLipsum, nwRef, nwTemp): assert projData["popCustom"] == (wStep == 1) assert projData["popSample"] == (wStep == 2) if wStep == 1: - assert projData["addRoots"] == [ + assert projData["addRoots"] == [ nwItemClass.PLOT, nwItemClass.CHARACTER, nwItemClass.WORLD, @@ -858,13 +863,13 @@ def testNewProjectWizard(qtbot, nwTempGUI, nwLipsum, nwRef, nwTemp): nwItemClass.ENTITY, ] assert projData["numChapters"] == 5 - assert projData["numScenes"] == 5 - assert projData["chFolders"] == True + assert projData["numScenes"] == 5 + assert projData["chFolders"] else: - assert projData["addRoots"] == [] + assert projData["addRoots"] == [] assert projData["numChapters"] == 0 - assert projData["numScenes"] == 0 - assert projData["chFolders"] == False + assert projData["numScenes"] == 0 + assert not projData["chFolders"] # qtbot.stopForInteraction() nwGUI.closeMain() @@ -872,7 +877,7 @@ def testNewProjectWizard(qtbot, nwTempGUI, nwLipsum, nwRef, nwTemp): @pytest.mark.gui def testDocAction(qtbot, nwTempGUI, nwLipsum, nwRef, nwTemp): - nwGUI = nw.main(["--testmode","--config=%s" % nwTempGUI, "--data=%s" % nwTemp]) + nwGUI = nw.main(["--testmode", "--config=%s" % nwTempGUI, "--data=%s" % nwTemp]) qtbot.addWidget(nwGUI) nwGUI.show() qtbot.waitForWindowShown(nwGUI) @@ -890,7 +895,8 @@ def testDocAction(qtbot, nwTempGUI, nwLipsum, nwRef, nwTemp): # Bold assert nwGUI.passDocumentAction(nwDocAction.STRONG) - assert nwGUI.docEditor.getText()[27:78] == "**Pellentesque** nec erat ut nulla posuere commodo." + fmtStr = "**Pellentesque** nec erat ut nulla posuere commodo." + assert nwGUI.docEditor.getText()[27:78] == fmtStr qtbot.wait(stepDelay) assert nwGUI.passDocumentAction(nwDocAction.STRONG) assert nwGUI.docEditor.getText()[27:74] == cleanText @@ -898,7 +904,8 @@ def testDocAction(qtbot, nwTempGUI, nwLipsum, nwRef, nwTemp): # Italic assert nwGUI.passDocumentAction(nwDocAction.EMPH) - assert nwGUI.docEditor.getText()[27:76] == "_Pellentesque_ nec erat ut nulla posuere commodo." + fmtStr = "_Pellentesque_ nec erat ut nulla posuere commodo." + assert nwGUI.docEditor.getText()[27:76] == fmtStr qtbot.wait(stepDelay) assert nwGUI.passDocumentAction(nwDocAction.EMPH) assert nwGUI.docEditor.getText()[27:74] == cleanText @@ -906,7 +913,8 @@ def testDocAction(qtbot, nwTempGUI, nwLipsum, nwRef, nwTemp): # Strikethrough assert nwGUI.passDocumentAction(nwDocAction.STRIKE) - assert nwGUI.docEditor.getText()[27:78] == "~~Pellentesque~~ nec erat ut nulla posuere commodo." + fmtStr = "~~Pellentesque~~ nec erat ut nulla posuere commodo." + assert nwGUI.docEditor.getText()[27:78] == fmtStr qtbot.wait(stepDelay) assert nwGUI.passDocumentAction(nwDocAction.STRIKE) assert nwGUI.docEditor.getText()[27:74] == cleanText @@ -925,7 +933,8 @@ def testDocAction(qtbot, nwTempGUI, nwLipsum, nwRef, nwTemp): # Double Quotes assert nwGUI.passDocumentAction(nwDocAction.D_QUOTE) - assert nwGUI.docEditor.getText()[27:76] == "“Pellentesque” nec erat ut nulla posuere commodo." + fmtStr = "“Pellentesque” nec erat ut nulla posuere commodo." + assert nwGUI.docEditor.getText()[27:76] == fmtStr qtbot.wait(stepDelay) assert nwGUI.passDocumentAction(nwDocAction.UNDO) assert nwGUI.docEditor.getText()[27:74] == cleanText @@ -933,7 +942,8 @@ def testDocAction(qtbot, nwTempGUI, nwLipsum, nwRef, nwTemp): # Single Quotes assert nwGUI.passDocumentAction(nwDocAction.S_QUOTE) - assert nwGUI.docEditor.getText()[27:76] == "‘Pellentesque’ nec erat ut nulla posuere commodo." + fmtStr = "‘Pellentesque’ nec erat ut nulla posuere commodo." + assert nwGUI.docEditor.getText()[27:76] == fmtStr qtbot.wait(stepDelay) assert nwGUI.passDocumentAction(nwDocAction.UNDO) assert nwGUI.docEditor.getText()[27:74] == cleanText @@ -942,22 +952,27 @@ def testDocAction(qtbot, nwTempGUI, nwLipsum, nwRef, nwTemp): # Block Formats assert nwGUI.docEditor.setCursorPosition(30) assert nwGUI.passDocumentAction(nwDocAction.BLOCK_H1) - assert nwGUI.docEditor.getText()[27:76] == "# Pellentesque nec erat ut nulla posuere commodo." + fmtStr = "# Pellentesque nec erat ut nulla posuere commodo." + assert nwGUI.docEditor.getText()[27:76] == fmtStr qtbot.wait(stepDelay) assert nwGUI.passDocumentAction(nwDocAction.BLOCK_H2) - assert nwGUI.docEditor.getText()[27:77] == "## Pellentesque nec erat ut nulla posuere commodo." + fmtStr = "## Pellentesque nec erat ut nulla posuere commodo." + assert nwGUI.docEditor.getText()[27:77] == fmtStr qtbot.wait(stepDelay) assert nwGUI.passDocumentAction(nwDocAction.BLOCK_H3) - assert nwGUI.docEditor.getText()[27:78] == "### Pellentesque nec erat ut nulla posuere commodo." + fmtStr = "### Pellentesque nec erat ut nulla posuere commodo." + assert nwGUI.docEditor.getText()[27:78] == fmtStr qtbot.wait(stepDelay) assert nwGUI.passDocumentAction(nwDocAction.BLOCK_H4) - assert nwGUI.docEditor.getText()[27:79] == "#### Pellentesque nec erat ut nulla posuere commodo." + fmtStr = "#### Pellentesque nec erat ut nulla posuere commodo." + assert nwGUI.docEditor.getText()[27:79] == fmtStr qtbot.wait(stepDelay) assert nwGUI.passDocumentAction(nwDocAction.BLOCK_TXT) assert nwGUI.docEditor.getText()[27:74] == cleanText qtbot.wait(stepDelay) assert nwGUI.passDocumentAction(nwDocAction.BLOCK_COM) - assert nwGUI.docEditor.getText()[27:76] == "% Pellentesque nec erat ut nulla posuere commodo." + fmtStr = "% Pellentesque nec erat ut nulla posuere commodo." + assert nwGUI.docEditor.getText()[27:76] == fmtStr qtbot.wait(stepDelay) assert nwGUI.passDocumentAction(nwDocAction.BLOCK_TXT) assert nwGUI.docEditor.getText()[27:74] == cleanText @@ -965,7 +980,8 @@ def testDocAction(qtbot, nwTempGUI, nwLipsum, nwRef, nwTemp): # Undo/Redo assert nwGUI.passDocumentAction(nwDocAction.UNDO) - assert nwGUI.docEditor.getText()[27:76] == "% Pellentesque nec erat ut nulla posuere commodo." + fmtStr = "% Pellentesque nec erat ut nulla posuere commodo." + assert nwGUI.docEditor.getText()[27:76] == fmtStr qtbot.wait(stepDelay) assert nwGUI.passDocumentAction(nwDocAction.REDO) assert nwGUI.docEditor.getText()[27:74] == cleanText diff --git a/tests/test_item.py b/tests/test_item.py index 1bab7447..ca78d28e 100644 --- a/tests/test_item.py +++ b/tests/test_item.py @@ -2,7 +2,6 @@ """novelWriter NWItem Class Tester """ -import nw import pytest from lxml import etree diff --git a/tests/test_project.py b/tests/test_project.py index e27df3c4..005bac2b 100644 --- a/tests/test_project.py +++ b/tests/test_project.py @@ -2,11 +2,10 @@ """novelWriter Project Class Tester """ -import nw import pytest from os import path -from nwtools import * +from nwtools import cmpFiles from nwdummy import DummyMain from nw.config import Config @@ -23,8 +22,8 @@ theProject.projTree.setSeed(42) @pytest.mark.project def testProjectNewMinimal(nwTempProj, nwRef, nwTemp): - projFile = path.join(nwTempProj,"nwProject.nwx") - refFile = path.join(nwRef,"proj", "1_nwProject.nwx") + projFile = path.join(nwTempProj, "nwProject.nwx") + refFile = path.join(nwRef, "proj", "1_nwProject.nwx") assert theConf.initConfig(nwRef, nwTemp) assert theProject.newProject({"projPath": nwTempProj}) assert theProject.setProjectPath(nwTempProj) @@ -34,22 +33,22 @@ def testProjectNewMinimal(nwTempProj, nwRef, nwTemp): @pytest.mark.project def testProjectOpen(nwTempProj): - projFile = path.join(nwTempProj,"nwProject.nwx") + projFile = path.join(nwTempProj, "nwProject.nwx") assert theProject.openProject(projFile) @pytest.mark.project -def testProjectSave(nwTempProj,nwRef): - projFile = path.join(nwTempProj,"nwProject.nwx") - refFile = path.join(nwRef,"proj","1_nwProject.nwx") +def testProjectSave(nwTempProj, nwRef): + projFile = path.join(nwTempProj, "nwProject.nwx") + refFile = path.join(nwRef, "proj", "1_nwProject.nwx") assert theProject.saveProject() assert theProject.closeProject() assert cmpFiles(projFile, refFile, [2, 6, 7, 8]) assert not theProject.projChanged @pytest.mark.project -def testProjectOpenTwice(nwTempProj,nwRef): - projFile = path.join(nwTempProj,"nwProject.nwx") - refFile = path.join(nwRef,"proj","1_nwProject.nwx") +def testProjectOpenTwice(nwTempProj, nwRef): + projFile = path.join(nwTempProj, "nwProject.nwx") + refFile = path.join(nwRef, "proj", "1_nwProject.nwx") assert theProject.openProject(projFile) assert not theProject.openProject(projFile) assert theProject.openProject(projFile, overrideLock=True) @@ -58,9 +57,9 @@ def testProjectOpenTwice(nwTempProj,nwRef): assert cmpFiles(projFile, refFile, [2, 6, 7, 8]) @pytest.mark.project -def testProjectNewRoot(nwTempProj,nwRef): - projFile = path.join(nwTempProj,"nwProject.nwx") - refFile = path.join(nwRef,"proj","2_nwProject.nwx") +def testProjectNewRoot(nwTempProj, nwRef): + projFile = path.join(nwTempProj, "nwProject.nwx") + refFile = path.join(nwRef, "proj", "2_nwProject.nwx") assert theProject.openProject(projFile) assert isinstance(theProject.newRoot("Novel", nwItemClass.NOVEL), type(None)) assert isinstance(theProject.newRoot("Plot", nwItemClass.PLOT), type(None)) @@ -77,9 +76,9 @@ def testProjectNewRoot(nwTempProj,nwRef): assert not theProject.projChanged @pytest.mark.project -def testProjectNewFile(nwTempProj,nwRef): - projFile = path.join(nwTempProj,"nwProject.nwx") - refFile = path.join(nwRef,"proj","3_nwProject.nwx") +def testProjectNewFile(nwTempProj, nwRef): + projFile = path.join(nwTempProj, "nwProject.nwx") + refFile = path.join(nwRef, "proj", "3_nwProject.nwx") assert theProject.openProject(projFile) assert isinstance(theProject.newFile("Hello", nwItemClass.NOVEL, "73475cb40a568"), str) assert isinstance(theProject.newFile("Jane", nwItemClass.CHARACTER, "71ee45a3c0db9"), str) @@ -91,11 +90,10 @@ def testProjectNewFile(nwTempProj,nwRef): @pytest.mark.project def testIndexScanThis(nwTempProj): - projFile = path.join(nwTempProj,"nwProject.nwx") + projFile = path.join(nwTempProj, "nwProject.nwx") assert theProject.openProject(projFile) theIndex = NWIndex(theProject, theMain) - tHandle = "31489056e0916" isValid, theBits, thePos = theIndex.scanThis("tag: this, and this") assert not isValid @@ -138,7 +136,7 @@ def testIndexScanThis(nwTempProj): @pytest.mark.project def testIndexCheckThese(nwTempProj): - projFile = path.join(nwTempProj,"nwProject.nwx") + projFile = path.join(nwTempProj, "nwProject.nwx") assert theProject.openProject(projFile) theIndex = NWIndex(theProject, theMain) @@ -171,14 +169,12 @@ def testIndexCheckThese(nwTempProj): @pytest.mark.project def testIndexMeta(nwTempProj): - projFile = path.join(nwTempProj,"nwProject.nwx") + projFile = path.join(nwTempProj, "nwProject.nwx") assert theProject.openProject(projFile) theIndex = NWIndex(theProject, theMain) nHandle = "0e17daca5f3e1" - nItem = theProject.projTree[nHandle] cHandle = "02d20bbd7e394" - cItem = theProject.projTree[cHandle] assert theIndex.scanText(cHandle, ( "# Jane Smith\n" From 593afdd823e92260943c26a9a5b2bad1852c580b Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Fri, 14 Aug 2020 19:52:02 +0200 Subject: [PATCH 2/5] Updated actions and templates --- .github/ISSUE_TEMPLATE/bug-report.md | 3 +-- .github/ISSUE_TEMPLATE/feature-request.md | 11 +++++------ .github/workflows/syntax.yml | 8 ++++---- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index 869d8053..f7b7cc08 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -1,9 +1,8 @@ --- name: Bug Report about: Create a report to help us improve -title: "[BUG]" +title: "" labels: bug -assignees: vkbo --- **Describe the Bug** diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md index ebd94ac1..761f0bc9 100644 --- a/.github/ISSUE_TEMPLATE/feature-request.md +++ b/.github/ISSUE_TEMPLATE/feature-request.md @@ -1,19 +1,18 @@ --- name: Feature Request about: Suggest an idea for this project -title: "[FEATURE]" +title: "" labels: enhancement -assignees: vkbo --- -**Is your feature request related to a problem? Please describe.** +**Is your feature request related to a problem? Please describe:** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -**Describe the solution you'd like** +**Describe the solution you'd like:** A clear and concise description of what you want to happen. -**Describe alternatives you've considered** +**Describe alternatives you've considered:** A clear and concise description of any alternative solutions or features you've considered. -**Additional context** +**Additional context:** Add any other context or screenshots about the feature request here. diff --git a/.github/workflows/syntax.yml b/.github/workflows/syntax.yml index 2480e963..c12279af 100644 --- a/.github/workflows/syntax.yml +++ b/.github/workflows/syntax.yml @@ -1,4 +1,4 @@ -name: Flake 8 Checks +name: Flake8 Checks on: push: @@ -19,9 +19,9 @@ jobs: uses: actions/checkout@v2 - name: Install flake8 run: pip install flake8 - - name: Check for Syntax Error on novelWriter + - name: Check for Syntax Error in novelWriter run: flake8 nw --count --select=E9,F63,F7,F82 --show-source --statistics - - name: Check for Syntax Error on Tests + - name: Check for Syntax Error in Tests run: flake8 tests --count --select=E9,F63,F7,F82 --show-source --statistics - - name: Check for Code Style on novelWriter + - name: Check for Code Style Violations run: flake8 nw --count --max-line-length=99 --ignore E203,E221,E226,E241,E251,E261,E266,E302,E305 --show-source --statistics From dcbe72617005fe79705e4ab6f44b00607d7a3bc6 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Fri, 14 Aug 2020 19:57:52 +0200 Subject: [PATCH 3/5] Bumped travis ubuntu distro to focal --- .travis.yml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index eb85544e..1e11d47a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,13 @@ -os: linux -dist: bionic +os: + - linux +dist: + - focal services: - xvfb -language: python -cache: bundler +language: + - python +cache: + - bundler addons: apt: From a3f2487622d47a761160b4e350eaf1f37330799b Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Fri, 14 Aug 2020 20:05:35 +0200 Subject: [PATCH 4/5] Fixed travis yml config warnings --- .travis.yml | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1e11d47a..b0b45ee9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,11 +1,8 @@ -os: - - linux -dist: - - focal +os: linux +dist: focal services: - xvfb -language: - - python +language: python cache: - bundler @@ -34,10 +31,8 @@ stages: jobs: include: - - stage: - - Main - python: - - 3.8 + - stage: Main + python: 3.8 script: - python -m pytest --cov=nw -v after_success: @@ -45,15 +40,12 @@ jobs: after_failure: - cat /sys/fs/cgroup/memory/memory.max_usage_in_bytes - - stage: - - Supported - python: - - 3.6 + - stage: Supported + python: 3.6 script: - python -m pytest -v - - python: - - 3.7 + - python: 3.7 script: - python -m pytest -v From da747b2849452675629a6fc5127b953d9492d0e7 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Fri, 14 Aug 2020 20:17:42 +0200 Subject: [PATCH 5/5] Added action badge to main readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 848bac0e..a56418a3 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,9 @@ [![Build Status](https://travis-ci.com/vkbo/novelWriter.svg?branch=main)](https://travis-ci.com/vkbo/novelWriter) [![codecov](https://codecov.io/gh/vkbo/novelWriter/branch/main/graph/badge.svg)](https://codecov.io/gh/vkbo/novelWriter) [![Documentation Status](https://readthedocs.org/projects/novelwriter/badge/?version=latest)](https://novelwriter.readthedocs.io/en/latest/?badge=latest) +[![Flake8 Checks](https://github.com/vkbo/novelWriter/workflows/Flake8%20Checks/badge.svg)](https://github.com/vkbo/novelWriter/actions) [![PyPI](https://img.shields.io/pypi/v/novelwriter)](https://pypi.org/project/novelWriter/) -[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/novelwriter)](https://pypi.org/project/novelWriter/) +[![Python Version](https://img.shields.io/pypi/pyversions/novelwriter)](https://pypi.org/project/novelWriter/)