From bd4271cd8c93ac962e32acdca4b796abb8bf338e Mon Sep 17 00:00:00 2001 From: wenzi1 Date: Sun, 31 Mar 2019 23:36:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0gxml=E7=9A=84=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/encoding/gxml/gxml_test.go | 140 +++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 g/encoding/gxml/gxml_test.go diff --git a/g/encoding/gxml/gxml_test.go b/g/encoding/gxml/gxml_test.go new file mode 100644 index 000000000..c8b05b0f2 --- /dev/null +++ b/g/encoding/gxml/gxml_test.go @@ -0,0 +1,140 @@ +// Copyright 2017 gf Author(https://github.com/gogf/gf). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with this file, +// You can obtain one at https://github.com/gogf/gf. + +package gxml_test + +import ( + "bytes" + "github.com/gogf/gf/g/encoding/gcharset" + "github.com/gogf/gf/g/encoding/gparser" + "github.com/wenzi1/gf/g/encoding/gxml" + "strings" + "testing" +) + +var testData = []struct { + utf8, other, otherEncoding string +}{ + {"Hello 常用國字標準字體表", "Hello \xb1`\xa5\u03b0\xea\xa6r\xbc\u0437\u01e6r\xc5\xe9\xaa\xed", "big5"}, + {"Hello 常用國字標準字體表", "Hello \xb3\xa3\xd3\xc3\x87\xf8\xd7\xd6\x98\xcb\x9c\xca\xd7\xd6\xf3\x77\xb1\xed", "gbk"}, + {"Hello 常用國字標準字體表", "Hello \xb3\xa3\xd3\xc3\x87\xf8\xd7\xd6\x98\xcb\x9c\xca\xd7\xd6\xf3\x77\xb1\xed", "gb18030"}, +} + +func buildXml(charset string, str string) (string, string) { + head := `` + srcXml := strings.Replace(head, "UTF-8", charset, -1) + + srcParser := gparser.New(nil) + srcParser.Set("name", str) + srcParser.Set("age", "12") + + s, err := srcParser.ToXml() + if err != nil { + return "", "" + } + + srcXml = srcXml + string(s) + srcXml, err = gcharset.UTF8To(charset, srcXml) + if err != nil { + return "", "" + } + + dstXml := head + string(s) + + return srcXml, dstXml +} + +//测试XML中字符集的转换 +func Test_XmlToJson(t *testing.T) { + for _, v := range testData { + srcXml, dstXml := buildXml(v.otherEncoding, v.utf8) + if len(srcXml) == 0 && len(dstXml) == 0 { + t.Errorf("build xml string error. srcEncoding:%s, src:%s, utf8:%s", v.otherEncoding, v.other, v.utf8) + } + + srcJson, err := gxml.ToJson([]byte(srcXml)) + if err != nil { + t.Errorf("gxml.ToJson error. %s", srcXml) + } + + dstJson, err := gxml.ToJson([]byte(dstXml)) + if err != nil { + t.Errorf("dstXml to json error. %s", dstXml) + } + + if bytes.Compare(srcJson, dstJson) != 0 { + t.Errorf("convert to json error. srcJson:%s, dstJson:%s", string(srcJson), string(dstJson)) + } + + } +} + +func Test_Decode(t *testing.T) { + for _, v := range testData { + srcXml, dstXml := buildXml(v.otherEncoding, v.utf8) + if len(srcXml) == 0 && len(dstXml) == 0 { + t.Errorf("build xml string error. srcEncoding:%s, src:%s, utf8:%s", v.otherEncoding, v.other, v.utf8) + } + + srcMap, err := gxml.Decode([]byte(srcXml)) + if err != nil { + t.Errorf("gxml.Decode error. %s", srcXml) + } + + dstMap, err := gxml.Decode([]byte(dstXml)) + if err != nil { + t.Errorf("gxml decode error. %s", dstXml) + } + s := srcMap["doc"].(map[string]interface{}) + d := dstMap["doc"].(map[string]interface{}) + for kk, vv := range s { + if vv.(string) != d[kk].(string) { + t.Errorf("convert to map error. src:%v, dst:%v", vv, d[kk]) + } + } + } +} + +func Test_Encode(t *testing.T) { + m := make(map[string]interface{}) + v := map[string]interface{}{ + "string": "hello world", + "int": 123, + "float": 100.92, + "bool": true, + } + m["root"] = interface{}(v) + + xmlStr, err := gxml.Encode(m) + if err != nil { + t.Errorf("encode error.") + } + t.Logf("%s\n", string(xmlStr)) + + res := `true100.92123hello world` + if string(xmlStr) != res { + t.Errorf("encode error. result: [%s], expect:[%s]", string(xmlStr), res) + } +} + +func Test_EncodeIndent(t *testing.T) { + m := make(map[string]interface{}) + v := map[string]interface{}{ + "string": "hello world", + "int": 123, + "float": 100.92, + "bool": true, + } + m["root"] = interface{}(v) + + xmlStr, err := gxml.EncodeWithIndent(m, "xml") + if err != nil { + t.Errorf("encodeWithIndent error.") + } + + t.Logf("%s\n", string(xmlStr)) + +}