github.com/coveo/gotemplate@v2.7.7+incompatible/utils/reflect_test.go (about) 1 package utils 2 3 import ( 4 "reflect" 5 "testing" 6 7 "github.com/coveo/gotemplate/collections" 8 "github.com/coveo/gotemplate/collections/implementation" 9 ) 10 11 func TestMergeDictionaries(t *testing.T) { 12 collections.DictionaryHelper = implementation.DictionaryHelper 13 collections.ListHelper = implementation.GenericListHelper 14 map1 := map[string]interface{}{ 15 "int": 1000, 16 "Add1Int": 1, 17 "Add1String": "string", 18 "Add1Boolean": true, 19 "Boolean": true, 20 "map": map[string]interface{}{ 21 "AddBoolean1": false, 22 "Boolean": true, 23 "Boolean2": false, 24 }, 25 } 26 map2 := map[string]interface{}{ 27 "int": 2000, 28 "Add2Int": 2, 29 "Add2String": "string", 30 "Add2Boolean": true, 31 "Boolean": false, 32 "map": map[string]interface{}{ 33 "AddBoolean2": true, 34 "Boolean": false, 35 "Boolean2": true, 36 "sub1": 2, 37 "newVal": "NewValue", 38 }, 39 } 40 map3 := map[string]interface{}{ 41 "Add3Int": 2, 42 "Boolean": false, 43 "map": map[string]interface{}{ 44 "AddBoolean3": true, 45 "Boolean": false, 46 }, 47 } 48 tests := []struct { 49 name string 50 args []map[string]interface{} 51 want map[string]interface{} 52 wantErr bool 53 }{ 54 {"Empty", nil, map[string]interface{}{}, false}, 55 {"Add 1", []map[string]interface{}{map1}, map1, false}, 56 {"Add empty to 1", []map[string]interface{}{map1, map[string]interface{}{}}, map1, false}, 57 {"Add nil to 1", []map[string]interface{}{map1, nil}, map1, false}, 58 {"Add 2 to 1", []map[string]interface{}{map1, map2}, map[string]interface{}{ 59 "int": 1000, 60 "Add1Int": 1, 61 "Add2Int": 2, 62 "Add1String": "string", 63 "Add2String": "string", 64 "Add1Boolean": true, 65 "Add2Boolean": true, 66 "Boolean": true, 67 "map": map[string]interface{}{ 68 "AddBoolean1": false, 69 "AddBoolean2": true, 70 "Boolean": true, 71 "Boolean2": false, 72 "sub1": 2, 73 "newVal": "NewValue", 74 }, 75 }, false}, 76 {"Add 1 to 2", []map[string]interface{}{map2, map1}, map[string]interface{}{ 77 "int": 2000, 78 "Add1Int": 1, 79 "Add2Int": 2, 80 "Add1String": "string", 81 "Add2String": "string", 82 "Add1Boolean": true, 83 "Add2Boolean": true, 84 "Boolean": false, 85 "map": map[string]interface{}{ 86 "AddBoolean1": false, 87 "AddBoolean2": true, 88 "Boolean": false, 89 "Boolean2": true, 90 "sub1": 2, 91 "newVal": "NewValue", 92 }, 93 }, false}, 94 {"Add 1 to 2 to 3", []map[string]interface{}{map3, map2, map1}, map[string]interface{}{ 95 "int": 2000, 96 "Boolean": false, 97 "Add1Boolean": true, 98 "Add1Int": 1, 99 "Add1String": "string", 100 "Add2Boolean": true, 101 "Add2Int": 2, 102 "Add2String": "string", 103 "Add3Int": 2, 104 "map": map[string]interface{}{ 105 "AddBoolean1": false, 106 "AddBoolean2": true, 107 "AddBoolean3": true, 108 "Boolean": false, 109 "Boolean2": true, 110 "sub1": 2, 111 "newVal": "NewValue", 112 }, 113 }, false}, 114 } 115 for _, tt := range tests { 116 t.Run(tt.name, func(t *testing.T) { 117 got, err := MergeDictionaries(tt.args...) 118 if (err != nil) != tt.wantErr { 119 t.Errorf("MergeDictionaries() error = %v, wantErr %v", err, tt.wantErr) 120 return 121 } 122 if !reflect.DeepEqual(got, tt.want) { 123 t.Errorf("MergeDictionaries():\n got %v\nwant %v", got, tt.want) 124 } 125 }) 126 } 127 }