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