xmltree minor improvement (#16085)

(cherry picked from commit 3040f05505)
This commit is contained in:
flywind
2020-11-22 04:26:51 +08:00
committed by narimiran
parent 475b7e1444
commit 6c070452e4
2 changed files with 88 additions and 87 deletions

View File

@@ -312,7 +312,7 @@ proc add*(father, son: XmlNode) {.inline.} =
add(father.s, son)
proc insert*(father, son: XmlNode, index: int) {.inline.} =
## Insert the child `son` to a given position in `father`.
## Inserts the child `son` to a given position in `father`.
##
## `father` and `son` must be of `xnElement` kind.
##
@@ -335,7 +335,7 @@ proc insert*(father, son: XmlNode, index: int) {.inline.} =
insert(father.s, son, len(father.s))
proc delete*(n: XmlNode, i: Natural) =
## Delete the `i`'th child of `n`.
## Deletes the `i`'th child of `n`.
##
## See also:
## * `add proc <#add,XmlNode,XmlNode>`_
@@ -388,7 +388,7 @@ proc `[]`*(n: var XmlNode, i: int): var XmlNode {.inline.} =
result = n.s[i]
proc clear*(n: var XmlNode) =
## Recursively clear all children of an XmlNode.
## Recursively clears all children of an XmlNode.
##
## .. code-block::
## var g = newElement("myTag")
@@ -788,87 +788,3 @@ macro `<>`*(x: untyped): untyped =
## <a href="http://nim-lang.org">Nim rules.</a>
##
result = xmlConstructor(x)
when isMainModule:
var
x: XmlNode
x = <>a(href = "http://nim-lang.org", newText("Nim rules."))
assert $x == """<a href="http://nim-lang.org">Nim rules.</a>"""
x = <>outer(<>inner())
assert $x == """<outer>
<inner />
</outer>"""
x = <>outer(<>middle(<>inner1(), <>inner2(), <>inner3(), <>inner4()))
assert $x == """<outer>
<middle>
<inner1 />
<inner2 />
<inner3 />
<inner4 />
</middle>
</outer>"""
x = <>l0(<>l1(<>l2(<>l3(<>l4()))))
assert $x == """<l0>
<l1>
<l2>
<l3>
<l4 />
</l3>
</l2>
</l1>
</l0>"""
x = <>l0(<>l1p1(), <>l1p2(), <>l1p3())
assert $x == """<l0>
<l1p1 />
<l1p2 />
<l1p3 />
</l0>"""
x = <>l0(<>l1(<>l2p1(), <>l2p2()))
assert $x == """<l0>
<l1>
<l2p1 />
<l2p2 />
</l1>
</l0>"""
x = <>l0(<>l1(<>l2_1(), <>l2_2(<>l3_1(), <>l3_2(), <>l3_3(<>l4_1(), <>l4_2(), <>l4_3())), <>l2_3(), <>l2_4()))
assert $x == """<l0>
<l1>
<l2_1 />
<l2_2>
<l3_1 />
<l3_2 />
<l3_3>
<l4_1 />
<l4_2 />
<l4_3 />
</l3_3>
</l2_2>
<l2_3 />
<l2_4 />
</l1>
</l0>"""
let
innermost = newElement("innermost")
middle = newXmlTree("middle", [innermost])
innermost.add newText("innermost text")
x = newXmlTree("outer", [middle])
assert $x == """<outer>
<middle>
<innermost>innermost text</innermost>
</middle>
</outer>"""
x = newElement("myTag")
x.add newText("my text")
x.add newElement("sonTag")
x.add newEntity("my entity")
assert $x == "<myTag>my text<sonTag />&my entity;</myTag>"

85
tests/stdlib/txmltree.nim Normal file
View File

@@ -0,0 +1,85 @@
import xmltree
block:
var
x: XmlNode
x = <>a(href = "http://nim-lang.org", newText("Nim rules."))
assert $x == """<a href="http://nim-lang.org">Nim rules.</a>"""
x = <>outer(<>inner())
assert $x == """<outer>
<inner />
</outer>"""
x = <>outer(<>middle(<>inner1(), <>inner2(), <>inner3(), <>inner4()))
assert $x == """<outer>
<middle>
<inner1 />
<inner2 />
<inner3 />
<inner4 />
</middle>
</outer>"""
x = <>l0(<>l1(<>l2(<>l3(<>l4()))))
assert $x == """<l0>
<l1>
<l2>
<l3>
<l4 />
</l3>
</l2>
</l1>
</l0>"""
x = <>l0(<>l1p1(), <>l1p2(), <>l1p3())
assert $x == """<l0>
<l1p1 />
<l1p2 />
<l1p3 />
</l0>"""
x = <>l0(<>l1(<>l2p1(), <>l2p2()))
assert $x == """<l0>
<l1>
<l2p1 />
<l2p2 />
</l1>
</l0>"""
x = <>l0(<>l1(<>l2_1(), <>l2_2(<>l3_1(), <>l3_2(), <>l3_3(<>l4_1(), <>l4_2(), <>l4_3())), <>l2_3(), <>l2_4()))
assert $x == """<l0>
<l1>
<l2_1 />
<l2_2>
<l3_1 />
<l3_2 />
<l3_3>
<l4_1 />
<l4_2 />
<l4_3 />
</l3_3>
</l2_2>
<l2_3 />
<l2_4 />
</l1>
</l0>"""
let
innermost = newElement("innermost")
middle = newXmlTree("middle", [innermost])
innermost.add newText("innermost text")
x = newXmlTree("outer", [middle])
assert $x == """<outer>
<middle>
<innermost>innermost text</innermost>
</middle>
</outer>"""
x = newElement("myTag")
x.add newText("my text")
x.add newElement("sonTag")
x.add newEntity("my entity")
assert $x == "<myTag>my text<sonTag />&my entity;</myTag>"