11package dict
22
33import (
4+ "encoding/json"
45 "errors"
56 "fmt"
67 "sort"
@@ -10,7 +11,7 @@ import (
1011 "github.com/ghosind/go-assert"
1112)
1213
13- type dictTestConstructor func () collection.Dict [string , string ]
14+ type dictConstructor func () collection.Dict [string , string ]
1415
1516var testDataEn = map [string ]string {
1617 "zero" : "0" ,
@@ -38,7 +39,7 @@ var testDataZh = map[string]string{
3839 "九" : "9" ,
3940}
4041
41- func testDict (a * assert.Assertion , constructor dictTestConstructor ) {
42+ func testDict (a * assert.Assertion , constructor dictConstructor ) {
4243 testDictClear (a , constructor )
4344 testDictClone (a , constructor )
4445 testDictContainsKey (a , constructor )
@@ -57,9 +58,10 @@ func testDict(a *assert.Assertion, constructor dictTestConstructor) {
5758 testDictString (a , constructor )
5859 testDictValues (a , constructor )
5960 testDictValuesIter (a , constructor )
61+ testDictJSON (a , constructor )
6062}
6163
62- func testDictClear (a * assert.Assertion , constructor dictTestConstructor ) {
64+ func testDictClear (a * assert.Assertion , constructor dictConstructor ) {
6365 d := constructor ()
6466 for k , v := range testDataEn {
6567 d .Put (k , v )
@@ -72,7 +74,7 @@ func testDictClear(a *assert.Assertion, constructor dictTestConstructor) {
7274 }
7375}
7476
75- func testDictClone (a * assert.Assertion , constructor dictTestConstructor ) {
77+ func testDictClone (a * assert.Assertion , constructor dictConstructor ) {
7678 d1 := constructor ()
7779 for k , v := range testDataEn {
7880 d1 .Put (k , v )
@@ -81,7 +83,7 @@ func testDictClone(a *assert.Assertion, constructor dictTestConstructor) {
8183 a .TrueNow (d1 .Equals (d2 ))
8284}
8385
84- func testDictContainsKey (a * assert.Assertion , constructor dictTestConstructor ) {
86+ func testDictContainsKey (a * assert.Assertion , constructor dictConstructor ) {
8587 d := constructor ()
8688 for k , v := range testDataEn {
8789 d .Put (k , v )
@@ -94,7 +96,7 @@ func testDictContainsKey(a *assert.Assertion, constructor dictTestConstructor) {
9496 }
9597}
9698
97- func testDictEquals (a * assert.Assertion , constructor dictTestConstructor ) {
99+ func testDictEquals (a * assert.Assertion , constructor dictConstructor ) {
98100 d1 := constructor ()
99101 a .NotTrueNow (d1 .Equals (nil ))
100102
@@ -126,7 +128,7 @@ func testDictEquals(a *assert.Assertion, constructor dictTestConstructor) {
126128 a .NotTrueNow (d1 .Equals (d3 ))
127129}
128130
129- func testDictForEach (a * assert.Assertion , constructor dictTestConstructor ) {
131+ func testDictForEach (a * assert.Assertion , constructor dictConstructor ) {
130132 d := constructor ()
131133 for k , v := range testDataEn {
132134 d .Put (k , v )
@@ -152,7 +154,7 @@ func testDictForEach(a *assert.Assertion, constructor dictTestConstructor) {
152154 a .EqualNow (count , 1 )
153155}
154156
155- func testDictGet (a * assert.Assertion , constructor dictTestConstructor ) {
157+ func testDictGet (a * assert.Assertion , constructor dictConstructor ) {
156158 d := constructor ()
157159 for k , v := range testDataEn {
158160 d .Put (k , v )
@@ -170,7 +172,7 @@ func testDictGet(a *assert.Assertion, constructor dictTestConstructor) {
170172 }
171173}
172174
173- func testDictGetDefault (a * assert.Assertion , constructor dictTestConstructor ) {
175+ func testDictGetDefault (a * assert.Assertion , constructor dictConstructor ) {
174176 d := constructor ()
175177 for k , v := range testDataEn {
176178 d .Put (k , v )
@@ -186,7 +188,7 @@ func testDictGetDefault(a *assert.Assertion, constructor dictTestConstructor) {
186188 }
187189}
188190
189- func testDictIsEmpty (a * assert.Assertion , constructor dictTestConstructor ) {
191+ func testDictIsEmpty (a * assert.Assertion , constructor dictConstructor ) {
190192 d := constructor ()
191193 a .TrueNow (d .IsEmpty ())
192194 for k , v := range testDataEn {
@@ -197,7 +199,7 @@ func testDictIsEmpty(a *assert.Assertion, constructor dictTestConstructor) {
197199 a .TrueNow (d .IsEmpty ())
198200}
199201
200- func testDictKeys (a * assert.Assertion , constructor dictTestConstructor ) {
202+ func testDictKeys (a * assert.Assertion , constructor dictConstructor ) {
201203 d := constructor ()
202204 for k , v := range testDataEn {
203205 d .Put (k , v )
@@ -209,7 +211,7 @@ func testDictKeys(a *assert.Assertion, constructor dictTestConstructor) {
209211 }
210212}
211213
212- func testDictPut (a * assert.Assertion , constructor dictTestConstructor ) {
214+ func testDictPut (a * assert.Assertion , constructor dictConstructor ) {
213215 d := constructor ()
214216 for k , v := range testDataEn {
215217 d .Put (k , v )
@@ -218,7 +220,7 @@ func testDictPut(a *assert.Assertion, constructor dictTestConstructor) {
218220 a .EqualNow (d .Size (), len (testDataEn ))
219221}
220222
221- func testDictRemove (a * assert.Assertion , constructor dictTestConstructor ) {
223+ func testDictRemove (a * assert.Assertion , constructor dictConstructor ) {
222224 d := constructor ()
223225 for k , v := range testDataEn {
224226 d .Put (k , v )
@@ -230,7 +232,7 @@ func testDictRemove(a *assert.Assertion, constructor dictTestConstructor) {
230232 a .EqualNow (d .Size (), 0 )
231233}
232234
233- func testDictReplace (a * assert.Assertion , constructor dictTestConstructor ) {
235+ func testDictReplace (a * assert.Assertion , constructor dictConstructor ) {
234236 d := constructor ()
235237 for k , v := range testDataEn {
236238 d .Put (k , v )
@@ -249,7 +251,7 @@ func testDictReplace(a *assert.Assertion, constructor dictTestConstructor) {
249251 }
250252}
251253
252- func testDictSize (a * assert.Assertion , constructor dictTestConstructor ) {
254+ func testDictSize (a * assert.Assertion , constructor dictConstructor ) {
253255 d := constructor ()
254256 a .EqualNow (d .Size (), 0 )
255257 for k , v := range testDataEn {
@@ -260,7 +262,7 @@ func testDictSize(a *assert.Assertion, constructor dictTestConstructor) {
260262 a .EqualNow (d .Size (), 0 )
261263}
262264
263- func testDictString (a * assert.Assertion , constructor dictTestConstructor ) {
265+ func testDictString (a * assert.Assertion , constructor dictConstructor ) {
264266 d := constructor ()
265267 for k , v := range testDataEn {
266268 d .Put (k , v )
@@ -275,7 +277,7 @@ func testDictString(a *assert.Assertion, constructor dictTestConstructor) {
275277 }
276278}
277279
278- func testDictValues (a * assert.Assertion , constructor dictTestConstructor ) {
280+ func testDictValues (a * assert.Assertion , constructor dictConstructor ) {
279281 d := constructor ()
280282 expectedValues := make ([]string , 0 , len (testDataEn ))
281283 for k , v := range testDataEn {
@@ -291,3 +293,26 @@ func testDictValues(a *assert.Assertion, constructor dictTestConstructor) {
291293
292294 a .EqualNow (expectedValues , values )
293295}
296+
297+ func testDictJSON (a * assert.Assertion , constructor dictConstructor ) {
298+ d1 := constructor ()
299+ for k , v := range testDataEn {
300+ d1 .Put (k , v )
301+ }
302+
303+ b , err := d1 .MarshalJSON ()
304+ a .NilNow (err )
305+
306+ d2 := constructor ()
307+ err = d2 .UnmarshalJSON (b )
308+ a .NilNow (err )
309+ a .TrueNow (d1 .Equals (d2 ))
310+
311+ d2 .Clear ()
312+ b , err = json .Marshal (d1 )
313+ a .NilNow (err )
314+
315+ err = json .Unmarshal (b , d2 )
316+ a .NilNow (err )
317+ a .TrueNow (d1 .Equals (d2 ))
318+ }
0 commit comments