diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/stdlib/t15835.nim | 22 | ||||
-rw-r--r-- | tests/stdlib/tjson.nim | 40 | ||||
-rw-r--r-- | tests/stdlib/tjson_unmarshall.nim | 32 |
3 files changed, 40 insertions, 54 deletions
diff --git a/tests/stdlib/t15835.nim b/tests/stdlib/t15835.nim deleted file mode 100644 index ba3405780..000000000 --- a/tests/stdlib/t15835.nim +++ /dev/null @@ -1,22 +0,0 @@ -discard """ - targets: "c js" -""" - - -import std/json - -type - Foo = object - ii*: int - data*: JsonNode - -block: - const jt = """{"ii": 123, "data": ["some", "data"]}""" - let js = parseJson(jt) - discard js.to(Foo) - -block: - const jt = """{"ii": 123}""" - let js = parseJson(jt) - doAssertRaises(KeyError): - echo js.to(Foo) diff --git a/tests/stdlib/tjson.nim b/tests/stdlib/tjson.nim index b71961554..eb31fcef9 100644 --- a/tests/stdlib/tjson.nim +++ b/tests/stdlib/tjson.nim @@ -244,3 +244,43 @@ when defined(js): # xxx fixme doAssert x.kind == JInt else: doAssert x.kind == JString + +block: # bug #15835 + type + Foo = object + ii*: int + data*: JsonNode + + block: + const jt = """{"ii": 123, "data": ["some", "data"]}""" + let js = parseJson(jt) + discard js.to(Foo) + + block: + const jt = """{"ii": 123}""" + let js = parseJson(jt) + doAssertRaises(KeyError): + echo js.to(Foo) + +type + ContentNodeKind* = enum + P, + Br, + Text, + ContentNode* = object + case kind*: ContentNodeKind + of P: pChildren*: seq[ContentNode] + of Br: nil + of Text: textStr*: string + +let mynode = ContentNode(kind: P, pChildren: @[ + ContentNode(kind: Text, textStr: "mychild"), + ContentNode(kind: Br) +]) + +doAssert $mynode == """(kind: P, pChildren: @[(kind: Text, textStr: "mychild"), (kind: Br)])""" + +let jsonNode = %*mynode +doAssert $jsonNode == """{"kind":"P","pChildren":[{"kind":"Text","textStr":"mychild"},{"kind":"Br"}]}""" +doAssert $jsonNode.to(ContentNode) == """(kind: P, pChildren: @[(kind: Text, textStr: "mychild"), (kind: Br)])""" + diff --git a/tests/stdlib/tjson_unmarshall.nim b/tests/stdlib/tjson_unmarshall.nim deleted file mode 100644 index 4353d1ee2..000000000 --- a/tests/stdlib/tjson_unmarshall.nim +++ /dev/null @@ -1,32 +0,0 @@ -discard """ - targets: "c js" - output: ''' -Original: (kind: P, pChildren: @[(kind: Text, textStr: "mychild"), (kind: Br)]) -jsonNode: {"kind":"P","pChildren":[{"kind":"Text","textStr":"mychild"},{"kind":"Br"}]} -Reversed: (kind: P, pChildren: @[(kind: Text, textStr: "mychild"), (kind: Br)]) -''' -""" - -import std/json - -type - ContentNodeKind* = enum - P, - Br, - Text, - ContentNode* = object - case kind*: ContentNodeKind - of P: pChildren*: seq[ContentNode] - of Br: nil - of Text: textStr*: string - -let mynode = ContentNode(kind: P, pChildren: @[ - ContentNode(kind: Text, textStr: "mychild"), - ContentNode(kind: Br) -]) - -echo "Original: " & $mynode - -let jsonNode = %*mynode -echo "jsonNode: " & $jsonNode -echo "Reversed: " & $jsonNode.to(ContentNode) |