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 }