From 67b77c9395efcf02bf27fd0af9776d7fbdc5ffeb Mon Sep 17 00:00:00 2001 From: notoriaga Date: Wed, 6 Sep 2023 10:59:35 -0700 Subject: [PATCH 1/3] don't modify input when converting to orderedmap Signed-off-by: notoriaga --- pkg/orderedmap/convert.go | 11 ++++++----- pkg/orderedmap/convert_test.go | 23 +++++++++++++++++++++++ 2 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 pkg/orderedmap/convert_test.go diff --git a/pkg/orderedmap/convert.go b/pkg/orderedmap/convert.go index 61ea5d1f..33618307 100644 --- a/pkg/orderedmap/convert.go +++ b/pkg/orderedmap/convert.go @@ -70,20 +70,21 @@ func (c Conversion) fromUnorderedMaps(object interface{}) interface{} { panic("Expected map[interface{}]interface{} instead of *unordered.Map in fromUnorderedMaps") case []interface{}: + result := make([]interface{}, len(typedObj)) for i, item := range typedObj { - typedObj[i] = c.fromUnorderedMaps(item) + result[i] = c.fromUnorderedMaps(item) } - return typedObj + return result // some sources (e.g. toml library) yield specific type of slices. // slices in Go are not covariant, so each flavor of slice must have its own case, here. // process these exactly the same way we do for generic slices (prior case) case []map[string]interface{}: - resultArray := make([]interface{}, len(typedObj)) + result := make([]interface{}, len(typedObj)) for i, item := range typedObj { - resultArray[i] = c.fromUnorderedMaps(item) + result[i] = c.fromUnorderedMaps(item) } - return resultArray + return result default: return typedObj } diff --git a/pkg/orderedmap/convert_test.go b/pkg/orderedmap/convert_test.go new file mode 100644 index 00000000..e95fbd17 --- /dev/null +++ b/pkg/orderedmap/convert_test.go @@ -0,0 +1,23 @@ +package orderedmap_test + +import ( + "reflect" + "testing" + + "github.com/vmware-tanzu/carvel-ytt/pkg/orderedmap" +) + +func TestFromUnorderedMaps(t *testing.T) { + inputA := map[string]interface{}{ + "key": []interface{}{map[string]interface{}{"nestedKey": "nestedValue"}}, + } + inputB := map[string]interface{}{ + "key": []interface{}{map[string]interface{}{"nestedKey": "nestedValue"}}, + } + + orderedmap.Conversion{Object: inputA}.FromUnorderedMaps() + + if !reflect.DeepEqual(inputA, inputB) { + t.Errorf("Nested object was modified. Got: %v, Expected: %v", inputA, inputB) + } +} From 1b92636c2cc3e29beb8d025d54d1574d0daba9e6 Mon Sep 17 00:00:00 2001 From: notoriaga Date: Tue, 13 Feb 2024 12:48:02 -0800 Subject: [PATCH 2/3] add missing header Signed-off-by: notoriaga --- pkg/orderedmap/convert_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/orderedmap/convert_test.go b/pkg/orderedmap/convert_test.go index e95fbd17..32cf2de2 100644 --- a/pkg/orderedmap/convert_test.go +++ b/pkg/orderedmap/convert_test.go @@ -1,3 +1,5 @@ +// Copyright 2020 VMware, Inc. +// SPDX-License-Identifier: Apache-2.0 package orderedmap_test import ( From f2458e66e4664952620ea7e9501008e4b59a83c7 Mon Sep 17 00:00:00 2001 From: notoriaga Date: Thu, 15 Feb 2024 09:17:40 -0800 Subject: [PATCH 3/3] change import name Signed-off-by: notoriaga --- pkg/orderedmap/convert_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/orderedmap/convert_test.go b/pkg/orderedmap/convert_test.go index 32cf2de2..ca92ef2d 100644 --- a/pkg/orderedmap/convert_test.go +++ b/pkg/orderedmap/convert_test.go @@ -6,7 +6,7 @@ import ( "reflect" "testing" - "github.com/vmware-tanzu/carvel-ytt/pkg/orderedmap" + "carvel.dev/ytt/pkg/orderedmap" ) func TestFromUnorderedMaps(t *testing.T) {