# SPDX-FileCopyrightText: 2021 ☭ Emery Hemingway # SPDX-License-Identifier: Unlicense import std/[options, tables, unittest, xmlparser, xmltree] import preserves, preserves/xmlhooks suite "conversions": test "dictionary": type Bar = tuple s: string type Foobar {.preservesDictionary.} = object a, b: int c {.preservesEmbedded.}: Bar let c = Foobar(a: 1, b: 2, c: ("ku", )) b = toPreserve(c) a = preserveTo(b, Foobar) check($b == """{a: 1 b: 2 c: #!["ku"]}""") check(a.isSome and (get(a) == c)) check(b.kind == pkDictionary) test "records": type Bar {.preservesRecord: "bar".} = object s: string type Foobar {.preservesRecord: "foo".} = object a, b: int c: Bar let tup = Foobar(a: 1, b: 2, c: Bar(s: "ku", )) prs = toPreserve(tup) check(prs.kind == pkRecord) check($prs == """>""") check(preserveTo(prs, Foobar) == some(tup)) test "tables": var a: Table[int, string] for i, s in ["a", "b", "c"]: a[i] = s let b = toPreserve(a) check($b == """{0: "a" 1: "b" 2: "c"}""") var c: Table[int, string] check(fromPreserve(c, b)) check(a == c) test "XML": var a: XmlNode var b = parseXML """ Example text01 - 'Hello, out there' in blue Hello, out there """ var pr = toPreserve(b, void) checkpoint $pr check fromPreserve(a, pr) suite "toPreserve": template check(p: Preserve; s: string) = test s: check($p == s) check false.toPreserve, "#f" check [0, 1, 2, 3].toPreserve, "[0 1 2 3]"