ref: 6c385887e98469bf92e40f435d2167ac613984ae
dir: /lib/json/test/parse.myr/
use std use json use testr const main = { testr.run([ [.name="null", .fn={ctx var j = std.try(json.parse("null")) match j | &(`json.Null): std.put("ok\n") | val: testr.fail(ctx, "wrong value {}", val) ;; json.free(j) }], [.name="bool", .fn={ctx var j = std.try(json.parse("true")) match j | &(`json.Bool true): std.put("ok\n") | val: testr.fail(ctx, "wrong value {}", val) ;; j = std.try(json.parse("false")) match j | &(`json.Bool false): std.put("ok\n") | val: testr.fail(ctx, "wrong value {}", val) ;; json.free(j) }], [.name="num", .fn={ctx var j = std.try(json.parse("123")) match j | &(`json.Num 123.0): std.put("ok\n") | val: testr.fail(ctx, "wrong value {}", val) ;; json.free(j) }], [.name="str", .fn={ctx var j = std.try(json.parse("\"some str\"")) match j | &(`json.Str "some str"): std.put("ok\n") | val: testr.fail(ctx, "wrong value {}", val) ;; json.free(j) }], [.name="arr", .fn={ctx var j = std.try(json.parse("[\"some str\", 123, false]")) match j | &(`json.Arr a): match a[0] | &(`json.Str "some str"): std.put("ok\n") | val: testr.fail(ctx, "wrong value {}", val) ;; match a[1] | &(`json.Num 123.0): std.put("ok\n") | val: testr.fail(ctx, "wrong value {}", val) ;; match a[2] | &(`json.Bool false): std.put("ok\n") | val: testr.fail(ctx, "wrong value {}", val) ;; | val: testr.fail(ctx, "wrong value {}", val) ;; json.free(j) }], [.name="obj", .fn={ctx var j = std.try(json.parse("{\"key\": 123, \"another\": \"foo\"}")) match j | &(`json.Obj a): match a[0] | ("key", &(`json.Num 123.0)): std.put("ok\n") | val: testr.fail(ctx, "wrong value {}", val) ;; match a[1] | ("another", &(`json.Str "foo")): std.put("ok\n") | val: testr.fail(ctx, "wrong value {}", val) ;; | val: testr.fail(ctx, "wrong value {}", val) ;; json.free(j) }], ][:]) }