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 }