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  }