package reflect import ( "net/url" "testing" ) func TestStructURLValues(t *testing.T) { type Str struct { Name string `json:"name"` Args []int `json:"args"` Str *Str `json:"str"` } val := &Str{Name: "test_name", Args: []int{1, 2, 3}, Str: &Str{Name: "nested_name"}} data, err := StructURLValues(val, "", []string{"json"}) if err != nil { t.Fatal(err) } if data.Get("name") != "test_name" { t.Fatalf("invalid data: %v", data) } } func TestURLSliceVars(t *testing.T) { u, err := url.Parse("http://localhost/v1/test/call/my_name?key=arg1&key=arg2&key=arg3") if err != nil { t.Fatal(err) } mp, err := URLMap(u.RawQuery) if err != nil { t.Fatal(err) } v, ok := mp["key"] if !ok { t.Fatalf("key not exists: %#+v", mp) } vm, ok := v.([]interface{}) if !ok { t.Fatalf("invalid key value") } if len(vm) != 3 { t.Fatalf("missing key value: %#+v", mp) } } func TestURLVars(t *testing.T) { u, err := url.Parse("http://localhost/v1/test/call/my_name?req=key&arg1=arg1&arg2=12345&nested.string_args=str1&nested.string_args=str2&arg2=54321") if err != nil { t.Fatal(err) } mp, err := URLMap(u.RawQuery) if err != nil { t.Fatal(err) } _ = mp } func TestIsZero(t *testing.T) { testStr1 := struct { Name string Value string Nested struct { NestedName string } }{ Name: "test_name", Value: "test_value", } testStr1.Nested.NestedName = "nested_name" if ok := IsZero(testStr1); ok { t.Fatalf("zero ret on non zero struct: %#+v", testStr1) } testStr1.Name = "" testStr1.Value = "" testStr1.Nested.NestedName = "" if ok := IsZero(testStr1); !ok { t.Fatalf("non zero ret on zero struct: %#+v", testStr1) } type testStr3 struct { Nested string } type testStr2 struct { Name string Nested *testStr3 } vtest := &testStr2{ Name: "test_name", Nested: &testStr3{Nested: "nested_name"}, } if ok := IsZero(vtest); ok { t.Fatalf("zero ret on non zero struct: %#+v", vtest) } vtest.Nested = nil vtest.Name = "" if ok := IsZero(vtest); !ok { t.Fatalf("non zero ret on zero struct: %#+v", vtest) } //t.Logf("XX %#+v\n", ok) }