diff --git a/issue_2_test.go b/issue_2_test.go index a86b84bee9ee82c8ec6091232c88fba15f1a9d3c..f9d652ffd3caa5a937310b173eff297296715391 100644 --- a/issue_2_test.go +++ b/issue_2_test.go @@ -135,7 +135,17 @@ func TestReplacePathForConfig(t *testing.T) { }, } + nn, err2 := GetValue[MainTestStruct](config, "Sub.Default.Paths.Template") + assert.Nil(t, err2) + + assert.Equal(t, nn, PathValue("../../../default.html")) + err := SetValue[*MainTestStruct](&config, "Sub.Default.Paths.Template", "test") assert.Nil(t, err) + nn, err3 := GetValue[MainTestStruct](config, "Sub.Default.Paths.Template") + assert.Nil(t, err3) + + assert.Equal(t, nn, PathValue("test")) + } diff --git a/issue_7_test.go b/issue_7_test.go index 20c31d39328c8798c73b74343a645bebfb6762d0..7eb118b001fdb35f5aebd26d95c95ea2ad8c1175 100644 --- a/issue_7_test.go +++ b/issue_7_test.go @@ -1,20 +1,10 @@ package pathfinder import ( + "github.com/stretchr/testify/assert" "testing" ) -//// Ihre Fehlerdefinitionen -//func newInvalidPathError(path string) error { -// return fmt.Errorf("invalid path: %s", path) -//} -// -//func newCannotSetError(path string) error { -// return fmt.Errorf("cannot set: %s", path) -//} - -// ... weitere Fehlerdefinitionen - // Test für SetValue func TestSetValue(t *testing.T) { type Inner struct { @@ -23,13 +13,22 @@ func TestSetValue(t *testing.T) { type Outer struct { InnerField *Inner } + obj := &Outer{ InnerField: &Inner{ Field: "oldValue", }, } - err := SetValue(obj, "InnerField.Field", PathValue("newValue")) + v, err := GetValue[Outer](*obj, "InnerField.Field") + if err != nil { + t.Error(err) + } + + assert.Equal(t, v, PathValue("oldValue")) + + nv := PathValue("newValue") + err = SetValue[*Outer](obj, "InnerField.Field", nv) if err != nil { t.Fatalf("unexpected error: %v", err) } @@ -37,4 +36,12 @@ func TestSetValue(t *testing.T) { if obj.InnerField.Field != "newValue" { t.Fatalf("expected newValue, got: %s", obj.InnerField.Field) } + + v, err = GetValue[Outer](*obj, "InnerField.Field") + if err != nil { + t.Error(err) + } + + assert.Equal(t, v, nv) + } diff --git a/set.go b/set.go index 1c2babb1eca4db438c852ce643926da170b51861..1c1a387e62734d9361286e3fd1d1757285082b65 100644 --- a/set.go +++ b/set.go @@ -51,7 +51,14 @@ func SetValue[D any](obj D, keyWithDots string, newValue any) error { return newCannotSetError("Wert ist nicht adressierbar") } newKey := strings.Join(keySlice[keyIndex+1:], ".") - return SetValue(newValueCopyPtr, newKey, newValue) + err := SetValue(newValueCopyPtr, newKey, newValue) + if err != nil { + return err + } + + v.SetMapIndex(reflect.ValueOf(key), reflect.ValueOf(newValueCopy).Elem()) + return nil + } if v.Kind() == reflect.Ptr && v.Elem().Kind() == reflect.Interface {