github.com/zhongdalu/gf@v1.0.0/g/encoding/gparser/gparser_unit_load_test.go (about)

     1  // Copyright 2017 gf Author(https://github.com/zhongdalu/gf). All Rights Reserved.
     2  //
     3  // This Source Code Form is subject to the terms of the MIT License.
     4  // If a copy of the MIT was not distributed with this file,
     5  // You can obtain one at https://github.com/zhongdalu/gf.
     6  
     7  package gparser_test
     8  
     9  import (
    10  	"io/ioutil"
    11  	"testing"
    12  
    13  	"github.com/zhongdalu/gf/g"
    14  	"github.com/zhongdalu/gf/g/encoding/gparser"
    15  	"github.com/zhongdalu/gf/g/os/gfile"
    16  	"github.com/zhongdalu/gf/g/test/gtest"
    17  )
    18  
    19  func Test_Load_JSON(t *testing.T) {
    20  	data := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`)
    21  	// JSON
    22  	gtest.Case(t, func() {
    23  		j, err := gparser.LoadContent(data)
    24  		gtest.Assert(err, nil)
    25  		gtest.Assert(j.Get("n"), "123456789")
    26  		gtest.Assert(j.Get("m"), g.Map{"k": "v"})
    27  		gtest.Assert(j.Get("m.k"), "v")
    28  		gtest.Assert(j.Get("a"), g.Slice{1, 2, 3})
    29  		gtest.Assert(j.Get("a.1"), 2)
    30  	})
    31  	// JSON
    32  	gtest.Case(t, func() {
    33  		path := "test.json"
    34  		gfile.PutBinContents(path, data)
    35  		defer gfile.Remove(path)
    36  		j, err := gparser.Load(path)
    37  		gtest.Assert(err, nil)
    38  		gtest.Assert(j.Get("n"), "123456789")
    39  		gtest.Assert(j.Get("m"), g.Map{"k": "v"})
    40  		gtest.Assert(j.Get("m.k"), "v")
    41  		gtest.Assert(j.Get("a"), g.Slice{1, 2, 3})
    42  		gtest.Assert(j.Get("a.1"), 2)
    43  	})
    44  }
    45  
    46  func Test_Load_XML(t *testing.T) {
    47  	data := []byte(`<doc><a>1</a><a>2</a><a>3</a><m><k>v</k></m><n>123456789</n></doc>`)
    48  	// XML
    49  	gtest.Case(t, func() {
    50  		j, err := gparser.LoadContent(data)
    51  		gtest.Assert(err, nil)
    52  		gtest.Assert(j.Get("doc.n"), "123456789")
    53  		gtest.Assert(j.Get("doc.m"), g.Map{"k": "v"})
    54  		gtest.Assert(j.Get("doc.m.k"), "v")
    55  		gtest.Assert(j.Get("doc.a"), g.Slice{"1", "2", "3"})
    56  		gtest.Assert(j.Get("doc.a.1"), 2)
    57  	})
    58  	// XML
    59  	gtest.Case(t, func() {
    60  		path := "test.xml"
    61  		gfile.PutBinContents(path, data)
    62  		defer gfile.Remove(path)
    63  		j, err := gparser.Load(path)
    64  		gtest.Assert(err, nil)
    65  		gtest.Assert(j.Get("doc.n"), "123456789")
    66  		gtest.Assert(j.Get("doc.m"), g.Map{"k": "v"})
    67  		gtest.Assert(j.Get("doc.m.k"), "v")
    68  		gtest.Assert(j.Get("doc.a"), g.Slice{"1", "2", "3"})
    69  		gtest.Assert(j.Get("doc.a.1"), 2)
    70  	})
    71  
    72  	// XML
    73  	gtest.Case(t, func() {
    74  		xml := `<?xml version="1.0"?>
    75  
    76  	<Output type="o">
    77  	<itotalSize>0</itotalSize>
    78  	<ipageSize>1</ipageSize>
    79  	<ipageIndex>2</ipageIndex>
    80  	<itotalRecords>GF框架</itotalRecords>
    81  	<nworkOrderDtos/>
    82  	<nworkOrderFrontXML/>
    83  	</Output>`
    84  		j, err := gparser.LoadContent(xml)
    85  		gtest.Assert(err, nil)
    86  		gtest.Assert(j.Get("Output.ipageIndex"), "2")
    87  		gtest.Assert(j.Get("Output.itotalRecords"), "GF框架")
    88  	})
    89  }
    90  
    91  func Test_Load_YAML1(t *testing.T) {
    92  	data := []byte(`
    93  a:
    94  - 1
    95  - 2
    96  - 3
    97  m:
    98   k: v
    99  "n": 123456789
   100      `)
   101  	// YAML
   102  	gtest.Case(t, func() {
   103  		j, err := gparser.LoadContent(data)
   104  		gtest.Assert(err, nil)
   105  		gtest.Assert(j.Get("n"), "123456789")
   106  		gtest.Assert(j.Get("m"), g.Map{"k": "v"})
   107  		gtest.Assert(j.Get("m.k"), "v")
   108  		gtest.Assert(j.Get("a"), g.Slice{1, 2, 3})
   109  		gtest.Assert(j.Get("a.1"), 2)
   110  	})
   111  	// YAML
   112  	gtest.Case(t, func() {
   113  		path := "test.yaml"
   114  		gfile.PutBinContents(path, data)
   115  		defer gfile.Remove(path)
   116  		j, err := gparser.Load(path)
   117  		gtest.Assert(err, nil)
   118  		gtest.Assert(j.Get("n"), "123456789")
   119  		gtest.Assert(j.Get("m"), g.Map{"k": "v"})
   120  		gtest.Assert(j.Get("m.k"), "v")
   121  		gtest.Assert(j.Get("a"), g.Slice{1, 2, 3})
   122  		gtest.Assert(j.Get("a.1"), 2)
   123  	})
   124  }
   125  
   126  func Test_Load_YAML2(t *testing.T) {
   127  	data := []byte("i : 123456789")
   128  	gtest.Case(t, func() {
   129  		j, err := gparser.LoadContent(data)
   130  		gtest.Assert(err, nil)
   131  		gtest.Assert(j.Get("i"), "123456789")
   132  	})
   133  }
   134  
   135  func Test_Load_TOML1(t *testing.T) {
   136  	data := []byte(`
   137  a = ["1", "2", "3"]
   138  n = "123456789"
   139  
   140  [m]
   141    k = "v"
   142  `)
   143  	// TOML
   144  	gtest.Case(t, func() {
   145  		j, err := gparser.LoadContent(data)
   146  		gtest.Assert(err, nil)
   147  		gtest.Assert(j.Get("n"), "123456789")
   148  		gtest.Assert(j.Get("m"), g.Map{"k": "v"})
   149  		gtest.Assert(j.Get("m.k"), "v")
   150  		gtest.Assert(j.Get("a"), g.Slice{"1", "2", "3"})
   151  		gtest.Assert(j.Get("a.1"), 2)
   152  	})
   153  	// TOML
   154  	gtest.Case(t, func() {
   155  		path := "test.toml"
   156  		gfile.PutBinContents(path, data)
   157  		defer gfile.Remove(path)
   158  		j, err := gparser.Load(path)
   159  		gtest.Assert(err, nil)
   160  		gtest.Assert(j.Get("n"), "123456789")
   161  		gtest.Assert(j.Get("m"), g.Map{"k": "v"})
   162  		gtest.Assert(j.Get("m.k"), "v")
   163  		gtest.Assert(j.Get("a"), g.Slice{"1", "2", "3"})
   164  		gtest.Assert(j.Get("a.1"), 2)
   165  	})
   166  }
   167  
   168  func Test_Load_TOML2(t *testing.T) {
   169  	data := []byte("i=123456789")
   170  	gtest.Case(t, func() {
   171  		j, err := gparser.LoadContent(data)
   172  		gtest.Assert(err, nil)
   173  		gtest.Assert(j.Get("i"), "123456789")
   174  	})
   175  }
   176  
   177  func Test_Load_Nil(t *testing.T) {
   178  	gtest.Case(t, func() {
   179  		p := gparser.NewUnsafe()
   180  		gtest.Assert(p.Value(), nil)
   181  		file := "test22222.json"
   182  		filePath := gfile.Pwd() + gfile.Separator + file
   183  		ioutil.WriteFile(filePath, []byte("{"), 0644)
   184  		defer gfile.Remove(filePath)
   185  		_, err := gparser.Load(file)
   186  		gtest.AssertNE(err, nil)
   187  		_, err = gparser.LoadContent("{")
   188  		gtest.AssertNE(err, nil)
   189  	})
   190  }