136 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package reflect
 | |
| 
 | |
| import (
 | |
| 	"testing"
 | |
| )
 | |
| 
 | |
| func TestFieldName(t *testing.T) {
 | |
| 	src := "SomeVar"
 | |
| 	chk := "some_var"
 | |
| 	dst := FieldName(src)
 | |
| 	if dst != chk {
 | |
| 		t.Fatalf("FieldName error %s != %s", src, chk)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestMergeBool(t *testing.T) {
 | |
| 	type str struct {
 | |
| 		Bool bool `json:"bool"`
 | |
| 	}
 | |
| 
 | |
| 	mp := make(map[string]interface{})
 | |
| 	mp["bool"] = "true"
 | |
| 	s := &str{}
 | |
| 
 | |
| 	if err := Merge(s, mp, Tags([]string{"json"})); err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	if !s.Bool {
 | |
| 		t.Fatalf("merge bool error: %#+v\n", s)
 | |
| 	}
 | |
| 
 | |
| 	mp["bool"] = "false"
 | |
| 
 | |
| 	if err := Merge(s, mp, Tags([]string{"json"})); err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	if s.Bool {
 | |
| 		t.Fatalf("merge bool error: %#+v\n", s)
 | |
| 	}
 | |
| 
 | |
| 	mp["bool"] = 1
 | |
| 
 | |
| 	if err := Merge(s, mp, Tags([]string{"json"})); err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	if !s.Bool {
 | |
| 		t.Fatalf("merge bool error: %#+v\n", s)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestMergeString(t *testing.T) {
 | |
| 	type str struct {
 | |
| 		Bool string `json:"bool"`
 | |
| 	}
 | |
| 
 | |
| 	mp := make(map[string]interface{})
 | |
| 	mp["bool"] = true
 | |
| 	s := &str{}
 | |
| 
 | |
| 	if err := Merge(s, mp, Tags([]string{"json"})); err != nil {
 | |
| 		t.Fatalf("merge with true err: %v", err)
 | |
| 	}
 | |
| 
 | |
| 	if s.Bool != "true" {
 | |
| 		t.Fatalf("merge bool error: %#+v\n", s)
 | |
| 	}
 | |
| 
 | |
| 	mp["bool"] = false
 | |
| 	if err := Merge(s, mp, Tags([]string{"json"})); err != nil {
 | |
| 		t.Fatalf("merge with falst err: %v", err)
 | |
| 	}
 | |
| 
 | |
| 	if s.Bool != "false" {
 | |
| 		t.Fatalf("merge bool error: %#+v\n", s)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestMergeNested(t *testing.T) {
 | |
| 	type CallReqNested struct {
 | |
| 		StringArgs []string       `json:"string_args"`
 | |
| 		Uint64Args []uint64       `json:"uint64_args"`
 | |
| 		Nested     *CallReqNested `json:"nested2"`
 | |
| 	}
 | |
| 
 | |
| 	type CallReq struct {
 | |
| 		Name   string         `json:"name"`
 | |
| 		Req    string         `json:"req"`
 | |
| 		Arg2   int            `json:"arg2"`
 | |
| 		Nested *CallReqNested `json:"nested"`
 | |
| 	}
 | |
| 
 | |
| 	dst := &CallReq{
 | |
| 		Name: "name_old",
 | |
| 		Req:  "req_old",
 | |
| 	}
 | |
| 
 | |
| 	mp := make(map[string]interface{})
 | |
| 	mp["name"] = "name_new"
 | |
| 	mp["req"] = "req_new"
 | |
| 	mp["arg2"] = 1
 | |
| 	mp["nested.string_args"] = []string{"args1", "args2"}
 | |
| 	mp["nested.uint64_args"] = []uint64{1, 2, 3}
 | |
| 	mp["nested.nested2.uint64_args"] = []uint64{1, 2, 3}
 | |
| 
 | |
| 	mp = FlattenMap(mp)
 | |
| 
 | |
| 	if err := Merge(dst, mp, Tags([]string{"json"})); err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	if dst.Name != "name_new" || dst.Req != "req_new" || dst.Arg2 != 1 {
 | |
| 		t.Fatalf("merge error: %#+v", dst)
 | |
| 	}
 | |
| 
 | |
| 	if dst.Nested == nil || len(dst.Nested.Uint64Args) != 3 ||
 | |
| 		len(dst.Nested.StringArgs) != 2 || dst.Nested.StringArgs[0] != "args1" ||
 | |
| 		len(dst.Nested.Uint64Args) != 3 || dst.Nested.Uint64Args[2] != 3 {
 | |
| 		t.Fatalf("merge error: %#+v", dst.Nested)
 | |
| 	}
 | |
| 
 | |
| 	nmp := make(map[string]interface{})
 | |
| 	nmp["nested.uint64_args"] = []uint64{4}
 | |
| 	nmp = FlattenMap(nmp)
 | |
| 
 | |
| 	if err := Merge(dst, nmp, SliceAppend(true), Tags([]string{"json"})); err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	if dst.Nested == nil || len(dst.Nested.Uint64Args) != 4 || dst.Nested.Uint64Args[3] != 4 {
 | |
| 		t.Fatalf("merge error: %#+v", dst.Nested)
 | |
| 	}
 | |
| }
 |