treevault/test/treevault_test.gleam

89 lines
2.7 KiB
Gleam

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,
)
}