1 package mxj
2
3 import (
4 "bytes"
5 "fmt"
6 "io"
7 "reflect"
8 "testing"
9 )
10
11 func TestXmlHeader(t *testing.T) {
12 fmt.Println("\n---------------- xml_test.go ...")
13 }
14
15 func TestNewMapXml(t *testing.T) {
16 x := []byte(`<root2><newtag newattr="some_attr_value">something more</newtag><list listattr="val"><item>1</item><item>2</item></list></root2>`)
17
18 mv, merr := NewMapXml(x)
19 if merr != nil {
20 t.Fatal("merr:", merr.Error())
21 }
22
23 want := Map{"root2":
24 map[string]interface{}{
25 "newtag":
26 map[string]interface{}{"-newattr": "some_attr_value", textK:"something more"},
27 "list":
28 map[string]interface{}{"-listattr":"val", "item":[]interface{}{"1", "2"}},
29 }}
30 if !reflect.DeepEqual(mv, want) {
31 fmt.Println("NewMapXml, x :", string(x))
32 fmt.Printf("NewMapXml, mv : %#v\n", mv)
33 fmt.Printf("NewMapXml, want: %#v\n", want)
34 t.Fatal("not DeepEqual")
35 }
36 }
37
38 func TestAttrHyphenFalse(t *testing.T) {
39 PrependAttrWithHyphen(false)
40 defer PrependAttrWithHyphen(true)
41 x := []byte(`<root2><newtag newattr="some_attr_value">something more</newtag><list listattr="val"><item>1</item><item>2</item></list></root2>`)
42
43 mv, merr := NewMapXml(x)
44 if merr != nil {
45 t.Fatal("merr:", merr.Error())
46 }
47
48 want := Map{"root2":
49 map[string]interface{}{
50 "newtag":
51 map[string]interface{}{"newattr": "some_attr_value", textK:"something more"},
52 "list":
53 map[string]interface{}{"listattr":"val", "item":[]interface{}{"1", "2"}},
54 }}
55 if !reflect.DeepEqual(mv, want) {
56 fmt.Println("AttrHyphenFalse, x :", string(x))
57 fmt.Printf("AttrHyphenFalse, mv : %#v\n", mv)
58 fmt.Printf("AttrHyphenFalse, want: %#v\n", want)
59 t.Fatal("not DeepEqual")
60 }
61 }
62
63 func TestNewMapXmlError(t *testing.T) {
64 x := []byte(`<root2><newtag>something more</newtag><list><item>1</item><item>2</item></list>`)
65
66 m, merr := NewMapJson(x)
67 if merr == nil {
68 t.Fatal("NewMapXmlError, m:", m)
69 }
70
71 want := `invalid character '<' looking for beginning of value`
72 if merr != nil && merr.Error() != want {
73 fmt.Println("NewMapXmlError, x :", string(x))
74 fmt.Println("NewMapXmlError, merr:", merr.Error())
75 fmt.Println("NewMapXmlError, want:", want)
76 }
77 }
78
79 func TestNewMapXmlReader(t *testing.T) {
80 fmt.Println("\n==================== TestNewMapXmlReader ...")
81 x := []byte(`<root><this>is a test</this></root><root2><newtag>something more</newtag><list><item>1</item><item>2</item></list></root2>`)
82
83 r := bytes.NewReader(x)
84
85 for {
86 m, raw, err := NewMapXmlReaderRaw(r)
87 if err != nil && err != io.EOF {
88 t.Fatal("err:", err.Error())
89 }
90 if err == io.EOF && len(m) == 0 {
91 break
92 }
93 fmt.Println("NewMapXmlReader, raw:", string(raw))
94 fmt.Println("NewMapXmlReader, m :", m)
95 }
96 }
97
98
99
100 func TestXml_1(t *testing.T) {
101 mv := Map{"tag1": "some data", "tag2": "more data", "boolean": true, "float": 3.14159625, "null": nil}
102
103 x, err := mv.Xml()
104 if err != nil {
105 t.Fatal("err:", err.Error())
106 }
107
108 fmt.Println("Xml_1, mv:", mv)
109 fmt.Println("Xml_1, x :", string(x))
110 }
111
112 func TestXml_2(t *testing.T) {
113 a := []interface{}{"string", true, 36.4}
114 mv := Map{"array": a}
115
116 x, err := mv.Xml()
117 if err != nil {
118 t.Fatal("err:", err.Error())
119 }
120
121 fmt.Println("Xml_2, mv:", mv)
122 fmt.Println("Xml_2, x :", string(x))
123 }
124
125 func TestXml_3(t *testing.T) {
126 a := []interface{}{"string", true, 36.4}
127 mv := Map{"array": []interface{}{a, "string2"}}
128
129 x, err := mv.Xml()
130 if err != nil {
131 t.Fatal("err:", err.Error())
132 }
133
134 fmt.Println("Xml_3, mv:", mv)
135 fmt.Println("Xml_3, x :", string(x))
136 }
137
138 func TestXml_4(t *testing.T) {
139 a := []interface{}{"string", true, 36.4}
140 mv := Map{"array": map[string]interface{}{"innerkey": []interface{}{a, "string2"}}}
141
142 x, err := mv.Xml()
143 if err != nil {
144 t.Fatal("err:", err.Error())
145 }
146
147 fmt.Println("Xml_4, mv:", mv)
148 fmt.Println("Xml_4, x :", string(x))
149 }
150
151 func TestXml_5(t *testing.T) {
152 a := []interface{}{"string", true, 36.4}
153 mv := Map{"array": []interface{}{map[string]interface{}{"innerkey": []interface{}{a, "string2"}}, map[string]interface{}{"some": "more"}}}
154
155 x, err := mv.Xml()
156 if err != nil {
157 t.Fatal("err:", err.Error())
158 }
159
160 fmt.Println("Xml_5, mv:", mv)
161 fmt.Println("Xml_5, x :", string(x))
162 }
163
164
165 func TestXml_Strings(t *testing.T) {
166 mv := Map{"sometag": "some data", "strings": []string{"string1", "string2"}}
167
168 x, err := mv.Xml()
169 if err != nil {
170 t.Fatal("err:", err.Error())
171 }
172
173 fmt.Println("Xml_strings, mv:", mv)
174 fmt.Println("Xml_strings, x :", string(x))
175 }
176
177
178 func TestXmlWriter(t *testing.T) {
179 mv := Map{"tag1": "some data", "tag2": "more data", "boolean": true, "float": 3.14159625}
180 w := new(bytes.Buffer)
181
182 err := mv.XmlWriter(w, "myRootTag")
183 if err != nil {
184 t.Fatal("err:", err.Error())
185 }
186
187 b := make([]byte, w.Len())
188 _, err = w.Read(b)
189 if err != nil {
190 t.Fatal("err:", err.Error())
191 }
192
193 fmt.Println("XmlWriter, b :", string(b))
194 }
195
196
197
198
199
241
View as plain text