gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/datax/coderx/RefToMap_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_EncodeBasic(t *testing.T) {
    12  	var classMap = M{
    13  		"Bool":    true,
    14  		"String":  "a",
    15  		"Int32":   100,
    16  		"Float32": 100.0,
    17  		"Class1":  M{"Int": 100, "String": "class1"},
    18  		"Enum":    esample.Enum1_C,
    19  		"Enum2":   esample.Enum2_B,
    20  	}
    21  	mapToRef := NewMapToRef()
    22  	obj := &sample.SampleClass{}
    23  	err := mapToRef.SetSource(classMap).Write(obj)
    24  
    25  	encoder := NewRefToMap().SetSource(obj)
    26  	m, err := encoder.Create()
    27  
    28  	assert.Equal(t, true, err == nil, err)
    29  	assert.Equal(t, true, m["Bool"])
    30  	assert.Equal(t, "a", m["String"])
    31  	assert.Equal(t, 100, m["Int32"])
    32  	assert.Equal(t, 100.0, m["Float32"])
    33  	assert.Equal(t, true, m["Class1"] != nil)
    34  	assert.Equal(t, 100, m["Class1"].(M)["Int"])
    35  	assert.Equal(t, "class1", m["Class1"].(M)["String"])
    36  	assert.Equal(t, esample.Enum1_C, m["Enum"])
    37  	assert.Equal(t, esample.Enum2_B, m["Enum2"])
    38  }
    39  
    40  func TestRef_EncodeMap(t *testing.T) {
    41  	Load()
    42  
    43  	var classMap = M{
    44  		"Map": M{"key1": 1, "key2": "2", "key3": 3.0},
    45  		"MapSt": M{
    46  			"key1": M{"String": "ArraySt1", "Int": 100},
    47  			"key2": M{"String": "ArraySt2", "Int": 100},
    48  		},
    49  	}
    50  	mapToRef := NewMapToRef()
    51  	obj := &sample.SampleClass{}
    52  	err := mapToRef.SetSource(classMap).Write(obj)
    53  
    54  	encoder := NewRefToMap().SetSource(obj)
    55  	m, err := encoder.Create()
    56  
    57  	assert.Equal(t, true, err == nil, err)
    58  	assert.Equal(t, 3, len(m["Map"].(M)))
    59  	assert.Equal(t, `map[key1:1 key2:2 key3:3]`, fmt.Sprintf("%+v", m["Map"].(M)))
    60  	assert.Equal(t, 2, len(obj.MapSt))
    61  	assert.Equal(t, `map[Int:100 String:ArraySt1]`, fmt.Sprintf("%+v", m["MapSt"].(M)["key1"]))
    62  	assert.Equal(t, `map[Int:100 String:ArraySt2]`, fmt.Sprintf("%+v", m["MapSt"].(M)["key2"]))
    63  }
    64  
    65  func TestRef_EncodeArray(t *testing.T) {
    66  	Load()
    67  
    68  	var classMap = M{
    69  		"Array": []interface{}{"1", "2", true},
    70  		"ArraySt": []interface{}{
    71  			M{"Map": M{"key1": 1, "key2": "2"}, "Bool": true, "Array": A{"1", true}},
    72  			M{"Map": M{"key1": true, "key2": 4.0}, "Bool": false},
    73  		},
    74  	}
    75  	mapToRef := NewMapToRef()
    76  	obj := &sample.SampleClass{}
    77  	err := mapToRef.SetSource(classMap).Write(obj)
    78  
    79  	encoder := NewRefToMap().SetSource(obj)
    80  	m, err := encoder.Create()
    81  
    82  	assert.Equal(t, true, err == nil, err)
    83  	assert.Equal(t, 3, len(m["Array"].(A)))
    84  	assert.Equal(t, `[1 2 1]`, fmt.Sprintf("%+v", m["Array"].(A)))
    85  	assert.Equal(t, 2, len(m["ArraySt"].(A)))
    86  	assert.Equal(t, `map[Array:[1 1] Bool:true Map:map[key1:1 key2:2]]`, fmt.Sprintf("%+v", m["ArraySt"].(A)[0]))
    87  	assert.Equal(t, `map[Bool:false Map:map[key1:1 key2:4]]`, fmt.Sprintf("%+v", m["ArraySt"].(A)[1]))
    88  }