mirror of https://github.com/databricks/cli.git
37 lines
968 B
Go
37 lines
968 B
Go
|
package dyn_test
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/databricks/cli/libs/dyn"
|
||
|
assert "github.com/databricks/cli/libs/dyn/dynassert"
|
||
|
)
|
||
|
|
||
|
func TestVisitCallbackPathCopy(t *testing.T) {
|
||
|
vin := dyn.V(map[string]dyn.Value{
|
||
|
"foo": dyn.V(42),
|
||
|
"bar": dyn.V(43),
|
||
|
})
|
||
|
|
||
|
var paths []dyn.Path
|
||
|
|
||
|
// The callback should receive a copy of the path.
|
||
|
// If the same underlying value is used, all collected paths will be the same.
|
||
|
// This test uses `MapByPattern` to collect all paths in the map.
|
||
|
// Visit itself doesn't have public functions and we exclusively use black-box testing for this package.
|
||
|
_, _ = dyn.MapByPattern(vin, dyn.NewPattern(dyn.AnyKey()), func(p dyn.Path, v dyn.Value) (dyn.Value, error) {
|
||
|
paths = append(paths, p)
|
||
|
return v, nil
|
||
|
})
|
||
|
|
||
|
// Verify that the paths retained their original values.
|
||
|
var strings []string
|
||
|
for _, p := range paths {
|
||
|
strings = append(strings, p.String())
|
||
|
}
|
||
|
assert.ElementsMatch(t, strings, []string{
|
||
|
"foo",
|
||
|
"bar",
|
||
|
})
|
||
|
}
|