Add comprehensive assertions to ParseTest for validating Markdown parsing, removing printMarkdownParts debug method, and refining test coverage.

This commit is contained in:
2026-01-18 10:59:01 +01:00
parent 68f0dfbc67
commit e25990ca25

View File

@@ -1,6 +1,7 @@
package nl.astraeus.markdown.parser
import kotlin.test.Test
import kotlin.test.assertEquals
class ParseTest {
@@ -19,7 +20,25 @@ class ParseTest {
val md = markdown(input)
printMarkdownParts(md)
assertEquals(3, md.size)
val p1 = md[0] as MarkdownPart.Paragraph
assertEquals("Dit is een ", (p1.parts[0] as MarkdownPart.ParagraphPart.Text).text)
assertEquals("test", (p1.parts[1] as MarkdownPart.ParagraphPart.Bold).text)
assertEquals(", laat ", (p1.parts[2] as MarkdownPart.ParagraphPart.Text).text)
assertEquals("mij", (p1.parts[3] as MarkdownPart.ParagraphPart.BoldItalic).text)
assertEquals(" maar eens zien!\n\n", (p1.parts[4] as MarkdownPart.ParagraphPart.Text).text)
val p2 = md[1] as MarkdownPart.Paragraph
assertEquals("link: ", (p2.parts[0] as MarkdownPart.ParagraphPart.Text).text)
val link = p2.parts[1] as MarkdownPart.ParagraphPart.Link
assertEquals("www.nos.nl ", link.url)
assertEquals("NOS", link.label)
assertEquals("Nos title", link.title)
assertEquals(" of zo.\n\n", (p2.parts[2] as MarkdownPart.ParagraphPart.Text).text)
val l1 = md[2] as MarkdownPart.UnorderedList
assertEquals(1, l1.lines.size)
assertEquals("link: [NU](www.nu.nl \"Nu site\") of zo.", l1.lines[0].text)
}
@Test
@@ -31,7 +50,11 @@ class ParseTest {
val md = markdown(input)
printMarkdownParts(md)
assertEquals(1, md.size)
val p = md[0] as MarkdownPart.Paragraph
val img = p.parts[0] as MarkdownPart.ParagraphPart.Image
assertEquals("test2", img.alt)
assertEquals("https://upload.wikimedia.org/wikipedia/commons.png", img.src)
}
@Test
@@ -47,7 +70,10 @@ class ParseTest {
val md = markdown(input)
printMarkdownParts(md)
assertEquals(3, md.size)
assertEquals("Dit is een text\n\n", (md[0] as MarkdownPart.Paragraph).parts[0].let { (it as MarkdownPart.ParagraphPart.Text).text })
assertEquals("Code block\nCode block\n\n", (md[1] as MarkdownPart.CodeBlock).text)
assertEquals("Meer text\n\n", (md[2] as MarkdownPart.Paragraph).parts[0].let { (it as MarkdownPart.ParagraphPart.Text).text })
}
@Test
@@ -65,7 +91,12 @@ class ParseTest {
val md = markdown(input)
printMarkdownParts(md)
assertEquals(3, md.size)
val list = md[1] as MarkdownPart.UnorderedList
assertEquals(2, list.lines.size)
assertEquals("First More text", list.lines[0].text)
assertEquals("Second More text", list.lines[1].text)
assertEquals("Another paragraph\n\n", (md[2] as MarkdownPart.Paragraph).parts[0].let { (it as MarkdownPart.ParagraphPart.Text).text })
}
@Test
@@ -81,7 +112,19 @@ class ParseTest {
val md = markdown(input)
printMarkdownParts(md)
assertEquals(1, md.size)
val list = md[0] as MarkdownPart.UnorderedList
assertEquals(6, list.lines.size)
assertEquals("First", list.lines[0].text)
assertEquals(0, list.lines[0].indentation)
assertEquals("Second", list.lines[1].text)
assertEquals("2.1", list.lines[2].text)
assertEquals(2, list.lines[2].indentation)
assertEquals("2.1.1", list.lines[3].text)
assertEquals(4, list.lines[3].indentation)
assertEquals("2.1.1", list.lines[4].text)
assertEquals(6, list.lines[4].indentation)
assertEquals("3", list.lines[5].text)
}
@Test
@@ -99,7 +142,11 @@ class ParseTest {
val md = markdown(input)
printMarkdownParts(md)
assertEquals(3, md.size)
val list = md[1] as MarkdownPart.UnorderedList
assertEquals(2, list.lines.size)
assertEquals("First More text", list.lines[0].text)
assertEquals("Second More text", list.lines[1].text)
}
@Test
@@ -119,7 +166,15 @@ class ParseTest {
val md = markdown(input)
printMarkdownParts(md)
assertEquals(3, md.size)
val list = md[1] as MarkdownPart.UnorderedList
assertEquals(4, list.lines.size)
assertEquals("First More text", list.lines[0].text)
assertEquals("Second More text", list.lines[1].text)
assertEquals("Sub 1", list.lines[2].text)
assertEquals(2, list.lines[2].indentation)
assertEquals("Sub 2", list.lines[3].text)
assertEquals(2, list.lines[3].indentation)
}
@Test
@@ -140,7 +195,12 @@ class ParseTest {
val md = markdown(input)
printMarkdownParts(md)
assertEquals(3, md.size)
val list = md[1] as MarkdownPart.OrderedList
assertEquals(5, list.lines.size)
assertEquals(" First More text", list.lines[0].text)
assertEquals(" Sub 1", list.lines[2].text)
assertEquals(2, list.lines[2].indentation)
}
@Test
@@ -158,7 +218,11 @@ class ParseTest {
val md = markdown(input)
printMarkdownParts(md)
assertEquals(3, md.size)
val list = md[1] as MarkdownPart.OrderedList
assertEquals(2, list.lines.size)
assertEquals("First More text", list.lines[0].text)
assertEquals("Second More text", list.lines[1].text)
}
@Test
@@ -177,7 +241,15 @@ class ParseTest {
val md = markdown(input)
printMarkdownParts(md)
assertEquals(3, md.size)
val list = md[1] as MarkdownPart.CheckboxList
assertEquals(3, list.lines.size)
assertEquals(false, list.lines[0].checked)
assertEquals("Not checked, with some more text here", list.lines[0].text)
assertEquals(true, list.lines[1].checked)
assertEquals("Checked!", list.lines[1].text)
assertEquals(true, list.lines[2].checked)
assertEquals("Checked, text it!", list.lines[2].text)
}
@Test
@@ -192,7 +264,12 @@ class ParseTest {
val md = markdown(input)
printMarkdownParts(md)
assertEquals(2, md.size)
assertEquals("Todo", (md[0] as MarkdownPart.Header).text)
val list = md[1] as MarkdownPart.CheckboxList
assertEquals(2, list.lines.size)
assertEquals(false, list.lines[0].checked)
assertEquals(true, list.lines[1].checked)
}
@Test
@@ -220,7 +297,11 @@ class ParseTest {
val md = markdown(input)
printMarkdownParts(md)
assertEquals(5, md.size)
assertEquals(MarkdownPart.CheckboxList::class, md[1]::class)
assertEquals(MarkdownPart.CheckboxList::class, md[3]::class)
val list2 = md[3] as MarkdownPart.CheckboxList
assertEquals(2, list2.lines[0].indentation)
}
@Test
@@ -247,7 +328,18 @@ class ParseTest {
val md = markdown(input)
printMarkdownParts(md)
assertEquals(5, md.size)
val list1 = md[1] as MarkdownPart.CheckboxList
assertEquals(3, list1.lines.size)
assertEquals(0, list1.lines[0].indentation)
assertEquals(0, list1.lines[1].indentation)
assertEquals(2, list1.lines[2].indentation)
val list2 = md[3] as MarkdownPart.CheckboxList
assertEquals(3, list2.lines.size)
assertEquals(2, list2.lines[0].indentation)
assertEquals(4, list2.lines[1].indentation)
assertEquals(2, list2.lines[2].indentation)
}
@@ -261,7 +353,11 @@ class ParseTest {
val md = markdown(input)
printMarkdownParts(md)
assertEquals(2, md.size)
val list = md[1] as MarkdownPart.CheckboxList
assertEquals(2, list.lines.size)
assertEquals(false, list.lines[0].checked)
assertEquals(true, list.lines[1].checked)
}
@Test
@@ -270,18 +366,12 @@ class ParseTest {
val md = markdown(input)
printMarkdownParts(md)
assertEquals(2, md.size)
assertEquals("Markdown", (md[0] as MarkdownPart.Header).text)
assertEquals(1, (md[0] as MarkdownPart.Header).size)
val p = md[1] as MarkdownPart.Paragraph
assertEquals("My ", (p.parts[0] as MarkdownPart.ParagraphPart.Text).text)
assertEquals("markdown", (p.parts[1] as MarkdownPart.ParagraphPart.Bold).text)
}
private fun printMarkdownParts(md: List<MarkdownPart>) {
for (part in md) {
if (part is MarkdownPart.Paragraph) {
for (para in part.parts) {
println("PARA: ${para::class.simpleName} - ${para.toString().take(75)}")
}
} else {
println("PART: ${part::class.simpleName} - ${part.toString().take(75)}")
}
}
}
}