diff options
Diffstat (limited to 'model/config_test.go')
-rw-r--r-- | model/config_test.go | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/model/config_test.go b/model/config_test.go index 1f917af27..b7533145b 100644 --- a/model/config_test.go +++ b/model/config_test.go @@ -4,11 +4,57 @@ package model import ( + "fmt" + "reflect" "testing" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) +func TestConfigDefaults(t *testing.T) { + t.Parallel() + + t.Run("somewhere nil when uninitialized", func(t *testing.T) { + c := Config{} + require.False(t, checkNowhereNil(t, "config", c)) + }) + + t.Run("nowhere nil when initialized", func(t *testing.T) { + c := Config{} + c.SetDefaults() + require.True(t, checkNowhereNil(t, "config", c)) + }) + + t.Run("nowhere nil when partially initialized", func(t *testing.T) { + var recursivelyUninitialize func(*Config, string, reflect.Value) + recursivelyUninitialize = func(config *Config, name string, v reflect.Value) { + if v.Type().Kind() == reflect.Ptr { + // Set every pointer we find in the tree to nil + v.Set(reflect.Zero(v.Type())) + require.True(t, v.IsNil()) + + // SetDefaults on the root config should make it non-nil, otherwise + // it means that SetDefaults isn't being called recursively in + // all cases. + config.SetDefaults() + if assert.False(t, v.IsNil(), "%s should be non-nil after SetDefaults()", name) { + recursivelyUninitialize(config, fmt.Sprintf("(*%s)", name), v.Elem()) + } + + } else if v.Type().Kind() == reflect.Struct { + for i := 0; i < v.NumField(); i++ { + recursivelyUninitialize(config, fmt.Sprintf("%s.%s", name, v.Type().Field(i).Name), v.Field(i)) + } + } + } + + c := Config{} + c.SetDefaults() + recursivelyUninitialize(&c, "config", reflect.ValueOf(&c).Elem()) + }) +} + func TestConfigDefaultFileSettingsDirectory(t *testing.T) { c1 := Config{} c1.SetDefaults() |