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