...

Source file src/github.com/clbanning/mxj/v2/anyxml_test.go

Documentation: github.com/clbanning/mxj/v2

     1  package mxj
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"testing"
     7  )
     8  
     9  func TestAnyXmlHeader(t *testing.T) {
    10  	fmt.Println("\n----------------  anyxml_test.go ...")
    11  }
    12  
    13  var anydata = []byte(`[
    14      {
    15          "somekey": "somevalue"
    16      },
    17      {
    18          "somekey": "somevalue"
    19      },
    20      {
    21          "somekey": "somevalue",
    22          "someotherkey": "someothervalue"
    23      },
    24      "string",
    25      3.14159265,
    26      true
    27  ]`)
    28  
    29  type MyStruct struct {
    30  	Somekey string  `xml:"somekey"`
    31  	B       float32 `xml:"floatval"`
    32  }
    33  
    34  func TestAnyXml(t *testing.T) {
    35  	var i interface{}
    36  	err := json.Unmarshal(anydata, &i)
    37  	if err != nil {
    38  		t.Fatal(err)
    39  	}
    40  	x, err := AnyXml(i)
    41  	if err != nil {
    42  		t.Fatal(err)
    43  	}
    44  	fmt.Println("[]->x:", string(x))
    45  
    46  	a := []interface{}{"try", "this", 3.14159265, true}
    47  	x, err = AnyXml(a)
    48  	if err != nil {
    49  		t.Fatal(err)
    50  	}
    51  	fmt.Println("a->x:", string(x))
    52  
    53  	x, err = AnyXml(a, "myRootTag", "myElementTag")
    54  	if err != nil {
    55  		t.Fatal(err)
    56  	}
    57  	fmt.Println("a->x:", string(x))
    58  
    59  	x, err = AnyXml(3.14159625)
    60  	if err != nil {
    61  		t.Fatal(err)
    62  	}
    63  	fmt.Println("f->x:", string(x))
    64  
    65  	s := MyStruct{"somevalue", 3.14159625}
    66  	x, err = AnyXml(s)
    67  	if err != nil {
    68  		t.Fatal(err)
    69  	}
    70  	fmt.Println("s->x:", string(x))
    71  }
    72  
    73  func TestAnyXmlIndent(t *testing.T) {
    74  	var i interface{}
    75  	err := json.Unmarshal(anydata, &i)
    76  	if err != nil {
    77  		t.Fatal(err)
    78  	}
    79  	x, err := AnyXmlIndent(i, "", "  ")
    80  	if err != nil {
    81  		t.Fatal(err)
    82  	}
    83  	fmt.Println("[]->x:\n", string(x))
    84  
    85  	a := []interface{}{"try", "this", 3.14159265, true}
    86  	x, err = AnyXmlIndent(a, "", "  ")
    87  	if err != nil {
    88  		t.Fatal(err)
    89  	}
    90  	fmt.Println("a->x:\n", string(x))
    91  
    92  	x, err = AnyXmlIndent(3.14159625, "", "  ")
    93  	if err != nil {
    94  		t.Fatal(err)
    95  	}
    96  	fmt.Println("f->x:\n", string(x))
    97  
    98  	x, err = AnyXmlIndent(3.14159625, "", "  ", "myRootTag", "myElementTag")
    99  	if err != nil {
   100  		t.Fatal(err)
   101  	}
   102  	fmt.Println("f->x:\n", string(x))
   103  
   104  	s := MyStruct{"somevalue", 3.14159625}
   105  	x, err = AnyXmlIndent(s, "", "  ")
   106  	if err != nil {
   107  		t.Fatal(err)
   108  	}
   109  	fmt.Println("s->x:\n", string(x))
   110  }
   111  
   112  
   113  func TestNilMap(t *testing.T) {
   114  	XmlDefaultEmptyElemSyntax()
   115  	checkval := "<root/>"
   116  	xmlout, err := AnyXml(nil, "root")
   117  	if err != nil {
   118  		t.Fatal(err)
   119  	}
   120  	if string(xmlout) != checkval {
   121  		fmt.Println(string(xmlout), "!=", checkval)
   122  		t.Fatal()
   123  	}
   124  
   125  	checkval = "   <root/>"
   126  	xmlout, err = AnyXmlIndent(nil, "   ", "  ", "root")
   127  	if err != nil {
   128  		t.Fatal(err)
   129  	}
   130  	if string(xmlout) != checkval {
   131  		fmt.Println(string(xmlout), "!=", checkval)
   132  		t.Fatal()
   133  	}
   134  
   135  	// use Go XML marshal syntax for empty element"
   136  	XmlGoEmptyElemSyntax()
   137  	checkval = "<root></root>"
   138  	xmlout, err = AnyXml(nil, "root")
   139  	if err != nil {
   140  		t.Fatal(err)
   141  	}
   142  	if string(xmlout) != checkval {
   143  		fmt.Println(string(xmlout), "!=", checkval)
   144  		t.Fatal()
   145  	}
   146  
   147  	checkval = `   <root></root>`
   148  	xmlout, err = AnyXmlIndent(nil, "   ", "  ", "root")
   149  	if err != nil {
   150  		t.Fatal(err)
   151  	}
   152  	if string(xmlout) != checkval {
   153  		fmt.Println(string(xmlout), "!=", checkval)
   154  		t.Fatal()
   155  	}
   156  	XmlDefaultEmptyElemSyntax()
   157  }
   158  
   159  func TestNilValue(t *testing.T) {
   160  	val := map[string]interface{}{"toplevel": nil}
   161  	checkval := "<root><toplevel/></root>"
   162  
   163  	XmlDefaultEmptyElemSyntax()
   164  	xmlout, err := AnyXml(val, "root")
   165  	if err != nil {
   166  		t.Fatal(err)
   167  	}
   168  	if string(xmlout) != checkval {
   169  		fmt.Println(string(xmlout), "!=", checkval)
   170  		t.Fatal()
   171  	}
   172  
   173  	checkval = `   <root>
   174       <toplevel/>
   175     </root>`
   176  	xmlout, err = AnyXmlIndent(val, "   ", "  ", "root")
   177  	if err != nil {
   178  		t.Fatal(err)
   179  	}
   180  	if string(xmlout) != checkval {
   181  		fmt.Println(string(xmlout), "!=", checkval)
   182  		t.Fatal()
   183  	}
   184  
   185  	XmlGoEmptyElemSyntax()
   186  	checkval = "<root><toplevel></toplevel></root>"
   187  	xmlout, err = AnyXml(val, "root")
   188  	if err != nil {
   189  		t.Fatal(err)
   190  	}
   191  	if string(xmlout) != checkval {
   192  		fmt.Println(string(xmlout), "!=", checkval)
   193  		t.Fatal()
   194  	}
   195  
   196  	checkval = `   <root>
   197       <toplevel></toplevel>
   198     </root>`
   199  	xmlout, err = AnyXmlIndent(val, "   ", "  ", "root")
   200  	if err != nil {
   201  		t.Fatal(err)
   202  	}
   203  	if string(xmlout) != checkval {
   204  		fmt.Println(string(xmlout), "!=", checkval)
   205  		t.Fatal()
   206  	}
   207  	XmlDefaultEmptyElemSyntax()
   208  }
   209  

View as plain text