json2xml - convert_test.go
1 package json2xml
2
3 import (
4 "encoding/json"
5 "encoding/xml"
6 "strings"
7 "testing"
8 )
9
10 func TestBasic(t *testing.T) {
11 var buf strings.Builder
12 for n, test := range []struct {
13 Input, Output string
14 }{
15 {"{}", "<object></object>"},
16 {"[]", "<array></array>"},
17 {"123", "<number>123</number>"},
18 {"123.456", "<number>123.456</number>"},
19 {"true", "<boolean>true</boolean>"},
20 {"false", "<boolean>false</boolean>"},
21 {"\"A\"", "<string>A</string>"},
22 {"\"Hello, World\"", "<string>Hello, World</string>"},
23 {"\"Hello,\\nWorld\"", "<string>Hello,\nWorld</string>"},
24 {"null", "<null></null>"},
25 } {
26 x := xml.NewEncoder(&buf)
27 if err := Convert(json.NewDecoder(strings.NewReader(test.Input)), x); err != nil {
28 t.Errorf("test %d: unexpected error: %s", n+1, err)
29 continue
30 }
31 x.Flush()
32 output := buf.String()
33 buf.Reset()
34 if output != test.Output {
35 t.Errorf("test %d: expecting %q, got %q", n+1, test.Output, output)
36 }
37 }
38 }
39
40 func TestComplex(t *testing.T) {
41 var buf strings.Builder
42 for n, test := range []struct {
43 Input, Output string
44 }{
45 {"{\"Name1\":\"String1\"}", "<object><string name=\"Name1\">String1</string></object>"},
46 {"[\"Name1\",\"String1\"]", "<array><string>Name1</string><string>String1</string></array>"},
47 {"[{\"A\":[{\"B\":3.14159,\"C\":null},\"D\",\"E\",null,1.234],\"F\":123},\"G\"]", "<array><object><array name=\"A\"><object><number name=\"B\">3.14159</number><null name=\"C\"></null></object><string>D</string><string>E</string><null></null><number>1.234</number></array><number name=\"F\">123</number></object><string>G</string></array>"},
48 } {
49 x := xml.NewEncoder(&buf)
50 if err := Convert(json.NewDecoder(strings.NewReader(test.Input)), x); err != nil {
51 t.Errorf("test %d: unexpected error: %s", n+1, err)
52 continue
53 }
54 x.Flush()
55 output := buf.String()
56 buf.Reset()
57 if output != test.Output {
58 t.Errorf("test %d: expecting %q, got %q", n+1, test.Output, output)
59 }
60 }
61 }