diff --git a/nw/gui/winmain.py b/nw/gui/winmain.py index 31744acc..a7ad1f2c 100644 --- a/nw/gui/winmain.py +++ b/nw/gui/winmain.py @@ -366,9 +366,10 @@ class GuiMain(QMainWindow): return logger.verbose("Requesting change to item %s" % tHandle) - dlgProj = GuiItemEditor(self, self.theProject, tHandle) - if dlgProj.exec_(): - self.treeView.setTreeItemValues(tHandle) + if self.mainConf.showGUI: + dlgProj = GuiItemEditor(self, self.theProject, tHandle) + if dlgProj.exec_(): + self.treeView.setTreeItemValues(tHandle) return diff --git a/tests/reference/gui/1_1489056e0916_main.nwd b/tests/reference/gui/1_1489056e0916_main.nwd index 2a3624ae..c5a065c0 100644 --- a/tests/reference/gui/1_1489056e0916_main.nwd +++ b/tests/reference/gui/1_1489056e0916_main.nwd @@ -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? -@keyword: value +@pov: Jane +@plot: MainPlot +@location: Home + +#### Some Section + +@char: Jane This is a paragraph of dummy text. diff --git a/tests/reference/gui/1_2d20bbd7e394_main.nwd b/tests/reference/gui/1_2d20bbd7e394_main.nwd new file mode 100644 index 00000000..f646f17e --- /dev/null +++ b/tests/reference/gui/1_2d20bbd7e394_main.nwd @@ -0,0 +1,5 @@ +# Main Plot + +@tag: MainPlot + +This is a file detailing the main plot. diff --git a/tests/reference/gui/1_688b6ef52555_main.nwd b/tests/reference/gui/1_688b6ef52555_main.nwd new file mode 100644 index 00000000..d4faeeb2 --- /dev/null +++ b/tests/reference/gui/1_688b6ef52555_main.nwd @@ -0,0 +1,5 @@ +# Main Location + +@tag: Home + +This is a file describing Jane’s home. diff --git a/tests/reference/gui/1_fca346db6561_main.nwd b/tests/reference/gui/1_fca346db6561_main.nwd new file mode 100644 index 00000000..4ba77a38 --- /dev/null +++ b/tests/reference/gui/1_fca346db6561_main.nwd @@ -0,0 +1,5 @@ +# Jane Doe + +@tag: Jane + +This is a file about Jane. diff --git a/tests/reference/gui/1_nwProject.nwx b/tests/reference/gui/1_nwProject.nwx index ae897362..fa8698ba 100644 --- a/tests/reference/gui/1_nwProject.nwx +++ b/tests/reference/gui/1_nwProject.nwx @@ -1,5 +1,5 @@ - + @@ -8,7 +8,7 @@ True 31489056e0916 31489056e0916 - 69 + 86 New Note @@ -22,7 +22,7 @@ Main - + Novel ROOT @@ -44,31 +44,67 @@ New False SCENE - 377 - 69 + 331 + 59 2 - 443 + 465 Characters ROOT CHARACTER New + True + + + New File + FILE + CHARACTER + New False + NOTE + 34 + 8 + 1 + 51 Plot ROOT PLOT New + True + + + New File + FILE + PLOT + New False + NOTE + 48 + 10 + 1 + 69 World ROOT WORLD New + True + + + New File + FILE + WORLD + New False + NOTE + 51 + 9 + 1 + 68 diff --git a/tests/test_gui.py b/tests/test_gui.py index 7f141b47..c4857ab8 100644 --- a/tests/test_gui.py +++ b/tests/test_gui.py @@ -9,6 +9,7 @@ from os import path, unlink from PyQt5.QtCore import Qt from nw.gui.projecteditor import GuiProjectEditor +from nw.gui.timelineview import GuiTimeLineView from nw.gui.itemeditor import GuiItemEditor from nw.enum import * @@ -47,8 +48,6 @@ def testMainWindows(qtbot, nwTempGUI, nwRef): assert cmpFiles(projFile, path.join(nwRef,"gui","0_nwProject.nwx"), [2]) qtbot.wait(stepDelay) - # qtbot.stopForInteraction() - # Re-open project assert nwGUI.openProject(nwTempGUI) qtbot.wait(stepDelay) @@ -75,33 +74,101 @@ def testMainWindows(qtbot, nwTempGUI, nwRef): assert nwGUI.treeView._getTreeItem("71ee45a3c0db9") 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 nwGUI.setFocus(1) + nwGUI.treeView.clearSelection() nwGUI.treeView._getTreeItem("73475cb40a568").setExpanded(True) nwGUI.treeView._getTreeItem("25fc0e7096fc6").setExpanded(True) nwGUI.treeView._getTreeItem("31489056e0916").setSelected(True) assert nwGUI.openSelectedItem() - nwGUI.mainMenu.toolsSpellCheck.setChecked(True) - assert nwGUI.mainMenu._toggleSpellCheck() # Type something into the document nwGUI.setFocus(2) - for c in "# Hello World!": + for c in "# Novel": 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 "## With a Subtitle": + for c in "## Chapter": 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 "### 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, 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, 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?": qtbot.keyClick(nwGUI.docEditor, c, 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, 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) nwGUI.docEditor.wCounter.run() qtbot.wait(stepDelay) - nwGUI.docEditor._updateCounts() # Save the document assert nwGUI.docEditor.docChanged assert nwGUI.saveDocument() assert not nwGUI.docEditor.docChanged qtbot.wait(stepDelay) + nwGUI.rebuildIndex() + qtbot.wait(stepDelay) # Open and view the edited document nwGUI.setFocus(3) @@ -148,16 +232,45 @@ def testMainWindows(qtbot, nwTempGUI, nwRef): qtbot.wait(stepDelay) assert nwGUI.saveProject() assert nwGUI.closeDocViewer() + qtbot.wait(stepDelay) # Check the files projFile = path.join(nwTempGUI,"nwProject.nwx") 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") 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() # 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 def testProjectEditor(qtbot, nwTempGUI, nwRef): nwGUI = nw.main(["--testmode","--config=%s" % nwTempGUI]) diff --git a/tests/test_project.py b/tests/test_project.py index 9ef638c8..baeaf1a6 100644 --- a/tests/test_project.py +++ b/tests/test_project.py @@ -96,4 +96,24 @@ def testIndexScanThis(nwTempProj): assert str(theBits) == "['@tag', 'this', 'and this']" 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']"