53 lines
1.6 KiB
Go
53 lines
1.6 KiB
Go
package configkit
|
|
|
|
import (
|
|
"errors"
|
|
"reflect"
|
|
"strings"
|
|
"testing"
|
|
|
|
"gitea.maximumdirect.net/eric/ConfigKit/internal/engine"
|
|
)
|
|
|
|
func TestWrappedSourcesPreserveEngineOwnership(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
type config struct {
|
|
Value string `yaml:"value"`
|
|
}
|
|
data := []byte("value: retained\n")
|
|
source := Bytes("snapshot.yml", data)
|
|
data[7] = 'X'
|
|
result, err := engine.Load[config](source.toEngine(), engine.SecretBinding{})
|
|
if err != nil || result.Config.Value != "retained" {
|
|
t.Fatalf("snapshotted source = %#v, %v", result, err)
|
|
}
|
|
|
|
readerSource := Reader("reader.yml", strings.NewReader("value: once\n"))
|
|
first := readerSource
|
|
if _, err := engine.Load[config](first.toEngine(), engine.SecretBinding{}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
_, err = engine.Load[config](readerSource.toEngine(), engine.SecretBinding{})
|
|
var loadError *engine.LoadError
|
|
if !errors.As(err, &loadError) || len(loadError.Diagnostics()) != 1 || loadError.Diagnostics()[0].Code != engine.CodeSourceReaderUsed {
|
|
t.Fatalf("copied reader source error = %#v", err)
|
|
}
|
|
}
|
|
|
|
func TestWrappedPathsRetainEngineSegmentIntent(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
parsed, err := ParsePath("/0")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
keyed, indexed := Keys("0"), Path{}.Index(0)
|
|
if parsed.String() != "/0" || keyed.String() != "/0" || indexed.String() != "/0" {
|
|
t.Fatalf("path spellings = %q, %q, %q", parsed, keyed, indexed)
|
|
}
|
|
if reflect.DeepEqual(parsed.value, keyed.value) || reflect.DeepEqual(parsed.value, indexed.value) || reflect.DeepEqual(keyed.value, indexed.value) {
|
|
t.Fatal("path wrappers collapsed parsed, mapping-key, and index segments")
|
|
}
|
|
}
|