summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/pelletier/go-toml/query/query_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/pelletier/go-toml/query/query_test.go')
-rw-r--r--vendor/github.com/pelletier/go-toml/query/query_test.go157
1 files changed, 157 insertions, 0 deletions
diff --git a/vendor/github.com/pelletier/go-toml/query/query_test.go b/vendor/github.com/pelletier/go-toml/query/query_test.go
new file mode 100644
index 000000000..903a8dc73
--- /dev/null
+++ b/vendor/github.com/pelletier/go-toml/query/query_test.go
@@ -0,0 +1,157 @@
+package query
+
+import (
+ "fmt"
+ "testing"
+
+ "github.com/pelletier/go-toml"
+)
+
+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, _ := toml.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, err := CompileAndExecute("$.book.author", config)
+ if err != nil {
+ t.Fatal("unexpected error:", err)
+ }
+ 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, _ := toml.Load(`
+[postgres]
+user = "pelletier"
+password = "mypassword"
+`)
+
+ query, err := Compile("$..[user,password]")
+ if err != nil {
+ t.Fatal("unexpected error:", err)
+ }
+ results := query.Execute(config)
+ 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, _ := toml.Load(`a = "hello"`)
+ query, err := Compile("$.foo.bar")
+ if err != nil {
+ t.Fatal("unexpected error:", err)
+ }
+ results := query.Execute(config)
+ 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))
+ }
+}
+
+func ExampleNodeFilterFn_filterExample() {
+ tree, _ := toml.Load(`
+ [struct_one]
+ foo = "foo"
+ bar = "bar"
+
+ [struct_two]
+ baz = "baz"
+ gorf = "gorf"
+ `)
+
+ // create a query that references a user-defined-filter
+ query, _ := Compile("$[?(bazOnly)]")
+
+ // define the filter, and assign it to the query
+ query.SetFilter("bazOnly", func(node interface{}) bool {
+ if tree, ok := node.(*toml.Tree); ok {
+ return tree.Has("baz")
+ }
+ return false // reject all other node types
+ })
+
+ // results contain only the 'struct_two' Tree
+ query.Execute(tree)
+}
+
+func ExampleQuery_queryExample() {
+ config, _ := toml.Load(`
+ [[book]]
+ title = "The Stand"
+ author = "Stephen King"
+ [[book]]
+ title = "For Whom the Bell Tolls"
+ author = "Ernest Hemmingway"
+ [[book]]
+ title = "Neuromancer"
+ author = "William Gibson"
+ `)
+
+ // find and print all the authors in the document
+ query, _ := Compile("$.book.author")
+ authors := query.Execute(config)
+ for _, name := range authors.Values() {
+ fmt.Println(name)
+ }
+}
+
+func TestTomlQuery(t *testing.T) {
+ tree, err := toml.Load("[foo.bar]\na=1\nb=2\n[baz.foo]\na=3\nb=4\n[gorf.foo]\na=5\nb=6")
+ if err != nil {
+ t.Error(err)
+ return
+ }
+ query, err := Compile("$.foo.bar")
+ if err != nil {
+ t.Error(err)
+ return
+ }
+ result := query.Execute(tree)
+ values := result.Values()
+ if len(values) != 1 {
+ t.Errorf("Expected resultset of 1, got %d instead: %v", len(values), values)
+ }
+
+ if tt, ok := values[0].(*toml.Tree); !ok {
+ t.Errorf("Expected type of Tree: %T", values[0])
+ } else if tt.Get("a") != int64(1) {
+ t.Errorf("Expected 'a' with a value 1: %v", tt.Get("a"))
+ } else if tt.Get("b") != int64(2) {
+ t.Errorf("Expected 'b' with a value 2: %v", tt.Get("b"))
+ }
+}