diff --git a/tests/reference/mBuildDocBuild_NWD_Lorem_Ipsum.json b/tests/reference/mBuildDocBuild_NWD_Lorem_Ipsum.json index 0a5189be..b727138a 100644 --- a/tests/reference/mBuildDocBuild_NWD_Lorem_Ipsum.json +++ b/tests/reference/mBuildDocBuild_NWD_Lorem_Ipsum.json @@ -2,8 +2,8 @@ "meta": { "projectName": "Lorem Ipsum", "novelAuthor": "lipsum.com", - "buildTime": 1706648873, - "buildTimeStr": "2024-01-30 22:07:53" + "buildTime": 1711014280, + "buildTimeStr": "2024-03-21 10:44:40" }, "text": { "nwd": [ @@ -169,7 +169,7 @@ "Integer egestas maximus leo eu facilisis. Nunc rhoncus dignissim lectus eu lacinia. Praesent lacinia urna porttitor aliquam condimentum. Nulla eu eros dictum, dictum nunc vitae, sagittis nibh. Integer ante neque, consequat nec sollicitudin id, consectetur vitae dolor. Nullam volutpat sem orci, quis viverra magna auctor a. Suspendisse potenti. Maecenas commodo sed neque pellentesque vehicula. Sed luctus nisl risus, elementum semper purus interdum vel. Ut pulvinar, massa sit amet venenatis placerat, nunc lacus hendrerit odio, non aliquet nunc risus eu lectus. Maecenas feugiat semper ligula, id lobortis sem porta eu. Integer posuere elit magna, at mollis eros bibendum et. Ut imperdiet purus vel nulla aliquam maximus. Morbi sodales purus tellus, a rhoncus sem rutrum sit amet. Quisque risus sem, laoreet nec convallis nec, rutrum vitae justo." ], [ - "# Notes: Characters" + "#! Notes: Characters" ], [ "# Nobody Owens", @@ -184,7 +184,7 @@ "Nullam scelerisque velit et tortor congue vestibulum a at nisi. Vivamus sodales ut turpis a convallis. In dignissim nibh at luctus sodales. Etiam sit amet rhoncus massa. Phasellus ligula magna, sollicitudin non imperdiet sit amet, volutpat vel magna. Nunc vestibulum tempor lectus, sit amet porta nunc hendrerit in. Curabitur non odio sit amet massa tincidunt facilisis. Integer et luctus nunc, eget euismod leo. Praesent faucibus metus sed purus convallis scelerisque. Fusce viverra lorem et placerat malesuada. In at elit malesuada, ullamcorper risus vitae, sodales dolor. Donec quis elementum lectus. Quisque eu eros at dui imperdiet euismod ut id neque." ], [ - "# Notes: Plot" + "#! Notes: Plot" ], [ "# Main Plot", @@ -196,7 +196,7 @@ "Mauris ut erat eu lorem malesuada egestas vel vel urna. Maecenas ac semper quam. Maecenas aliquet metus non interdum mattis. Proin consectetur molestie ligula. Aliquam sollicitudin pulvinar urna a pellentesque. Suspendisse ultrices, est mattis scelerisque porta, nisi nisi laoreet nisl, non condimentum quam ante a velit. Proin scelerisque justo augue, nec laoreet ligula egestas at. Etiam enim quam, ultrices non accumsan hendrerit, elementum vel ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nam efficitur odio libero, in vestibulum arcu aliquam at. Cras non vehicula augue. Integer lobortis, est vitae aliquam facilisis, metus ligula aliquet eros, at porttitor sem tortor eget massa. Aliquam varius scelerisque neque sed gravida. Aenean eleifend lorem id ante elementum sollicitudin. Proin commodo massa a quam volutpat, mollis fermentum turpis efficitur." ], [ - "# Notes: World" + "#! Notes: World" ], [ "# Ancient Europe", diff --git a/tests/reference/mBuildDocBuild_NWD_Lorem_Ipsum.txt b/tests/reference/mBuildDocBuild_NWD_Lorem_Ipsum.txt index 139d0aec..db3ab0f3 100644 --- a/tests/reference/mBuildDocBuild_NWD_Lorem_Ipsum.txt +++ b/tests/reference/mBuildDocBuild_NWD_Lorem_Ipsum.txt @@ -147,7 +147,7 @@ Pellentesque rhoncus pharetra eros, non mollis nisi pretium non. Mauris accumsan Integer egestas maximus leo eu facilisis. Nunc rhoncus dignissim lectus eu lacinia. Praesent lacinia urna porttitor aliquam condimentum. Nulla eu eros dictum, dictum nunc vitae, sagittis nibh. Integer ante neque, consequat nec sollicitudin id, consectetur vitae dolor. Nullam volutpat sem orci, quis viverra magna auctor a. Suspendisse potenti. Maecenas commodo sed neque pellentesque vehicula. Sed luctus nisl risus, elementum semper purus interdum vel. Ut pulvinar, massa sit amet venenatis placerat, nunc lacus hendrerit odio, non aliquet nunc risus eu lectus. Maecenas feugiat semper ligula, id lobortis sem porta eu. Integer posuere elit magna, at mollis eros bibendum et. Ut imperdiet purus vel nulla aliquam maximus. Morbi sodales purus tellus, a rhoncus sem rutrum sit amet. Quisque risus sem, laoreet nec convallis nec, rutrum vitae justo. -# Notes: Characters +#! Notes: Characters # Nobody Owens @@ -160,7 +160,7 @@ Suspendisse faucibus est auctor orci mollis luctus. Praesent quis sodales neque. Nullam scelerisque velit et tortor congue vestibulum a at nisi. Vivamus sodales ut turpis a convallis. In dignissim nibh at luctus sodales. Etiam sit amet rhoncus massa. Phasellus ligula magna, sollicitudin non imperdiet sit amet, volutpat vel magna. Nunc vestibulum tempor lectus, sit amet porta nunc hendrerit in. Curabitur non odio sit amet massa tincidunt facilisis. Integer et luctus nunc, eget euismod leo. Praesent faucibus metus sed purus convallis scelerisque. Fusce viverra lorem et placerat malesuada. In at elit malesuada, ullamcorper risus vitae, sodales dolor. Donec quis elementum lectus. Quisque eu eros at dui imperdiet euismod ut id neque. -# Notes: Plot +#! Notes: Plot # Main Plot @@ -170,7 +170,7 @@ Suspendisse vulputate malesuada pellentesque. Aenean sollicitudin cursus mi, vit Mauris ut erat eu lorem malesuada egestas vel vel urna. Maecenas ac semper quam. Maecenas aliquet metus non interdum mattis. Proin consectetur molestie ligula. Aliquam sollicitudin pulvinar urna a pellentesque. Suspendisse ultrices, est mattis scelerisque porta, nisi nisi laoreet nisl, non condimentum quam ante a velit. Proin scelerisque justo augue, nec laoreet ligula egestas at. Etiam enim quam, ultrices non accumsan hendrerit, elementum vel ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nam efficitur odio libero, in vestibulum arcu aliquam at. Cras non vehicula augue. Integer lobortis, est vitae aliquam facilisis, metus ligula aliquet eros, at porttitor sem tortor eget massa. Aliquam varius scelerisque neque sed gravida. Aenean eleifend lorem id ante elementum sollicitudin. Proin commodo massa a quam volutpat, mollis fermentum turpis efficitur. -# Notes: World +#! Notes: World # Ancient Europe diff --git a/tests/test_core/test_core_docbuild.py b/tests/test_core/test_core_docbuild.py index e6ca622a..466716cf 100644 --- a/tests/test_core/test_core_docbuild.py +++ b/tests/test_core/test_core_docbuild.py @@ -575,10 +575,10 @@ def testCoreDocBuild_IterBuild(mockGUI, fncPath: Path, mockRnd): "By Jane Doe\n\n" "## New Chapter\n\n\n" "### New Scene\n\n\n" - "# Notes: Plot\n\n" + "#! Notes: Plot\n\n" "# Main Plot\n" "**Text**\n\n" - "# Notes: Characters\n\n" + "#! Notes: Characters\n\n" "# Jane Doe\n" "~~Text~~\n\n" ) diff --git a/tests/test_core/test_core_index.py b/tests/test_core/test_core_index.py index 13ba42dd..f10ed45a 100644 --- a/tests/test_core/test_core_index.py +++ b/tests/test_core/test_core_index.py @@ -1194,6 +1194,7 @@ def testCoreIndex_ItemIndex(mockGUI, fncPath, mockRnd): # Add a second novel mHandle = project.newRoot(nwItemClass.NOVEL) uHandle = project.newFile("Title Page", mHandle) + assert uHandle is not None itemIndex.add(uHandle, project.tree[uHandle]) # type: ignore itemIndex.addItemHeading(uHandle, "T0001", "H1", "Novel 2") # type: ignore assert uHandle in itemIndex diff --git a/tests/test_core/test_core_tohtml.py b/tests/test_core/test_core_tohtml.py index 30aefd0a..0152607d 100644 --- a/tests/test_core/test_core_tohtml.py +++ b/tests/test_core/test_core_tohtml.py @@ -227,7 +227,6 @@ def testCoreToHtml_ConvertParagraphs(mockGUI): # Multiple Keywords html._isFirst = False - html._noBreak = False html.setKeywords(True) html._text = "## Chapter\n\n@pov: Bod\n@plot: Main\n@location: Europe\n\n" html.tokenizeText() @@ -275,8 +274,8 @@ def testCoreToHtml_ConvertDirect(mockGUI): # Title html._tokens = [ - (html.T_TITLE, 1, "A Title", None, html.A_PBB | html.A_CENTRE), - (html.T_EMPTY, 1, "", None, html.A_NONE), + (html.T_TITLE, 1, "A Title", [], html.A_PBB | html.A_CENTRE), + (html.T_EMPTY, 1, "", [], html.A_NONE), ] html.doConvert() assert html.result == ( @@ -286,8 +285,8 @@ def testCoreToHtml_ConvertDirect(mockGUI): # Unnumbered html._tokens = [ - (html.T_HEAD2, 1, "Prologue", None, html.A_PBB), - (html.T_EMPTY, 1, "", None, html.A_NONE), + (html.T_HEAD2, 1, "Prologue", [], html.A_PBB), + (html.T_EMPTY, 1, "", [], html.A_NONE), ] html.doConvert() assert html.result == ( @@ -300,16 +299,16 @@ def testCoreToHtml_ConvertDirect(mockGUI): # Separator html._tokens = [ - (html.T_SEP, 1, "* * *", None, html.A_CENTRE), - (html.T_EMPTY, 1, "", None, html.A_NONE), + (html.T_SEP, 1, "* * *", [], html.A_CENTRE), + (html.T_EMPTY, 1, "", [], html.A_NONE), ] html.doConvert() assert html.result == "

* * *

\n" # Skip html._tokens = [ - (html.T_SKIP, 1, "", None, html.A_NONE), - (html.T_EMPTY, 1, "", None, html.A_NONE), + (html.T_SKIP, 1, "", [], html.A_NONE), + (html.T_EMPTY, 1, "", [], html.A_NONE), ] html.doConvert() assert html.result == "

 

\n" @@ -322,7 +321,7 @@ def testCoreToHtml_ConvertDirect(mockGUI): # Align Left html.setStyles(False) html._tokens = [ - (html.T_HEAD1, 1, "A Title", None, html.A_LEFT), + (html.T_HEAD1, 1, "A Title", [], html.A_LEFT), ] html.doConvert() assert html.result == ( @@ -333,7 +332,7 @@ def testCoreToHtml_ConvertDirect(mockGUI): # Align Left html._tokens = [ - (html.T_HEAD1, 1, "A Title", None, html.A_LEFT), + (html.T_HEAD1, 1, "A Title", [], html.A_LEFT), ] html.doConvert() assert html.result == ( @@ -342,7 +341,7 @@ def testCoreToHtml_ConvertDirect(mockGUI): # Align Right html._tokens = [ - (html.T_HEAD1, 1, "A Title", None, html.A_RIGHT), + (html.T_HEAD1, 1, "A Title", [], html.A_RIGHT), ] html.doConvert() assert html.result == ( @@ -351,7 +350,7 @@ def testCoreToHtml_ConvertDirect(mockGUI): # Align Centre html._tokens = [ - (html.T_HEAD1, 1, "A Title", None, html.A_CENTRE), + (html.T_HEAD1, 1, "A Title", [], html.A_CENTRE), ] html.doConvert() assert html.result == ( @@ -360,7 +359,7 @@ def testCoreToHtml_ConvertDirect(mockGUI): # Align Justify html._tokens = [ - (html.T_HEAD1, 1, "A Title", None, html.A_JUSTIFY), + (html.T_HEAD1, 1, "A Title", [], html.A_JUSTIFY), ] html.doConvert() assert html.result == ( @@ -372,7 +371,7 @@ def testCoreToHtml_ConvertDirect(mockGUI): # Page Break Always html._tokens = [ - (html.T_HEAD1, 1, "A Title", None, html.A_PBB | html.A_PBA), + (html.T_HEAD1, 1, "A Title", [], html.A_PBB | html.A_PBA), ] html.doConvert() assert html.result == ( @@ -386,7 +385,7 @@ def testCoreToHtml_ConvertDirect(mockGUI): # Indent Left html._tokens = [ (html.T_TEXT, 1, "Some text ...", [], html.A_IND_L), - (html.T_EMPTY, 2, "", None, html.A_NONE), + (html.T_EMPTY, 2, "", [], html.A_NONE), ] html.doConvert() assert html.result == ( @@ -396,7 +395,7 @@ def testCoreToHtml_ConvertDirect(mockGUI): # Indent Right html._tokens = [ (html.T_TEXT, 1, "Some text ...", [], html.A_IND_R), - (html.T_EMPTY, 2, "", None, html.A_NONE), + (html.T_EMPTY, 2, "", [], html.A_NONE), ] html.doConvert() assert html.result == ( @@ -459,7 +458,6 @@ def testCoreToHtml_SpecialCases(mockGUI): ) html._isFirst = False - html._noBreak = False html._text = "## Heading <1>\n" html.tokenizeText() html.doConvert() diff --git a/tests/test_core/test_core_tokenizer.py b/tests/test_core/test_core_tokenizer.py index 68ecfdf7..a35fa2e0 100644 --- a/tests/test_core/test_core_tokenizer.py +++ b/tests/test_core/test_core_tokenizer.py @@ -33,7 +33,7 @@ from novelwriter.core.tokenizer import HeadingFormatter, Tokenizer, stripEscape class BareTokenizer(Tokenizer): def doConvert(self): - super().doConvert() + super().doConvert() # type: ignore (deliberate check) @pytest.mark.core @@ -181,21 +181,23 @@ def testCoreToken_TextOps(monkeypatch, mockGUI, mockRnd, fncPath): assert project.saveProject() # Root Heading - assert tokens.addRootHeading("stuff") is False - assert tokens.addRootHeading(C.hSceneDoc) is False + assert len(tokens._tokens) == 0 + tokens.addRootHeading("stuff") + tokens.addRootHeading(C.hSceneDoc) + assert len(tokens._tokens) == 0 # First Page - assert tokens.addRootHeading(C.hPlotRoot) is True - assert tokens.allMarkdown[-1] == "# Notes: Plot\n\n" + tokens.addRootHeading(C.hPlotRoot) + assert tokens.allMarkdown[-1] == "#! Notes: Plot\n\n" assert tokens._tokens[-1] == ( - Tokenizer.T_TITLE, 0, "Notes: Plot", [], Tokenizer.A_CENTRE + Tokenizer.T_TITLE, 1, "Notes: Plot", [], Tokenizer.A_CENTRE ) # Not First Page - assert tokens.addRootHeading(C.hPlotRoot) is True - assert tokens.allMarkdown[-1] == "# Notes: Plot\n\n" + tokens.addRootHeading(C.hPlotRoot) + assert tokens.allMarkdown[-1] == "#! Notes: Plot\n\n" assert tokens._tokens[-1] == ( - Tokenizer.T_TITLE, 0, "Notes: Plot", [], Tokenizer.A_CENTRE | Tokenizer.A_PBB + Tokenizer.T_TITLE, 1, "Notes: Plot", [], Tokenizer.A_CENTRE | Tokenizer.A_PBB ) # Set Text @@ -218,14 +220,14 @@ def testCoreToken_TextOps(monkeypatch, mockGUI, mockRnd, fncPath): savePath = fncPath / "dump.nwd" tokens.saveRawMarkdown(savePath) assert readFile(savePath) == ( - "# Notes: Plot\n\n" - "# Notes: Plot\n\n" + "#! Notes: Plot\n\n" + "#! Notes: Plot\n\n" ) tokens.saveRawMarkdownJSON(savePath) assert json.loads(readFile(savePath))["text"] == { "nwd": [ - ["# Notes: Plot"], - ["# Notes: Plot"] + ["#! Notes: Plot"], + ["#! Notes: Plot"] ] } @@ -313,7 +315,6 @@ def testCoreToken_HeaderFormat(mockGUI): # Story File tokens._isNovel = True - tokens._noBreak = False tokens._text = "## Chapter One\n" tokens.tokenizeText() @@ -448,7 +449,6 @@ def testCoreToken_HeaderStyle(mockGUI): def processStyle(text: str, first: bool) -> int: tokens._text = text tokens._isFirst = first - tokens._noBreak = first tokens.tokenizeText() return tokens._tokens[0][4] diff --git a/tests/test_core/test_core_tomd.py b/tests/test_core/test_core_tomd.py index 2192517f..4767ebd4 100644 --- a/tests/test_core/test_core_tomd.py +++ b/tests/test_core/test_core_tomd.py @@ -204,8 +204,8 @@ def testCoreToMarkdown_ConvertDirect(mockGUI): # Title toMD._tokens = [ - (toMD.T_TITLE, 1, "A Title", None, toMD.A_PBB | toMD.A_CENTRE), - (toMD.T_EMPTY, 1, "", None, toMD.A_NONE), + (toMD.T_TITLE, 1, "A Title", [], toMD.A_PBB | toMD.A_CENTRE), + (toMD.T_EMPTY, 1, "", [], toMD.A_NONE), ] toMD.doConvert() assert toMD.result == "# A Title\n\n" @@ -215,16 +215,16 @@ def testCoreToMarkdown_ConvertDirect(mockGUI): # Separator toMD._tokens = [ - (toMD.T_SEP, 1, "* * *", None, toMD.A_CENTRE), - (toMD.T_EMPTY, 1, "", None, toMD.A_NONE), + (toMD.T_SEP, 1, "* * *", [], toMD.A_CENTRE), + (toMD.T_EMPTY, 1, "", [], toMD.A_NONE), ] toMD.doConvert() assert toMD.result == "* * *\n\n" # Skip toMD._tokens = [ - (toMD.T_SKIP, 1, "", None, toMD.A_NONE), - (toMD.T_EMPTY, 1, "", None, toMD.A_NONE), + (toMD.T_SKIP, 1, "", [], toMD.A_NONE), + (toMD.T_EMPTY, 1, "", [], toMD.A_NONE), ] toMD.doConvert() assert toMD.result == "\n\n" diff --git a/tests/test_core/test_core_toodt.py b/tests/test_core/test_core_toodt.py index 89cdf8c4..3ecd1491 100644 --- a/tests/test_core/test_core_toodt.py +++ b/tests/test_core/test_core_toodt.py @@ -652,7 +652,7 @@ def testCoreToOdt_ConvertDirect(mockGUI): doc = ToOdt(project, isFlat=True) doc._tokens = [ (doc.T_TEXT, 1, "This is a paragraph", [], doc.A_JUSTIFY), - (doc.T_EMPTY, 1, "", None, doc.A_NONE), + (doc.T_EMPTY, 1, "", [], doc.A_NONE), ] doc.initDocument() doc.doConvert() @@ -673,7 +673,7 @@ def testCoreToOdt_ConvertDirect(mockGUI): doc = ToOdt(project, isFlat=True) doc._tokens = [ (doc.T_TEXT, 1, "This is a paragraph", [], doc.A_PBA), - (doc.T_EMPTY, 1, "", None, doc.A_NONE), + (doc.T_EMPTY, 1, "", [], doc.A_NONE), ] doc.initDocument() doc.doConvert()