gf/util/gconv/gconv_z_unit_all_test.go
2020-08-11 20:13:47 +08:00

1375 lines
42 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright 2019 gf Author(https://github.com/gogf/gf). All Rights Reserved.
//
// This Source Code Form is subject to the terms of the MIT License.
// If a copy of the MIT was not distributed with this file,
// You can obtain one at https://github.com/gogf/gf.
package gconv_test
import (
"testing"
"time"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/os/gtime"
"github.com/gogf/gf/test/gtest"
"github.com/gogf/gf/util/gconv"
)
type apiString interface {
String() string
}
type S struct {
}
func (s S) String() string {
return "22222"
}
type apiError interface {
Error() string
}
type S1 struct {
}
func (s1 S1) Error() string {
return "22222"
}
func Test_Bool_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
var i interface{} = nil
t.AssertEQ(gconv.Bool(i), false)
t.AssertEQ(gconv.Bool(false), false)
t.AssertEQ(gconv.Bool(nil), false)
t.AssertEQ(gconv.Bool(0), false)
t.AssertEQ(gconv.Bool("0"), false)
t.AssertEQ(gconv.Bool(""), false)
t.AssertEQ(gconv.Bool("false"), false)
t.AssertEQ(gconv.Bool("off"), false)
t.AssertEQ(gconv.Bool([]byte{}), false)
t.AssertEQ(gconv.Bool([]string{}), false)
t.AssertEQ(gconv.Bool([2]int{1, 2}), true)
t.AssertEQ(gconv.Bool([]interface{}{}), false)
t.AssertEQ(gconv.Bool([]map[int]int{}), false)
var countryCapitalMap = make(map[string]string)
/* map插入key - value对,各个国家对应的首都 */
countryCapitalMap["France"] = "巴黎"
countryCapitalMap["Italy"] = "罗马"
countryCapitalMap["Japan"] = "东京"
countryCapitalMap["India "] = "新德里"
t.AssertEQ(gconv.Bool(countryCapitalMap), true)
t.AssertEQ(gconv.Bool("1"), true)
t.AssertEQ(gconv.Bool("on"), true)
t.AssertEQ(gconv.Bool(1), true)
t.AssertEQ(gconv.Bool(123.456), true)
t.AssertEQ(gconv.Bool(boolStruct{}), true)
t.AssertEQ(gconv.Bool(&boolStruct{}), true)
})
}
func Test_Int_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
var i interface{} = nil
t.AssertEQ(gconv.Int(i), 0)
t.AssertEQ(gconv.Int(false), 0)
t.AssertEQ(gconv.Int(nil), 0)
t.Assert(gconv.Int(nil), 0)
t.AssertEQ(gconv.Int(0), 0)
t.AssertEQ(gconv.Int("0"), 0)
t.AssertEQ(gconv.Int(""), 0)
t.AssertEQ(gconv.Int("false"), 0)
t.AssertEQ(gconv.Int("off"), 0)
t.AssertEQ(gconv.Int([]byte{}), 0)
t.AssertEQ(gconv.Int([]string{}), 0)
t.AssertEQ(gconv.Int([2]int{1, 2}), 0)
t.AssertEQ(gconv.Int([]interface{}{}), 0)
t.AssertEQ(gconv.Int([]map[int]int{}), 0)
var countryCapitalMap = make(map[string]string)
/* map插入key - value对,各个国家对应的首都 */
countryCapitalMap["France"] = "巴黎"
countryCapitalMap["Italy"] = "罗马"
countryCapitalMap["Japan"] = "东京"
countryCapitalMap["India "] = "新德里"
t.AssertEQ(gconv.Int(countryCapitalMap), 0)
t.AssertEQ(gconv.Int("1"), 1)
t.AssertEQ(gconv.Int("on"), 0)
t.AssertEQ(gconv.Int(1), 1)
t.AssertEQ(gconv.Int(123.456), 123)
t.AssertEQ(gconv.Int(boolStruct{}), 0)
t.AssertEQ(gconv.Int(&boolStruct{}), 0)
})
}
func Test_Int8_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
var i interface{} = nil
t.Assert(gconv.Int8(i), int8(0))
t.AssertEQ(gconv.Int8(false), int8(0))
t.AssertEQ(gconv.Int8(nil), int8(0))
t.AssertEQ(gconv.Int8(0), int8(0))
t.AssertEQ(gconv.Int8("0"), int8(0))
t.AssertEQ(gconv.Int8(""), int8(0))
t.AssertEQ(gconv.Int8("false"), int8(0))
t.AssertEQ(gconv.Int8("off"), int8(0))
t.AssertEQ(gconv.Int8([]byte{}), int8(0))
t.AssertEQ(gconv.Int8([]string{}), int8(0))
t.AssertEQ(gconv.Int8([2]int{1, 2}), int8(0))
t.AssertEQ(gconv.Int8([]interface{}{}), int8(0))
t.AssertEQ(gconv.Int8([]map[int]int{}), int8(0))
var countryCapitalMap = make(map[string]string)
/* map插入key - value对,各个国家对应的首都 */
countryCapitalMap["France"] = "巴黎"
countryCapitalMap["Italy"] = "罗马"
countryCapitalMap["Japan"] = "东京"
countryCapitalMap["India "] = "新德里"
t.AssertEQ(gconv.Int8(countryCapitalMap), int8(0))
t.AssertEQ(gconv.Int8("1"), int8(1))
t.AssertEQ(gconv.Int8("on"), int8(0))
t.AssertEQ(gconv.Int8(int8(1)), int8(1))
t.AssertEQ(gconv.Int8(123.456), int8(123))
t.AssertEQ(gconv.Int8(boolStruct{}), int8(0))
t.AssertEQ(gconv.Int8(&boolStruct{}), int8(0))
})
}
func Test_Int16_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
var i interface{} = nil
t.Assert(gconv.Int16(i), int16(0))
t.AssertEQ(gconv.Int16(false), int16(0))
t.AssertEQ(gconv.Int16(nil), int16(0))
t.AssertEQ(gconv.Int16(0), int16(0))
t.AssertEQ(gconv.Int16("0"), int16(0))
t.AssertEQ(gconv.Int16(""), int16(0))
t.AssertEQ(gconv.Int16("false"), int16(0))
t.AssertEQ(gconv.Int16("off"), int16(0))
t.AssertEQ(gconv.Int16([]byte{}), int16(0))
t.AssertEQ(gconv.Int16([]string{}), int16(0))
t.AssertEQ(gconv.Int16([2]int{1, 2}), int16(0))
t.AssertEQ(gconv.Int16([]interface{}{}), int16(0))
t.AssertEQ(gconv.Int16([]map[int]int{}), int16(0))
var countryCapitalMap = make(map[string]string)
/* map插入key - value对,各个国家对应的首都 */
countryCapitalMap["France"] = "巴黎"
countryCapitalMap["Italy"] = "罗马"
countryCapitalMap["Japan"] = "东京"
countryCapitalMap["India "] = "新德里"
t.AssertEQ(gconv.Int16(countryCapitalMap), int16(0))
t.AssertEQ(gconv.Int16("1"), int16(1))
t.AssertEQ(gconv.Int16("on"), int16(0))
t.AssertEQ(gconv.Int16(int16(1)), int16(1))
t.AssertEQ(gconv.Int16(123.456), int16(123))
t.AssertEQ(gconv.Int16(boolStruct{}), int16(0))
t.AssertEQ(gconv.Int16(&boolStruct{}), int16(0))
})
}
func Test_Int32_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
var i interface{} = nil
t.Assert(gconv.Int32(i), int32(0))
t.AssertEQ(gconv.Int32(false), int32(0))
t.AssertEQ(gconv.Int32(nil), int32(0))
t.AssertEQ(gconv.Int32(0), int32(0))
t.AssertEQ(gconv.Int32("0"), int32(0))
t.AssertEQ(gconv.Int32(""), int32(0))
t.AssertEQ(gconv.Int32("false"), int32(0))
t.AssertEQ(gconv.Int32("off"), int32(0))
t.AssertEQ(gconv.Int32([]byte{}), int32(0))
t.AssertEQ(gconv.Int32([]string{}), int32(0))
t.AssertEQ(gconv.Int32([2]int{1, 2}), int32(0))
t.AssertEQ(gconv.Int32([]interface{}{}), int32(0))
t.AssertEQ(gconv.Int32([]map[int]int{}), int32(0))
var countryCapitalMap = make(map[string]string)
/* map插入key - value对,各个国家对应的首都 */
countryCapitalMap["France"] = "巴黎"
countryCapitalMap["Italy"] = "罗马"
countryCapitalMap["Japan"] = "东京"
countryCapitalMap["India "] = "新德里"
t.AssertEQ(gconv.Int32(countryCapitalMap), int32(0))
t.AssertEQ(gconv.Int32("1"), int32(1))
t.AssertEQ(gconv.Int32("on"), int32(0))
t.AssertEQ(gconv.Int32(int32(1)), int32(1))
t.AssertEQ(gconv.Int32(123.456), int32(123))
t.AssertEQ(gconv.Int32(boolStruct{}), int32(0))
t.AssertEQ(gconv.Int32(&boolStruct{}), int32(0))
})
}
func Test_Int64_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
var i interface{} = nil
t.AssertEQ(gconv.Int64("0x00e"), int64(14))
t.Assert(gconv.Int64("022"), int64(18))
t.Assert(gconv.Int64(i), int64(0))
t.Assert(gconv.Int64(true), 1)
t.Assert(gconv.Int64("1"), int64(1))
t.Assert(gconv.Int64("0"), int64(0))
t.Assert(gconv.Int64("X"), int64(0))
t.Assert(gconv.Int64("x"), int64(0))
t.Assert(gconv.Int64(int64(1)), int64(1))
t.Assert(gconv.Int64(int(0)), int64(0))
t.Assert(gconv.Int64(int8(0)), int64(0))
t.Assert(gconv.Int64(int16(0)), int64(0))
t.Assert(gconv.Int64(int32(0)), int64(0))
t.Assert(gconv.Int64(uint64(0)), int64(0))
t.Assert(gconv.Int64(uint32(0)), int64(0))
t.Assert(gconv.Int64(uint16(0)), int64(0))
t.Assert(gconv.Int64(uint8(0)), int64(0))
t.Assert(gconv.Int64(uint(0)), int64(0))
t.Assert(gconv.Int64(float32(0)), int64(0))
t.AssertEQ(gconv.Int64(false), int64(0))
t.AssertEQ(gconv.Int64(nil), int64(0))
t.AssertEQ(gconv.Int64(0), int64(0))
t.AssertEQ(gconv.Int64("0"), int64(0))
t.AssertEQ(gconv.Int64(""), int64(0))
t.AssertEQ(gconv.Int64("false"), int64(0))
t.AssertEQ(gconv.Int64("off"), int64(0))
t.AssertEQ(gconv.Int64([]byte{}), int64(0))
t.AssertEQ(gconv.Int64([]string{}), int64(0))
t.AssertEQ(gconv.Int64([2]int{1, 2}), int64(0))
t.AssertEQ(gconv.Int64([]interface{}{}), int64(0))
t.AssertEQ(gconv.Int64([]map[int]int{}), int64(0))
var countryCapitalMap = make(map[string]string)
/* map插入key - value对,各个国家对应的首都 */
countryCapitalMap["France"] = "巴黎"
countryCapitalMap["Italy"] = "罗马"
countryCapitalMap["Japan"] = "东京"
countryCapitalMap["India "] = "新德里"
t.AssertEQ(gconv.Int64(countryCapitalMap), int64(0))
t.AssertEQ(gconv.Int64("1"), int64(1))
t.AssertEQ(gconv.Int64("on"), int64(0))
t.AssertEQ(gconv.Int64(int64(1)), int64(1))
t.AssertEQ(gconv.Int64(123.456), int64(123))
t.AssertEQ(gconv.Int64(boolStruct{}), int64(0))
t.AssertEQ(gconv.Int64(&boolStruct{}), int64(0))
})
}
func Test_Uint_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
var i interface{} = nil
t.AssertEQ(gconv.Uint(i), uint(0))
t.AssertEQ(gconv.Uint(false), uint(0))
t.AssertEQ(gconv.Uint(nil), uint(0))
t.Assert(gconv.Uint(nil), uint(0))
t.AssertEQ(gconv.Uint(uint(0)), uint(0))
t.AssertEQ(gconv.Uint("0"), uint(0))
t.AssertEQ(gconv.Uint(""), uint(0))
t.AssertEQ(gconv.Uint("false"), uint(0))
t.AssertEQ(gconv.Uint("off"), uint(0))
t.AssertEQ(gconv.Uint([]byte{}), uint(0))
t.AssertEQ(gconv.Uint([]string{}), uint(0))
t.AssertEQ(gconv.Uint([2]int{1, 2}), uint(0))
t.AssertEQ(gconv.Uint([]interface{}{}), uint(0))
t.AssertEQ(gconv.Uint([]map[int]int{}), uint(0))
var countryCapitalMap = make(map[string]string)
/* map插入key - value对,各个国家对应的首都 */
countryCapitalMap["France"] = "巴黎"
countryCapitalMap["Italy"] = "罗马"
countryCapitalMap["Japan"] = "东京"
countryCapitalMap["India "] = "新德里"
t.AssertEQ(gconv.Uint(countryCapitalMap), uint(0))
t.AssertEQ(gconv.Uint("1"), uint(1))
t.AssertEQ(gconv.Uint("on"), uint(0))
t.AssertEQ(gconv.Uint(1), uint(1))
t.AssertEQ(gconv.Uint(123.456), uint(123))
t.AssertEQ(gconv.Uint(boolStruct{}), uint(0))
t.AssertEQ(gconv.Uint(&boolStruct{}), uint(0))
})
}
func Test_Uint8_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
var i interface{} = nil
t.Assert(gconv.Uint8(i), uint8(0))
t.AssertEQ(gconv.Uint8(uint8(1)), uint8(1))
t.AssertEQ(gconv.Uint8(false), uint8(0))
t.AssertEQ(gconv.Uint8(nil), uint8(0))
t.AssertEQ(gconv.Uint8(0), uint8(0))
t.AssertEQ(gconv.Uint8("0"), uint8(0))
t.AssertEQ(gconv.Uint8(""), uint8(0))
t.AssertEQ(gconv.Uint8("false"), uint8(0))
t.AssertEQ(gconv.Uint8("off"), uint8(0))
t.AssertEQ(gconv.Uint8([]byte{}), uint8(0))
t.AssertEQ(gconv.Uint8([]string{}), uint8(0))
t.AssertEQ(gconv.Uint8([2]int{1, 2}), uint8(0))
t.AssertEQ(gconv.Uint8([]interface{}{}), uint8(0))
t.AssertEQ(gconv.Uint8([]map[int]int{}), uint8(0))
var countryCapitalMap = make(map[string]string)
/* map插入key - value对,各个国家对应的首都 */
countryCapitalMap["France"] = "巴黎"
countryCapitalMap["Italy"] = "罗马"
countryCapitalMap["Japan"] = "东京"
countryCapitalMap["India "] = "新德里"
t.AssertEQ(gconv.Uint8(countryCapitalMap), uint8(0))
t.AssertEQ(gconv.Uint8("1"), uint8(1))
t.AssertEQ(gconv.Uint8("on"), uint8(0))
t.AssertEQ(gconv.Uint8(int8(1)), uint8(1))
t.AssertEQ(gconv.Uint8(123.456), uint8(123))
t.AssertEQ(gconv.Uint8(boolStruct{}), uint8(0))
t.AssertEQ(gconv.Uint8(&boolStruct{}), uint8(0))
})
}
func Test_Uint16_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
var i interface{} = nil
t.Assert(gconv.Uint16(i), uint16(0))
t.AssertEQ(gconv.Uint16(uint16(1)), uint16(1))
t.AssertEQ(gconv.Uint16(false), uint16(0))
t.AssertEQ(gconv.Uint16(nil), uint16(0))
t.AssertEQ(gconv.Uint16(0), uint16(0))
t.AssertEQ(gconv.Uint16("0"), uint16(0))
t.AssertEQ(gconv.Uint16(""), uint16(0))
t.AssertEQ(gconv.Uint16("false"), uint16(0))
t.AssertEQ(gconv.Uint16("off"), uint16(0))
t.AssertEQ(gconv.Uint16([]byte{}), uint16(0))
t.AssertEQ(gconv.Uint16([]string{}), uint16(0))
t.AssertEQ(gconv.Uint16([2]int{1, 2}), uint16(0))
t.AssertEQ(gconv.Uint16([]interface{}{}), uint16(0))
t.AssertEQ(gconv.Uint16([]map[int]int{}), uint16(0))
var countryCapitalMap = make(map[string]string)
/* map插入key - value对,各个国家对应的首都 */
countryCapitalMap["France"] = "巴黎"
countryCapitalMap["Italy"] = "罗马"
countryCapitalMap["Japan"] = "东京"
countryCapitalMap["India "] = "新德里"
t.AssertEQ(gconv.Uint16(countryCapitalMap), uint16(0))
t.AssertEQ(gconv.Uint16("1"), uint16(1))
t.AssertEQ(gconv.Uint16("on"), uint16(0))
t.AssertEQ(gconv.Uint16(int16(1)), uint16(1))
t.AssertEQ(gconv.Uint16(123.456), uint16(123))
t.AssertEQ(gconv.Uint16(boolStruct{}), uint16(0))
t.AssertEQ(gconv.Uint16(&boolStruct{}), uint16(0))
})
}
func Test_Uint32_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
var i interface{} = nil
t.Assert(gconv.Uint32(i), uint32(0))
t.AssertEQ(gconv.Uint32(uint32(1)), uint32(1))
t.AssertEQ(gconv.Uint32(false), uint32(0))
t.AssertEQ(gconv.Uint32(nil), uint32(0))
t.AssertEQ(gconv.Uint32(0), uint32(0))
t.AssertEQ(gconv.Uint32("0"), uint32(0))
t.AssertEQ(gconv.Uint32(""), uint32(0))
t.AssertEQ(gconv.Uint32("false"), uint32(0))
t.AssertEQ(gconv.Uint32("off"), uint32(0))
t.AssertEQ(gconv.Uint32([]byte{}), uint32(0))
t.AssertEQ(gconv.Uint32([]string{}), uint32(0))
t.AssertEQ(gconv.Uint32([2]int{1, 2}), uint32(0))
t.AssertEQ(gconv.Uint32([]interface{}{}), uint32(0))
t.AssertEQ(gconv.Uint32([]map[int]int{}), uint32(0))
var countryCapitalMap = make(map[string]string)
/* map插入key - value对,各个国家对应的首都 */
countryCapitalMap["France"] = "巴黎"
countryCapitalMap["Italy"] = "罗马"
countryCapitalMap["Japan"] = "东京"
countryCapitalMap["India "] = "新德里"
t.AssertEQ(gconv.Uint32(countryCapitalMap), uint32(0))
t.AssertEQ(gconv.Uint32("1"), uint32(1))
t.AssertEQ(gconv.Uint32("on"), uint32(0))
t.AssertEQ(gconv.Uint32(int32(1)), uint32(1))
t.AssertEQ(gconv.Uint32(123.456), uint32(123))
t.AssertEQ(gconv.Uint32(boolStruct{}), uint32(0))
t.AssertEQ(gconv.Uint32(&boolStruct{}), uint32(0))
})
}
func Test_Uint64_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
var i interface{} = nil
t.AssertEQ(gconv.Uint64("0x00e"), uint64(14))
t.Assert(gconv.Uint64("022"), uint64(18))
t.AssertEQ(gconv.Uint64(i), uint64(0))
t.AssertEQ(gconv.Uint64(true), uint64(1))
t.Assert(gconv.Uint64("1"), int64(1))
t.Assert(gconv.Uint64("0"), uint64(0))
t.Assert(gconv.Uint64("X"), uint64(0))
t.Assert(gconv.Uint64("x"), uint64(0))
t.Assert(gconv.Uint64(int64(1)), uint64(1))
t.Assert(gconv.Uint64(int(0)), uint64(0))
t.Assert(gconv.Uint64(int8(0)), uint64(0))
t.Assert(gconv.Uint64(int16(0)), uint64(0))
t.Assert(gconv.Uint64(int32(0)), uint64(0))
t.Assert(gconv.Uint64(uint64(0)), uint64(0))
t.Assert(gconv.Uint64(uint32(0)), uint64(0))
t.Assert(gconv.Uint64(uint16(0)), uint64(0))
t.Assert(gconv.Uint64(uint8(0)), uint64(0))
t.Assert(gconv.Uint64(uint(0)), uint64(0))
t.Assert(gconv.Uint64(float32(0)), uint64(0))
t.AssertEQ(gconv.Uint64(false), uint64(0))
t.AssertEQ(gconv.Uint64(nil), uint64(0))
t.AssertEQ(gconv.Uint64(0), uint64(0))
t.AssertEQ(gconv.Uint64("0"), uint64(0))
t.AssertEQ(gconv.Uint64(""), uint64(0))
t.AssertEQ(gconv.Uint64("false"), uint64(0))
t.AssertEQ(gconv.Uint64("off"), uint64(0))
t.AssertEQ(gconv.Uint64([]byte{}), uint64(0))
t.AssertEQ(gconv.Uint64([]string{}), uint64(0))
t.AssertEQ(gconv.Uint64([2]int{1, 2}), uint64(0))
t.AssertEQ(gconv.Uint64([]interface{}{}), uint64(0))
t.AssertEQ(gconv.Uint64([]map[int]int{}), uint64(0))
var countryCapitalMap = make(map[string]string)
/* map插入key - value对,各个国家对应的首都 */
countryCapitalMap["France"] = "巴黎"
countryCapitalMap["Italy"] = "罗马"
countryCapitalMap["Japan"] = "东京"
countryCapitalMap["India "] = "新德里"
t.AssertEQ(gconv.Uint64(countryCapitalMap), uint64(0))
t.AssertEQ(gconv.Uint64("1"), uint64(1))
t.AssertEQ(gconv.Uint64("on"), uint64(0))
t.AssertEQ(gconv.Uint64(int64(1)), uint64(1))
t.AssertEQ(gconv.Uint64(123.456), uint64(123))
t.AssertEQ(gconv.Uint64(boolStruct{}), uint64(0))
t.AssertEQ(gconv.Uint64(&boolStruct{}), uint64(0))
})
}
func Test_Float32_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
var i interface{} = nil
t.Assert(gconv.Float32(i), float32(0))
t.AssertEQ(gconv.Float32(false), float32(0))
t.AssertEQ(gconv.Float32(nil), float32(0))
t.AssertEQ(gconv.Float32(0), float32(0))
t.AssertEQ(gconv.Float32("0"), float32(0))
t.AssertEQ(gconv.Float32(""), float32(0))
t.AssertEQ(gconv.Float32("false"), float32(0))
t.AssertEQ(gconv.Float32("off"), float32(0))
t.AssertEQ(gconv.Float32([]byte{}), float32(0))
t.AssertEQ(gconv.Float32([]string{}), float32(0))
t.AssertEQ(gconv.Float32([2]int{1, 2}), float32(0))
t.AssertEQ(gconv.Float32([]interface{}{}), float32(0))
t.AssertEQ(gconv.Float32([]map[int]int{}), float32(0))
var countryCapitalMap = make(map[string]string)
/* map插入key - value对,各个国家对应的首都 */
countryCapitalMap["France"] = "巴黎"
countryCapitalMap["Italy"] = "罗马"
countryCapitalMap["Japan"] = "东京"
countryCapitalMap["India "] = "新德里"
t.AssertEQ(gconv.Float32(countryCapitalMap), float32(0))
t.AssertEQ(gconv.Float32("1"), float32(1))
t.AssertEQ(gconv.Float32("on"), float32(0))
t.AssertEQ(gconv.Float32(float32(1)), float32(1))
t.AssertEQ(gconv.Float32(123.456), float32(123.456))
t.AssertEQ(gconv.Float32(boolStruct{}), float32(0))
t.AssertEQ(gconv.Float32(&boolStruct{}), float32(0))
})
}
func Test_Float64_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
var i interface{} = nil
t.Assert(gconv.Float64(i), float64(0))
t.AssertEQ(gconv.Float64(false), float64(0))
t.AssertEQ(gconv.Float64(nil), float64(0))
t.AssertEQ(gconv.Float64(0), float64(0))
t.AssertEQ(gconv.Float64("0"), float64(0))
t.AssertEQ(gconv.Float64(""), float64(0))
t.AssertEQ(gconv.Float64("false"), float64(0))
t.AssertEQ(gconv.Float64("off"), float64(0))
t.AssertEQ(gconv.Float64([]byte{}), float64(0))
t.AssertEQ(gconv.Float64([]string{}), float64(0))
t.AssertEQ(gconv.Float64([2]int{1, 2}), float64(0))
t.AssertEQ(gconv.Float64([]interface{}{}), float64(0))
t.AssertEQ(gconv.Float64([]map[int]int{}), float64(0))
var countryCapitalMap = make(map[string]string)
/* map插入key - value对,各个国家对应的首都 */
countryCapitalMap["France"] = "巴黎"
countryCapitalMap["Italy"] = "罗马"
countryCapitalMap["Japan"] = "东京"
countryCapitalMap["India "] = "新德里"
t.AssertEQ(gconv.Float64(countryCapitalMap), float64(0))
t.AssertEQ(gconv.Float64("1"), float64(1))
t.AssertEQ(gconv.Float64("on"), float64(0))
t.AssertEQ(gconv.Float64(float64(1)), float64(1))
t.AssertEQ(gconv.Float64(123.456), float64(123.456))
t.AssertEQ(gconv.Float64(boolStruct{}), float64(0))
t.AssertEQ(gconv.Float64(&boolStruct{}), float64(0))
})
}
func Test_String_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
var s []rune
t.AssertEQ(gconv.String(s), "")
var i interface{} = nil
t.AssertEQ(gconv.String(i), "")
t.AssertEQ(gconv.String("1"), "1")
t.AssertEQ(gconv.String("0"), string("0"))
t.Assert(gconv.String("X"), string("X"))
t.Assert(gconv.String("x"), string("x"))
t.Assert(gconv.String(int64(1)), uint64(1))
t.Assert(gconv.String(int(0)), string("0"))
t.Assert(gconv.String(int8(0)), string("0"))
t.Assert(gconv.String(int16(0)), string("0"))
t.Assert(gconv.String(int32(0)), string("0"))
t.Assert(gconv.String(uint64(0)), string("0"))
t.Assert(gconv.String(uint32(0)), string("0"))
t.Assert(gconv.String(uint16(0)), string("0"))
t.Assert(gconv.String(uint8(0)), string("0"))
t.Assert(gconv.String(uint(0)), string("0"))
t.Assert(gconv.String(float32(0)), string("0"))
t.AssertEQ(gconv.String(true), "true")
t.AssertEQ(gconv.String(false), "false")
t.AssertEQ(gconv.String(nil), "")
t.AssertEQ(gconv.String(0), string("0"))
t.AssertEQ(gconv.String("0"), string("0"))
t.AssertEQ(gconv.String(""), "")
t.AssertEQ(gconv.String("false"), "false")
t.AssertEQ(gconv.String("off"), string("off"))
t.AssertEQ(gconv.String([]byte{}), "")
t.AssertEQ(gconv.String([]string{}), "[]")
t.AssertEQ(gconv.String([2]int{1, 2}), "[1,2]")
t.AssertEQ(gconv.String([]interface{}{}), "[]")
t.AssertEQ(gconv.String(map[int]int{}), "{}")
var countryCapitalMap = make(map[string]string)
/* map插入key - value对,各个国家对应的首都 */
countryCapitalMap["France"] = "巴黎"
countryCapitalMap["Italy"] = "罗马"
countryCapitalMap["Japan"] = "东京"
countryCapitalMap["India "] = "新德里"
t.AssertEQ(gconv.String(countryCapitalMap), `{"France":"巴黎","India ":"新德里","Italy":"罗马","Japan":"东京"}`)
t.AssertEQ(gconv.String(int64(1)), "1")
t.AssertEQ(gconv.String(123.456), "123.456")
t.AssertEQ(gconv.String(boolStruct{}), "{}")
t.AssertEQ(gconv.String(&boolStruct{}), "{}")
var info apiString
info = new(S)
t.AssertEQ(gconv.String(info), "22222")
var errinfo apiError
errinfo = new(S1)
t.AssertEQ(gconv.String(errinfo), "22222")
})
}
func Test_Runes_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
t.AssertEQ(gconv.Runes("www"), []int32{119, 119, 119})
var s []rune
t.AssertEQ(gconv.Runes(s), nil)
})
}
func Test_Rune_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
t.AssertEQ(gconv.Rune("www"), int32(0))
t.AssertEQ(gconv.Rune(int32(0)), int32(0))
var s []rune
t.AssertEQ(gconv.Rune(s), int32(0))
})
}
func Test_Bytes_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
t.AssertEQ(gconv.Bytes(nil), nil)
t.AssertEQ(gconv.Bytes(int32(0)), []uint8{0, 0, 0, 0})
t.AssertEQ(gconv.Bytes("s"), []uint8{115})
t.AssertEQ(gconv.Bytes([]byte("s")), []uint8{115})
})
}
func Test_Byte_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
t.AssertEQ(gconv.Byte(uint8(0)), uint8(0))
t.AssertEQ(gconv.Byte("s"), uint8(0))
t.AssertEQ(gconv.Byte([]byte("s")), uint8(115))
})
}
func Test_Convert_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
var i interface{} = nil
t.AssertEQ(gconv.Convert(i, "string"), "")
t.AssertEQ(gconv.Convert("1", "string"), "1")
t.Assert(gconv.Convert(int64(1), "int64"), int64(1))
t.Assert(gconv.Convert(int(0), "int"), int(0))
t.Assert(gconv.Convert(int8(0), "int8"), int8(0))
t.Assert(gconv.Convert(int16(0), "int16"), int16(0))
t.Assert(gconv.Convert(int32(0), "int32"), int32(0))
t.Assert(gconv.Convert(uint64(0), "uint64"), uint64(0))
t.Assert(gconv.Convert(uint32(0), "uint32"), uint32(0))
t.Assert(gconv.Convert(uint16(0), "uint16"), uint16(0))
t.Assert(gconv.Convert(uint8(0), "uint8"), uint8(0))
t.Assert(gconv.Convert(uint(0), "uint"), uint(0))
t.Assert(gconv.Convert(float32(0), "float32"), float32(0))
t.Assert(gconv.Convert(float64(0), "float64"), float64(0))
t.AssertEQ(gconv.Convert(true, "bool"), true)
t.AssertEQ(gconv.Convert([]byte{}, "[]byte"), []uint8{})
t.AssertEQ(gconv.Convert([]string{}, "[]string"), []string{})
t.AssertEQ(gconv.Convert([2]int{1, 2}, "[]int"), []int{0})
t.AssertEQ(gconv.Convert("1989-01-02", "Time", "Y-m-d"), gconv.Time("1989-01-02", "Y-m-d"))
t.AssertEQ(gconv.Convert(1989, "Time"), gconv.Time("1970-01-01 08:33:09 +0800 CST"))
t.AssertEQ(gconv.Convert(gtime.Now(), "gtime.Time", 1), *gtime.New())
t.AssertEQ(gconv.Convert(1989, "gtime.Time"), *gconv.GTime("1970-01-01 08:33:09 +0800 CST"))
t.AssertEQ(gconv.Convert(gtime.Now(), "*gtime.Time", 1), gtime.New())
t.AssertEQ(gconv.Convert(gtime.Now(), "GTime", 1), *gtime.New())
t.AssertEQ(gconv.Convert(1989, "*gtime.Time"), gconv.GTime(1989))
t.AssertEQ(gconv.Convert(1989, "Duration"), time.Duration(int64(1989)))
t.AssertEQ(gconv.Convert("1989", "Duration"), time.Duration(int64(1989)))
t.AssertEQ(gconv.Convert("1989", ""), "1989")
})
}
func Test_Time_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
t.AssertEQ(gconv.Duration(""), time.Duration(int64(0)))
t.AssertEQ(gconv.GTime(""), gtime.New())
})
}
func Test_Slice_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
value := 123.456
t.AssertEQ(gconv.Ints(value), []int{123})
t.AssertEQ(gconv.Ints(nil), nil)
t.AssertEQ(gconv.Ints([]string{"1", "2"}), []int{1, 2})
t.AssertEQ(gconv.Ints([]int{}), []int{})
t.AssertEQ(gconv.Ints([]int8{1, 2}), []int{1, 2})
t.AssertEQ(gconv.Ints([]int16{1, 2}), []int{1, 2})
t.AssertEQ(gconv.Ints([]int32{1, 2}), []int{1, 2})
t.AssertEQ(gconv.Ints([]int64{1, 2}), []int{1, 2})
t.AssertEQ(gconv.Ints([]uint{1}), []int{1})
t.AssertEQ(gconv.Ints([]uint8{1, 2}), []int{1, 2})
t.AssertEQ(gconv.Ints([]uint16{1, 2}), []int{1, 2})
t.AssertEQ(gconv.Ints([]uint32{1, 2}), []int{1, 2})
t.AssertEQ(gconv.Ints([]uint64{1, 2}), []int{1, 2})
t.AssertEQ(gconv.Ints([]bool{true}), []int{1})
t.AssertEQ(gconv.Ints([]float32{1, 2}), []int{1, 2})
t.AssertEQ(gconv.Ints([]float64{1, 2}), []int{1, 2})
var inter []interface{} = make([]interface{}, 2)
t.AssertEQ(gconv.Ints(inter), []int{0, 0})
t.AssertEQ(gconv.Strings(value), []string{"123.456"})
t.AssertEQ(gconv.Strings(nil), nil)
t.AssertEQ(gconv.Strings([]string{"1", "2"}), []string{"1", "2"})
t.AssertEQ(gconv.Strings([]int{1}), []string{"1"})
t.AssertEQ(gconv.Strings([]int8{1, 2}), []string{"1", "2"})
t.AssertEQ(gconv.Strings([]int16{1, 2}), []string{"1", "2"})
t.AssertEQ(gconv.Strings([]int32{1, 2}), []string{"1", "2"})
t.AssertEQ(gconv.Strings([]int64{1, 2}), []string{"1", "2"})
t.AssertEQ(gconv.Strings([]uint{1}), []string{"1"})
t.AssertEQ(gconv.Strings([]uint8{1, 2}), []string{"1", "2"})
t.AssertEQ(gconv.Strings([]uint16{1, 2}), []string{"1", "2"})
t.AssertEQ(gconv.Strings([]uint32{1, 2}), []string{"1", "2"})
t.AssertEQ(gconv.Strings([]uint64{1, 2}), []string{"1", "2"})
t.AssertEQ(gconv.Strings([]bool{true}), []string{"true"})
t.AssertEQ(gconv.Strings([]float32{1, 2}), []string{"1", "2"})
t.AssertEQ(gconv.Strings([]float64{1, 2}), []string{"1", "2"})
var strer = make([]interface{}, 2)
t.AssertEQ(gconv.Strings(strer), []string{"", ""})
t.AssertEQ(gconv.Floats(value), []float64{123.456})
t.AssertEQ(gconv.Floats(nil), nil)
t.AssertEQ(gconv.Floats([]string{"1", "2"}), []float64{1, 2})
t.AssertEQ(gconv.Floats([]int{1}), []float64{1})
t.AssertEQ(gconv.Floats([]int8{1, 2}), []float64{1, 2})
t.AssertEQ(gconv.Floats([]int16{1, 2}), []float64{1, 2})
t.AssertEQ(gconv.Floats([]int32{1, 2}), []float64{1, 2})
t.AssertEQ(gconv.Floats([]int64{1, 2}), []float64{1, 2})
t.AssertEQ(gconv.Floats([]uint{1}), []float64{1})
t.AssertEQ(gconv.Floats([]uint8{1, 2}), []float64{1, 2})
t.AssertEQ(gconv.Floats([]uint16{1, 2}), []float64{1, 2})
t.AssertEQ(gconv.Floats([]uint32{1, 2}), []float64{1, 2})
t.AssertEQ(gconv.Floats([]uint64{1, 2}), []float64{1, 2})
t.AssertEQ(gconv.Floats([]bool{true}), []float64{0})
t.AssertEQ(gconv.Floats([]float32{1, 2}), []float64{1, 2})
t.AssertEQ(gconv.Floats([]float64{1, 2}), []float64{1, 2})
var floer = make([]interface{}, 2)
t.AssertEQ(gconv.Floats(floer), []float64{0, 0})
t.AssertEQ(gconv.Interfaces(value), []interface{}{123.456})
t.AssertEQ(gconv.Interfaces(nil), nil)
t.AssertEQ(gconv.Interfaces([]interface{}{1}), []interface{}{1})
t.AssertEQ(gconv.Interfaces([]string{"1"}), []interface{}{"1"})
t.AssertEQ(gconv.Interfaces([]int{1}), []interface{}{1})
t.AssertEQ(gconv.Interfaces([]int8{1}), []interface{}{1})
t.AssertEQ(gconv.Interfaces([]int16{1}), []interface{}{1})
t.AssertEQ(gconv.Interfaces([]int32{1}), []interface{}{1})
t.AssertEQ(gconv.Interfaces([]int64{1}), []interface{}{1})
t.AssertEQ(gconv.Interfaces([]uint{1}), []interface{}{1})
t.AssertEQ(gconv.Interfaces([]uint8{1}), []interface{}{1})
t.AssertEQ(gconv.Interfaces([]uint16{1}), []interface{}{1})
t.AssertEQ(gconv.Interfaces([]uint32{1}), []interface{}{1})
t.AssertEQ(gconv.Interfaces([]uint64{1}), []interface{}{1})
t.AssertEQ(gconv.Interfaces([]bool{true}), []interface{}{true})
t.AssertEQ(gconv.Interfaces([]float32{1}), []interface{}{1})
t.AssertEQ(gconv.Interfaces([]float64{1}), []interface{}{1})
t.AssertEQ(gconv.Interfaces([1]int{1}), []interface{}{1})
type interSlice []int
slices := interSlice{1}
t.AssertEQ(gconv.Interfaces(slices), []interface{}{1})
t.AssertEQ(gconv.Maps(nil), nil)
t.AssertEQ(gconv.Maps([]map[string]interface{}{{"a": "1"}}), []map[string]interface{}{{"a": "1"}})
t.AssertEQ(gconv.Maps(1223), []map[string]interface{}{nil})
t.AssertEQ(gconv.Maps([]int{}), nil)
})
}
// 私有属性不会进行转换
func Test_Slice_PrivateAttribute_All(t *testing.T) {
type User struct {
Id int
name string
Ad []interface{}
}
gtest.C(t, func(t *gtest.T) {
user := &User{1, "john", []interface{}{2}}
t.Assert(gconv.Interfaces(user), g.Slice{1, []interface{}{2}})
})
}
func Test_Map_Basic_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
m1 := map[string]string{
"k": "v",
}
m2 := map[int]string{
3: "v",
}
m3 := map[float64]float32{
1.22: 3.1,
}
t.Assert(gconv.Map(m1), g.Map{
"k": "v",
})
t.Assert(gconv.Map(m2), g.Map{
"3": "v",
})
t.Assert(gconv.Map(m3), g.Map{
"1.22": "3.1",
})
t.AssertEQ(gconv.Map(nil), nil)
t.AssertEQ(gconv.Map(map[string]interface{}{"a": 1}), map[string]interface{}{"a": 1})
t.AssertEQ(gconv.Map(map[int]interface{}{1: 1}), map[string]interface{}{"1": 1})
t.AssertEQ(gconv.Map(map[uint]interface{}{1: 1}), map[string]interface{}{"1": 1})
t.AssertEQ(gconv.Map(map[uint]string{1: "1"}), map[string]interface{}{"1": "1"})
t.AssertEQ(gconv.Map(map[interface{}]interface{}{"a": 1}), map[interface{}]interface{}{"a": 1})
t.AssertEQ(gconv.Map(map[interface{}]string{"a": "1"}), map[interface{}]string{"a": "1"})
t.AssertEQ(gconv.Map(map[interface{}]int{"a": 1}), map[interface{}]int{"a": 1})
t.AssertEQ(gconv.Map(map[interface{}]uint{"a": 1}), map[interface{}]uint{"a": 1})
t.AssertEQ(gconv.Map(map[interface{}]float32{"a": 1}), map[interface{}]float32{"a": 1})
t.AssertEQ(gconv.Map(map[interface{}]float64{"a": 1}), map[interface{}]float64{"a": 1})
t.AssertEQ(gconv.Map(map[string]bool{"a": true}), map[string]interface{}{"a": true})
t.AssertEQ(gconv.Map(map[string]int{"a": 1}), map[string]interface{}{"a": 1})
t.AssertEQ(gconv.Map(map[string]uint{"a": 1}), map[string]interface{}{"a": 1})
t.AssertEQ(gconv.Map(map[string]float32{"a": 1}), map[string]interface{}{"a": 1})
t.AssertEQ(gconv.Map(map[string]float64{"a": 1}), map[string]interface{}{"a": 1})
})
}
func Test_Map_StructWithGconvTag_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
type User struct {
Uid int
Name string
SiteUrl string `gconv:"-"`
NickName string `gconv:"nickname,omitempty"`
Pass1 string `gconv:"password1"`
Pass2 string `gconv:"password2"`
Ss []string `gconv:"ss"`
}
user1 := User{
Uid: 100,
Name: "john",
SiteUrl: "https://goframe.org",
Pass1: "123",
Pass2: "456",
Ss: []string{"sss", "2222"},
}
user2 := &user1
map1 := gconv.Map(user1)
map2 := gconv.Map(user2)
t.Assert(map1["Uid"], 100)
t.Assert(map1["Name"], "john")
t.Assert(map1["SiteUrl"], nil)
t.Assert(map1["NickName"], nil)
t.Assert(map1["nickname"], nil)
t.Assert(map1["password1"], "123")
t.Assert(map1["password2"], "456")
t.Assert(map2["Uid"], 100)
t.Assert(map2["Name"], "john")
t.Assert(map2["SiteUrl"], nil)
t.Assert(map2["NickName"], nil)
t.Assert(map2["nickname"], nil)
t.Assert(map2["password1"], "123")
t.Assert(map2["password2"], "456")
})
}
func Test_Map_StructWithJsonTag_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
type User struct {
Uid int
Name string
SiteUrl string `json:"-"`
NickName string `json:"nickname, omitempty"`
Pass1 string `json:"password1,newpassword"`
Pass2 string `json:"password2"`
Ss []string `json:"omitempty"`
ssb, ssa string
}
user1 := User{
Uid: 100,
Name: "john",
SiteUrl: "https://goframe.org",
Pass1: "123",
Pass2: "456",
Ss: []string{"sss", "2222"},
ssb: "11",
ssa: "222",
}
user3 := User{
Uid: 100,
Name: "john",
NickName: "SSS",
SiteUrl: "https://goframe.org",
Pass1: "123",
Pass2: "456",
Ss: []string{"sss", "2222"},
ssb: "11",
ssa: "222",
}
user2 := &user1
_ = gconv.Map(user1, "Ss")
map1 := gconv.Map(user1, "json", "json2")
map2 := gconv.Map(user2)
map3 := gconv.Map(user3)
t.Assert(map1["Uid"], 100)
t.Assert(map1["Name"], "john")
t.Assert(map1["SiteUrl"], nil)
t.Assert(map1["NickName"], nil)
t.Assert(map1["nickname"], nil)
t.Assert(map1["password1"], "123")
t.Assert(map1["password2"], "456")
t.Assert(map2["Uid"], 100)
t.Assert(map2["Name"], "john")
t.Assert(map2["SiteUrl"], nil)
t.Assert(map2["NickName"], nil)
t.Assert(map2["nickname"], nil)
t.Assert(map2["password1"], "123")
t.Assert(map2["password2"], "456")
t.Assert(map3["NickName"], nil)
})
}
func Test_Map_PrivateAttribute_All(t *testing.T) {
type User struct {
Id int
name string
}
gtest.C(t, func(t *gtest.T) {
user := &User{1, "john"}
t.Assert(gconv.Map(user), g.Map{"Id": 1})
})
}
func Test_Map_StructInherit_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
type Ids struct {
Id int `json:"id"`
Uid int `json:"uid"`
}
type Base struct {
Ids
CreateTime string `json:"create_time"`
}
type User struct {
Base
Passport string `json:"passport"`
Password string `json:"password"`
Nickname string `json:"nickname"`
S *string `json:"nickname2"`
}
user := new(User)
user.Id = 100
user.Nickname = "john"
user.CreateTime = "2019"
var s = "s"
user.S = &s
m := gconv.MapDeep(user)
t.Assert(m["id"], user.Id)
t.Assert(m["nickname"], user.Nickname)
t.Assert(m["create_time"], user.CreateTime)
t.Assert(m["nickname2"], user.S)
})
}
func Test_Struct_Basic1_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
type Score struct {
Name int
Result string
}
type Score2 struct {
Name int
Result string
}
type User struct {
Uid int
Name string
Site_Url string
NickName string
Pass1 string `gconv:"password1"`
Pass2 string `gconv:"password2"`
As *Score
Ass Score
Assb []interface{}
}
// 使用默认映射规则绑定属性值到对象
user := new(User)
params1 := g.Map{
"uid": 1,
"Name": "john",
"siteurl": "https://goframe.org",
"nick_name": "johng",
"PASS1": "123",
"PASS2": "456",
"As": g.Map{"Name": 1, "Result": "22222"},
"Ass": &Score{11, "11"},
"Assb": []string{"wwww"},
}
_ = gconv.Struct(nil, user)
_ = gconv.Struct(params1, nil)
_ = gconv.Struct([]interface{}{nil}, user)
_ = gconv.Struct(user, []interface{}{nil})
var a = []interface{}{nil}
ab := &a
_ = gconv.Struct(params1, *ab)
var pi *int = nil
_ = gconv.Struct(params1, pi)
_ = gconv.Struct(params1, user)
_ = gconv.Struct(params1, user, map[string]string{"uid": "Names"})
_ = gconv.Struct(params1, user, map[string]string{"uid": "as"})
// 使用struct tag映射绑定属性值到对象
user = new(User)
params2 := g.Map{
"uid": 2,
"name": "smith",
"site-url": "https://goframe.org",
"nick name": "johng",
"password1": "111",
"password2": "222",
}
if err := gconv.Struct(params2, user); err != nil {
gtest.Error(err)
}
t.Assert(user, &User{
Uid: 2,
Name: "smith",
Site_Url: "https://goframe.org",
NickName: "johng",
Pass1: "111",
Pass2: "222",
})
})
}
// 使用默认映射规则绑定属性值到对象
func Test_Struct_Basic2_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
type User struct {
Uid int
Name string
SiteUrl string
Pass1 string
Pass2 string
}
user := new(User)
params := g.Map{
"uid": 1,
"Name": "john",
"site_url": "https://goframe.org",
"PASS1": "123",
"PASS2": "456",
}
if err := gconv.Struct(params, user); err != nil {
gtest.Error(err)
}
t.Assert(user, &User{
Uid: 1,
Name: "john",
SiteUrl: "https://goframe.org",
Pass1: "123",
Pass2: "456",
})
})
}
// 带有指针的基础类型属性
func Test_Struct_Basic3_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
type User struct {
Uid int
Name *string
}
user := new(User)
params := g.Map{
"uid": 1,
"Name": "john",
}
if err := gconv.Struct(params, user); err != nil {
gtest.Error(err)
}
t.Assert(user.Uid, 1)
t.Assert(*user.Name, "john")
})
}
// slice类型属性的赋值
func Test_Struct_Attr_Slice_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
type User struct {
Scores []int
}
scores := []interface{}{99, 100, 60, 140}
user := new(User)
if err := gconv.Struct(g.Map{"Scores": scores}, user); err != nil {
gtest.Error(err)
} else {
t.Assert(user, &User{
Scores: []int{99, 100, 60, 140},
})
}
})
}
// 属性为struct对象
func Test_Struct_Attr_Struct_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
type Score struct {
Name string
Result int
}
type User struct {
Scores Score
}
user := new(User)
scores := map[string]interface{}{
"Scores": map[string]interface{}{
"Name": "john",
"Result": 100,
},
}
// 嵌套struct转换
if err := gconv.Struct(scores, user); err != nil {
gtest.Error(err)
} else {
t.Assert(user, &User{
Scores: Score{
Name: "john",
Result: 100,
},
})
}
})
}
// 属性为struct对象指针
func Test_Struct_Attr_Struct_Ptr_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
type Score struct {
Name string
Result int
}
type User struct {
Scores *Score
}
user := new(User)
scores := map[string]interface{}{
"Scores": map[string]interface{}{
"Name": "john",
"Result": 100,
},
}
// 嵌套struct转换
if err := gconv.Struct(scores, user); err != nil {
gtest.Error(err)
} else {
t.Assert(user.Scores, &Score{
Name: "john",
Result: 100,
})
}
})
}
// 属性为struct对象slice
func Test_Struct_Attr_Struct_Slice1_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
type Score struct {
Name string
Result int
}
type User struct {
Scores []Score
}
user := new(User)
scores := map[string]interface{}{
"Scores": map[string]interface{}{
"Name": "john",
"Result": 100,
},
}
// 嵌套struct转换属性为slice类型数值为map类型
if err := gconv.Struct(scores, user); err != nil {
gtest.Error(err)
} else {
t.Assert(user.Scores, []Score{
{
Name: "john",
Result: 100,
},
})
}
})
}
// 属性为struct对象slice
func Test_Struct_Attr_Struct_Slice2_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
type Score struct {
Name string
Result int
}
type User struct {
Scores []Score
}
user := new(User)
scores := map[string]interface{}{
"Scores": []interface{}{
map[string]interface{}{
"Name": "john",
"Result": 100,
},
map[string]interface{}{
"Name": "smith",
"Result": 60,
},
},
}
// 嵌套struct转换属性为slice类型数值为slice map类型
if err := gconv.Struct(scores, user); err != nil {
gtest.Error(err)
} else {
t.Assert(user.Scores, []Score{
{
Name: "john",
Result: 100,
},
{
Name: "smith",
Result: 60,
},
})
}
})
}
// 属性为struct对象slice ptr
func Test_Struct_Attr_Struct_Slice_Ptr_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
type Score struct {
Name string
Result int
}
type User struct {
Scores []*Score
}
user := new(User)
scores := map[string]interface{}{
"Scores": []interface{}{
map[string]interface{}{
"Name": "john",
"Result": 100,
},
map[string]interface{}{
"Name": "smith",
"Result": 60,
},
},
}
// 嵌套struct转换属性为slice类型数值为slice map类型
if err := gconv.Struct(scores, user); err != nil {
gtest.Error(err)
} else {
t.Assert(len(user.Scores), 2)
t.Assert(user.Scores[0], &Score{
Name: "john",
Result: 100,
})
t.Assert(user.Scores[1], &Score{
Name: "smith",
Result: 60,
})
}
})
}
func Test_Struct_PrivateAttribute_All(t *testing.T) {
type User struct {
Id int
name string
}
gtest.C(t, func(t *gtest.T) {
user := new(User)
err := gconv.Struct(g.Map{"id": 1, "name": "john"}, user)
t.Assert(err, nil)
t.Assert(user.Id, 1)
t.Assert(user.name, "")
})
}
func Test_Struct_Deep_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
type Ids struct {
Id int `json:"id"`
Uid int `json:"uid"`
}
type Base struct {
Ids
CreateTime string `json:"create_time"`
}
type User struct {
Base
Passport string `json:"passport"`
Password string `json:"password"`
Nickname string `json:"nickname"`
}
data := g.Map{
"id": 100,
"uid": 101,
"passport": "t1",
"password": "123456",
"nickname": "T1",
"create_time": "2019",
}
user := new(User)
gconv.StructDeep(data, user)
t.Assert(user.Id, 100)
t.Assert(user.Uid, 101)
t.Assert(user.Nickname, "T1")
t.Assert(user.CreateTime, "2019")
})
}
func Test_Struct_Time_All(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
type User struct {
CreateTime time.Time
}
now := time.Now()
user := new(User)
gconv.Struct(g.Map{
"create_time": now,
}, user)
t.Assert(user.CreateTime.UTC().String(), now.UTC().String())
})
gtest.C(t, func(t *gtest.T) {
type User struct {
CreateTime *time.Time
}
now := time.Now()
user := new(User)
gconv.Struct(g.Map{
"create_time": &now,
}, user)
t.Assert(user.CreateTime.UTC().String(), now.UTC().String())
})
gtest.C(t, func(t *gtest.T) {
type User struct {
CreateTime *gtime.Time
}
now := time.Now()
user := new(User)
gconv.Struct(g.Map{
"create_time": &now,
}, user)
t.Assert(user.CreateTime.Time.UTC().String(), now.UTC().String())
})
gtest.C(t, func(t *gtest.T) {
type User struct {
CreateTime gtime.Time
}
now := time.Now()
user := new(User)
gconv.Struct(g.Map{
"create_time": &now,
}, user)
t.Assert(user.CreateTime.Time.UTC().String(), now.UTC().String())
})
gtest.C(t, func(t *gtest.T) {
type User struct {
CreateTime gtime.Time
}
now := time.Now()
user := new(User)
gconv.Struct(g.Map{
"create_time": now,
}, user)
t.Assert(user.CreateTime.Time.UTC().String(), now.UTC().String())
})
}