import gleam/dict import gleeunit import gleeunit/should import json_serde import query import tree pub fn main() { gleeunit.main() } pub fn path_parse_test() { ".a.b.c" |> query.parse() |> should.equal(Ok(["a", "b", "c"])) } pub fn kv_test() { let tree = tree.new() let assert Ok(tree) = query.set(tree, ".a", tree.String("foo")) let assert Ok(tree) = query.set(tree, ".b", tree.Int(42)) let assert Ok(tree) = query.set(tree, ".c", tree.Float(12.34)) let assert Ok(tree) = query.set(tree, ".d", tree.Bool(False)) let assert Ok(tree) = query.set(tree, ".e", tree.Null) query.get(tree, ".a", False) |> should.equal(tree.Leaf(tree.String("foo")) |> Ok()) query.get(tree, ".b", False) |> should.equal(tree.Leaf(tree.Int(42)) |> Ok()) query.get(tree, ".c", False) |> should.equal(tree.Leaf(tree.Float(12.34)) |> Ok()) query.get(tree, ".d", False) |> should.equal(tree.Leaf(tree.Bool(False)) |> Ok()) query.get(tree, ".e", False) |> should.equal(tree.Leaf(tree.Null) |> Ok()) } pub fn tree_test() { let tree = tree.new() let assert Ok(tree) = query.set(tree, ".a.b.c.d", tree.String("foo")) let assert Ok(tree) = query.set(tree, ".a.b2.c", tree.String("bar")) let assert Ok(tree) = query.set(tree, ".a.b", tree.String("new foo")) let assert Ok(tree) = query.set(tree, ".a2.b3", tree.Int(42)) let assert Ok(tree) = query.set(tree, ".a2.b3", tree.Int(43)) query.get(tree, ".a.b", False) |> should.equal(tree.Leaf(tree.String("new foo")) |> Ok()) query.get(tree, ".a.b2", True) |> should.equal( tree.Node(dict.new() |> dict.insert("c", tree.Leaf(tree.String("bar")))) |> Ok(), ) query.get(tree, ".a2.b3", False) |> should.equal(tree.Leaf(tree.Int(43)) |> Ok()) } pub fn json_test() { let tree = tree.new() let assert Ok(tree) = query.set(tree, ".a.b.c.d", tree.String("foo")) let assert Ok(tree) = query.set(tree, ".a.b2.c", tree.String("bar")) let assert Ok(tree) = query.set(tree, ".a.b", tree.String("new foo")) let assert Ok(tree) = query.set(tree, ".a2.b3", tree.Int(42)) let assert Ok(tree) = query.set(tree, ".a2.b3", tree.Int(43)) let json = tree |> json_serde.serialize let assert Ok(decoded) = json |> json_serde.deserialize() should.equal(tree, decoded) }