diff --git a/nw/core/status.py b/nw/core/status.py index 7a1c7127..2c6fe811 100644 --- a/nw/core/status.py +++ b/nw/core/status.py @@ -79,6 +79,7 @@ class NWStatus(): theStatus = checkInt(theStatus, 0, False) if theStatus >= 0 and theStatus < self._theLength: return self._theLabels[theStatus] + return self._theLabels[0] def setNewEntries(self, newList): """Update the list of entries after they have been modified by @@ -136,18 +137,9 @@ class NWStatus(): for xChild in xParent: theLabels.append(xChild.text) - if "red" in xChild.attrib: - cR = checkInt(xChild.attrib["red"], 0, False) - else: - cR = 0 - if "green" in xChild.attrib: - cG = checkInt(xChild.attrib["green"], 0, False) - else: - cG = 0 - if "blue" in xChild.attrib: - cB = checkInt(xChild.attrib["blue"], 0, False) - else: - cB = 0 + cR = checkInt(xChild.attrib.get("red", 0), 0, False) + cG = checkInt(xChild.attrib.get("green", 0), 0, False) + cB = checkInt(xChild.attrib.get("blue", 0), 0, False) theColours.append((cR, cG, cB)) if len(theLabels) > 0: diff --git a/tests/README.md b/tests/README.md index 51dd9dca..797fa2ea 100644 --- a/tests/README.md +++ b/tests/README.md @@ -66,5 +66,6 @@ The commands for the respective test categories are listed below. | Unit | NWIndex class | nw/core/index.py | `-m core` | `-k testCoreIndex` | | Unit | NWItem class | nw/core/item.py | `-m core` | `-k testCoreItem` | | Unit | NWSpell* classes | nw/core/spellcheck.py | `-m core` | `-k testCoreSpell` | +| Unit | NWStatus class | nw/core/status.py | `-m core` | `-k testCoreStatus` | | Unit | NWTree class | nw/core/tree.py | `-m core` | `-k testCoreTree` | | Unit | OptionsState class | nw/core/options.py | `-m core` | `-k testCoreOptions` | diff --git a/tests/test_core_spell.py b/tests/test_core_spell.py index 6b6d7207..1ef94816 100644 --- a/tests/test_core_spell.py +++ b/tests/test_core_spell.py @@ -6,8 +6,6 @@ import os import sys import pytest -from difflib import get_close_matches - from dummy import causeOSError from tools import readFile, writeFile diff --git a/tests/test_core_status.py b/tests/test_core_status.py new file mode 100644 index 00000000..515b4b47 --- /dev/null +++ b/tests/test_core_status.py @@ -0,0 +1,126 @@ +# -*- coding: utf-8 -*- +"""novelWriter Status Class Tester +""" + +import pytest + +from lxml import etree + +from nw.core.status import NWStatus + +@pytest.mark.core +def testCoreStatus_Entries(): + """Test all the simple setters for the NWItem class. + """ + theStatus = NWStatus() + + # Add entries + theStatus.addEntry("New", (100, 100, 100)) + theStatus.addEntry("Minor", (200, 50, 0)) + theStatus.addEntry("Major", (200, 150, 0)) + theStatus.addEntry("Main", (50, 200, 0)) + + assert theStatus._theLabels == ["New", "Minor", "Major", "Main"] + assert theStatus._theColours == [(100, 100, 100), (200, 50, 0), (200, 150, 0), (50, 200, 0)] + assert theStatus._theCounts == [0, 0, 0, 0] + assert theStatus._theMap["New"] == 0 + assert theStatus._theMap["Minor"] == 1 + assert theStatus._theMap["Major"] == 2 + assert theStatus._theMap["Main"] == 3 + assert theStatus._theLength == 4 + + # Lookups + assert theStatus.lookupEntry(None) is None + assert theStatus.lookupEntry("dummy") is None + assert theStatus.lookupEntry("Main") == 3 + + # Checks + assert theStatus.checkEntry(123) == "New" + assert theStatus.checkEntry("Stuff") == "New" + assert theStatus.checkEntry("New ") == "New" + assert theStatus.checkEntry(" Main ") == "Main" + + # Set new list + newList = [ + ("New", 1, 1, 1, "New"), + ("Minor", 2, 2, 2, "Minor"), + ("Major", 3, 3, 3, "Major"), + ("Min", 4, 4, 4, "Main"), + ("Max", 5, 5, 5, None), + ] + assert theStatus.setNewEntries(None) == {} + assert theStatus.setNewEntries(newList) == {"Main": "Min"} + + assert theStatus._theLabels == ["New", "Minor", "Major", "Min", "Max"] + assert theStatus._theColours == [(1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4), (5, 5, 5)] + assert theStatus._theCounts == [0, 0, 0, 0, 0] + assert theStatus._theMap["New"] == 0 + assert theStatus._theMap["Minor"] == 1 + assert theStatus._theMap["Major"] == 2 + assert theStatus._theMap["Min"] == 3 + assert theStatus._theMap["Max"] == 4 + assert theStatus._theLength == 5 + + # Add counts + countTo = [3, 5, 7, 9, 11] + for i, n in enumerate(countTo): + for _ in range(n): + theStatus.countEntry(theStatus._theLabels[i]) + assert theStatus._theCounts == countTo + + # Iterate + for i, (sA, sB, sC) in enumerate(theStatus): + assert sA == theStatus._theLabels[i] + assert sB == theStatus._theColours[i] + assert sC == theStatus._theCounts[i] + + assert theStatus[9] == (None, None, None) + + # Clear counts + theStatus.resetCounts() + assert theStatus._theCounts == [0, 0, 0, 0, 0] + +# END Test testCoreStatus_Entries + +@pytest.mark.core +def testCoreStatus_XMLPackUnpack(): + """Test all the simple setters for the NWItem class. + """ + theStatus = NWStatus() + theStatus.addEntry("New", (100, 100, 100)) + theStatus.addEntry("Minor", (200, 50, 0)) + theStatus.addEntry("Major", (200, 150, 0)) + theStatus.addEntry("Main", (50, 200, 0)) + + countTo = [3, 5, 7, 9] + for i, n in enumerate(countTo): + for _ in range(n): + theStatus.countEntry(theStatus._theLabels[i]) + + nwXML = etree.Element("novelWriterXML") + + # Pack + xStatus = etree.SubElement(nwXML, "status") + theStatus.packXML(xStatus) + assert etree.tostring(xStatus, pretty_print=False, encoding="utf-8") == ( + b"" + b"New" + b"Minor" + b"Major" + b"Main" + b"" + ) + + # Unpack + theStatus = NWStatus() + assert theStatus.unpackXML(xStatus) + assert theStatus._theLabels == ["New", "Minor", "Major", "Main"] + assert theStatus._theColours == [(100, 100, 100), (200, 50, 0), (200, 150, 0), (50, 200, 0)] + assert theStatus._theCounts == [0, 0, 0, 0] + assert theStatus._theMap["New"] == 0 + assert theStatus._theMap["Minor"] == 1 + assert theStatus._theMap["Major"] == 2 + assert theStatus._theMap["Main"] == 3 + assert theStatus._theLength == 4 + +# END Test testCoreStatus_XMLPackUnpack diff --git a/tests/test_project.py b/tests/test_project.py index 4167dbd3..748021a7 100644 --- a/tests/test_project.py +++ b/tests/test_project.py @@ -11,8 +11,7 @@ from zipfile import ZipFile from tools import cmpFiles from nw.core.project import NWProject -from nw.core.spellcheck import NWSpellEnchant, NWSpellSimple -from nw.constants import nwConst, nwItemClass, nwItemType, nwItemLayout, nwFiles +from nw.constants import nwItemClass, nwItemType, nwItemLayout, nwFiles @pytest.mark.project def testProjectNewOpenSave(nwFuncTemp, nwTempProj, refDir, tmpDir, dummyGUI):