0e41db2176
Fix #54
71 lines
1.7 KiB
Go
71 lines
1.7 KiB
Go
package toml
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func assertArrayContainsInAnyOrder(t *testing.T, array []interface{}, objects ...interface{}) {
|
|
if (len(array) != len(objects)) {
|
|
t.Fatalf("array contains %d objects but %d are expected", len(array), len(objects))
|
|
}
|
|
|
|
for _, o := range objects {
|
|
found := false
|
|
for _, a := range array {
|
|
if a == o {
|
|
found = true
|
|
break
|
|
}
|
|
}
|
|
if !found {
|
|
t.Fatal(o, "not found in array", array)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestQueryExample(t *testing.T) {
|
|
config, _ := Load(`
|
|
[[book]]
|
|
title = "The Stand"
|
|
author = "Stephen King"
|
|
[[book]]
|
|
title = "For Whom the Bell Tolls"
|
|
author = "Ernest Hemmingway"
|
|
[[book]]
|
|
title = "Neuromancer"
|
|
author = "William Gibson"
|
|
`)
|
|
|
|
authors, _ := config.Query("$.book.author")
|
|
names := authors.Values()
|
|
if len(names) != 3 {
|
|
t.Fatalf("query should return 3 names but returned %d", len(names))
|
|
}
|
|
assertArrayContainsInAnyOrder(t, names, "Stephen King", "Ernest Hemmingway", "William Gibson")
|
|
}
|
|
|
|
func TestQueryReadmeExample(t *testing.T) {
|
|
config, _ := Load(`
|
|
[postgres]
|
|
user = "pelletier"
|
|
password = "mypassword"
|
|
`)
|
|
results, _ := config.Query("$..[user,password]")
|
|
values := results.Values()
|
|
if len(values) != 2 {
|
|
t.Fatalf("query should return 2 values but returned %d", len(values))
|
|
}
|
|
assertArrayContainsInAnyOrder(t, values, "pelletier", "mypassword")
|
|
}
|
|
|
|
func TestQueryPathNotPresent(t *testing.T) {
|
|
config, _ := Load(`a = "hello"`)
|
|
results, err := config.Query("$.foo.bar")
|
|
if err != nil {
|
|
t.Fatalf("err should be nil. got %s instead", err)
|
|
}
|
|
if len(results.items) != 0 {
|
|
t.Fatalf("no items should be matched. %d matched instead", len(results.items))
|
|
}
|
|
}
|