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 }