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  }