131 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			131 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
| package maputil
 | |
| 
 | |
| import "testing"
 | |
| 
 | |
| func TestMapUtil_StrKeys(t *testing.T) {
 | |
| 	m := map[string]interface{}{
 | |
| 		"a": []interface{}{
 | |
| 			map[string]interface{}{
 | |
| 				"b": []interface{}{
 | |
| 					map[string]interface{}{
 | |
| 						"c": "C",
 | |
| 					},
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	r, err := CastKeysToStrings(m)
 | |
| 	if err != nil {
 | |
| 		t.Fatalf("unexpected error: %v", err)
 | |
| 	}
 | |
| 
 | |
| 	a := r["a"].([]interface{})
 | |
| 	a0 := a[0].(map[string]interface{})
 | |
| 	b := a0["b"].([]interface{})
 | |
| 	b0 := b[0].(map[string]interface{})
 | |
| 	c := b0["c"]
 | |
| 
 | |
| 	if c != "C" {
 | |
| 		t.Errorf("unexpected c: expected=C, got=%s", c)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestMapUtil_IFKeys(t *testing.T) {
 | |
| 	m := map[interface{}]interface{}{
 | |
| 		"a": []interface{}{
 | |
| 			map[interface{}]interface{}{
 | |
| 				"b": []interface{}{
 | |
| 					map[interface{}]interface{}{
 | |
| 						"c": "C",
 | |
| 					},
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	r, err := CastKeysToStrings(m)
 | |
| 	if err != nil {
 | |
| 		t.Fatalf("unexpected error: %v", err)
 | |
| 	}
 | |
| 
 | |
| 	a := r["a"].([]interface{})
 | |
| 	a0 := a[0].(map[string]interface{})
 | |
| 	b := a0["b"].([]interface{})
 | |
| 	b0 := b[0].(map[string]interface{})
 | |
| 	c := b0["c"]
 | |
| 
 | |
| 	if c != "C" {
 | |
| 		t.Errorf("unexpected c: expected=C, got=%s", c)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestMapUtil_KeyArg(t *testing.T) {
 | |
| 	m := map[string]interface{}{}
 | |
| 
 | |
| 	key := []string{"a", "b", "c"}
 | |
| 
 | |
| 	Set(m, key, "C")
 | |
| 
 | |
| 	c := (((m["a"].(map[string]interface{}))["b"]).(map[string]interface{}))["c"]
 | |
| 
 | |
| 	if c != "C" {
 | |
| 		t.Errorf("unexpected c: expected=C, got=%s", c)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestMapUtil_IndexedKeyArg(t *testing.T) {
 | |
| 	m := map[string]interface{}{}
 | |
| 
 | |
| 	key := []string{"a", "b[0]", "c"}
 | |
| 
 | |
| 	Set(m, key, "C")
 | |
| 
 | |
| 	c := (((m["a"].(map[string]interface{}))["b"].([]interface{}))[0].(map[string]interface{}))["c"]
 | |
| 
 | |
| 	if c != "C" {
 | |
| 		t.Errorf("unexpected c: expected=C, got=%s", c)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| type parseKeyTc struct {
 | |
| 	key    string
 | |
| 	result map[int]string
 | |
| }
 | |
| 
 | |
| func TestMapUtil_ParseKey(t *testing.T) {
 | |
| 	tcs := []parseKeyTc{
 | |
| 		{
 | |
| 			key: `a.b.c`,
 | |
| 			result: map[int]string{
 | |
| 				0: "a",
 | |
| 				1: "b",
 | |
| 				2: "c",
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			key: `a\.b.c`,
 | |
| 			result: map[int]string{
 | |
| 				0: "a.b",
 | |
| 				1: "c",
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			key: `a\.b\.c`,
 | |
| 			result: map[int]string{
 | |
| 				0: "a.b.c",
 | |
| 			},
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	for _, tc := range tcs {
 | |
| 		parts := ParseKey(tc.key)
 | |
| 
 | |
| 		for index, value := range tc.result {
 | |
| 			if parts[index] != value {
 | |
| 				t.Errorf("unexpected key part[%d]: expected=%s, got=%s", index, value, parts[index])
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| }
 |