Add test confirming json merge behavior

This commit is contained in:
Ole Markus With 2022-09-25 13:44:38 +02:00
parent befd283381
commit 8042756967
2 changed files with 41 additions and 0 deletions

View File

@ -44,6 +44,7 @@ func IsMethodNotFound(err error) bool {
// JSONMergeStruct merges src into dest
// It uses a JSON marshal & unmarshal, so only fields that are JSON-visible will be copied
// If both source and destination has a value for a field, source takes presedence
func JSONMergeStruct(dest, src interface{}) {
// Not the most efficient approach, but simple & relatively well defined
j, err := json.Marshal(src)

View File

@ -0,0 +1,40 @@
/*
Copyright 2022 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package reflectutils
import "testing"
type testStruct struct {
Value string `json:"value,omitempty"`
}
func Test_Merge(t *testing.T) {
source := testStruct{
Value: "foo",
}
destination := testStruct{
Value: "bar",
}
JSONMergeStruct(&destination, &source)
// verify source value overrides destination
if destination.Value != "foo" {
t.Errorf("unexpected value: %s", destination.Value)
}
}