gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/datax/coderx/MapToRef_test.go (about)

     1  package coderx
     2  
     3  import (
     4  	"fmt"
     5  	"gitee.com/zhongguo168a/gocodes/datax/generate/schema_go/sample"
     6  	esample "gitee.com/zhongguo168a/gocodes/datax/generate/schema_go/sample/enums"
     7  	"github.com/stretchr/testify/assert"
     8  	"testing"
     9  )
    10  
    11  func TestRef_DecodeBasic(t *testing.T) {
    12  	Load()
    13  
    14  	var classMap = M{
    15  		"Bool":    true,
    16  		"String":  "a",
    17  		"int32":   100,
    18  		"Float32": 100.0,
    19  		"Class1":  M{"Int": 100, "String": "class1"},
    20  		"Enum":    esample.Enum1_C,
    21  		"Enum2":   esample.Enum2_B,
    22  		"Any":     map[string]interface{}{"a": 1},
    23  	}
    24  	mapToRef := NewMapToRef()
    25  	obj := &sample.SampleClass{}
    26  	err := mapToRef.SetSource(classMap).Write(obj)
    27  
    28  	assert.Equal(t, true, err == nil, err)
    29  	assert.Equal(t, true, obj.Bool)
    30  	assert.Equal(t, "a", obj.String)
    31  	assert.Equal(t, 100, obj.Int32)
    32  	assert.Equal(t, 100.0, obj.Float32)
    33  	assert.Equal(t, true, obj.Class1 != nil)
    34  	assert.Equal(t, 100, obj.Class1.Int)
    35  	assert.Equal(t, "class1", obj.Class1.String)
    36  	assert.Equal(t, esample.Enum1_C, obj.Enum)
    37  	assert.Equal(t, esample.Enum2_B, obj.Enum2)
    38  	assert.Equal(t, map[string]interface{}{"a": 1}, obj.Any)
    39  }
    40  
    41  func TestRef_DecodeMap(t *testing.T) {
    42  	Load()
    43  
    44  	var classMap = M{
    45  		"Map": M{"key1": 1, "key2": "2", "key3": 3.0},
    46  		"MapSt": M{
    47  			"key1": M{"String": "ArraySt1", "Int": 100},
    48  			"key2": M{"String": "ArraySt2", "Int": 100},
    49  		},
    50  	}
    51  	mapToRef := NewMapToRef()
    52  	obj := &sample.SampleClass{}
    53  	err := mapToRef.SetSource(classMap).Write(obj)
    54  
    55  	assert.Equal(t, true, err == nil, err)
    56  	assert.Equal(t, 3, len(obj.Map))
    57  	assert.Equal(t, `map[key1:1 key2:2 key3:3]`, fmt.Sprintf("%+v", obj.Map))
    58  	assert.Equal(t, 2, len(obj.MapSt))
    59  	assert.Equal(t, `&{Int:100 String:ArraySt1 Enum3:0}`, fmt.Sprintf("%+v", obj.MapSt["key1"]))
    60  	assert.Equal(t, `&{Int:100 String:ArraySt2 Enum3:0}`, fmt.Sprintf("%+v", obj.MapSt["key2"]))
    61  }
    62  
    63  func TestRef_DecodeArray(t *testing.T) {
    64  	Load()
    65  
    66  	var classMap = M{
    67  		"Array": []interface{}{"1", "2", true},
    68  		"ArraySt": []interface{}{
    69  			M{"Map": M{"key1": 1, "key2": "2"}, "Bool": true, "Array": A{"1", true}},
    70  			M{"Map": M{"key1": true, "key2": 4.0}, "Bool": false},
    71  		},
    72  	}
    73  	mapToRef := NewMapToRef()
    74  	obj := &sample.SampleClass{}
    75  	err := mapToRef.SetSource(classMap).Write(obj)
    76  
    77  	assert.Equal(t, true, err == nil, err)
    78  	assert.Equal(t, 3, len(obj.Array))
    79  	assert.Equal(t, `[1 2 1]`, fmt.Sprintf("%+v", obj.Array))
    80  	assert.Equal(t, 2, len(obj.ArraySt))
    81  	assert.Equal(t, `&{Sub1:{Map:map[key1:1 key2:2] Array:[1 1]} Bool:true}`, fmt.Sprintf("%+v", obj.ArraySt[0]))
    82  	assert.Equal(t, `&{Sub1:{Map:map[key1:1 key2:4] Array:[]} Bool:false}`, fmt.Sprintf("%+v", obj.ArraySt[1]))
    83  }