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