mirror of https://github.com/status-im/NimYAML.git
73 lines
3.2 KiB
Nim
73 lines
3.2 KiB
Nim
|
import "../yaml"
|
||
|
|
||
|
proc printDifference*(expected, actual: YamlStreamEvent) =
|
||
|
if expected.kind != actual.kind:
|
||
|
echo "expected " & $expected.kind & ", got " & $actual.kind
|
||
|
else:
|
||
|
case expected.kind
|
||
|
of yamlScalar:
|
||
|
if expected.scalarTag != actual.scalarTag:
|
||
|
echo "[\"", actual.scalarContent, "\".tag] expected tag ",
|
||
|
expected.scalarTag, ", got ", actual.scalarTag
|
||
|
elif expected.scalarAnchor != actual.scalarAnchor:
|
||
|
echo "[scalarEvent] expected anchor ", expected.scalarAnchor,
|
||
|
", got ", actual.scalarAnchor
|
||
|
elif expected.scalarContent != actual.scalarContent:
|
||
|
let msg = "[scalarEvent] expected content \"" &
|
||
|
expected.scalarContent & "\", got \"" &
|
||
|
actual.scalarContent & "\" "
|
||
|
if expected.scalarContent.len != actual.scalarContent.len:
|
||
|
echo msg, "(length does not match)"
|
||
|
else:
|
||
|
for i in 0..expected.scalarContent.high:
|
||
|
if expected.scalarContent[i] != actual.scalarContent[i]:
|
||
|
echo msg, "(first different char at pos ", i,
|
||
|
": expected ",
|
||
|
cast[int](expected.scalarContent[i]),
|
||
|
", got ",
|
||
|
cast[int](actual.scalarContent[i]), ")"
|
||
|
break
|
||
|
else:
|
||
|
echo "[scalarEvent] Unknown difference"
|
||
|
of yamlStartMap:
|
||
|
if expected.mapTag != actual.mapTag:
|
||
|
echo "[map.tag] expected ", expected.mapTag, ", got ",
|
||
|
actual.mapTag
|
||
|
elif expected.mapAnchor != actual.mapAnchor:
|
||
|
echo "[map.anchor] expected ", expected.mapAnchor, ", got ",
|
||
|
actual.mapAnchor
|
||
|
else:
|
||
|
echo "[map.tag] Unknown difference"
|
||
|
of yamlStartSequence:
|
||
|
if expected.seqTag != actual.seqTag:
|
||
|
echo "[seq.tag] expected ", expected.seqTag, ", got ",
|
||
|
actual.seqTag
|
||
|
elif expected.seqAnchor != actual.seqAnchor:
|
||
|
echo "[seq.anchor] expected ", expected.seqAnchor, ", got ",
|
||
|
actual.seqAnchor
|
||
|
else:
|
||
|
echo "[seq] Unknown difference"
|
||
|
of yamlAlias:
|
||
|
if expected.aliasTarget != actual.aliasTarget:
|
||
|
echo "[alias] expected ", expected.aliasTarget, ", got ",
|
||
|
actual.aliasTarget
|
||
|
else:
|
||
|
echo "[alias] Unknown difference"
|
||
|
else:
|
||
|
echo "Unknown difference in event kind " & $expected.kind
|
||
|
|
||
|
template ensure*(input: var YamlStream,
|
||
|
expected: varargs[YamlStreamEvent]) {.dirty.} =
|
||
|
var i = 0
|
||
|
for token in input:
|
||
|
if i >= expected.len:
|
||
|
echo "received more tokens than expected (next token = ",
|
||
|
token.kind, ")"
|
||
|
fail()
|
||
|
break
|
||
|
if token != expected[i]:
|
||
|
echo "at token #" & $i & ":"
|
||
|
printDifference(expected[i], token)
|
||
|
fail()
|
||
|
break
|
||
|
i.inc()
|