69 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Gleam
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Gleam
		
	
	
	
	
	
| 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)
 | |
| }
 |