|
|
@@ -5,6 +5,7 @@ import (
|
|
|
"git.sxidc.com/go-tools/utils/strutils"
|
|
|
"github.com/pkg/errors"
|
|
|
"math/rand"
|
|
|
+ "strings"
|
|
|
"testing"
|
|
|
"time"
|
|
|
)
|
|
|
@@ -731,51 +732,54 @@ func TestAssignTagDefaultUsage(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
type AssignTagFromSlice struct {
|
|
|
- BasicField string `assign:"toField:BasicField"`
|
|
|
- BasicSliceField []string `assign:"toField:BasicSliceField"`
|
|
|
- TimeSliceField []time.Time `assign:"toField:TimeSliceField"`
|
|
|
- StructSliceField []AssignTagFrom `assign:"toField:StructSliceField"`
|
|
|
- MapSliceField []map[string]string `assign:"toField:MapSliceField"`
|
|
|
- ChanSliceField []chan any `assign:"toField:ChanSliceField"`
|
|
|
- FuncSliceField []func() string `assign:"toField:FuncSliceField"`
|
|
|
- BasicPointerSliceField []*string `assign:"toField:BasicPointerSliceField"`
|
|
|
- TimePointerSliceField []*time.Time `assign:"toField:TimePointerSliceField"`
|
|
|
- StructPointerSliceField []*AssignTagFrom `assign:"toField:StructPointerSliceField"`
|
|
|
- MapPointerSliceField []*map[string]string `assign:"toField:MapPointerSliceField"`
|
|
|
- ChanPointerSliceField []*chan any `assign:"toField:ChanPointerSliceField"`
|
|
|
- FuncPointerSliceField []*func() string `assign:"toField:FuncPointerSliceField"`
|
|
|
+ BasicField string `assign:"toField:BasicField"`
|
|
|
+ BasicSliceField []string `assign:"toField:BasicSliceField"`
|
|
|
+ TimeSliceField []time.Time `assign:"toField:TimeSliceField"`
|
|
|
+ StructSliceField []AssignTagFrom `assign:"toField:StructSliceField"`
|
|
|
+ MapSliceField []map[string]string `assign:"toField:MapSliceField"`
|
|
|
+ ChanSliceField []chan any `assign:"toField:ChanSliceField"`
|
|
|
+ FuncSliceField []func() string `assign:"toField:FuncSliceField"`
|
|
|
+ BasicPointerSliceField []*string `assign:"toField:BasicPointerSliceField"`
|
|
|
+ TimePointerSliceField []*time.Time `assign:"toField:TimePointerSliceField"`
|
|
|
+ StructPointerSliceField []*AssignTagFrom `assign:"toField:StructPointerSliceField"`
|
|
|
+ MapPointerSliceField []*map[string]string `assign:"toField:MapPointerSliceField"`
|
|
|
+ ChanPointerSliceField []*chan any `assign:"toField:ChanPointerSliceField"`
|
|
|
+ FuncPointerSliceField []*func() string `assign:"toField:FuncPointerSliceField"`
|
|
|
+ FromStringSliceToStringField []string `assign:"toField:FromStringSliceToStringField"`
|
|
|
}
|
|
|
|
|
|
type AssignTagFromSlicePointerField struct {
|
|
|
- BasicField *string `assign:"toField:BasicField"`
|
|
|
- BasicSliceField *[]string `assign:"toField:BasicSliceField"`
|
|
|
- TimeSliceField *[]time.Time `assign:"toField:TimeSliceField"`
|
|
|
- StructSliceField *[]AssignTagFrom `assign:"toField:StructSliceField"`
|
|
|
- MapSliceField *[]map[string]string `assign:"toField:MapSliceField"`
|
|
|
- ChanSliceField *[]chan any `assign:"toField:ChanSliceField"`
|
|
|
- FuncSliceField *[]func() string `assign:"toField:FuncSliceField"`
|
|
|
- BasicPointerSliceField *[]*string `assign:"toField:BasicPointerSliceField"`
|
|
|
- TimePointerSliceField *[]*time.Time `assign:"toField:TimePointerSliceField"`
|
|
|
- StructPointerSliceField *[]*AssignTagFrom `assign:"toField:StructPointerSliceField"`
|
|
|
- MapPointerSliceField *[]*map[string]string `assign:"toField:MapPointerSliceField"`
|
|
|
- ChanPointerSliceField *[]*chan any `assign:"toField:ChanPointerSliceField"`
|
|
|
- FuncPointerSliceField *[]*func() string `assign:"toField:FuncPointerSliceField"`
|
|
|
+ BasicField *string `assign:"toField:BasicField"`
|
|
|
+ BasicSliceField *[]string `assign:"toField:BasicSliceField"`
|
|
|
+ TimeSliceField *[]time.Time `assign:"toField:TimeSliceField"`
|
|
|
+ StructSliceField *[]AssignTagFrom `assign:"toField:StructSliceField"`
|
|
|
+ MapSliceField *[]map[string]string `assign:"toField:MapSliceField"`
|
|
|
+ ChanSliceField *[]chan any `assign:"toField:ChanSliceField"`
|
|
|
+ FuncSliceField *[]func() string `assign:"toField:FuncSliceField"`
|
|
|
+ BasicPointerSliceField *[]*string `assign:"toField:BasicPointerSliceField"`
|
|
|
+ TimePointerSliceField *[]*time.Time `assign:"toField:TimePointerSliceField"`
|
|
|
+ StructPointerSliceField *[]*AssignTagFrom `assign:"toField:StructPointerSliceField"`
|
|
|
+ MapPointerSliceField *[]*map[string]string `assign:"toField:MapPointerSliceField"`
|
|
|
+ ChanPointerSliceField *[]*chan any `assign:"toField:ChanPointerSliceField"`
|
|
|
+ FuncPointerSliceField *[]*func() string `assign:"toField:FuncPointerSliceField"`
|
|
|
+ FromStringSliceToStringField *[]string `assign:"toField:FromStringSliceToStringField"`
|
|
|
}
|
|
|
|
|
|
type AssignTagToSlice struct {
|
|
|
- BasicField string
|
|
|
- BasicSliceField []string
|
|
|
- TimeSliceField []time.Time
|
|
|
- StructSliceField []AssignTagTo
|
|
|
- MapSliceField []map[string]string
|
|
|
- ChanSliceField []chan any
|
|
|
- FuncSliceField []func() string
|
|
|
- BasicPointerSliceField []*string
|
|
|
- TimePointerSliceField []*time.Time
|
|
|
- StructPointerSliceField []*AssignTagFromSlice
|
|
|
- MapPointerSliceField []*map[string]string
|
|
|
- ChanPointerSliceField []*chan any
|
|
|
- FuncPointerSliceField []*func() string
|
|
|
+ BasicField string
|
|
|
+ BasicSliceField []string
|
|
|
+ TimeSliceField []time.Time
|
|
|
+ StructSliceField []AssignTagTo
|
|
|
+ MapSliceField []map[string]string
|
|
|
+ ChanSliceField []chan any
|
|
|
+ FuncSliceField []func() string
|
|
|
+ BasicPointerSliceField []*string
|
|
|
+ TimePointerSliceField []*time.Time
|
|
|
+ StructPointerSliceField []*AssignTagFromSlice
|
|
|
+ MapPointerSliceField []*map[string]string
|
|
|
+ ChanPointerSliceField []*chan any
|
|
|
+ FuncPointerSliceField []*func() string
|
|
|
+ FromStringSliceToStringField string
|
|
|
}
|
|
|
|
|
|
func (to AssignTagToSlice) checkFields(t *testing.T, from AssignTagFromSlice) {
|
|
|
@@ -865,6 +869,11 @@ func (to AssignTagToSlice) checkFields(t *testing.T, from AssignTagFromSlice) {
|
|
|
(*value)(), (*to.FuncPointerSliceField[i])()))
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ if strings.Join(from.FromStringSliceToStringField, "::") != to.FromStringSliceToStringField {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("FromStringSliceToStringField not equal: from %v, to %v",
|
|
|
+ strings.Join(from.FromStringSliceToStringField, "::"), to.FromStringSliceToStringField))
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
func (to AssignTagToSlice) checkNil(t *testing.T) {
|
|
|
@@ -919,22 +928,27 @@ func (to AssignTagToSlice) checkNil(t *testing.T) {
|
|
|
if to.FuncPointerSliceField != nil {
|
|
|
t.Fatalf("%+v\n", errors.Errorf("FuncPointerSliceField not nil"))
|
|
|
}
|
|
|
+
|
|
|
+ if to.FromStringSliceToStringField != "" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("FromStringSliceToStringField not zero"))
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
type AssignTagToSlicePointerField struct {
|
|
|
- BasicField *string
|
|
|
- BasicSliceField *[]string
|
|
|
- TimeSliceField *[]time.Time
|
|
|
- StructSliceField *[]AssignTagTo
|
|
|
- MapSliceField *[]map[string]string
|
|
|
- ChanSliceField *[]chan any
|
|
|
- FuncSliceField *[]func() string
|
|
|
- BasicPointerSliceField *[]*string
|
|
|
- TimePointerSliceField *[]*time.Time
|
|
|
- StructPointerSliceField *[]*AssignTagFromSlice
|
|
|
- MapPointerSliceField *[]*map[string]string
|
|
|
- ChanPointerSliceField *[]*chan any
|
|
|
- FuncPointerSliceField *[]*func() string
|
|
|
+ BasicField *string
|
|
|
+ BasicSliceField *[]string
|
|
|
+ TimeSliceField *[]time.Time
|
|
|
+ StructSliceField *[]AssignTagTo
|
|
|
+ MapSliceField *[]map[string]string
|
|
|
+ ChanSliceField *[]chan any
|
|
|
+ FuncSliceField *[]func() string
|
|
|
+ BasicPointerSliceField *[]*string
|
|
|
+ TimePointerSliceField *[]*time.Time
|
|
|
+ StructPointerSliceField *[]*AssignTagFromSlice
|
|
|
+ MapPointerSliceField *[]*map[string]string
|
|
|
+ ChanPointerSliceField *[]*chan any
|
|
|
+ FuncPointerSliceField *[]*func() string
|
|
|
+ FromStringSliceToStringField *string
|
|
|
}
|
|
|
|
|
|
func (to AssignTagToSlicePointerField) checkFields(t *testing.T, from AssignTagFromSlice) {
|
|
|
@@ -1024,6 +1038,11 @@ func (to AssignTagToSlicePointerField) checkFields(t *testing.T, from AssignTagF
|
|
|
(*value)(), (*(*to.FuncPointerSliceField)[i])()))
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ if strings.Join(from.FromStringSliceToStringField, "::") != *to.FromStringSliceToStringField {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("FromStringSliceToStringField not equal: from %v, to %v",
|
|
|
+ strings.Join(from.FromStringSliceToStringField, "::"), *to.FromStringSliceToStringField))
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
func (to AssignTagToSlicePointerField) checkNil(t *testing.T) {
|
|
|
@@ -1078,6 +1097,10 @@ func (to AssignTagToSlicePointerField) checkNil(t *testing.T) {
|
|
|
if to.FuncPointerSliceField != nil {
|
|
|
t.Fatalf("%+v\n", errors.Errorf("FuncPointerSliceField not nil"))
|
|
|
}
|
|
|
+
|
|
|
+ if to.FromStringSliceToStringField != nil {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("FromStringSliceToStringField not nil"))
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
func TestAssignTagDefaultUsageSlice(t *testing.T) {
|
|
|
@@ -1154,37 +1177,40 @@ func TestAssignTagDefaultUsageSlice(t *testing.T) {
|
|
|
mapPointerSliceField := []*map[string]string{&map1, &map2}
|
|
|
chanPointerSliceField := []*chan any{&chan1, &chan2}
|
|
|
funcPointerSliceField := []*func() string{&func1, &func2}
|
|
|
+ fromStringSliceToStringField := []string{str1, str2}
|
|
|
|
|
|
from := AssignTagFromSlice{
|
|
|
- BasicField: basicField,
|
|
|
- BasicSliceField: basicSliceField,
|
|
|
- TimeSliceField: timeSliceField,
|
|
|
- StructSliceField: structSliceField,
|
|
|
- MapSliceField: mapSliceField,
|
|
|
- ChanSliceField: chanSliceField,
|
|
|
- FuncSliceField: funcSliceField,
|
|
|
- BasicPointerSliceField: basicPointerSliceField,
|
|
|
- TimePointerSliceField: timePointerSliceField,
|
|
|
- StructPointerSliceField: structPointerSliceField,
|
|
|
- MapPointerSliceField: mapPointerSliceField,
|
|
|
- ChanPointerSliceField: chanPointerSliceField,
|
|
|
- FuncPointerSliceField: funcPointerSliceField,
|
|
|
+ BasicField: basicField,
|
|
|
+ BasicSliceField: basicSliceField,
|
|
|
+ TimeSliceField: timeSliceField,
|
|
|
+ StructSliceField: structSliceField,
|
|
|
+ MapSliceField: mapSliceField,
|
|
|
+ ChanSliceField: chanSliceField,
|
|
|
+ FuncSliceField: funcSliceField,
|
|
|
+ BasicPointerSliceField: basicPointerSliceField,
|
|
|
+ TimePointerSliceField: timePointerSliceField,
|
|
|
+ StructPointerSliceField: structPointerSliceField,
|
|
|
+ MapPointerSliceField: mapPointerSliceField,
|
|
|
+ ChanPointerSliceField: chanPointerSliceField,
|
|
|
+ FuncPointerSliceField: funcPointerSliceField,
|
|
|
+ FromStringSliceToStringField: fromStringSliceToStringField,
|
|
|
}
|
|
|
|
|
|
fromPointer := AssignTagFromSlicePointerField{
|
|
|
- BasicField: &basicField,
|
|
|
- BasicSliceField: &basicSliceField,
|
|
|
- TimeSliceField: &timeSliceField,
|
|
|
- StructSliceField: &structSliceField,
|
|
|
- MapSliceField: &mapSliceField,
|
|
|
- ChanSliceField: &chanSliceField,
|
|
|
- FuncSliceField: &funcSliceField,
|
|
|
- BasicPointerSliceField: &basicPointerSliceField,
|
|
|
- TimePointerSliceField: &timePointerSliceField,
|
|
|
- StructPointerSliceField: &structPointerSliceField,
|
|
|
- MapPointerSliceField: &mapPointerSliceField,
|
|
|
- ChanPointerSliceField: &chanPointerSliceField,
|
|
|
- FuncPointerSliceField: &funcPointerSliceField,
|
|
|
+ BasicField: &basicField,
|
|
|
+ BasicSliceField: &basicSliceField,
|
|
|
+ TimeSliceField: &timeSliceField,
|
|
|
+ StructSliceField: &structSliceField,
|
|
|
+ MapSliceField: &mapSliceField,
|
|
|
+ ChanSliceField: &chanSliceField,
|
|
|
+ FuncSliceField: &funcSliceField,
|
|
|
+ BasicPointerSliceField: &basicPointerSliceField,
|
|
|
+ TimePointerSliceField: &timePointerSliceField,
|
|
|
+ StructPointerSliceField: &structPointerSliceField,
|
|
|
+ MapPointerSliceField: &mapPointerSliceField,
|
|
|
+ ChanPointerSliceField: &chanPointerSliceField,
|
|
|
+ FuncPointerSliceField: &funcPointerSliceField,
|
|
|
+ FromStringSliceToStringField: &fromStringSliceToStringField,
|
|
|
}
|
|
|
|
|
|
fromPointerNil := AssignTagFromPointerField{}
|