46 lines
2.1 KiB
Go
46 lines
2.1 KiB
Go
package configkit_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
configkit "go.maximumdirect.net/configkit"
|
|
)
|
|
|
|
func TestMainRelativeOptions(t *testing.T) {
|
|
if configkit.MainRelative() == configkit.MainRelative() {
|
|
t.Fatal("binding descriptions must be distinct")
|
|
}
|
|
invalid := &configkit.FilesystemContext{BaseDir: "relative", Root: "relative"}
|
|
cases := []struct {
|
|
name string
|
|
main configkit.Input
|
|
underlay configkit.Input
|
|
overlay string
|
|
overlayContext, fallback *configkit.FilesystemContext
|
|
wantError bool
|
|
}{
|
|
{name: "binding on main", main: configkit.Input{Source: configkit.NoSource(), MainRelative: configkit.MainRelative()}, wantError: true},
|
|
{name: "binding on file", underlay: configkit.Input{Source: configkit.File("missing"), MainRelative: configkit.MainRelative()}, wantError: true},
|
|
{name: "invalid fallback", underlay: configkit.Input{Source: configkit.NoSource(), MainRelative: &configkit.MainRelativeContext{Fallback: invalid}}, wantError: true},
|
|
{name: "shadowed binding", underlay: configkit.Input{Source: configkit.NoSource(), Filesystem: &configkit.FilesystemContext{Root: t.TempDir()}, MainRelative: &configkit.MainRelativeContext{Fallback: invalid}}},
|
|
{name: "inactive overlay fallback", fallback: invalid},
|
|
{name: "invalid explicit overlay", overlay: "test", overlayContext: invalid, fallback: &configkit.FilesystemContext{Root: t.TempDir(), BaseDir: t.TempDir()}, wantError: true},
|
|
}
|
|
for _, tc := range cases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
main := tc.main
|
|
if tc.name != "binding on main" {
|
|
main.Source = configkit.NoSource()
|
|
}
|
|
opts := configkit.LayeredOptions[layeredFacadeConfig]{Overlay: tc.overlay, OverlayFilesystem: tc.overlayContext, OverlayFallback: tc.fallback}
|
|
if tc.name == "binding on file" || tc.name == "invalid fallback" || tc.name == "shadowed binding" {
|
|
opts.Underlays = []configkit.Underlay{{Inputs: []configkit.Input{tc.underlay}}}
|
|
}
|
|
_, err := configkit.LoadLayered(main, opts)
|
|
if (err != nil) != tc.wantError {
|
|
t.Fatalf("error = %v, want error %v", err, tc.wantError)
|
|
}
|
|
})
|
|
}
|
|
}
|