package mxj
import (
"encoding/json"
"fmt"
"testing"
)
func TestAnyXmlHeader(t *testing.T) {
fmt.Println("\n---------------- anyxml_test.go ...")
}
var anydata = []byte(`[
{
"somekey": "somevalue"
},
{
"somekey": "somevalue"
},
{
"somekey": "somevalue",
"someotherkey": "someothervalue"
},
"string",
3.14159265,
true
]`)
type MyStruct struct {
Somekey string `xml:"somekey"`
B float32 `xml:"floatval"`
}
func TestAnyXml(t *testing.T) {
var i interface{}
err := json.Unmarshal(anydata, &i)
if err != nil {
t.Fatal(err)
}
x, err := AnyXml(i)
if err != nil {
t.Fatal(err)
}
fmt.Println("[]->x:", string(x))
a := []interface{}{"try", "this", 3.14159265, true}
x, err = AnyXml(a)
if err != nil {
t.Fatal(err)
}
fmt.Println("a->x:", string(x))
x, err = AnyXml(a, "myRootTag", "myElementTag")
if err != nil {
t.Fatal(err)
}
fmt.Println("a->x:", string(x))
x, err = AnyXml(3.14159625)
if err != nil {
t.Fatal(err)
}
fmt.Println("f->x:", string(x))
s := MyStruct{"somevalue", 3.14159625}
x, err = AnyXml(s)
if err != nil {
t.Fatal(err)
}
fmt.Println("s->x:", string(x))
}
func TestAnyXmlIndent(t *testing.T) {
var i interface{}
err := json.Unmarshal(anydata, &i)
if err != nil {
t.Fatal(err)
}
x, err := AnyXmlIndent(i, "", " ")
if err != nil {
t.Fatal(err)
}
fmt.Println("[]->x:\n", string(x))
a := []interface{}{"try", "this", 3.14159265, true}
x, err = AnyXmlIndent(a, "", " ")
if err != nil {
t.Fatal(err)
}
fmt.Println("a->x:\n", string(x))
x, err = AnyXmlIndent(3.14159625, "", " ")
if err != nil {
t.Fatal(err)
}
fmt.Println("f->x:\n", string(x))
x, err = AnyXmlIndent(3.14159625, "", " ", "myRootTag", "myElementTag")
if err != nil {
t.Fatal(err)
}
fmt.Println("f->x:\n", string(x))
s := MyStruct{"somevalue", 3.14159625}
x, err = AnyXmlIndent(s, "", " ")
if err != nil {
t.Fatal(err)
}
fmt.Println("s->x:\n", string(x))
}
func TestNilMap(t *testing.T) {
XmlDefaultEmptyElemSyntax()
checkval := ""
xmlout, err := AnyXml(nil, "root")
if err != nil {
t.Fatal(err)
}
if string(xmlout) != checkval {
fmt.Println(string(xmlout), "!=", checkval)
t.Fatal()
}
checkval = " "
xmlout, err = AnyXmlIndent(nil, " ", " ", "root")
if err != nil {
t.Fatal(err)
}
if string(xmlout) != checkval {
fmt.Println(string(xmlout), "!=", checkval)
t.Fatal()
}
// use Go XML marshal syntax for empty element"
XmlGoEmptyElemSyntax()
checkval = ""
xmlout, err = AnyXml(nil, "root")
if err != nil {
t.Fatal(err)
}
if string(xmlout) != checkval {
fmt.Println(string(xmlout), "!=", checkval)
t.Fatal()
}
checkval = ` `
xmlout, err = AnyXmlIndent(nil, " ", " ", "root")
if err != nil {
t.Fatal(err)
}
if string(xmlout) != checkval {
fmt.Println(string(xmlout), "!=", checkval)
t.Fatal()
}
XmlDefaultEmptyElemSyntax()
}
func TestNilValue(t *testing.T) {
val := map[string]interface{}{"toplevel": nil}
checkval := ""
XmlDefaultEmptyElemSyntax()
xmlout, err := AnyXml(val, "root")
if err != nil {
t.Fatal(err)
}
if string(xmlout) != checkval {
fmt.Println(string(xmlout), "!=", checkval)
t.Fatal()
}
checkval = `
`
xmlout, err = AnyXmlIndent(val, " ", " ", "root")
if err != nil {
t.Fatal(err)
}
if string(xmlout) != checkval {
fmt.Println(string(xmlout), "!=", checkval)
t.Fatal()
}
XmlGoEmptyElemSyntax()
checkval = ""
xmlout, err = AnyXml(val, "root")
if err != nil {
t.Fatal(err)
}
if string(xmlout) != checkval {
fmt.Println(string(xmlout), "!=", checkval)
t.Fatal()
}
checkval = `
`
xmlout, err = AnyXmlIndent(val, " ", " ", "root")
if err != nil {
t.Fatal(err)
}
if string(xmlout) != checkval {
fmt.Println(string(xmlout), "!=", checkval)
t.Fatal()
}
XmlDefaultEmptyElemSyntax()
}