test: 異種リストのテストを追加
This commit is contained in:
parent
9605c7d7aa
commit
ac6c4f132b
|
@ -86,16 +86,28 @@ sealed class AstNode {
|
|||
fun nestedPrint(nest: Int): String {
|
||||
val builder = StringBuilder()
|
||||
for (node in itemNode) {
|
||||
builder.append(" ".repeat(nest)).append("- ").append(node.nestedPrint(nest)).append("\n")
|
||||
builder.append(" ".repeat(nest)).append(char).append(" ").append(node.nestedPrint(nest)).append("\n")
|
||||
}
|
||||
return builder.toString().trim('\n')
|
||||
}
|
||||
|
||||
protected abstract val char: String
|
||||
}
|
||||
|
||||
data class DecimalListNode(override val itemNode: List<ListItemNode>) : ListNode(itemNode) {
|
||||
@JsName("with")
|
||||
constructor(vararg nodes: ListItemNode) : this(nodes.toList())
|
||||
|
||||
override val char: String
|
||||
get() = "1."
|
||||
}
|
||||
|
||||
data class DecimalListNode(override val itemNode: List<ListItemNode>) : ListNode(itemNode)
|
||||
data class DiscListNode(override val itemNode: List<ListItemNode>) : ListNode(itemNode) {
|
||||
@JsName("with")
|
||||
constructor(vararg nodes: ListItemNode) : this(nodes.toList())
|
||||
|
||||
override val char: String
|
||||
get() = "-"
|
||||
}
|
||||
|
||||
data class ListItemNode(val nodes: MutableList<ListableNode>) : BlockNode() {
|
||||
|
|
|
@ -76,9 +76,17 @@ class Parser {
|
|||
}
|
||||
break
|
||||
}
|
||||
while (iterator.peekOrNull() is Token.List) {
|
||||
val peekOrNull = iterator.peekOrNull()
|
||||
if (peekOrNull is Token.List) {
|
||||
iterator.skip()
|
||||
if (peekOrNull.type != list.type) {
|
||||
if (item.isNotEmpty()) {
|
||||
listItems.add(ListItemNode(item))
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if (item.isNotEmpty()) {
|
||||
listItems.add(ListItemNode(item))
|
||||
}
|
||||
|
|
|
@ -621,4 +621,53 @@ class ParserTest {
|
|||
), actual
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun 異種listネスト() {
|
||||
val parser = Parser()
|
||||
|
||||
val actual = parser.parse(
|
||||
listOf(
|
||||
DiscList,
|
||||
Text("aiueo"),
|
||||
LineBreak(1),
|
||||
Whitespace(4, ' '),
|
||||
DecimalList('1'),
|
||||
Text("abcd"),
|
||||
LineBreak(1),
|
||||
Whitespace(4, ' '),
|
||||
DecimalList('1'),
|
||||
Text("efgh"),
|
||||
LineBreak(1),
|
||||
DiscList,
|
||||
Text("hoge")
|
||||
)
|
||||
)
|
||||
|
||||
println(actual)
|
||||
println(actual.print())
|
||||
|
||||
assertEquals(
|
||||
RootNode(
|
||||
BodyNode(
|
||||
DiscListNode(
|
||||
ListItemNode(
|
||||
PlainText("aiueo"),
|
||||
DecimalListNode(
|
||||
ListItemNode(
|
||||
PlainText("abcd"),
|
||||
),
|
||||
ListItemNode(
|
||||
PlainText("efgh"),
|
||||
)
|
||||
)
|
||||
),
|
||||
ListItemNode(
|
||||
PlainText("hoge")
|
||||
)
|
||||
)
|
||||
)
|
||||
), actual
|
||||
)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue