import config 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() { "root.a.b.c" |> query.parse_path() |> should.equal(Ok(#("root", ["a", "b", "c"]))) } pub fn kv_test() { let tree = tree.new() let assert Ok(tree) = query.set(tree, ["a"], tree.Leaf(tree.String("foo"))) let assert Ok(tree) = query.set(tree, ["b"], tree.Leaf(tree.Int(42))) let assert Ok(tree) = query.set(tree, ["c"], tree.Leaf(tree.Float(12.34))) let assert Ok(tree) = query.set(tree, ["d"], tree.Leaf(tree.Bool(False))) let assert Ok(tree) = query.set(tree, ["e"], tree.Leaf(tree.Null)) query.get(tree, ["a"]) |> should.equal(tree.Leaf(tree.String("foo")) |> Ok()) query.get(tree, ["b"]) |> should.equal(tree.Leaf(tree.Int(42)) |> Ok()) query.get(tree, ["c"]) |> should.equal(tree.Leaf(tree.Float(12.34)) |> Ok()) query.get(tree, ["d"]) |> should.equal(tree.Leaf(tree.Bool(False)) |> Ok()) query.get(tree, ["e"]) |> 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.Leaf(tree.String("foo"))) let assert Ok(tree) = query.set(tree, ["a", "b2", "c"], tree.Leaf(tree.String("bar"))) let assert Ok(tree) = query.set(tree, ["a", "b"], tree.Leaf(tree.String("new foo"))) let assert Ok(tree) = query.set(tree, ["a2", "b3"], tree.Leaf(tree.Int(42))) let assert Ok(tree) = query.set(tree, ["a2", "b3"], tree.Leaf(tree.Int(43))) query.get(tree, ["a", "b"]) |> should.equal(tree.Leaf(tree.String("new foo")) |> Ok()) query.get(tree, ["a", "b2"]) |> should.equal( tree.Node(dict.new() |> dict.insert("c", tree.Leaf(tree.String("bar")))) |> Ok(), ) query.get(tree, ["a2", "b3"]) |> 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.Leaf(tree.String("foo"))) let assert Ok(tree) = query.set(tree, ["a", "b2", "c"], tree.Leaf(tree.String("bar"))) let assert Ok(tree) = query.set(tree, ["a", "b"], tree.Leaf(tree.String("new foo"))) let assert Ok(tree) = query.set(tree, ["a2", "b3"], tree.Leaf(tree.Int(42))) let assert Ok(tree) = query.set(tree, ["a2", "b3"], tree.Leaf(tree.Int(43))) let json = tree |> json_serde.serialize let assert Ok(decoded) = json |> json_serde.deserialize() should.equal(tree, decoded) } pub fn config_test() { let config = config.load("./test/treevault.json") should.equal( config.Config("./test/snapshots", 12_345, [ "tree0", "tree1", "tree2", "tree3", "tree4", "tree5", "tree6", "tree7", "tree8", "tree9", ]), config, ) }