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