Move project name to project data class

This commit is contained in:
Veronica Berglyd Olsen
2022-10-30 23:18:18 +01:00
parent ea80fd3c71
commit e887ec6991
13 changed files with 174 additions and 73 deletions
+1 -1
View File
@@ -75,7 +75,7 @@ class NWIndex:
return return
def __repr__(self): def __repr__(self):
return f"<NWIndex project='{self.theProject.projName}'>" return f"<NWIndex project='{self.theProject.data.name}'>"
## ##
# Properties # Properties
+29 -35
View File
@@ -38,9 +38,10 @@ from PyQt5.QtCore import QCoreApplication
from novelwriter.enum import nwItemType, nwItemClass, nwItemLayout, nwAlert from novelwriter.enum import nwItemType, nwItemClass, nwItemLayout, nwAlert
from novelwriter.error import logException from novelwriter.error import logException
from novelwriter.common import ( from novelwriter.common import (
checkString, checkStringNone, isHandle, formatTimeStamp, checkString, checkStringNone, isHandle, formatTimeStamp, makeFileNameSafe,
makeFileNameSafe, hexToInt, minmax, simplified hexToInt, minmax, simplified
) )
from novelwriter.constants import trConst, nwFiles, nwLabels
from novelwriter.core.tree import NWTree from novelwriter.core.tree import NWTree
from novelwriter.core.item import NWItem from novelwriter.core.item import NWItem
from novelwriter.core.index import NWIndex from novelwriter.core.index import NWIndex
@@ -48,7 +49,7 @@ from novelwriter.core.status import NWStatus
from novelwriter.core.options import OptionState from novelwriter.core.options import OptionState
from novelwriter.core.document import NWDoc from novelwriter.core.document import NWDoc
from novelwriter.core.projectxml import ProjectXMLReader, XMLReadState from novelwriter.core.projectxml import ProjectXMLReader, XMLReadState
from novelwriter.constants import trConst, nwFiles, nwLabels from novelwriter.core.projectdata import NWProjectData
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -63,7 +64,8 @@ class NWProject:
self.mainConf = novelwriter.CONFIG self.mainConf = novelwriter.CONFIG
self.mainGui = mainGui self.mainGui = mainGui
self._data = {} self._data = NWProjectData()
self._raw = {}
# Core Elements # Core Elements
self._optState = OptionState(self) # Project-specific GUI options self._optState = OptionState(self) # Project-specific GUI options
@@ -91,7 +93,6 @@ class NWProject:
self.projFiles = [] # A list of all files in the content folder on load self.projFiles = [] # A list of all files in the content folder on load
# Project Meta # Project Meta
self.projName = "" # Project name
self.bookTitle = "" # The final title; should only be used for exports self.bookTitle = "" # The final title; should only be used for exports
self.bookAuthors = [] # A list of book authors self.bookAuthors = [] # A list of book authors
@@ -125,6 +126,10 @@ class NWProject:
# Properties # Properties
## ##
@property
def data(self):
return self._data
@property @property
def index(self): def index(self):
return self._projIndex return self._projIndex
@@ -263,7 +268,6 @@ class NWProject:
self.projSpell = None self.projSpell = None
self.projLang = None self.projLang = None
self.projFiles = [] self.projFiles = []
self.projName = ""
self.bookTitle = "" self.bookTitle = ""
self.bookAuthors = [] self.bookAuthors = []
self.autoReplace = {} self.autoReplace = {}
@@ -328,14 +332,14 @@ class NWProject:
if not self.setProjectPath(projPath, newProject=True): if not self.setProjectPath(projPath, newProject=True):
return False return False
self.setProjectName(projName) self.data.setName(projName)
self.setBookTitle(projTitle) self.setBookTitle(projTitle)
self.setBookAuthors(projAuthors) self.setBookAuthors(projAuthors)
hNovelRoot = self.newRoot(nwItemClass.NOVEL) hNovelRoot = self.newRoot(nwItemClass.NOVEL)
hTitlePage = self.newFile(self.tr("Title Page"), hNovelRoot) hTitlePage = self.newFile(self.tr("Title Page"), hNovelRoot)
titlePage = "#! %s\n\n" % (self.bookTitle if self.bookTitle else self.projName) titlePage = "#! %s\n\n" % (self.bookTitle if self.bookTitle else self._data.name)
if self.bookAuthors: if self.bookAuthors:
titlePage = "%s>> %s %s <<\n" % (titlePage, self.tr("By"), self.getAuthors()) titlePage = "%s>> %s %s <<\n" % (titlePage, self.tr("By"), self.getAuthors())
@@ -480,8 +484,9 @@ class NWProject:
# Open The Project XML File # Open The Project XML File
# ========================= # =========================
self._data = NWProjectData()
xmlReader = ProjectXMLReader(fileName) xmlReader = ProjectXMLReader(fileName)
xmlParsed = xmlReader.read() xmlParsed = xmlReader.read(self._data)
xmlData = xmlReader.data xmlData = xmlReader.data
print(json.dumps(xmlData, indent=2)) print(json.dumps(xmlData, indent=2))
@@ -510,7 +515,7 @@ class NWProject:
self.clearProject() self.clearProject()
return False return False
self._data = xmlData self._raw = xmlData
logger.debug("XML root is '%s'", nwxRoot) logger.debug("XML root is '%s'", nwxRoot)
logger.debug("File version is '%s'", xmlVersion) logger.debug("File version is '%s'", xmlVersion)
@@ -552,16 +557,13 @@ class NWProject:
# Extract Data # Extract Data
# ============ # ============
xmlProject = xmlData.get("project", {}) self.bookTitle = self._data.title
self.bookAuthors = self._data.autors
self.saveCount = self._data.saveCount
self.autoCount = self._data.autoCount
self.editTime = self._data.editTime
self.projName = xmlProject.get("name", "") logger.info("Project Name: '%s'", self._data.name)
self.bookTitle = xmlProject.get("title", "")
self.bookAuthors = xmlProject.get("authors", [])
self.saveCount = xmlProject.get("saveCount", 0)
self.autoCount = xmlProject.get("autoCount", 0)
self.editTime = xmlProject.get("editTime", 0)
logger.info("Project Name: '%s'", self.projName)
logger.info("Project Title: '%s'", self.bookTitle) logger.info("Project Title: '%s'", self.bookTitle)
xmlSettings = xmlData.get("settings", {}) xmlSettings = xmlData.get("settings", {})
@@ -601,7 +603,7 @@ class NWProject:
self._deprecatedFiles() self._deprecatedFiles()
# Update recent projects # Update recent projects
self.mainConf.updateRecentCache(self.projPath, self.projName, self.lastWCount, time()) self.mainConf.updateRecentCache(self.projPath, self._data.name, self.lastWCount, time())
self.mainConf.saveRecentCache() self.mainConf.saveRecentCache()
# Check the project tree consistency # Check the project tree consistency
@@ -621,7 +623,7 @@ class NWProject:
self._writeLockFile() self._writeLockFile()
self.setProjectChanged(False) self.setProjectChanged(False)
self.mainGui.setStatus(self.tr("Opened Project: {0}").format(self.projName)) self.mainGui.setStatus(self.tr("Opened Project: {0}").format(self._data.name))
return True return True
@@ -662,7 +664,7 @@ class NWProject:
# Save Project Meta # Save Project Meta
xProject = etree.SubElement(nwXML, "project") xProject = etree.SubElement(nwXML, "project")
self._packProjectValue(xProject, "name", self.projName) self._packProjectValue(xProject, "name", self._data.name)
self._packProjectValue(xProject, "title", self.bookTitle) self._packProjectValue(xProject, "title", self.bookTitle)
self._packProjectValue(xProject, "author", self.bookAuthors) self._packProjectValue(xProject, "author", self.bookAuthors)
self._packProjectValue(xProject, "saveCount", str(self.saveCount)) self._packProjectValue(xProject, "saveCount", str(self.saveCount))
@@ -734,11 +736,11 @@ class NWProject:
self._optState.saveSettings() self._optState.saveSettings()
# Update recent projects # Update recent projects
self.mainConf.updateRecentCache(self.projPath, self.projName, self.currWCount, saveTime) self.mainConf.updateRecentCache(self.projPath, self._data.name, self.currWCount, saveTime)
self.mainConf.saveRecentCache() self.mainConf.saveRecentCache()
self._writeLockFile() self._writeLockFile()
self.mainGui.setStatus(self.tr("Saved Project: {0}").format(self.projName)) self.mainGui.setStatus(self.tr("Saved Project: {0}").format(self._data.name))
self.setProjectChanged(False) self.setProjectChanged(False)
return True return True
@@ -800,14 +802,14 @@ class NWProject:
), nwAlert.ERROR) ), nwAlert.ERROR)
return False return False
if not self.projName: if not self._data.name:
self.mainGui.makeAlert(self.tr( self.mainGui.makeAlert(self.tr(
"Cannot backup project because no project name is set. " "Cannot backup project because no project name is set. "
"Please set a Working Title in Project Settings." "Please set a Working Title in Project Settings."
), nwAlert.ERROR) ), nwAlert.ERROR)
return False return False
cleanName = makeFileNameSafe(self.projName) cleanName = makeFileNameSafe(self._data.name)
baseDir = os.path.abspath(os.path.join(self.mainConf.backupPath, cleanName)) baseDir = os.path.abspath(os.path.join(self.mainConf.backupPath, cleanName))
if not os.path.isdir(baseDir): if not os.path.isdir(baseDir):
try: try:
@@ -953,14 +955,6 @@ class NWProject:
return True return True
def setProjectName(self, projName):
"""Set the project name, This is the the name used for backup
files etc.
"""
self.projName = simplified(projName)
self.setProjectChanged(True)
return True
def setBookTitle(self, bookTitle): def setBookTitle(self, bookTitle):
"""Set the book title, that is, the title to include in exports. """Set the book title, that is, the title to include in exports.
""" """
@@ -998,7 +992,7 @@ class NWProject:
), nwAlert.WARN) ), nwAlert.WARN)
return False return False
if self.projName == "": if self._data.name == "":
self.mainGui.makeAlert(self.tr( self.mainGui.makeAlert(self.tr(
"You must set a valid project name in Project Settings to " "You must set a valid project name in Project Settings to "
"use the automatic project backup feature." "use the automatic project backup feature."
+112
View File
@@ -0,0 +1,112 @@
"""
novelWriter Project Data Class
================================
Class for holding the project settings
File History:
Created: 2022-10-30 [2.0rc1]
This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
"""
import logging
from novelwriter.common import checkInt, simplified
logger = logging.getLogger(__name__)
class NWProjectData:
def __init__(self):
# Project Meta
self._name = ""
self._title = ""
self._authors = []
self._saveCount = 0
self._autoCount = 0
self._editTime = 0
# Internal
self._changed = False
return
##
# Properties
##
@property
def name(self):
return self._name
@property
def title(self):
return self._title
@property
def autors(self):
return self._authors
@property
def saveCount(self):
return self._saveCount
@property
def autoCount(self):
return self._autoCount
@property
def editTime(self):
return self._editTime
##
# Setters
##
def setName(self, value):
self._name = simplified(str(value))
self._changed = True
return
def setTitle(self, value):
self._title = simplified(str(value))
self._changed = True
return
def addAuthor(self, value):
self._authors.append(simplified(str(value)))
self._changed = True
return
def setSaveCount(self, value):
self._saveCount = checkInt(value, 0)
self._changed = True
return
def setAutoCount(self, value):
self._autoCount = checkInt(value, 0)
self._changed = True
return
def setEditTime(self, value):
self._editTime = checkInt(value, 0)
self._changed = True
return
# END Class NWProjectData
+11 -16
View File
@@ -4,7 +4,8 @@ novelWriter Project XML Read/Write
Classes for reading and writing the project XML file Classes for reading and writing the project XML file
File History: File History:
Created: 2022-09-28 [1.7.b1] Created: 2022-09-28 [2.0rc1] ProjectXMLReader
Created: 2022-09-28 [2.0rc1] XMLReadState
This file is a part of novelWriter This file is a part of novelWriter
Copyright 20182022, Veronica Berglyd Olsen Copyright 20182022, Veronica Berglyd Olsen
@@ -90,7 +91,7 @@ class ProjectXMLReader:
# Methods # Methods
## ##
def read(self): def read(self, projData):
"""Read and parse the project XML file. """Read and parse the project XML file.
""" """
self._data = {} self._data = {}
@@ -154,7 +155,7 @@ class ProjectXMLReader:
status = True status = True
for xSection in xRoot: for xSection in xRoot:
if xSection.tag == "project": if xSection.tag == "project":
status &= self._parseProjectMeta(xSection) status &= self._parseProjectMeta(xSection, projData)
elif xSection.tag == "settings": elif xSection.tag == "settings":
status &= self._parseProjectSettings(xSection) status &= self._parseProjectSettings(xSection)
elif xSection.tag == "content": elif xSection.tag == "content":
@@ -180,31 +181,25 @@ class ProjectXMLReader:
# Internal Functions # Internal Functions
## ##
def _parseProjectMeta(self, xSection): def _parseProjectMeta(self, xSection, projData):
"""Parse the project section of the XML file. """Parse the project section of the XML file.
""" """
logger.debug("Parsing xml <root/project>") logger.debug("Parsing xml <root/project>")
data = {}
authors = []
for xItem in xSection: for xItem in xSection:
if xItem.tag == "name": if xItem.tag == "name":
data["name"] = simplified(checkString(xItem.text, "")) projData.setName(xItem.text)
elif xItem.tag == "title": elif xItem.tag == "title":
data["title"] = simplified(checkString(xItem.text, "")) projData.setTitle(xItem.text)
elif xItem.tag == "author": elif xItem.tag == "author":
authors.append(simplified(checkString(xItem.text, ""))) projData.addAuthor(xItem.text)
elif xItem.tag == "saveCount": elif xItem.tag == "saveCount":
data["saveCount"] = checkInt(xItem.text, 0) projData.setSaveCount(xItem.text)
elif xItem.tag == "autoCount": elif xItem.tag == "autoCount":
data["autoCount"] = checkInt(xItem.text, 0) projData.setAutoCount(xItem.text)
elif xItem.tag == "editTime": elif xItem.tag == "editTime":
data["editTime"] = checkInt(xItem.text, 0) projData.setEditTime(xItem.text)
else: else:
logger.warning("Ignored <root/project/%s> in xml", xItem.tag) logger.warning("Ignored <root/project/%s> in xml", xItem.tag)
data["authors"] = authors
self._data["project"] = data
return True return True
def _parseProjectSettings(self, xSection): def _parseProjectSettings(self, xSection):
+1 -1
View File
@@ -315,7 +315,7 @@ class ToHtml(Tokenizer):
"</body>\n" "</body>\n"
"</html>\n" "</html>\n"
).format( ).format(
projTitle=self.theProject.projName, projTitle=self.theProject.data.name,
htmlStyle="\n".join(theStyle), htmlStyle="\n".join(theStyle),
bodyText=bodyText, bodyText=bodyText,
) )
+1 -1
View File
@@ -166,7 +166,7 @@ class GuiProjectDetailsMain(QWidget):
self.bookTitle.setWordWrap(True) self.bookTitle.setWordWrap(True)
self.projName = QLabel( self.projName = QLabel(
self.tr("Working Title: {0}").format(self.theProject.projName) self.tr("Working Title: {0}").format(self.theProject.data.name)
) )
workFont = self.projName.font() workFont = self.projName.font()
workFont.setPointSizeF(0.8*fPt) workFont.setPointSizeF(0.8*fPt)
+2 -2
View File
@@ -114,7 +114,7 @@ class GuiProjectSettings(PagedDialog):
spellLang = self.tabMain.spellLang.currentData() spellLang = self.tabMain.spellLang.currentData()
doBackup = not self.tabMain.doBackup.isChecked() doBackup = not self.tabMain.doBackup.isChecked()
self.theProject.setProjectName(projName) self.theProject.data.setName(projName)
self.theProject.setBookTitle(bookTitle) self.theProject.setBookTitle(bookTitle)
self.theProject.setBookAuthors(bookAuthors) self.theProject.setBookAuthors(bookAuthors)
self.theProject.setProjBackup(doBackup) self.theProject.setProjBackup(doBackup)
@@ -209,7 +209,7 @@ class GuiProjectEditMain(QWidget):
self.editName = QLineEdit() self.editName = QLineEdit()
self.editName.setMaxLength(200) self.editName.setMaxLength(200)
self.editName.setMaximumWidth(xW) self.editName.setMaximumWidth(xW)
self.editName.setText(self.theProject.projName) self.editName.setText(self.theProject.data.name)
self.mainForm.addRow( self.mainForm.addRow(
self.tr("Project name"), self.tr("Project name"),
self.editName, self.editName,
+3 -3
View File
@@ -383,7 +383,7 @@ class GuiMain(QMainWindow):
self.mainStatus.setDocumentStatus(nwState.NONE) self.mainStatus.setDocumentStatus(nwState.NONE)
self.mainStatus.setStatus(self.tr("New project created ...")) self.mainStatus.setStatus(self.tr("New project created ..."))
self._updateWindowTitle(self.theProject.projName) self._updateWindowTitle(self.theProject.data.name)
else: else:
self.theProject.clearProject() self.theProject.clearProject()
@@ -521,7 +521,7 @@ class GuiMain(QMainWindow):
self.theProject.index.loadIndex() self.theProject.index.loadIndex()
# Update GUI # Update GUI
self._updateWindowTitle(self.theProject.projName) self._updateWindowTitle(self.theProject.data.name)
self.rebuildTrees() self.rebuildTrees()
self.docEditor.setDictionaries() self.docEditor.setDictionaries()
self.docEditor.toggleSpellCheck(self.theProject.spellCheck) self.docEditor.toggleSpellCheck(self.theProject.spellCheck)
@@ -960,7 +960,7 @@ class GuiMain(QMainWindow):
if dlgProj.spellChanged: if dlgProj.spellChanged:
self.docEditor.setDictionaries() self.docEditor.setDictionaries()
self.itemDetails.refreshDetails() self.itemDetails.refreshDetails()
self._updateWindowTitle(self.theProject.projName) self._updateWindowTitle(self.theProject.data.name)
return True return True
+2 -2
View File
@@ -888,7 +888,7 @@ class GuiBuildNovel(QDialog):
# Generate File Name # Generate File Name
# ================== # ==================
cleanName = makeFileNameSafe(self.theProject.projName) cleanName = makeFileNameSafe(self.theProject.data.name)
fileName = "%s.%s" % (cleanName, fileExt) fileName = "%s.%s" % (cleanName, fileExt)
saveDir = self.mainConf.lastPath saveDir = self.mainConf.lastPath
if not os.path.isdir(saveDir): if not os.path.isdir(saveDir):
@@ -972,7 +972,7 @@ class GuiBuildNovel(QDialog):
elif theFmt == self.FMT_JSON_H or theFmt == self.FMT_JSON_M: elif theFmt == self.FMT_JSON_H or theFmt == self.FMT_JSON_M:
jsonData = { jsonData = {
"meta": { "meta": {
"workingTitle": self.theProject.projName, "workingTitle": self.theProject.data.name,
"novelTitle": self.theProject.bookTitle, "novelTitle": self.theProject.bookTitle,
"authors": self.theProject.bookAuthors, "authors": self.theProject.bookAuthors,
"buildTime": self.buildTime, "buildTime": self.buildTime,
+8 -8
View File
@@ -202,7 +202,7 @@ def testCoreProject_NewSampleA(fncDir, tmpConf, mockGUI, tmpDir):
assert theProject.newProject(projData) is True assert theProject.newProject(projData) is True
assert theProject.openProject(fncDir) is True assert theProject.openProject(fncDir) is True
assert theProject.projName == "Sample Project" assert theProject.data.name == "Sample Project"
assert theProject.saveProject() is True assert theProject.saveProject() is True
assert theProject.closeProject() is True assert theProject.closeProject() is True
os.unlink(dstSample) os.unlink(dstSample)
@@ -236,7 +236,7 @@ def testCoreProject_NewSampleB(monkeypatch, fncDir, tmpConf, mockGUI, tmpDir):
monkeypatch.setattr(nwFiles, "PROJ_FILE", "nwProject.nwx") monkeypatch.setattr(nwFiles, "PROJ_FILE", "nwProject.nwx")
assert theProject.newProject(projData) is True assert theProject.newProject(projData) is True
assert theProject.openProject(fncDir) is True assert theProject.openProject(fncDir) is True
assert theProject.projName == "Sample Project" assert theProject.data.name == "Sample Project"
assert theProject.saveProject() is True assert theProject.saveProject() is True
assert theProject.closeProject() is True assert theProject.closeProject() is True
@@ -895,8 +895,8 @@ def testCoreProject_Methods(monkeypatch, mockGUI, tmpDir, fncDir, mockRnd):
assert theProject.setProjectPath(fncDir) assert theProject.setProjectPath(fncDir)
# Project Name # Project Name
assert theProject.setProjectName(" A Name ") assert theProject.data.setName(" A Name ")
assert theProject.projName == "A Name" assert theProject.data.name == "A Name"
# Project Title # Project Title
assert theProject.setBookTitle(" A Title ") assert theProject.setBookTitle(" A Title ")
@@ -944,9 +944,9 @@ def testCoreProject_Methods(monkeypatch, mockGUI, tmpDir, fncDir, mockRnd):
theProject.mainConf.backupPath = tmpDir theProject.mainConf.backupPath = tmpDir
assert theProject.setProjBackup(True) assert theProject.setProjBackup(True)
assert theProject.setProjectName("") assert theProject.data.setName("")
assert not theProject.setProjBackup(True) assert not theProject.setProjBackup(True)
assert theProject.setProjectName("A Name") assert theProject.data.setName("A Name")
assert theProject.setProjBackup(True) assert theProject.setProjBackup(True)
# Spell check # Spell check
@@ -1327,12 +1327,12 @@ def testCoreProject_Backup(monkeypatch, mockGUI, nwMinimal, tmpDir):
# Missing project name # Missing project name
theProject.mainConf.backupPath = tmpDir theProject.mainConf.backupPath = tmpDir
theProject.projName = "" theProject.data.name = ""
assert theProject.zipIt(doNotify=False) is False assert theProject.zipIt(doNotify=False) is False
# Non-existent folder # Non-existent folder
theProject.mainConf.backupPath = os.path.join(tmpDir, "nonexistent") theProject.mainConf.backupPath = os.path.join(tmpDir, "nonexistent")
theProject.projName = "Test Minimal" theProject.data.name = "Test Minimal"
assert theProject.zipIt(doNotify=False) is False assert theProject.zipIt(doNotify=False) is False
# Same folder as project (causes infinite loop in zipping) # Same folder as project (causes infinite loop in zipping)
+1 -1
View File
@@ -136,7 +136,7 @@ def testDlgProjSettings_Main(qtbot, monkeypatch, nwGUI, fncDir, fncProj, mockRnd
assert projSettings.spellChanged is False assert projSettings.spellChanged is False
projSettings._doSave() projSettings._doSave()
assert theProject.projName == "Project Name" assert theProject.data.name == "Project Name"
assert theProject.bookTitle == "Project Title" assert theProject.bookTitle == "Project Title"
assert theProject.bookAuthors == ["Jane Doe", "John Doh"] assert theProject.bookAuthors == ["Jane Doe", "John Doh"]
+2 -2
View File
@@ -172,7 +172,7 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, fncProj, refDir, outDir, mock
assert nwGUI.theProject.tree.trashRoot() is None assert nwGUI.theProject.tree.trashRoot() is None
assert nwGUI.theProject.projPath is None assert nwGUI.theProject.projPath is None
assert nwGUI.theProject.projMeta is None assert nwGUI.theProject.projMeta is None
assert nwGUI.theProject.projName == "" assert nwGUI.theProject.data.name == ""
assert nwGUI.theProject.bookTitle == "" assert nwGUI.theProject.bookTitle == ""
assert len(nwGUI.theProject.bookAuthors) == 0 assert len(nwGUI.theProject.bookAuthors) == 0
assert not nwGUI.theProject.spellCheck assert not nwGUI.theProject.spellCheck
@@ -194,7 +194,7 @@ def testGuiMain_Editing(qtbot, monkeypatch, nwGUI, fncProj, refDir, outDir, mock
assert nwGUI.theProject.tree.trashRoot() is None assert nwGUI.theProject.tree.trashRoot() is None
assert nwGUI.theProject.projPath == fncProj assert nwGUI.theProject.projPath == fncProj
assert nwGUI.theProject.projMeta == os.path.join(fncProj, "meta") assert nwGUI.theProject.projMeta == os.path.join(fncProj, "meta")
assert nwGUI.theProject.projName == "New Project" assert nwGUI.theProject.data.name == "New Project"
assert nwGUI.theProject.bookTitle == "New Novel" assert nwGUI.theProject.bookTitle == "New Novel"
assert len(nwGUI.theProject.bookAuthors) == 1 assert len(nwGUI.theProject.bookAuthors) == 1
assert nwGUI.theProject.spellCheck is False assert nwGUI.theProject.spellCheck is False
+1 -1
View File
@@ -167,7 +167,7 @@ def buildTestProject(theObject, projPath):
theProject.clearProject() theProject.clearProject()
theProject.setProjectPath(projPath, newProject=True) theProject.setProjectPath(projPath, newProject=True)
theProject.setProjectName("New Project") theProject.data.setName("New Project")
theProject.setBookTitle("New Novel") theProject.setBookTitle("New Novel")
theProject.setBookAuthors("Jane Doe") theProject.setBookAuthors("Jane Doe")