github.com/alibabacloud-go/tea@v1.3.10/dara/xml_test.go (about) 1 package dara 2 3 import ( 4 "encoding/json" 5 "testing" 6 7 "github.com/alibabacloud-go/tea/utils" 8 ) 9 10 type validatorTest struct { 11 Num *int `json:"num" require:"true"` 12 Str *string `json:"str" pattern:"^[a-d]*$" maxLength:"4"` 13 Test *errLength `json:"test"` 14 List []*string `json:"list" pattern:"^[a-d]*$" maxLength:"4"` 15 } 16 17 type GetBucketLocationResponse struct { 18 RequestId *string `json:"x-oss-request-id" xml:"x-oss-request-id" require:"true"` 19 LocationConstraint *string `json:"LocationConstraint" xml:"LocationConstraint" require:"true"` 20 } 21 22 type errLength struct { 23 Num *int `json:"num" maxLength:"a"` 24 } 25 26 func Test_ParseXml(t *testing.T) { 27 str := `<?xml version="1.0" encoding="utf-8" standalone="no"?> 28 <num>10</num>` 29 result := ParseXml(str, new(validatorTest)) 30 utils.AssertEqual(t, 1, len(result)) 31 str = `<?xml version="1.0" encoding="utf-8" standalone="no"?> 32 <num></num>` 33 result = ParseXml(str, new(validatorTest)) 34 utils.AssertEqual(t, 1, len(result)) 35 xmlVal := `<?xml version="1.0" encoding="utf-8" standalone="no"?> 36 <students> 37 <student number="1001"> 38 <name>zhangSan</name> 39 <age>23</age> 40 <sex>male</sex> 41 </student> 42 </students>` 43 res := ParseXml(xmlVal, nil) 44 utils.AssertEqual(t, 1, len(res)) 45 } 46 47 func Test_ToXML(t *testing.T) { 48 val := map[string]interface{}{ 49 "oss": map[string]interface{}{ 50 "key": "value", 51 }, 52 } 53 str := ToXML(val) 54 utils.AssertEqual(t, "<oss><key>value</key></oss>", str) 55 } 56 57 func Test_getStartElement(t *testing.T) { 58 xmlVal := `<?xml version="1.0" encoding="utf-8" standalone="no"?> 59 <students> 60 <student number="1001"> 61 <name>zhangSan</name> 62 <age>23</age> 63 <sex>male</sex> 64 </student> 65 </students>` 66 str := getStartElement([]byte(xmlVal)) 67 utils.AssertEqual(t, "students", str) 68 69 xmlVal = `<?xml version="1.0" encoding="utf-8" standalone="no"?> 70 <students/\> 71 <student number="1001"> 72 <name>zhangSan</name> 73 <age>23</age> 74 <sex>male</sex> 75 </student> 76 </students>` 77 str = getStartElement([]byte(xmlVal)) 78 utils.AssertEqual(t, "", str) 79 } 80 81 func Test_mapToXML(t *testing.T) { 82 obj := map[string]interface{}{ 83 "struct": map[string]interface{}{ 84 "param1": "value1", 85 "list": []string{"value2", "value3"}, 86 "listMap": []map[string]interface{}{ 87 map[string]interface{}{ 88 "param2": "value2", 89 }, 90 map[string]interface{}{ 91 "param3": "value3", 92 }, 93 }, 94 "listMapString": []map[string]string{ 95 map[string]string{ 96 "param4": "value4", 97 }, 98 map[string]string{ 99 "param5": "value5", 100 }, 101 }, 102 "mapString": map[string]string{ 103 "param6": "value6", 104 }, 105 "listInterface": []interface{}{"10", 20}, 106 }, 107 } 108 byt, _ := json.Marshal(obj) 109 obj1 := make(map[string]interface{}) 110 json.Unmarshal(byt, &obj1) 111 xml := mapToXML(obj1) 112 utils.AssertContains(t, xml, `<listInterface>10</listInterface>`) 113 } 114 115 func Test_XmlUnmarshal(t *testing.T) { 116 result := new(GetBucketLocationResponse) 117 xmlVal := `<?xml version="1.0" encoding="UTF-8"?> 118 <LocationConstraint>oss-cn-hangzhou</LocationConstraint >` 119 out, err := xmlUnmarshal([]byte(xmlVal), result) 120 utils.AssertNil(t, err) 121 122 byt, _ := json.Marshal(out) 123 utils.AssertEqual(t, `"oss-cn-hangzhou"`, string(byt)) 124 }