From: Alexandre Terrasa Date: Wed, 30 May 2018 00:49:28 +0000 (-0400) Subject: lib/markdown2: add tests for markdown nodes location X-Git-Url: http://nitlanguage.org lib/markdown2: add tests for markdown nodes location Signed-off-by: Alexandre Terrasa --- diff --git a/lib/markdown2/tests/test_markdown_location.nit b/lib/markdown2/tests/test_markdown_location.nit new file mode 100644 index 0000000..4aaa218 --- /dev/null +++ b/lib/markdown2/tests/test_markdown_location.nit @@ -0,0 +1,913 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Tests for markdown nodes location +module test_markdown_location is test + +import test_markdown + +abstract class TestMarkdownLocation + super TestMarkdown + + redef var md_parser do + var parser = super + parser.github_mode = true + parser.wikilinks_mode = true + return parser + end + + fun md_to_loc(md: String): String do + var node = parse_md(md) + var v = new TestMarkdownLocationVisitor + v.enter_visit(node) + return v.buffer.to_s + end +end + +class TestMarkdownLocationVisitor + super MdVisitor + + var buffer = new Buffer + var indent = 0 + + fun print_loc(node: MdNode) do + buffer.append "{" " * indent}{node.class_name}: {node.location}\n" + indent += 1 + node.visit_all(self) + indent -= 1 + end + + redef fun visit(node) do print_loc(node) +end + +class TestLocationOutput + super TestMarkdownLocation + test + + fun test_atx_headings1 is test do + var md = """ +# title 1 +## title 2 +### title 3 +#### title 4 +##### title 5 +###### title 6 +""" + var loc = """ +MdDocument: 1,1--6,14 + MdHeading: 1,1--1,9 + MdText: 1,3--1,9 + MdHeading: 2,1--2,10 + MdText: 2,4--2,10 + MdHeading: 3,1--3,11 + MdText: 3,5--3,11 + MdHeading: 4,1--4,12 + MdText: 4,6--4,12 + MdHeading: 5,1--5,13 + MdText: 5,7--5,13 + MdHeading: 6,1--6,14 + MdText: 6,8--6,14 +""" + assert md_to_loc(md) == loc + end + + fun test_atx_headings_with_trailings is test do + var md = """ +# title 1 # +## title 2 ## +### title 3 ### +#### title 4 #### +##### title 5 ##### +###### title 6 ###### +""" + var loc = """ +MdDocument: 1,1--6,21 + MdHeading: 1,1--1,11 + MdText: 1,3--1,9 + MdHeading: 2,1--2,13 + MdText: 2,4--2,10 + MdHeading: 3,1--3,15 + MdText: 3,5--3,11 + MdHeading: 4,1--4,17 + MdText: 4,6--4,12 + MdHeading: 5,1--5,19 + MdText: 5,7--5,13 + MdHeading: 6,1--6,21 + MdText: 6,8--6,14 +""" + assert md_to_loc(md) == loc + end + + fun test_settext_headings is test do + var md = """ +title 1 +======= + +title 2 +------- +""" + var loc = """ +MdDocument: 1,1--5,7 + MdHeading: 1,1--2,7 + MdText: 1,1--1,7 + MdHeading: 4,1--5,7 + MdText: 4,1--4,7 +""" + assert md_to_loc(md) == loc + end + + fun test_indented_code_spaces is test do + var md = """ + some code + + multi lines +""" + var loc = """ +MdDocument: 1,1--3,15 + MdIndentedCodeBlock: 1,1--3,15 +""" + assert md_to_loc(md) == loc + end + + fun test_indented_code_tabs is test do + var md = """ + some code + + multi lines +""" + var loc = """ +MdDocument: 1,1--3,15 + MdIndentedCodeBlock: 1,1--3,15 +""" + assert md_to_loc(md) == loc + end + + fun test_fenced_code is test do + var md = """ +~~~ +some code + +multi lines +~~~ +""" + var loc = """ +MdDocument: 1,1--5,3 + MdFencedCodeBlock: 1,1--5,3 +""" + assert md_to_loc(md) == loc + end + + fun test_thematic_breaks is test do + var md = """ +*** + +* * * + +* * * +""" + var loc = """ +MdDocument: 1,1--5,5 + MdThematicBreak: 1,1--1,3 + MdThematicBreak: 3,1--3,5 + MdThematicBreak: 5,1--5,5 +""" + assert md_to_loc(md) == loc + end + + fun test_html_blocks1 is test do + var md = """ +

bar

+ +
+ bar +

