Updated tests and added a minimal test for timelineview.

This commit is contained in:
Veronica K. B. Olsen
2019-06-01 21:03:53 +02:00
parent 504e7fb70f
commit 48dc34c54d
8 changed files with 217 additions and 25 deletions
+4 -3
View File
@@ -366,9 +366,10 @@ class GuiMain(QMainWindow):
return return
logger.verbose("Requesting change to item %s" % tHandle) logger.verbose("Requesting change to item %s" % tHandle)
dlgProj = GuiItemEditor(self, self.theProject, tHandle) if self.mainConf.showGUI:
if dlgProj.exec_(): dlgProj = GuiItemEditor(self, self.theProject, tHandle)
self.treeView.setTreeItemValues(tHandle) if dlgProj.exec_():
self.treeView.setTreeItemValues(tHandle)
return return
+12 -5
View File
@@ -1,13 +1,20 @@
# Hello World! # Novel
## With a Subtitle ## Chapter
### An Even Subier Title @pov: Jane
@plot: MainPlot
#### Basically Not a Title at All ### Scene
% How about a comment? % How about a comment?
@keyword: value @pov: Jane
@plot: MainPlot
@location: Home
#### Some Section
@char: Jane
This is a paragraph of dummy text. This is a paragraph of dummy text.
@@ -0,0 +1,5 @@
# Main Plot
@tag: MainPlot
This is a file detailing the main plot.
@@ -0,0 +1,5 @@
# Main Location
@tag: Home
This is a file describing Janes home.
@@ -0,0 +1,5 @@
# Jane Doe
@tag: Jane
This is a file about Jane.
+42 -6
View File
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<novelWriterXML appVersion="0.1.4" fileVersion="1.0" timeStamp="2019-05-25 23:29:32"> <novelWriterXML appVersion="0.1.4" fileVersion="1.0" timeStamp="2019-06-01 20:57:28">
<project> <project>
<name></name> <name></name>
<title></title> <title></title>
@@ -8,7 +8,7 @@
<spellCheck>True</spellCheck> <spellCheck>True</spellCheck>
<lastEdited>31489056e0916</lastEdited> <lastEdited>31489056e0916</lastEdited>
<lastViewed>31489056e0916</lastViewed> <lastViewed>31489056e0916</lastViewed>
<lastWordCount>69</lastWordCount> <lastWordCount>86</lastWordCount>
<status> <status>
<entry blue="100" green="100" red="100">New</entry> <entry blue="100" green="100" red="100">New</entry>
<entry blue="0" green="50" red="200">Note</entry> <entry blue="0" green="50" red="200">Note</entry>
@@ -22,7 +22,7 @@
<entry blue="0" green="200" red="50">Main</entry> <entry blue="0" green="200" red="50">Main</entry>
</importance> </importance>
</settings> </settings>
<content count="6"> <content count="9">
<item handle="73475cb40a568" order="0" parent="None"> <item handle="73475cb40a568" order="0" parent="None">
<name>Novel</name> <name>Novel</name>
<type>ROOT</type> <type>ROOT</type>
@@ -44,31 +44,67 @@
<status>New</status> <status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
<layout>SCENE</layout> <layout>SCENE</layout>
<charCount>377</charCount> <charCount>331</charCount>
<wordCount>69</wordCount> <wordCount>59</wordCount>
<paraCount>2</paraCount> <paraCount>2</paraCount>
<cursorPos>443</cursorPos> <cursorPos>465</cursorPos>
</item> </item>
<item handle="44cb730c42048" order="1" parent="None"> <item handle="44cb730c42048" order="1" 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>True</expanded>
</item>
<item handle="2fca346db6561" order="0" parent="44cb730c42048">
<name>New File</name>
<type>FILE</type>
<class>CHARACTER</class>
<status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
<layout>NOTE</layout>
<charCount>34</charCount>
<wordCount>8</wordCount>
<paraCount>1</paraCount>
<cursorPos>51</cursorPos>
</item> </item>
<item handle="71ee45a3c0db9" order="2" parent="None"> <item handle="71ee45a3c0db9" order="2" 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>True</expanded>
</item>
<item handle="02d20bbd7e394" order="0" parent="71ee45a3c0db9">
<name>New File</name>
<type>FILE</type>
<class>PLOT</class>
<status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
<layout>NOTE</layout>
<charCount>48</charCount>
<wordCount>10</wordCount>
<paraCount>1</paraCount>
<cursorPos>69</cursorPos>
</item> </item>
<item handle="811786ad1ae74" order="3" parent="None"> <item handle="811786ad1ae74" order="3" 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>True</expanded>
</item>
<item handle="7688b6ef52555" order="0" parent="811786ad1ae74">
<name>New File</name>
<type>FILE</type>
<class>WORLD</class>
<status>New</status>
<expanded>False</expanded> <expanded>False</expanded>
<layout>NOTE</layout>
<charCount>51</charCount>
<wordCount>9</wordCount>
<paraCount>1</paraCount>
<cursorPos>68</cursorPos>
</item> </item>
</content> </content>
</novelWriterXML> </novelWriterXML>
+123 -10
View File
@@ -9,6 +9,7 @@ from os import path, unlink
from PyQt5.QtCore import Qt from PyQt5.QtCore import Qt
from nw.gui.projecteditor import GuiProjectEditor from nw.gui.projecteditor import GuiProjectEditor
from nw.gui.timelineview import GuiTimeLineView
from nw.gui.itemeditor import GuiItemEditor from nw.gui.itemeditor import GuiItemEditor
from nw.enum import * from nw.enum import *
@@ -47,8 +48,6 @@ def testMainWindows(qtbot, nwTempGUI, nwRef):
assert cmpFiles(projFile, path.join(nwRef,"gui","0_nwProject.nwx"), [2]) assert cmpFiles(projFile, path.join(nwRef,"gui","0_nwProject.nwx"), [2])
qtbot.wait(stepDelay) qtbot.wait(stepDelay)
# qtbot.stopForInteraction()
# Re-open project # Re-open project
assert nwGUI.openProject(nwTempGUI) assert nwGUI.openProject(nwTempGUI)
qtbot.wait(stepDelay) qtbot.wait(stepDelay)
@@ -75,33 +74,101 @@ def testMainWindows(qtbot, nwTempGUI, nwRef):
assert nwGUI.treeView._getTreeItem("71ee45a3c0db9") is not None assert nwGUI.treeView._getTreeItem("71ee45a3c0db9") is not None
assert nwGUI.treeView._getTreeItem("811786ad1ae74") is not None assert nwGUI.treeView._getTreeItem("811786ad1ae74") is not None
nwGUI.mainMenu.toolsSpellCheck.setChecked(True)
assert nwGUI.mainMenu._toggleSpellCheck()
# Add a Character File
nwGUI.setFocus(1)
nwGUI.treeView.clearSelection()
nwGUI.treeView._getTreeItem("44cb730c42048").setSelected(True)
nwGUI.treeView.newTreeItem(nwItemType.FILE, None)
assert nwGUI.openSelectedItem()
# Type something into the document
nwGUI.setFocus(2)
for c in "# Jane Doe":
qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
for c in "@tag: Jane":
qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
for c in "This is a file about Jane.":
qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
# Add a Plot File
nwGUI.setFocus(1)
nwGUI.treeView.clearSelection()
nwGUI.treeView._getTreeItem("71ee45a3c0db9").setSelected(True)
nwGUI.treeView.newTreeItem(nwItemType.FILE, None)
assert nwGUI.openSelectedItem()
# Type something into the document
nwGUI.setFocus(2)
for c in "# Main Plot":
qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
for c in "@tag: MainPlot":
qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
for c in "This is a file detailing the main plot.":
qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
# Add a World File
nwGUI.setFocus(1)
nwGUI.treeView.clearSelection()
nwGUI.treeView._getTreeItem("811786ad1ae74").setSelected(True)
nwGUI.treeView.newTreeItem(nwItemType.FILE, None)
assert nwGUI.openSelectedItem()
# Type something into the document
nwGUI.setFocus(2)
for c in "# Main Location":
qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
for c in "@tag: Home":
qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
for c in "This is a file describing Jane's home.":
qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
# Select the 'New Scene' file # Select the 'New Scene' file
nwGUI.setFocus(1) nwGUI.setFocus(1)
nwGUI.treeView.clearSelection()
nwGUI.treeView._getTreeItem("73475cb40a568").setExpanded(True) nwGUI.treeView._getTreeItem("73475cb40a568").setExpanded(True)
nwGUI.treeView._getTreeItem("25fc0e7096fc6").setExpanded(True) nwGUI.treeView._getTreeItem("25fc0e7096fc6").setExpanded(True)
nwGUI.treeView._getTreeItem("31489056e0916").setSelected(True) nwGUI.treeView._getTreeItem("31489056e0916").setSelected(True)
assert nwGUI.openSelectedItem() assert nwGUI.openSelectedItem()
nwGUI.mainMenu.toolsSpellCheck.setChecked(True)
assert nwGUI.mainMenu._toggleSpellCheck()
# Type something into the document # Type something into the document
nwGUI.setFocus(2) nwGUI.setFocus(2)
for c in "# Hello World!": for c in "# Novel":
qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay) qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay) qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay) qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
for c in "## With a Subtitle": for c in "## Chapter":
qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay) qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay) qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay) qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
for c in "### An Even Subier Title": for c in "@pov: Jane":
qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
for c in "@plot: MainPlot":
qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay) qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay) qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay) qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
for c in "#### Basically Not a Title at All": for c in "### Scene":
qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay) qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay) qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay) qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
@@ -109,7 +176,23 @@ def testMainWindows(qtbot, nwTempGUI, nwRef):
for c in "% How about a comment?": for c in "% How about a comment?":
qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay) qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay) qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
for c in "@keyword: value": for c in "@pov: Jane":
qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
for c in "@plot: MainPlot":
qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
for c in "@location: Home":
qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
for c in "#### Some Section":
qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
for c in "@char: Jane":
qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay) qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay) qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay) qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay)
@@ -133,13 +216,14 @@ def testMainWindows(qtbot, nwTempGUI, nwRef):
qtbot.wait(stepDelay) qtbot.wait(stepDelay)
nwGUI.docEditor.wCounter.run() nwGUI.docEditor.wCounter.run()
qtbot.wait(stepDelay) qtbot.wait(stepDelay)
nwGUI.docEditor._updateCounts()
# Save the document # Save the document
assert nwGUI.docEditor.docChanged assert nwGUI.docEditor.docChanged
assert nwGUI.saveDocument() assert nwGUI.saveDocument()
assert not nwGUI.docEditor.docChanged assert not nwGUI.docEditor.docChanged
qtbot.wait(stepDelay) qtbot.wait(stepDelay)
nwGUI.rebuildIndex()
qtbot.wait(stepDelay)
# Open and view the edited document # Open and view the edited document
nwGUI.setFocus(3) nwGUI.setFocus(3)
@@ -148,16 +232,45 @@ def testMainWindows(qtbot, nwTempGUI, nwRef):
qtbot.wait(stepDelay) qtbot.wait(stepDelay)
assert nwGUI.saveProject() assert nwGUI.saveProject()
assert nwGUI.closeDocViewer() assert nwGUI.closeDocViewer()
qtbot.wait(stepDelay)
# Check the files # Check the files
projFile = path.join(nwTempGUI,"nwProject.nwx") projFile = path.join(nwTempGUI,"nwProject.nwx")
assert cmpFiles(projFile, path.join(nwRef,"gui","1_nwProject.nwx"), [2]) assert cmpFiles(projFile, path.join(nwRef,"gui","1_nwProject.nwx"), [2])
sceneFile = path.join(nwTempGUI,"data_0","2d20bbd7e394_main.nwd")
assert cmpFiles(sceneFile, path.join(nwRef,"gui","1_2d20bbd7e394_main.nwd"))
sceneFile = path.join(nwTempGUI,"data_2","fca346db6561_main.nwd")
assert cmpFiles(sceneFile, path.join(nwRef,"gui","1_fca346db6561_main.nwd"))
sceneFile = path.join(nwTempGUI,"data_3","1489056e0916_main.nwd") sceneFile = path.join(nwTempGUI,"data_3","1489056e0916_main.nwd")
assert cmpFiles(sceneFile, path.join(nwRef,"gui","1_1489056e0916_main.nwd")) assert cmpFiles(sceneFile, path.join(nwRef,"gui","1_1489056e0916_main.nwd"))
sceneFile = path.join(nwTempGUI,"data_7","688b6ef52555_main.nwd")
assert cmpFiles(sceneFile, path.join(nwRef,"gui","1_688b6ef52555_main.nwd"))
nwGUI.closeMain() nwGUI.closeMain()
# qtbot.stopForInteraction() # qtbot.stopForInteraction()
@pytest.mark.gui
def testTimeLineView(qtbot, nwTempGUI, nwRef):
nwGUI = nw.main(["--testmode","--config=%s" % nwTempGUI])
qtbot.addWidget(nwGUI)
nwGUI.show()
qtbot.waitForWindowShown(nwGUI)
qtbot.wait(stepDelay)
# Create new, save, open project
nwGUI.theProject.handleSeed = 42
assert nwGUI.openProject(nwTempGUI)
qtbot.wait(stepDelay)
timeLine = GuiTimeLineView(nwGUI, nwGUI.theProject, nwGUI.theIndex)
qtbot.addWidget(timeLine)
assert timeLine.numRows == 4
assert timeLine.numCols == 3
# qtbot.stopForInteraction()
nwGUI.closeMain()
@pytest.mark.gui @pytest.mark.gui
def testProjectEditor(qtbot, nwTempGUI, nwRef): def testProjectEditor(qtbot, nwTempGUI, nwRef):
nwGUI = nw.main(["--testmode","--config=%s" % nwTempGUI]) nwGUI = nw.main(["--testmode","--config=%s" % nwTempGUI])
+21 -1
View File
@@ -96,4 +96,24 @@ def testIndexScanThis(nwTempProj):
assert str(theBits) == "['@tag', 'this', 'and this']" assert str(theBits) == "['@tag', 'this', 'and this']"
assert str(thePos) == "[0, 6, 12]" assert str(thePos) == "[0, 6, 12]"
# assert False @pytest.mark.project
def testBuildIndex(nwTempProj):
projFile = path.join(nwTempProj,"nwProject.nwx")
assert theProject.openProject(projFile)
theIndex = NWIndex(theProject,theMain)
tHandle = "31489056e0916"
theIndex.scanText(tHandle, (
"# Novel\n\n"
"## Chapter\n\n"
"### Scene\n\n"
"#### Section\n\n"
"@pov: John\n"
"@char: Jane\n"
"@location: Somewhere\n"
))
assert theIndex.buildNovelList()
assert str(theIndex.novelList) == "[[1, 1, 'Novel', 'SCENE'], [3, 2, 'Chapter', 'SCENE'], [5, 3, 'Scene', 'SCENE'], [7, 4, 'Section', 'SCENE']]"
assert str(theIndex.novelOrder) == "['31489056e0916:1', '31489056e0916:3', '31489056e0916:5', '31489056e0916:7']"