Proper interface value obtaining and more tests.
This commit is contained in:
parent
e34e443897
commit
448edf8970
@ -25,9 +25,13 @@ func composeTree(value reflect.Value, prefix string) {
|
|||||||
|
|
||||||
// If currently processed field - interface, then we should
|
// If currently processed field - interface, then we should
|
||||||
// get underlying value.
|
// get underlying value.
|
||||||
//if fieldToProcess.Kind() == reflect.Interface {
|
if fieldToProcess.Kind() == reflect.Interface {
|
||||||
// fieldToProcess = fieldToProcess.Elem()
|
if fieldToProcess.Elem().Kind() == reflect.Ptr {
|
||||||
//}
|
fieldToProcess = fieldToProcess.Elem().Elem()
|
||||||
|
} else if fieldToProcess.Elem().Kind() == reflect.Struct {
|
||||||
|
fieldToProcess = fieldToProcess.Elem()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// In 99% of cases we will get uninitialized things we should
|
// In 99% of cases we will get uninitialized things we should
|
||||||
// initialize.
|
// initialize.
|
||||||
|
@ -766,3 +766,30 @@ func TestParseStructWithInterfaceFields(t *testing.T) {
|
|||||||
os.Unsetenv("DATA")
|
os.Unsetenv("DATA")
|
||||||
os.Unsetenv(debugFlagEnvName)
|
os.Unsetenv(debugFlagEnvName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestParseStructWitStructAsInterface(t *testing.T) {
|
||||||
|
type testStruct struct {
|
||||||
|
Data interface{}
|
||||||
|
Int int
|
||||||
|
}
|
||||||
|
type testUnderlyingStruct struct {
|
||||||
|
Data string
|
||||||
|
}
|
||||||
|
|
||||||
|
os.Setenv(debugFlagEnvName, "true")
|
||||||
|
os.Setenv("INT", "64")
|
||||||
|
os.Setenv("DATA_DATA", "Test data")
|
||||||
|
|
||||||
|
testCase := &testStruct{}
|
||||||
|
testUnderlyingCase := &testUnderlyingStruct{}
|
||||||
|
testCase.Data = testUnderlyingCase
|
||||||
|
err := Parse(testCase, nil)
|
||||||
|
|
||||||
|
require.Nil(t, err)
|
||||||
|
require.Equal(t, testCase.Int, 64)
|
||||||
|
require.Equal(t, testCase.Data.(*testUnderlyingStruct).Data, "Test data")
|
||||||
|
|
||||||
|
os.Unsetenv("INT")
|
||||||
|
os.Unsetenv("DATA_DATA")
|
||||||
|
os.Unsetenv(debugFlagEnvName)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user