+""" + var loc = """ +MdDocument: 1,1--5,12 + MdHtmlBlock: 1,1--1,28 + MdHtmlBlock: 3,1--5,12 +""" + assert md_to_loc(md) == loc + end + + fun test_paragraph1 is test do + var md = """ +foo bar baz + +line 1 +line 2 + +other par +with multiple lines +""" + var loc = """ +MdDocument: 1,1--7,19 + MdParagraph: 1,1--1,11 + MdText: 1,1--1,11 + MdParagraph: 3,1--4,6 + MdText: 3,1--3,6 + MdSoftLineBreak: 3,7--3,7 + MdText: 4,1--4,6 + MdParagraph: 6,1--7,19 + MdText: 6,1--6,9 + MdSoftLineBreak: 6,10--6,10 + MdText: 7,1--7,19 +""" + assert md_to_loc(md) == loc + end + + fun test_blockquotes is test do + var md = """ +> foo +> bar +""" + var loc = """ +MdDocument: 1,1--2,5 + MdBlockQuote: 1,1--2,5 + MdParagraph: 1,3--2,5 + MdText: 1,3--1,5 + MdSoftLineBreak: 1,6--1,6 + MdText: 2,3--2,5 +""" + assert md_to_loc(md) == loc + end + + fun test_blockquotes_nested is test do + var md = """ +> foo +> > foo +> > bar +""" + var loc = """ +MdDocument: 1,1--3,7 + MdBlockQuote: 1,1--3,7 + MdParagraph: 1,3--1,5 + MdText: 1,3--1,5 + MdBlockQuote: 2,3--3,7 + MdParagraph: 2,5--3,7 + MdText: 2,5--2,7 + MdSoftLineBreak: 2,8--2,8 + MdText: 3,5--3,7 +""" + assert md_to_loc(md) == loc + end + + fun test_blockquotes_headings is test do + var md = """ +> # Title 1 +> ## Title 2 ## +""" + var loc = """ +MdDocument: 1,1--2,15 + MdBlockQuote: 1,1--2,15 + MdHeading: 1,3--1,11 + MdText: 1,5--1,11 + MdHeading: 2,3--2,15 + MdText: 2,6--2,12 +""" + assert md_to_loc(md) == loc + end + + fun test_blockquotes_thematic_breaks is test do + var md = """ +> *** +> * * * +""" + var loc = """ +MdDocument: 1,1--2,7 + MdBlockQuote: 1,1--2,7 + MdThematicBreak: 1,3--1,5 + MdThematicBreak: 2,3--2,7 +""" + assert md_to_loc(md) == loc + end + + fun test_blockquotes_indented_code is test do + var md = """ +> line 1 +> line 2 +""" + var loc = """ +MdDocument: 1,1--2,12 + MdBlockQuote: 1,1--2,12 + MdIndentedCodeBlock: 1,3--2,12 +""" + assert md_to_loc(md) == loc + end + + fun test_blockquotes_fenced_code is test do + var md = """ +> ~~~ +> line 1 +> line 2 +> ~~~ +""" + var loc = """ +MdDocument: 1,1--4,5 + MdBlockQuote: 1,1--4,5 + MdFencedCodeBlock: 1,3--4,5 +""" + assert md_to_loc(md) == loc + end + + fun test_blockquotes_list is test do + var md = """ +> * line 1 +> * line 2 +""" + var loc = """ +MdDocument: 1,1--2,10 + MdBlockQuote: 1,1--2,10 + MdUnorderedList: 1,3--2,10 + MdListItem: 1,3--1,10 + MdParagraph: 1,5--1,10 + MdText: 1,5--1,10 + MdListItem: 2,3--2,10 + MdParagraph: 2,5--2,10 + MdText: 2,5--2,10 +""" + assert md_to_loc(md) == loc + end + + fun test_unordered_lists is test do + var md = """ +* line 1 +* line 2 +""" + var loc = """ +MdDocument: 1,1--2,8 + MdUnorderedList: 1,1--2,8 + MdListItem: 1,1--1,8 + MdParagraph: 1,3--1,8 + MdText: 1,3--1,8 + MdListItem: 2,1--2,8 + MdParagraph: 2,3--2,8 + MdText: 2,3--2,8 +""" + assert md_to_loc(md) == loc + end + + fun test_ordered_lists is test do + var md = """ +1) line 1 +2) line 2 +""" + var loc = """ +MdDocument: 1,1--2,9 + MdOrderedList: 1,1--2,9 + MdListItem: 1,1--1,9 + MdParagraph: 1,4--1,9 + MdText: 1,4--1,9 + MdListItem: 2,1--2,9 + MdParagraph: 2,4--2,9 + MdText: 2,4--2,9 +""" + assert md_to_loc(md) == loc + end + + fun test_list_headings is test do + var md = """ +* # Title 1 +* ## Title 2 ## +""" + var loc = """ +MdDocument: 1,1--2,15 + MdUnorderedList: 1,1--2,15 + MdListItem: 1,1--1,11 + MdHeading: 1,3--1,11 + MdText: 1,5--1,11 + MdListItem: 2,1--2,15 + MdHeading: 2,3--2,15 + MdText: 2,6--2,12 +""" + assert md_to_loc(md) == loc + end + + fun test_list_thematic_breaks is test do + var md = """ +- *** +- * * * +""" + var loc = """ +MdDocument: 1,1--2,7 + MdUnorderedList: 1,1--2,7 + MdListItem: 1,1--1,5 + MdThematicBreak: 1,3--1,5 + MdListItem: 2,1--2,7 + MdThematicBreak: 2,3--2,7 +""" + assert md_to_loc(md) == loc + end + + fun test_list_indented_codes is test do + var md = """ +- line 1 +- line 2 +""" + var loc = """ +MdDocument: 1,1--2,12 + MdUnorderedList: 1,1--2,12 + MdListItem: 1,1--1,12 + MdIndentedCodeBlock: 1,3--1,12 + MdListItem: 2,1--2,12 + MdIndentedCodeBlock: 2,3--2,12 +""" + assert md_to_loc(md) == loc + end + + fun test_list_fenced_codes is test do + var md = """ +- ~~~ + line 1 + line 2 + ~~~ +""" + var loc = """ +MdDocument: 1,1--4,5 + MdUnorderedList: 1,1--4,5 + MdListItem: 1,1--4,5 + MdFencedCodeBlock: 1,3--4,5 +""" + assert md_to_loc(md) == loc + end + + fun test_list_blockquotes is test do + var md = """ +- > line 1 + > line 2 +""" + var loc = """ +MdDocument: 1,1--2,10 + MdUnorderedList: 1,1--2,10 + MdListItem: 1,1--2,10 + MdBlockQuote: 1,3--2,10 + MdParagraph: 1,5--2,10 + MdText: 1,5--1,10 + MdSoftLineBreak: 1,11--1,11 + MdText: 2,5--2,10 +""" + assert md_to_loc(md) == loc + end + + fun test_list_pars is test do + var md = """ +* line 1 + line 2 + +* line 3 +""" + var loc = """ +MdDocument: 1,1--4,8 + MdUnorderedList: 1,1--4,8 + MdListItem: 1,1--2,8 + MdParagraph: 1,3--2,8 + MdText: 1,3--1,8 + MdSoftLineBreak: 1,9--1,9 + MdText: 2,3--2,8 + MdListItem: 4,1--4,8 + MdParagraph: 4,3--4,8 + MdText: 4,3--4,8 +""" + assert md_to_loc(md) == loc + end + + fun test_list_nested is test do + var md = """ +* foo + * foo + * bar +""" + var loc = """ +MdDocument: 1,1--3,7 + MdUnorderedList: 1,1--3,7 + MdListItem: 1,1--3,7 + MdParagraph: 1,3--1,5 + MdText: 1,3--1,5 + MdUnorderedList: 2,3--3,7 + MdListItem: 2,3--2,7 + MdParagraph: 2,5--2,7 + MdText: 2,5--2,7 + MdListItem: 3,3--3,7 + MdParagraph: 3,5--3,7 + MdText: 3,5--3,7 +""" + assert md_to_loc(md) == loc + end + + fun test_emphasis is test do + var md = """ +An *emphasis* and a **strong emphasis**. +""" + var loc = """ +MdDocument: 1,1--1,40 + MdParagraph: 1,1--1,40 + MdText: 1,1--1,3 + MdEmphasis: 1,4--1,13 + MdText: 1,5--1,12 + MdText: 1,14--1,20 + MdStrongEmphasis: 1,21--1,39 + MdText: 1,23--1,37 + MdText: 1,40--1,40 +""" + assert md_to_loc(md) == loc + end + + fun test_emphasis_nested is test do + var md = """ +Another ***emphasis***. +""" + var loc = """ +MdDocument: 1,1--1,23 + MdParagraph: 1,1--1,23 + MdText: 1,1--1,8 + MdEmphasis: 1,9--1,22 + MdStrongEmphasis: 1,10--1,21 + MdText: 1,12--1,19 + MdText: 1,23--1,23 +""" + assert md_to_loc(md) == loc + end + + fun test_emphasis_nested2 is test do + var md = """ +Another ****emphasis****. +""" + var loc = """ +MdDocument: 1,1--1,25 + MdParagraph: 1,1--1,25 + MdText: 1,1--1,8 + MdStrongEmphasis: 1,9--1,24 + MdStrongEmphasis: 1,11--1,22 + MdText: 1,13--1,20 + MdText: 1,25--1,25 +""" + assert md_to_loc(md) == loc + end + + fun test_emphasis_nested3 is test do + var md = """ +Another *****emphasis*****. +""" + var loc = """ +MdDocument: 1,1--1,27 + MdParagraph: 1,1--1,27 + MdText: 1,1--1,8 + MdEmphasis: 1,9--1,26 + MdStrongEmphasis: 1,10--1,25 + MdStrongEmphasis: 1,12--1,23 + MdText: 1,14--1,21 + MdText: 1,27--1,27 +""" + assert md_to_loc(md) == loc + end + + fun test_emphasis_bad is test do + var md = """ +Another ___ emphasis ___. +""" + var loc = """ +MdDocument: 1,1--1,25 + MdParagraph: 1,1--1,25 + MdText: 1,1--1,25 +""" + assert md_to_loc(md) == loc + end + + fun test_emphasis_bad2 is test do + var md = """ +Another **emphasis. +""" + var loc = """ +MdDocument: 1,1--1,19 + MdParagraph: 1,1--1,19 + MdText: 1,1--1,19 +""" + assert md_to_loc(md) == loc + end + + fun test_inline_code is test do + var md = """ +A `code` and another ``one``. +""" + var loc = """ +MdDocument: 1,1--1,29 + MdParagraph: 1,1--1,29 + MdText: 1,1--1,2 + MdCode: 1,3--1,8 + MdText: 1,9--1,21 + MdCode: 1,22--1,28 + MdText: 1,29--1,29 +""" + assert md_to_loc(md) == loc + end + + fun test_inline_code_bad is test do + var md = """ +A `code and another ``one``. +""" + var loc = """ +MdDocument: 1,1--1,28 + MdParagraph: 1,1--1,28 + MdText: 1,1--1,20 + MdCode: 1,21--1,27 + MdText: 1,28--1,28 +""" + assert md_to_loc(md) == loc + end + + fun test_inline_autolink is test do + var md = """ +An . +""" + var loc = """ +MdDocument: 1,1--1,21 + MdParagraph: 1,1--1,21 + MdText: 1,1--1,3 + MdLink: 1,4--1,20 + MdText: 1,5--1,19 + MdText: 1,21--1,21 +""" + assert md_to_loc(md) == loc + end + + fun test_inline_autolink_bad is test do + var md = """ +An http://autolink>. +""" + var loc = """ +MdDocument: 1,1--1,20 + MdParagraph: 1,1--1,20 + MdText: 1,1--1,20 +""" + assert md_to_loc(md) == loc + end + + fun test_inline_autolink_bad2 is test do + var md = """ +An . +""" + var loc = """ +MdDocument: 1,1--1,21 + MdParagraph: 1,1--1,21 + MdText: 1,1--1,3 + MdLink: 1,4--1,20 + MdText: 1,5--1,19 + MdText: 1,21--1,21 +""" + assert md_to_loc(md) == loc + end + + fun test_inline_link is test do + var md = """ +A [link](url/). +""" + var loc = """ +MdDocument: 1,1--1,15 + MdParagraph: 1,1--1,15 + MdText: 1,1--1,2 + MdLink: 1,3--1,14 + MdText: 1,4--1,7 + MdText: 1,15--1,15 +""" + assert md_to_loc(md) == loc + end + + fun test_inline_link_with_title is test do + var md = """ +A [link](url/ "title"). +""" + var loc = """ +MdDocument: 1,1--1,23 + MdParagraph: 1,1--1,23 + MdText: 1,1--1,2 + MdLink: 1,3--1,22 + MdText: 1,4--1,7 + MdText: 1,23--1,23 +""" + assert md_to_loc(md) == loc + end + + fun test_inline_link_with_content is test do + var md = """ +A [`code` link](url/). +""" + var loc = """ +MdDocument: 1,1--1,22 + MdParagraph: 1,1--1,22 + MdText: 1,1--1,2 + MdLink: 1,3--1,21 + MdCode: 1,4--1,9 + MdText: 1,10--1,14 + MdText: 1,22--1,22 +""" + assert md_to_loc(md) == loc + end + + fun test_inline_link_bad is test do + var md = """ +A [link](url/. +""" + var loc = """ +MdDocument: 1,1--1,14 + MdParagraph: 1,1--1,14 + MdText: 1,1--1,14 +""" + assert md_to_loc(md) == loc + end + + fun test_inline_image is test do + var md = """ +A ![img](url/). +""" + var loc = """ +MdDocument: 1,1--1,15 + MdParagraph: 1,1--1,15 + MdText: 1,1--1,2 + MdImage: 1,3--1,14 + MdText: 1,5--1,7 + MdText: 1,15--1,15 +""" + assert md_to_loc(md) == loc + end + + fun test_inline_image_bad is test do + var md = """ +A ![img](url/. +""" + var loc = """ +MdDocument: 1,1--1,14 + MdParagraph: 1,1--1,14 + MdText: 1,1--1,14 +""" + assert md_to_loc(md) == loc + end + + fun test_inline_link_ref is test do + var md = """ +A [link][]. + +[link]: url/ +""" + var loc = """ +MdDocument: 1,1--1,11 + MdParagraph: 1,1--1,11 + MdText: 1,1--1,2 + MdLink: 1,3--1,10 + MdText: 1,4--1,7 + MdText: 1,11--1,11 +""" + assert md_to_loc(md) == loc + end + + fun test_inline_link_ref2 is test do + var md = """ +A [foo][link]. + +[link]: url/ +""" + var loc = """ +MdDocument: 1,1--1,14 + MdParagraph: 1,1--1,14 + MdText: 1,1--1,2 + MdLink: 1,3--1,13 + MdText: 1,4--1,6 + MdText: 1,14--1,14 +""" + assert md_to_loc(md) == loc + end + + fun test_inline_link_ref_bad is test do + var md = """ +A [foo][link2]. + +[link]: url/ +""" + var loc = """ +MdDocument: 1,1--1,15 + MdParagraph: 1,1--1,15 + MdText: 1,1--1,15 +""" + assert md_to_loc(md) == loc + end + + fun test_inline_html is test do + var md = """ +An
break line. +""" + var loc = """ +MdDocument: 1,1--1,21 + MdParagraph: 1,1--1,21 + MdText: 1,1--1,3 + MdHtmlInline: 1,4--1,9 + MdText: 1,10--1,21 +""" + assert md_to_loc(md) == loc + end + + + fun test_inline_html2 is test do + var md = """ +An *emph*. +""" + var loc = """ +MdDocument: 1,1--1,29 + MdParagraph: 1,1--1,29 + MdText: 1,1--1,3 + MdHtmlInline: 1,4--1,18 + MdEmphasis: 1,19--1,24 + MdText: 1,20--1,23 + MdHtmlInline: 1,25--1,28 + MdText: 1,29--1,29 +""" + assert md_to_loc(md) == loc + end + + fun test_inline_escape is test do + var md = """ +A text with \\"escaped chars\\". +""" + var loc = """ +MdDocument: 1,1--1,30 + MdParagraph: 1,1--1,30 + MdText: 1,1--1,30 +""" + assert md_to_loc(md) == loc + end + + fun test_inline_soft_break is test do + var md = """ +A text with +a soft break. +""" + var loc = """ +MdDocument: 1,1--2,13 + MdParagraph: 1,1--2,13 + MdText: 1,1--1,11 + MdSoftLineBreak: 1,12--1,12 + MdText: 2,1--2,13 +""" + assert md_to_loc(md) == loc + end + + fun test_inline_soft_break2 is test do + var md = """A text with \na hard break.\n""" + var loc = """ +MdDocument: 1,1--2,13 + MdParagraph: 1,1--2,13 + MdText: 1,1--1,11 + MdSoftLineBreak: 1,12--1,13 + MdText: 2,1--2,13 +""" + assert md_to_loc(md) == loc + end + + fun test_inline_hard_break is test do + var md = """ +A text with\\ +a hard break. +""" + var loc = """ +MdDocument: 1,1--2,13 + MdParagraph: 1,1--2,13 + MdText: 1,1--1,11 + MdHardLineBreak: 1,12--1,13 + MdText: 2,1--2,13 +""" + assert md_to_loc(md) == loc + end + + fun test_inline_hard_break2 is test do + var md = """A text with \na hard break.\n""" + var loc = """ +MdDocument: 1,1--2,13 + MdParagraph: 1,1--2,13 + MdText: 1,1--1,11 + MdHardLineBreak: 1,12--1,14 + MdText: 2,1--2,13 +""" + assert md_to_loc(md) == loc + end +end