diff --git a/config/interpolate_funcs_test.go b/config/interpolate_funcs_test.go index 8bd03b111..46a6eba75 100644 --- a/config/interpolate_funcs_test.go +++ b/config/interpolate_funcs_test.go @@ -890,6 +890,57 @@ func TestInterpolateFuncKeys(t *testing.T) { }) } +// Confirm that keys return in sorted order, and values return in the order of +// their sorted keys. +func TestInterpolateFuncKeyValOrder(t *testing.T) { + testFunction(t, testFunctionConfig{ + Vars: map[string]ast.Variable{ + "var.foo": ast.Variable{ + Type: ast.TypeMap, + Value: map[string]ast.Variable{ + "D": ast.Variable{ + Value: "2", + Type: ast.TypeString, + }, + "C": ast.Variable{ + Value: "Y", + Type: ast.TypeString, + }, + "A": ast.Variable{ + Value: "X", + Type: ast.TypeString, + }, + "10": ast.Variable{ + Value: "Z", + Type: ast.TypeString, + }, + "1": ast.Variable{ + Value: "4", + Type: ast.TypeString, + }, + "3": ast.Variable{ + Value: "W", + Type: ast.TypeString, + }, + }, + }, + }, + Cases: []testFunctionCase{ + { + `${keys(var.foo)}`, + []interface{}{"1", "10", "3", "A", "C", "D"}, + false, + }, + + { + `${values(var.foo)}`, + []interface{}{"4", "Z", "W", "X", "Y", "2"}, + false, + }, + }, + }) +} + func TestInterpolateFuncValues(t *testing.T) { testFunction(t, testFunctionConfig{ Vars: map[string]ast.Variable{