github.com/gogf/gf@v1.16.9/encoding/gparser/gparser_unit_basic_test.go (about)

     1  // Copyright GoFrame Author(https://goframe.org). 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/gogf/gf.
     6  
     7  package gparser_test
     8  
     9  import (
    10  	"testing"
    11  
    12  	"github.com/gogf/gf/encoding/gparser"
    13  	"github.com/gogf/gf/frame/g"
    14  	"github.com/gogf/gf/test/gtest"
    15  )
    16  
    17  func Test_New(t *testing.T) {
    18  	data := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`)
    19  	gtest.C(t, func(t *gtest.T) {
    20  		j := gparser.New(data)
    21  		t.Assert(j.Get("n"), "123456789")
    22  		t.Assert(j.Get("m"), g.Map{"k": "v"})
    23  		t.Assert(j.Get("a"), g.Slice{1, 2, 3})
    24  		v := j.Value().(g.Map)
    25  		t.Assert(v["n"], 123456789)
    26  	})
    27  }
    28  
    29  func Test_NewUnsafe(t *testing.T) {
    30  	data := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`)
    31  	gtest.C(t, func(t *gtest.T) {
    32  		j := gparser.New(data)
    33  		t.Assert(j.Get("n"), "123456789")
    34  		t.Assert(j.Get("m"), g.Map{"k": "v"})
    35  		t.Assert(j.Get("m.k"), "v")
    36  		t.Assert(j.Get("a"), g.Slice{1, 2, 3})
    37  		t.Assert(j.Get("a.1"), 2)
    38  	})
    39  }
    40  
    41  func Test_Encode(t *testing.T) {
    42  	value := g.Slice{1, 2, 3}
    43  	gtest.C(t, func(t *gtest.T) {
    44  		b, err := gparser.VarToJson(value)
    45  		t.Assert(err, nil)
    46  		t.Assert(b, []byte(`[1,2,3]`))
    47  	})
    48  }
    49  
    50  func Test_Decode(t *testing.T) {
    51  	data := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`)
    52  	gtest.C(t, func(t *gtest.T) {
    53  		j := gparser.New(data)
    54  		t.AssertNE(j, nil)
    55  		t.Assert(j.Get("n"), "123456789")
    56  		t.Assert(j.Get("m"), g.Map{"k": "v"})
    57  		t.Assert(j.Get("m.k"), "v")
    58  		t.Assert(j.Get("a"), g.Slice{1, 2, 3})
    59  		t.Assert(j.Get("a.1"), 2)
    60  	})
    61  }
    62  
    63  func Test_SplitChar(t *testing.T) {
    64  	data := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`)
    65  	gtest.C(t, func(t *gtest.T) {
    66  		j := gparser.New(data)
    67  		j.SetSplitChar(byte('#'))
    68  		t.AssertNE(j, nil)
    69  		t.Assert(j.Get("n"), "123456789")
    70  		t.Assert(j.Get("m"), g.Map{"k": "v"})
    71  		t.Assert(j.Get("m#k"), "v")
    72  		t.Assert(j.Get("a"), g.Slice{1, 2, 3})
    73  		t.Assert(j.Get("a#1"), 2)
    74  	})
    75  }
    76  
    77  func Test_ViolenceCheck(t *testing.T) {
    78  	data := []byte(`{"m":{"a":[1,2,3], "v1.v2":"4"}}`)
    79  	gtest.C(t, func(t *gtest.T) {
    80  		j := gparser.New(data)
    81  		t.AssertNE(j, nil)
    82  		t.Assert(j.Get("m.a.2"), 3)
    83  		t.Assert(j.Get("m.v1.v2"), nil)
    84  		j.SetViolenceCheck(true)
    85  		t.Assert(j.Get("m.v1.v2"), 4)
    86  	})
    87  }
    88  
    89  func Test_GetVar(t *testing.T) {
    90  	data := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`)
    91  	gtest.C(t, func(t *gtest.T) {
    92  		j := gparser.New(data)
    93  		t.AssertNE(j, nil)
    94  		t.Assert(j.GetVar("n").String(), "123456789")
    95  		t.Assert(j.GetVar("m").Map(), g.Map{"k": "v"})
    96  		t.Assert(j.GetVar("a").Interfaces(), g.Slice{1, 2, 3})
    97  		t.Assert(j.GetVar("a").Slice(), g.Slice{1, 2, 3})
    98  		t.Assert(j.GetMap("a"), g.Map{"1": "2", "3": nil})
    99  	})
   100  }
   101  
   102  func Test_GetMap(t *testing.T) {
   103  	data := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`)
   104  	gtest.C(t, func(t *gtest.T) {
   105  		j := gparser.New(data)
   106  		t.AssertNE(j, nil)
   107  		t.Assert(j.GetMap("n"), nil)
   108  		t.Assert(j.GetMap("m"), g.Map{"k": "v"})
   109  		t.Assert(j.GetMap("a"), g.Map{"1": "2", "3": nil})
   110  	})
   111  }
   112  
   113  func Test_GetArray(t *testing.T) {
   114  	data := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`)
   115  	gtest.C(t, func(t *gtest.T) {
   116  		j := gparser.New(data)
   117  		t.AssertNE(j, nil)
   118  		t.Assert(j.GetArray("n"), g.Array{123456789})
   119  		t.Assert(j.GetArray("m"), g.Array{g.Map{"k": "v"}})
   120  		t.Assert(j.GetArray("a"), g.Array{1, 2, 3})
   121  	})
   122  }
   123  
   124  func Test_GetString(t *testing.T) {
   125  	data := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`)
   126  	gtest.C(t, func(t *gtest.T) {
   127  		j := gparser.New(data)
   128  		t.AssertNE(j, nil)
   129  		t.AssertEQ(j.GetString("n"), "123456789")
   130  		t.AssertEQ(j.GetString("m"), `{"k":"v"}`)
   131  		t.AssertEQ(j.GetString("a"), `[1,2,3]`)
   132  		t.AssertEQ(j.GetString("i"), "")
   133  	})
   134  }
   135  
   136  func Test_GetStrings(t *testing.T) {
   137  	data := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`)
   138  	gtest.C(t, func(t *gtest.T) {
   139  		j := gparser.New(data)
   140  		t.AssertNE(j, nil)
   141  		t.AssertEQ(j.GetStrings("n"), g.SliceStr{"123456789"})
   142  		t.AssertEQ(j.GetStrings("m"), g.SliceStr{`{"k":"v"}`})
   143  		t.AssertEQ(j.GetStrings("a"), g.SliceStr{"1", "2", "3"})
   144  		t.AssertEQ(j.GetStrings("i"), nil)
   145  	})
   146  }
   147  
   148  func Test_GetInterfaces(t *testing.T) {
   149  	data := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`)
   150  	gtest.C(t, func(t *gtest.T) {
   151  		j := gparser.New(data)
   152  		t.AssertNE(j, nil)
   153  		t.AssertEQ(j.GetInterfaces("n"), g.Array{123456789})
   154  		t.AssertEQ(j.GetInterfaces("m"), g.Array{g.Map{"k": "v"}})
   155  		t.AssertEQ(j.GetInterfaces("a"), g.Array{1, 2, 3})
   156  	})
   157  }
   158  
   159  func Test_Len(t *testing.T) {
   160  	gtest.C(t, func(t *gtest.T) {
   161  		p := gparser.New(nil)
   162  		p.Append("a", 1)
   163  		p.Append("a", 2)
   164  		t.Assert(p.Len("a"), 2)
   165  	})
   166  	gtest.C(t, func(t *gtest.T) {
   167  		p := gparser.New(nil)
   168  		p.Append("a.b", 1)
   169  		p.Append("a.c", 2)
   170  		t.Assert(p.Len("a"), 2)
   171  	})
   172  	gtest.C(t, func(t *gtest.T) {
   173  		p := gparser.New(nil)
   174  		p.Set("a", 1)
   175  		t.Assert(p.Len("a"), -1)
   176  	})
   177  }
   178  
   179  func Test_Append(t *testing.T) {
   180  	gtest.C(t, func(t *gtest.T) {
   181  		p := gparser.New(nil)
   182  		p.Append("a", 1)
   183  		p.Append("a", 2)
   184  		t.Assert(p.Get("a"), g.Slice{1, 2})
   185  	})
   186  	gtest.C(t, func(t *gtest.T) {
   187  		p := gparser.New(nil)
   188  		p.Append("a.b", 1)
   189  		p.Append("a.c", 2)
   190  		t.Assert(p.Get("a"), g.Map{
   191  			"b": g.Slice{1},
   192  			"c": g.Slice{2},
   193  		})
   194  	})
   195  	gtest.C(t, func(t *gtest.T) {
   196  		p := gparser.New(nil)
   197  		p.Set("a", 1)
   198  		err := p.Append("a", 2)
   199  		t.AssertNE(err, nil)
   200  		t.Assert(p.Get("a"), 1)
   201  	})
   202  }
   203  
   204  func Test_Convert(t *testing.T) {
   205  	gtest.C(t, func(t *gtest.T) {
   206  		p := gparser.New(`{"name":"gf","bool":true,"int":1,"float":1,"ints":[1,2],"floats":[1,2],"time":"2019-06-12","person": {"name": "gf"}}`)
   207  		t.Assert(p.GetVar("name").String(), "gf")
   208  		t.Assert(p.GetString("name"), "gf")
   209  		t.Assert(p.GetBool("bool"), true)
   210  		t.Assert(p.GetInt("int"), 1)
   211  		t.Assert(p.GetInt8("int"), 1)
   212  		t.Assert(p.GetInt16("int"), 1)
   213  		t.Assert(p.GetInt32("int"), 1)
   214  		t.Assert(p.GetInt64("int"), 1)
   215  		t.Assert(p.GetUint("int"), 1)
   216  		t.Assert(p.GetUint8("int"), 1)
   217  		t.Assert(p.GetUint16("int"), 1)
   218  		t.Assert(p.GetUint32("int"), 1)
   219  		t.Assert(p.GetUint64("int"), 1)
   220  		t.Assert(p.GetInts("ints")[0], 1)
   221  		t.Assert(p.GetFloat32("float"), 1)
   222  		t.Assert(p.GetFloat64("float"), 1)
   223  		t.Assert(p.GetFloats("floats")[0], 1)
   224  		t.Assert(p.GetTime("time").Format("2006-01-02"), "2019-06-12")
   225  		t.Assert(p.GetGTime("time").Format("Y-m-d"), "2019-06-12")
   226  		t.Assert(p.GetDuration("time").String(), "0s")
   227  		name := struct {
   228  			Name string
   229  		}{}
   230  		err := p.GetStruct("person", &name)
   231  		t.Assert(err, nil)
   232  		t.Assert(name.Name, "gf")
   233  		t.Assert(p.Map()["name"], "gf")
   234  		err = p.Struct(&name)
   235  		t.Assert(err, nil)
   236  		t.Assert(name.Name, "gf")
   237  		//p.Dump()
   238  
   239  		p = gparser.New(`[0,1,2]`)
   240  		t.Assert(p.Array()[0], 0)
   241  	})
   242  }
   243  
   244  func Test_Convert2(t *testing.T) {
   245  	gtest.C(t, func(t *gtest.T) {
   246  		xmlArr := []byte{60, 114, 111, 111, 116, 47, 62}
   247  		p := gparser.New(`<root></root>`)
   248  		arr, err := p.ToXml("root")
   249  		t.Assert(err, nil)
   250  		t.Assert(arr, xmlArr)
   251  		arr, err = gparser.VarToXml(`<root></root>`, "root")
   252  		t.Assert(err, nil)
   253  		t.Assert(arr, xmlArr)
   254  
   255  		arr, err = p.ToXmlIndent("root")
   256  		t.Assert(err, nil)
   257  		t.Assert(arr, xmlArr)
   258  		arr, err = gparser.VarToXmlIndent(`<root></root>`, "root")
   259  		t.Assert(err, nil)
   260  		t.Assert(arr, xmlArr)
   261  
   262  		p = gparser.New(`{"name":"gf"}`)
   263  		str, err := p.ToJsonString()
   264  		t.Assert(err, nil)
   265  		t.Assert(str, `{"name":"gf"}`)
   266  		str, err = gparser.VarToJsonString(`{"name":"gf"}`)
   267  		t.Assert(err, nil)
   268  		t.Assert(str, `{"name":"gf"}`)
   269  
   270  		jsonIndentArr := []byte{123, 10, 9, 34, 110, 97, 109, 101, 34, 58, 32, 34, 103, 102, 34, 10, 125}
   271  		arr, err = p.ToJsonIndent()
   272  		t.Assert(err, nil)
   273  		t.Assert(arr, jsonIndentArr)
   274  		arr, err = gparser.VarToJsonIndent(`{"name":"gf"}`)
   275  		t.Assert(err, nil)
   276  		t.Assert(arr, jsonIndentArr)
   277  
   278  		str, err = p.ToJsonIndentString()
   279  		t.Assert(err, nil)
   280  		t.Assert(str, "{\n\t\"name\": \"gf\"\n}")
   281  		str, err = gparser.VarToJsonIndentString(`{"name":"gf"}`)
   282  		t.Assert(err, nil)
   283  		t.Assert(str, "{\n\t\"name\": \"gf\"\n}")
   284  
   285  		p = gparser.New(g.Map{"name": "gf"})
   286  		arr, err = p.ToYaml()
   287  		t.Assert(err, nil)
   288  		t.Assert(arr, "name: gf\n")
   289  		arr, err = gparser.VarToYaml(g.Map{"name": "gf"})
   290  		t.Assert(err, nil)
   291  		t.Assert(arr, "name: gf\n")
   292  
   293  		tomlArr := []byte{110, 97, 109, 101, 32, 61, 32, 34, 103, 102, 34, 10}
   294  		p = gparser.New(`
   295  name= "gf"
   296  `)
   297  		arr, err = p.ToToml()
   298  		t.Assert(err, nil)
   299  		t.Assert(arr, tomlArr)
   300  		arr, err = gparser.VarToToml(`
   301  name= "gf"
   302  `)
   303  		t.Assert(err, nil)
   304  		t.Assert(arr, tomlArr)
   305  	})
   306  }