23f644976a
Move all the query system to its own package. The reason is to avoid it to rely on unexported methods and structures, and move it out of the main package since this is really not a core feature. It is still tied to the toml.TomlTree and toml.Position structures for now. * Move query mechanism to its own subpackage * Rename QueryResult to Result to avoid stutter * Add query.CompileAndExecute Fixes #116
107 lines
2.2 KiB
Go
107 lines
2.2 KiB
Go
// Testing support for go-toml
|
|
|
|
package toml
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestTomlHas(t *testing.T) {
|
|
tree, _ := Load(`
|
|
[test]
|
|
key = "value"
|
|
`)
|
|
|
|
if !tree.Has("test.key") {
|
|
t.Errorf("Has - expected test.key to exists")
|
|
}
|
|
|
|
if tree.Has("") {
|
|
t.Errorf("Should return false if the key is not provided")
|
|
}
|
|
}
|
|
|
|
func TestTomlGet(t *testing.T) {
|
|
tree, _ := Load(`
|
|
[test]
|
|
key = "value"
|
|
`)
|
|
|
|
if tree.Get("") != tree {
|
|
t.Errorf("Get should return the tree itself when given an empty path")
|
|
}
|
|
|
|
if tree.Get("test.key") != "value" {
|
|
t.Errorf("Get should return the value")
|
|
}
|
|
if tree.Get(`\`) != nil {
|
|
t.Errorf("should return nil when the key is malformed")
|
|
}
|
|
}
|
|
|
|
func TestTomlGetDefault(t *testing.T) {
|
|
tree, _ := Load(`
|
|
[test]
|
|
key = "value"
|
|
`)
|
|
|
|
if tree.GetDefault("", "hello") != tree {
|
|
t.Error("GetDefault should return the tree itself when given an empty path")
|
|
}
|
|
|
|
if tree.GetDefault("test.key", "hello") != "value" {
|
|
t.Error("Get should return the value")
|
|
}
|
|
|
|
if tree.GetDefault("whatever", "hello") != "hello" {
|
|
t.Error("GetDefault should return the default value if the key does not exist")
|
|
}
|
|
}
|
|
|
|
func TestTomlHasPath(t *testing.T) {
|
|
tree, _ := Load(`
|
|
[test]
|
|
key = "value"
|
|
`)
|
|
|
|
if !tree.HasPath([]string{"test", "key"}) {
|
|
t.Errorf("HasPath - expected test.key to exists")
|
|
}
|
|
}
|
|
|
|
func TestTomlGetPath(t *testing.T) {
|
|
node := newTomlTree()
|
|
//TODO: set other node data
|
|
|
|
for idx, item := range []struct {
|
|
Path []string
|
|
Expected *TomlTree
|
|
}{
|
|
{ // empty path test
|
|
[]string{},
|
|
node,
|
|
},
|
|
} {
|
|
result := node.GetPath(item.Path)
|
|
if result != item.Expected {
|
|
t.Errorf("GetPath[%d] %v - expected %v, got %v instead.", idx, item.Path, item.Expected, result)
|
|
}
|
|
}
|
|
|
|
tree, _ := Load("[foo.bar]\na=1\nb=2\n[baz.foo]\na=3\nb=4\n[gorf.foo]\na=5\nb=6")
|
|
if tree.GetPath([]string{"whatever"}) != nil {
|
|
t.Error("GetPath should return nil when the key does not exist")
|
|
}
|
|
}
|
|
|
|
func TestTomlFromMap(t *testing.T) {
|
|
simpleMap := map[string]interface{}{"hello": 42}
|
|
tree, err := TreeFromMap(simpleMap)
|
|
if err != nil {
|
|
t.Fatal("unexpected error:", err)
|
|
}
|
|
if tree.Get("hello") != int64(42) {
|
|
t.Fatal("hello should be 42, not", tree.Get("hello"))
|
|
}
|
|
}
|