154 lines
4.6 KiB
Go
154 lines
4.6 KiB
Go
package copierutil
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"google.golang.org/protobuf/types/known/timestamppb"
|
|
|
|
"github.com/tx7do/go-utils/timeutil"
|
|
"github.com/tx7do/go-utils/trans"
|
|
)
|
|
|
|
func TestNewTypeConverter(t *testing.T) {
|
|
srcType := &time.Time{}
|
|
dstType := trans.Ptr("")
|
|
fn := func(src interface{}) (interface{}, error) {
|
|
return timeutil.TimeToTimeString(src.(*time.Time)), nil
|
|
}
|
|
|
|
converter := NewTypeConverter(srcType, dstType, fn)
|
|
|
|
// 验证转换器的类型
|
|
assert.IsType(t, srcType, converter.SrcType)
|
|
assert.IsType(t, dstType, converter.DstType)
|
|
|
|
// 验证转换器的功能
|
|
result, err := converter.Fn(&time.Time{})
|
|
assert.NoError(t, err)
|
|
assert.IsType(t, dstType, result)
|
|
}
|
|
|
|
func TestNewTypeConverterPair(t *testing.T) {
|
|
srcType := &time.Time{}
|
|
dstType := trans.Ptr("")
|
|
fromFn := func(src interface{}) (interface{}, error) {
|
|
return timeutil.TimeToTimeString(src.(*time.Time)), nil
|
|
}
|
|
toFn := func(src interface{}) (interface{}, error) {
|
|
return timeutil.StringTimeToTime(src.(*string)), nil
|
|
}
|
|
|
|
converters := NewTypeConverterPair(srcType, dstType, fromFn, toFn)
|
|
assert.Len(t, converters, 2, "expected 2 converters")
|
|
|
|
// 验证第一个转换器
|
|
assert.IsType(t, srcType, converters[0].SrcType)
|
|
assert.IsType(t, dstType, converters[0].DstType)
|
|
result, err := converters[0].Fn(&time.Time{})
|
|
assert.NoError(t, err)
|
|
assert.IsType(t, dstType, result)
|
|
|
|
// 验证第二个转换器
|
|
assert.IsType(t, dstType, converters[1].SrcType)
|
|
assert.IsType(t, srcType, converters[1].DstType)
|
|
result, err = converters[1].Fn(trans.Ptr(""))
|
|
assert.NoError(t, err)
|
|
assert.IsType(t, srcType, result)
|
|
}
|
|
|
|
func TestNewGenericTypeConverterPair(t *testing.T) {
|
|
srcType := &time.Time{}
|
|
dstType := trans.Ptr("")
|
|
fromFn := timeutil.TimeToTimeString
|
|
toFn := timeutil.StringTimeToTime
|
|
|
|
converters := NewGenericTypeConverterPair(srcType, dstType, fromFn, toFn)
|
|
assert.Len(t, converters, 2, "expected 2 converters")
|
|
|
|
// 验证第一个转换器
|
|
assert.IsType(t, srcType, converters[0].SrcType)
|
|
assert.IsType(t, dstType, converters[0].DstType)
|
|
result, err := converters[0].Fn(&time.Time{})
|
|
assert.NoError(t, err)
|
|
assert.IsType(t, dstType, result)
|
|
|
|
// 验证第二个转换器
|
|
assert.IsType(t, dstType, converters[1].SrcType)
|
|
assert.IsType(t, srcType, converters[1].DstType)
|
|
result, err = converters[1].Fn(trans.Ptr(""))
|
|
assert.NoError(t, err)
|
|
assert.IsType(t, srcType, result)
|
|
}
|
|
|
|
func TestNewErrorHandlingGenericTypeConverterPair(t *testing.T) {
|
|
srcType := &time.Time{}
|
|
dstType := trans.Ptr("")
|
|
fromFn := func(src *time.Time) (*string, error) {
|
|
return timeutil.TimeToTimeString(src), nil
|
|
}
|
|
toFn := func(src *string) (*time.Time, error) {
|
|
return timeutil.StringTimeToTime(src), nil
|
|
}
|
|
|
|
converters := NewErrorHandlingGenericTypeConverterPair(srcType, dstType, fromFn, toFn)
|
|
assert.Len(t, converters, 2, "expected 2 converters")
|
|
|
|
// 验证第一个转换器
|
|
assert.IsType(t, srcType, converters[0].SrcType)
|
|
assert.IsType(t, dstType, converters[0].DstType)
|
|
result, err := converters[0].Fn(&time.Time{})
|
|
assert.NoError(t, err)
|
|
assert.IsType(t, dstType, result)
|
|
|
|
// 验证第二个转换器
|
|
assert.IsType(t, dstType, converters[1].SrcType)
|
|
assert.IsType(t, srcType, converters[1].DstType)
|
|
result, err = converters[1].Fn(trans.Ptr(""))
|
|
assert.NoError(t, err)
|
|
assert.IsType(t, srcType, result)
|
|
}
|
|
|
|
func TestNewTimeStringConverterPair(t *testing.T) {
|
|
converters := NewTimeStringConverterPair()
|
|
assert.Len(t, converters, 2, "expected 2 converters")
|
|
|
|
// 验证第一个转换器
|
|
srcType := &time.Time{}
|
|
dstType := trans.Ptr("")
|
|
assert.IsType(t, srcType, converters[0].SrcType)
|
|
assert.IsType(t, dstType, converters[0].DstType)
|
|
result, err := converters[0].Fn(&time.Time{})
|
|
assert.NoError(t, err)
|
|
assert.IsType(t, dstType, result)
|
|
|
|
// 验证第二个转换器
|
|
assert.IsType(t, dstType, converters[1].SrcType)
|
|
assert.IsType(t, srcType, converters[1].DstType)
|
|
result, err = converters[1].Fn(trans.Ptr(""))
|
|
assert.NoError(t, err)
|
|
assert.IsType(t, srcType, result)
|
|
}
|
|
|
|
func TestNewTimeTimestamppbConverterPair(t *testing.T) {
|
|
converters := NewTimeTimestamppbConverterPair()
|
|
assert.Len(t, converters, 2, "expected 2 converters")
|
|
|
|
// 验证第一个转换器
|
|
srcType := &time.Time{}
|
|
dstType := ×tamppb.Timestamp{}
|
|
assert.IsType(t, srcType, converters[0].SrcType)
|
|
assert.IsType(t, dstType, converters[0].DstType)
|
|
result, err := converters[0].Fn(&time.Time{})
|
|
assert.NoError(t, err)
|
|
assert.IsType(t, dstType, result)
|
|
|
|
// 验证第二个转换器
|
|
assert.IsType(t, dstType, converters[1].SrcType)
|
|
assert.IsType(t, srcType, converters[1].DstType)
|
|
result, err = converters[1].Fn(×tamppb.Timestamp{})
|
|
assert.NoError(t, err)
|
|
assert.IsType(t, srcType, result)
|
|
}
|