Add project file format 1.5
This commit is contained in:
@@ -42,10 +42,10 @@ class MockProject:
|
||||
def testCoreProjectXML_ReadCurrent(monkeypatch, tstPaths, fncPath):
|
||||
"""Test reading the current XML file format.
|
||||
"""
|
||||
refFile = tstPaths.filesDir / "nwProject-1.4.nwx"
|
||||
refFile = tstPaths.filesDir / "nwProject-1.5.nwx"
|
||||
tstFile = tstPaths.outDir / "ProjectXML_ReadCurrent.nwx"
|
||||
xmlFile = fncPath / "nwProject-1.4.nwx"
|
||||
bakFile = fncPath / "nwProject-1.4.bak"
|
||||
xmlFile = fncPath / "nwProject-1.5.nwx"
|
||||
bakFile = fncPath / "nwProject-1.5.bak"
|
||||
outFile = fncPath / "nwProject.nwx"
|
||||
|
||||
xmlReader = ProjectXMLReader(xmlFile)
|
||||
@@ -81,7 +81,7 @@ def testCoreProjectXML_ReadCurrent(monkeypatch, tstPaths, fncPath):
|
||||
|
||||
# Check parsing of unkown sections
|
||||
writeFile(xmlFile, (
|
||||
"<novelWriterXML fileVersion='1.4'>"
|
||||
"<novelWriterXML fileVersion='1.5'>"
|
||||
" <project>"
|
||||
" <stuff></stuff>"
|
||||
" </project>"
|
||||
@@ -129,7 +129,7 @@ def testCoreProjectXML_ReadCurrent(monkeypatch, tstPaths, fncPath):
|
||||
assert xmlReader.read(data, content) is True
|
||||
assert xmlReader.state == XMLReadState.PARSED_OK
|
||||
assert xmlReader.xmlRoot == "novelWriterXML"
|
||||
assert xmlReader.xmlVersion == 0x0104
|
||||
assert xmlReader.xmlVersion == 0x0105
|
||||
assert xmlReader.appVersion == "2.0-rc1"
|
||||
assert xmlReader.hexVersion == "0x020000c1"
|
||||
|
||||
@@ -809,3 +809,150 @@ def testCoreProjectXML_ReadLegacy13(tstPaths, fncPath, mockRnd):
|
||||
assert cmpFiles(testFile, compFile)
|
||||
|
||||
# END Test testCoreProjectXML_ReadLegacy13
|
||||
|
||||
|
||||
@pytest.mark.core
|
||||
def testCoreProjectXML_ReadLegacy14(tstPaths, fncPath, mockRnd):
|
||||
"""Test reading the version 1.4 XML file format.
|
||||
"""
|
||||
refFile = tstPaths.filesDir / "nwProject-1.4.nwx"
|
||||
xmlFile = fncPath / "nwProject-1.4.nwx"
|
||||
outFile = fncPath / "nwProject.nwx"
|
||||
copyfile(refFile, xmlFile)
|
||||
|
||||
xmlReader = ProjectXMLReader(xmlFile)
|
||||
assert xmlReader.state == XMLReadState.NO_ACTION
|
||||
|
||||
data = NWProjectData(MockProject())
|
||||
content = []
|
||||
|
||||
assert xmlReader.read(data, content) is True
|
||||
assert xmlReader.state == XMLReadState.WAS_LEGACY
|
||||
assert xmlReader.xmlRoot == "novelWriterXML"
|
||||
assert xmlReader.xmlVersion == 0x0104
|
||||
assert xmlReader.appVersion == "2.0-rc1"
|
||||
assert xmlReader.hexVersion == "0x020000c1"
|
||||
|
||||
# Check loaded data
|
||||
assert data.name == "Sample Project"
|
||||
assert data.title == "Sample Project"
|
||||
assert data.authors == ["Jane Smith", "Jay Doh"]
|
||||
assert data.saveCount == 5
|
||||
assert data.autoCount == 10
|
||||
assert data.editTime == 1000
|
||||
|
||||
assert data.doBackup is True
|
||||
assert data.language == "en_GB"
|
||||
assert data.spellCheck is True
|
||||
assert data.spellLang == "en_GB"
|
||||
assert data.initCounts == (954, 409)
|
||||
assert data.currCounts == (954, 409)
|
||||
|
||||
assert data.getLastHandle("editor") is None # Dropped by conversion
|
||||
assert data.getLastHandle("viewer") is None # Dropped by conversion
|
||||
assert data.getLastHandle("novelTree") is None # Doesn't exist in 1.3
|
||||
assert data.getLastHandle("outline") is None # Doesn't exist in 1.3
|
||||
|
||||
assert data.getTitleFormat("title") == "%title%"
|
||||
assert data.getTitleFormat("chapter") == "Chapter %chw%: %title%"
|
||||
assert data.getTitleFormat("unnumbered") == "%title%"
|
||||
assert data.getTitleFormat("scene") == "Scene %ch%.%sc%: %title%"
|
||||
assert data.getTitleFormat("section") == ""
|
||||
|
||||
assert data.itemStatus.name("sf12341") == "New"
|
||||
assert data.itemStatus.name("sf24ce6") == "Notes"
|
||||
assert data.itemStatus.name("sc24b8f") == "Started"
|
||||
assert data.itemStatus.name("s90e6c9") == "1st Draft"
|
||||
assert data.itemStatus.name("sd51c5b") == "2nd Draft"
|
||||
assert data.itemStatus.name("s8ae72a") == "3rd Draft"
|
||||
assert data.itemStatus.name("s78ea90") == "Finished"
|
||||
|
||||
assert data.itemImport.name("ia857f0") == "None"
|
||||
assert data.itemImport.name("icfb3a5") == "Minor"
|
||||
assert data.itemImport.name("i2d7a54") == "Major"
|
||||
assert data.itemImport.name("i56be10") == "Main"
|
||||
|
||||
assert data.itemStatus.cols("sf12341") == (100, 100, 100)
|
||||
assert data.itemStatus.cols("sf24ce6") == (200, 50, 0)
|
||||
assert data.itemStatus.cols("sc24b8f") == (182, 60, 0)
|
||||
assert data.itemStatus.cols("s90e6c9") == (193, 129, 0)
|
||||
assert data.itemStatus.cols("sd51c5b") == (193, 129, 0)
|
||||
assert data.itemStatus.cols("s8ae72a") == (193, 129, 0)
|
||||
assert data.itemStatus.cols("s78ea90") == (58, 180, 58)
|
||||
|
||||
assert data.itemImport.cols("ia857f0") == (100, 100, 100)
|
||||
assert data.itemImport.cols("icfb3a5") == (0, 122, 188)
|
||||
assert data.itemImport.cols("i2d7a54") == (21, 0, 180)
|
||||
assert data.itemImport.cols("i56be10") == (117, 0, 175)
|
||||
|
||||
assert data.itemStatus.count("sf12341") == 4
|
||||
assert data.itemStatus.count("sf24ce6") == 2
|
||||
assert data.itemStatus.count("sc24b8f") == 3
|
||||
assert data.itemStatus.count("s90e6c9") == 7
|
||||
assert data.itemStatus.count("sd51c5b") == 0
|
||||
assert data.itemStatus.count("s8ae72a") == 0
|
||||
assert data.itemStatus.count("s78ea90") == 1
|
||||
|
||||
assert data.itemImport.count("ia857f0") == 5
|
||||
assert data.itemImport.count("icfb3a5") == 2
|
||||
assert data.itemImport.count("i2d7a54") == 2
|
||||
assert data.itemImport.count("i56be10") == 1
|
||||
|
||||
# Compare content
|
||||
dumpFile = tstPaths.outDir / "projectXML_ReadLegacy14.json"
|
||||
compFile = tstPaths.refDir / "projectXML_ReadLegacy14.json"
|
||||
with open(dumpFile, mode="w", encoding="utf-8") as dump:
|
||||
json.dump(content, dump, indent=2)
|
||||
assert cmpFiles(dumpFile, compFile)
|
||||
|
||||
packedContent = []
|
||||
mockProject = MockProject()
|
||||
mockProject.__setattr__("data", data)
|
||||
status = {}
|
||||
for entry in content:
|
||||
item = NWItem(mockProject)
|
||||
item.unpack(entry)
|
||||
status[item.itemHandle] = item.getImportStatus(incIcon=False)[0]
|
||||
packedContent.append(item.pack())
|
||||
|
||||
assert status == {
|
||||
"7031beac91f75": "Started",
|
||||
"53b69b83cdafc": "Started",
|
||||
"974e400180a99": "New",
|
||||
"edca4be2fcaf8": "1st Draft",
|
||||
"6a2d6d5f4f401": "Notes",
|
||||
"636b6aa9b697b": "1st Draft",
|
||||
"bc0cbd2a407f3": "1st Draft",
|
||||
"ba8a28a246524": "Finished",
|
||||
"96b68994dfa3d": "Notes",
|
||||
"88706ddc78b1b": "1st Draft",
|
||||
"ae7339df26ded": "1st Draft",
|
||||
"e5e47ebf63b1c": "New",
|
||||
"bacb7059e3083": "Started",
|
||||
"a520879ca0b45": "1st Draft",
|
||||
"f6622b4617424": "None",
|
||||
"f7e2d9f330615": "None",
|
||||
"14298de4d9524": "Minor",
|
||||
"bb2c23b3c42cc": "Major",
|
||||
"15c4492bd5107": "None",
|
||||
"b3e74dbc1f584": "Main",
|
||||
"f1471bef9f2ae": "Minor",
|
||||
"5eaea4e8cdee8": "Major",
|
||||
"6827118336ac1": "New",
|
||||
"ae9bf3c3ea159": "New",
|
||||
"8a5deb88c0e97": "1st Draft",
|
||||
"98acd8c76c93a": "None",
|
||||
"b8136a5a774a0": "None",
|
||||
}
|
||||
|
||||
# Save the project again, which should produce an identical project xml
|
||||
timeStamp = int(datetime.fromisoformat(xmlReader.timeStamp).timestamp())
|
||||
xmlWriter = ProjectXMLWriter(fncPath)
|
||||
data.setUuid("d0f3fe10-c6e6-4310-8bfd-181eb4224eed")
|
||||
assert xmlWriter.write(data, packedContent, timeStamp, 1000) is True
|
||||
testFile = tstPaths.outDir / "projectXML_ReadLegacy14.nwx"
|
||||
compFile = tstPaths.refDir / "projectXML_ReadLegacy14.nwx"
|
||||
copyfile(outFile, testFile)
|
||||
assert cmpFiles(testFile, compFile)
|
||||
|
||||
# END Test testCoreProjectXML_ReadLegacy14
|
||||
|
||||
Reference in New Issue
Block a user