1 package json_test
2
3 import (
4 "bytes"
5 "fmt"
6 "testing"
7
8 "github.com/goccy/go-json"
9 )
10
11 type recursiveMap struct {
12 A int
13 B map[string]*recursiveMap
14 }
15
16 func TestCoverMap(t *testing.T) {
17 type structMap struct {
18 A map[string]int `json:"a"`
19 }
20 type structMapOmitEmpty struct {
21 A map[string]int `json:"a,omitempty"`
22 }
23 type structMapString struct {
24 A map[string]int `json:"a,string"`
25 }
26 type structMapPtr struct {
27 A *map[string]int `json:"a"`
28 }
29 type structMapPtrOmitEmpty struct {
30 A *map[string]int `json:"a,omitempty"`
31 }
32 type structMapPtrString struct {
33 A *map[string]int `json:"a,string"`
34 }
35
36 type structMapPtrContent struct {
37 A map[string]*int `json:"a"`
38 }
39 type structMapOmitEmptyPtrContent struct {
40 A map[string]*int `json:"a,omitempty"`
41 }
42 type structMapStringPtrContent struct {
43 A map[string]*int `json:"a,string"`
44 }
45 type structMapPtrPtrContent struct {
46 A *map[string]*int `json:"a"`
47 }
48 type structMapPtrOmitEmptyPtrContent struct {
49 A *map[string]*int `json:"a,omitempty"`
50 }
51 type structMapPtrStringPtrContent struct {
52 A *map[string]*int `json:"a,string"`
53 }
54
55 tests := []struct {
56 name string
57 data interface{}
58 }{
59 {
60 name: "NestedMap",
61 data: map[string]map[string]int{"a": {"b": 1}},
62 },
63 {
64 name: "RecursiveMap",
65 data: map[string]*recursiveMap{
66 "keyA": {
67 A: 1,
68 B: map[string]*recursiveMap{
69 "keyB": {
70 A: 2,
71 B: map[string]*recursiveMap{
72 "keyC": {
73 A: 3,
74 },
75 },
76 },
77 },
78 },
79 "keyD": {
80 A: 4,
81 B: map[string]*recursiveMap{
82 "keyE": {
83 A: 5,
84 B: map[string]*recursiveMap{
85 "keyF": {
86 A: 6,
87 },
88 },
89 },
90 },
91 },
92 },
93 },
94
95
96 {
97 name: "HeadMapZero",
98 data: struct {
99 A map[string]int `json:"a"`
100 }{},
101 },
102 {
103 name: "HeadMapZeroOmitEmpty",
104 data: struct {
105 A map[string]int `json:"a,omitempty"`
106 }{},
107 },
108 {
109 name: "HeadMapZeroString",
110 data: struct {
111 A map[string]int `json:"a,string"`
112 }{},
113 },
114
115
116 {
117 name: "HeadMap",
118 data: struct {
119 A map[string]int `json:"a"`
120 }{A: map[string]int{"m": -1}},
121 },
122 {
123 name: "HeadMapOmitEmpty",
124 data: struct {
125 A map[string]int `json:"a,omitempty"`
126 }{A: map[string]int{"m": -1}},
127 },
128 {
129 name: "HeadMapString",
130 data: struct {
131 A map[string]int `json:"a,string"`
132 }{A: map[string]int{"m": -1}},
133 },
134
135
136 {
137 name: "HeadMapPtr",
138 data: struct {
139 A *map[string]int `json:"a"`
140 }{A: mapptr(map[string]int{"m": -1})},
141 },
142 {
143 name: "HeadMapPtrOmitEmpty",
144 data: struct {
145 A *map[string]int `json:"a,omitempty"`
146 }{A: mapptr(map[string]int{"m": -1})},
147 },
148 {
149 name: "HeadMapPtrString",
150 data: struct {
151 A *map[string]int `json:"a,string"`
152 }{A: mapptr(map[string]int{"m": -1})},
153 },
154
155
156 {
157 name: "HeadMapPtrNil",
158 data: struct {
159 A *map[string]int `json:"a"`
160 }{A: nil},
161 },
162 {
163 name: "HeadMapPtrNilOmitEmpty",
164 data: struct {
165 A *map[string]int `json:"a,omitempty"`
166 }{A: nil},
167 },
168 {
169 name: "HeadMapPtrNilString",
170 data: struct {
171 A *map[string]int `json:"a,string"`
172 }{A: nil},
173 },
174
175
176 {
177 name: "PtrHeadMapZero",
178 data: &struct {
179 A map[string]int `json:"a"`
180 }{},
181 },
182 {
183 name: "PtrHeadMapZeroOmitEmpty",
184 data: &struct {
185 A map[string]int `json:"a,omitempty"`
186 }{},
187 },
188 {
189 name: "PtrHeadMapZeroString",
190 data: &struct {
191 A map[string]int `json:"a,string"`
192 }{},
193 },
194
195
196 {
197 name: "PtrHeadMap",
198 data: &struct {
199 A map[string]int `json:"a"`
200 }{A: map[string]int{"m": -1}},
201 },
202 {
203 name: "PtrHeadMapOmitEmpty",
204 data: &struct {
205 A map[string]int `json:"a,omitempty"`
206 }{A: map[string]int{"m": -1}},
207 },
208 {
209 name: "PtrHeadMapString",
210 data: &struct {
211 A map[string]int `json:"a,string"`
212 }{A: map[string]int{"m": -1}},
213 },
214
215
216 {
217 name: "PtrHeadMapPtr",
218 data: &struct {
219 A *map[string]int `json:"a"`
220 }{A: mapptr(map[string]int{"m": -1})},
221 },
222 {
223 name: "PtrHeadMapPtrOmitEmpty",
224 data: &struct {
225 A *map[string]int `json:"a,omitempty"`
226 }{A: mapptr(map[string]int{"m": -1})},
227 },
228 {
229 name: "PtrHeadMapPtrString",
230 data: &struct {
231 A *map[string]int `json:"a,string"`
232 }{A: mapptr(map[string]int{"m": -1})},
233 },
234
235
236 {
237 name: "PtrHeadMapPtrNil",
238 data: &struct {
239 A *map[string]int `json:"a"`
240 }{A: nil},
241 },
242 {
243 name: "PtrHeadMapPtrNilOmitEmpty",
244 data: &struct {
245 A *map[string]int `json:"a,omitempty"`
246 }{A: nil},
247 },
248 {
249 name: "PtrHeadMapPtrNilString",
250 data: &struct {
251 A *map[string]int `json:"a,string"`
252 }{A: nil},
253 },
254
255
256 {
257 name: "PtrHeadMapNil",
258 data: (*struct {
259 A *map[string]int `json:"a"`
260 })(nil),
261 },
262 {
263 name: "PtrHeadMapNilOmitEmpty",
264 data: (*struct {
265 A *map[string]int `json:"a,omitempty"`
266 })(nil),
267 },
268 {
269 name: "PtrHeadMapNilString",
270 data: (*struct {
271 A *map[string]int `json:"a,string"`
272 })(nil),
273 },
274
275
276 {
277 name: "HeadMapZeroMultiFields",
278 data: struct {
279 A map[string]int `json:"a"`
280 B map[string]int `json:"b"`
281 C map[string]int `json:"c"`
282 }{},
283 },
284 {
285 name: "HeadMapZeroMultiFieldsOmitEmpty",
286 data: struct {
287 A map[string]int `json:"a,omitempty"`
288 B map[string]int `json:"b,omitempty"`
289 C map[string]int `json:"c,omitempty"`
290 }{},
291 },
292 {
293 name: "HeadMapZeroMultiFields",
294 data: struct {
295 A map[string]int `json:"a,string"`
296 B map[string]int `json:"b,string"`
297 C map[string]int `json:"c,string"`
298 }{},
299 },
300
301
302 {
303 name: "HeadMapMultiFields",
304 data: struct {
305 A map[string]int `json:"a"`
306 B map[string]int `json:"b"`
307 C map[string]int `json:"c"`
308 }{A: map[string]int{"m": -1}, B: map[string]int{"m": 2}, C: map[string]int{"m": -3}},
309 },
310 {
311 name: "HeadMapMultiFieldsOmitEmpty",
312 data: struct {
313 A map[string]int `json:"a,omitempty"`
314 B map[string]int `json:"b,omitempty"`
315 C map[string]int `json:"c,omitempty"`
316 }{A: map[string]int{"m": -1}, B: map[string]int{"m": 2}, C: map[string]int{"m": -3}},
317 },
318 {
319 name: "HeadMapMultiFieldsString",
320 data: struct {
321 A map[string]int `json:"a,string"`
322 B map[string]int `json:"b,string"`
323 C map[string]int `json:"c,string"`
324 }{A: map[string]int{"m": -1}, B: map[string]int{"m": 2}, C: map[string]int{"m": -3}},
325 },
326
327
328 {
329 name: "HeadMapPtrMultiFields",
330 data: struct {
331 A *map[string]int `json:"a"`
332 B *map[string]int `json:"b"`
333 C *map[string]int `json:"c"`
334 }{A: mapptr(map[string]int{"m": -1}), B: mapptr(map[string]int{"m": 2}), C: mapptr(map[string]int{"m": -3})},
335 },
336 {
337 name: "HeadMapPtrMultiFieldsOmitEmpty",
338 data: struct {
339 A *map[string]int `json:"a,omitempty"`
340 B *map[string]int `json:"b,omitempty"`
341 C *map[string]int `json:"c,omitempty"`
342 }{A: mapptr(map[string]int{"m": -1}), B: mapptr(map[string]int{"m": 2}), C: mapptr(map[string]int{"m": -3})},
343 },
344 {
345 name: "HeadMapPtrMultiFieldsString",
346 data: struct {
347 A *map[string]int `json:"a,string"`
348 B *map[string]int `json:"b,string"`
349 C *map[string]int `json:"c,string"`
350 }{A: mapptr(map[string]int{"m": -1}), B: mapptr(map[string]int{"m": 2}), C: mapptr(map[string]int{"m": -3})},
351 },
352
353
354 {
355 name: "HeadMapPtrNilMultiFields",
356 data: struct {
357 A *map[string]int `json:"a"`
358 B *map[string]int `json:"b"`
359 C *map[string]int `json:"c"`
360 }{A: nil, B: nil, C: nil},
361 },
362 {
363 name: "HeadMapPtrNilMultiFieldsOmitEmpty",
364 data: struct {
365 A *map[string]int `json:"a,omitempty"`
366 B *map[string]int `json:"b,omitempty"`
367 C *map[string]int `json:"c,omitempty"`
368 }{A: nil, B: nil, C: nil},
369 },
370 {
371 name: "HeadMapPtrNilMultiFieldsString",
372 data: struct {
373 A *map[string]int `json:"a,string"`
374 B *map[string]int `json:"b,string"`
375 C *map[string]int `json:"c,string"`
376 }{A: nil, B: nil, C: nil},
377 },
378
379
380 {
381 name: "PtrHeadMapZeroMultiFields",
382 data: &struct {
383 A map[string]int `json:"a"`
384 B map[string]int `json:"b"`
385 }{},
386 },
387 {
388 name: "PtrHeadMapZeroMultiFieldsOmitEmpty",
389 data: &struct {
390 A map[string]int `json:"a,omitempty"`
391 B map[string]int `json:"b,omitempty"`
392 }{},
393 },
394 {
395 name: "PtrHeadMapZeroMultiFieldsString",
396 data: &struct {
397 A map[string]int `json:"a,string"`
398 B map[string]int `json:"b,string"`
399 }{},
400 },
401
402
403 {
404 name: "PtrHeadMapMultiFields",
405 data: &struct {
406 A map[string]int `json:"a"`
407 B map[string]int `json:"b"`
408 }{A: map[string]int{"m": -1}, B: nil},
409 },
410 {
411 name: "PtrHeadMapMultiFieldsOmitEmpty",
412 data: &struct {
413 A map[string]int `json:"a,omitempty"`
414 B map[string]int `json:"b,omitempty"`
415 }{A: map[string]int{"m": -1}, B: nil},
416 },
417 {
418 name: "PtrHeadMapMultiFieldsString",
419 data: &struct {
420 A map[string]int `json:"a,string"`
421 B map[string]int `json:"b,string"`
422 }{A: map[string]int{"m": -1}, B: nil},
423 },
424
425
426 {
427 name: "PtrHeadMapPtrMultiFields",
428 data: &struct {
429 A *map[string]int `json:"a"`
430 B *map[string]int `json:"b"`
431 }{A: mapptr(map[string]int{"m": -1}), B: mapptr(map[string]int{"m": 2})},
432 },
433 {
434 name: "PtrHeadMapPtrMultiFieldsOmitEmpty",
435 data: &struct {
436 A *map[string]int `json:"a,omitempty"`
437 B *map[string]int `json:"b,omitempty"`
438 }{A: mapptr(map[string]int{"m": -1}), B: mapptr(map[string]int{"m": 2})},
439 },
440 {
441 name: "PtrHeadMapPtrMultiFieldsString",
442 data: &struct {
443 A *map[string]int `json:"a,string"`
444 B *map[string]int `json:"b,string"`
445 }{A: mapptr(map[string]int{"m": -1}), B: mapptr(map[string]int{"m": 2})},
446 },
447
448
449 {
450 name: "PtrHeadMapPtrNilMultiFields",
451 data: &struct {
452 A *map[string]int `json:"a"`
453 B *map[string]int `json:"b"`
454 }{A: nil, B: nil},
455 },
456 {
457 name: "PtrHeadMapPtrNilMultiFieldsOmitEmpty",
458 data: &struct {
459 A *map[string]int `json:"a,omitempty"`
460 B *map[string]int `json:"b,omitempty"`
461 }{A: nil, B: nil},
462 },
463 {
464 name: "PtrHeadMapPtrNilMultiFieldsString",
465 data: &struct {
466 A *map[string]int `json:"a,string"`
467 B *map[string]int `json:"b,string"`
468 }{A: nil, B: nil},
469 },
470
471
472 {
473 name: "PtrHeadMapNilMultiFields",
474 data: (*struct {
475 A map[string]int `json:"a"`
476 B map[string]int `json:"b"`
477 })(nil),
478 },
479 {
480 name: "PtrHeadMapNilMultiFieldsOmitEmpty",
481 data: (*struct {
482 A map[string]int `json:"a,omitempty"`
483 B map[string]int `json:"b,omitempty"`
484 })(nil),
485 },
486 {
487 name: "PtrHeadMapNilMultiFieldsString",
488 data: (*struct {
489 A map[string]int `json:"a,string"`
490 B map[string]int `json:"b,string"`
491 })(nil),
492 },
493
494
495 {
496 name: "PtrHeadMapNilMultiFields",
497 data: (*struct {
498 A *map[string]int `json:"a"`
499 B *map[string]int `json:"b"`
500 })(nil),
501 },
502 {
503 name: "PtrHeadMapNilMultiFieldsOmitEmpty",
504 data: (*struct {
505 A *map[string]int `json:"a,omitempty"`
506 B *map[string]int `json:"b,omitempty"`
507 })(nil),
508 },
509 {
510 name: "PtrHeadMapNilMultiFieldsString",
511 data: (*struct {
512 A *map[string]int `json:"a,string"`
513 B *map[string]int `json:"b,string"`
514 })(nil),
515 },
516
517
518 {
519 name: "HeadMapZeroNotRoot",
520 data: struct {
521 A struct {
522 A map[string]int `json:"a"`
523 }
524 }{},
525 },
526 {
527 name: "HeadMapZeroNotRootOmitEmpty",
528 data: struct {
529 A struct {
530 A map[string]int `json:"a,omitempty"`
531 }
532 }{},
533 },
534 {
535 name: "HeadMapZeroNotRootString",
536 data: struct {
537 A struct {
538 A map[string]int `json:"a,string"`
539 }
540 }{},
541 },
542
543
544 {
545 name: "HeadMapNotRoot",
546 data: struct {
547 A struct {
548 A map[string]int `json:"a"`
549 }
550 }{A: struct {
551 A map[string]int `json:"a"`
552 }{A: map[string]int{"m": -1}}},
553 },
554 {
555 name: "HeadMapNotRootOmitEmpty",
556 data: struct {
557 A struct {
558 A map[string]int `json:"a,omitempty"`
559 }
560 }{A: struct {
561 A map[string]int `json:"a,omitempty"`
562 }{A: map[string]int{"m": -1}}},
563 },
564 {
565 name: "HeadMapNotRootString",
566 data: struct {
567 A struct {
568 A map[string]int `json:"a,string"`
569 }
570 }{A: struct {
571 A map[string]int `json:"a,string"`
572 }{A: map[string]int{"m": -1}}},
573 },
574
575
576 {
577 name: "HeadMapPtrNotRoot",
578 data: struct {
579 A struct {
580 A *map[string]int `json:"a"`
581 }
582 }{A: struct {
583 A *map[string]int `json:"a"`
584 }{mapptr(map[string]int{"m": -1})}},
585 },
586 {
587 name: "HeadMapPtrNotRootOmitEmpty",
588 data: struct {
589 A struct {
590 A *map[string]int `json:"a,omitempty"`
591 }
592 }{A: struct {
593 A *map[string]int `json:"a,omitempty"`
594 }{mapptr(map[string]int{"m": -1})}},
595 },
596 {
597 name: "HeadMapPtrNotRootString",
598 data: struct {
599 A struct {
600 A *map[string]int `json:"a,string"`
601 }
602 }{A: struct {
603 A *map[string]int `json:"a,string"`
604 }{mapptr(map[string]int{"m": -1})}},
605 },
606
607
608 {
609 name: "HeadMapPtrNilNotRoot",
610 data: struct {
611 A struct {
612 A *map[string]int `json:"a"`
613 }
614 }{},
615 },
616 {
617 name: "HeadMapPtrNilNotRootOmitEmpty",
618 data: struct {
619 A struct {
620 A *map[string]int `json:"a,omitempty"`
621 }
622 }{},
623 },
624 {
625 name: "HeadMapPtrNilNotRootString",
626 data: struct {
627 A struct {
628 A *map[string]int `json:"a,string"`
629 }
630 }{},
631 },
632
633
634 {
635 name: "PtrHeadMapZeroNotRoot",
636 data: struct {
637 A *struct {
638 A map[string]int `json:"a"`
639 }
640 }{A: new(struct {
641 A map[string]int `json:"a"`
642 })},
643 },
644 {
645 name: "PtrHeadMapZeroNotRootOmitEmpty",
646 data: struct {
647 A *struct {
648 A map[string]int `json:"a,omitempty"`
649 }
650 }{A: new(struct {
651 A map[string]int `json:"a,omitempty"`
652 })},
653 },
654 {
655 name: "PtrHeadMapZeroNotRootString",
656 data: struct {
657 A *struct {
658 A map[string]int `json:"a,string"`
659 }
660 }{A: new(struct {
661 A map[string]int `json:"a,string"`
662 })},
663 },
664
665
666 {
667 name: "PtrHeadMapNotRoot",
668 data: struct {
669 A *struct {
670 A map[string]int `json:"a"`
671 }
672 }{A: &(struct {
673 A map[string]int `json:"a"`
674 }{A: map[string]int{"m": -1}})},
675 },
676 {
677 name: "PtrHeadMapNotRootOmitEmpty",
678 data: struct {
679 A *struct {
680 A map[string]int `json:"a,omitempty"`
681 }
682 }{A: &(struct {
683 A map[string]int `json:"a,omitempty"`
684 }{A: map[string]int{"m": -1}})},
685 },
686 {
687 name: "PtrHeadMapNotRootString",
688 data: struct {
689 A *struct {
690 A map[string]int `json:"a,string"`
691 }
692 }{A: &(struct {
693 A map[string]int `json:"a,string"`
694 }{A: map[string]int{"m": -1}})},
695 },
696
697
698 {
699 name: "PtrHeadMapPtrNotRoot",
700 data: struct {
701 A *struct {
702 A *map[string]int `json:"a"`
703 }
704 }{A: &(struct {
705 A *map[string]int `json:"a"`
706 }{A: mapptr(map[string]int{"m": -1})})},
707 },
708 {
709 name: "PtrHeadMapPtrNotRootOmitEmpty",
710 data: struct {
711 A *struct {
712 A *map[string]int `json:"a,omitempty"`
713 }
714 }{A: &(struct {
715 A *map[string]int `json:"a,omitempty"`
716 }{A: mapptr(map[string]int{"m": -1})})},
717 },
718 {
719 name: "PtrHeadMapPtrNotRootString",
720 data: struct {
721 A *struct {
722 A *map[string]int `json:"a,string"`
723 }
724 }{A: &(struct {
725 A *map[string]int `json:"a,string"`
726 }{A: mapptr(map[string]int{"m": -1})})},
727 },
728
729
730 {
731 name: "PtrHeadMapPtrNilNotRoot",
732 data: struct {
733 A *struct {
734 A *map[string]int `json:"a"`
735 }
736 }{A: &(struct {
737 A *map[string]int `json:"a"`
738 }{A: nil})},
739 },
740 {
741 name: "PtrHeadMapPtrNilNotRootOmitEmpty",
742 data: struct {
743 A *struct {
744 A *map[string]int `json:"a,omitempty"`
745 }
746 }{A: &(struct {
747 A *map[string]int `json:"a,omitempty"`
748 }{A: nil})},
749 },
750 {
751 name: "PtrHeadMapPtrNilNotRootString",
752 data: struct {
753 A *struct {
754 A *map[string]int `json:"a,string"`
755 }
756 }{A: &(struct {
757 A *map[string]int `json:"a,string"`
758 }{A: nil})},
759 },
760
761
762 {
763 name: "PtrHeadMapNilNotRoot",
764 data: struct {
765 A *struct {
766 A *map[string]int `json:"a"`
767 }
768 }{A: nil},
769 },
770 {
771 name: "PtrHeadMapNilNotRootOmitEmpty",
772 data: struct {
773 A *struct {
774 A *map[string]int `json:"a,omitempty"`
775 } `json:",omitempty"`
776 }{A: nil},
777 },
778 {
779 name: "PtrHeadMapNilNotRootString",
780 data: struct {
781 A *struct {
782 A *map[string]int `json:"a,string"`
783 } `json:",string"`
784 }{A: nil},
785 },
786
787
788 {
789 name: "HeadMapZeroMultiFieldsNotRoot",
790 data: struct {
791 A struct {
792 A map[string]int `json:"a"`
793 }
794 B struct {
795 B map[string]int `json:"b"`
796 }
797 }{},
798 },
799 {
800 name: "HeadMapZeroMultiFieldsNotRootOmitEmpty",
801 data: struct {
802 A struct {
803 A map[string]int `json:"a,omitempty"`
804 }
805 B struct {
806 B map[string]int `json:"b,omitempty"`
807 }
808 }{},
809 },
810 {
811 name: "HeadMapZeroMultiFieldsNotRootString",
812 data: struct {
813 A struct {
814 A map[string]int `json:"a,string"`
815 }
816 B struct {
817 B map[string]int `json:"b,string"`
818 }
819 }{},
820 },
821
822
823 {
824 name: "HeadMapMultiFieldsNotRoot",
825 data: struct {
826 A struct {
827 A map[string]int `json:"a"`
828 }
829 B struct {
830 B map[string]int `json:"b"`
831 }
832 }{A: struct {
833 A map[string]int `json:"a"`
834 }{A: map[string]int{"m": -1}}, B: struct {
835 B map[string]int `json:"b"`
836 }{B: map[string]int{"m": 0}}},
837 },
838 {
839 name: "HeadMapMultiFieldsNotRootOmitEmpty",
840 data: struct {
841 A struct {
842 A map[string]int `json:"a,omitempty"`
843 }
844 B struct {
845 B map[string]int `json:"b,omitempty"`
846 }
847 }{A: struct {
848 A map[string]int `json:"a,omitempty"`
849 }{A: map[string]int{"m": -1}}, B: struct {
850 B map[string]int `json:"b,omitempty"`
851 }{B: map[string]int{"m": 1}}},
852 },
853 {
854 name: "HeadMapMultiFieldsNotRootString",
855 data: struct {
856 A struct {
857 A map[string]int `json:"a,string"`
858 }
859 B struct {
860 B map[string]int `json:"b,string"`
861 }
862 }{A: struct {
863 A map[string]int `json:"a,string"`
864 }{A: map[string]int{"m": -1}}, B: struct {
865 B map[string]int `json:"b,string"`
866 }{B: map[string]int{"m": 1}}},
867 },
868
869
870 {
871 name: "HeadMapPtrMultiFieldsNotRoot",
872 data: struct {
873 A struct {
874 A *map[string]int `json:"a"`
875 }
876 B struct {
877 B *map[string]int `json:"b"`
878 }
879 }{A: struct {
880 A *map[string]int `json:"a"`
881 }{A: mapptr(map[string]int{"m": -1})}, B: struct {
882 B *map[string]int `json:"b"`
883 }{B: mapptr(map[string]int{"m": 1})}},
884 },
885 {
886 name: "HeadMapPtrMultiFieldsNotRootOmitEmpty",
887 data: struct {
888 A struct {
889 A *map[string]int `json:"a,omitempty"`
890 }
891 B struct {
892 B *map[string]int `json:"b,omitempty"`
893 }
894 }{A: struct {
895 A *map[string]int `json:"a,omitempty"`
896 }{A: mapptr(map[string]int{"m": -1})}, B: struct {
897 B *map[string]int `json:"b,omitempty"`
898 }{B: mapptr(map[string]int{"m": 1})}},
899 },
900 {
901 name: "HeadMapPtrMultiFieldsNotRootString",
902 data: struct {
903 A struct {
904 A *map[string]int `json:"a,string"`
905 }
906 B struct {
907 B *map[string]int `json:"b,string"`
908 }
909 }{A: struct {
910 A *map[string]int `json:"a,string"`
911 }{A: mapptr(map[string]int{"m": -1})}, B: struct {
912 B *map[string]int `json:"b,string"`
913 }{B: mapptr(map[string]int{"m": 1})}},
914 },
915
916
917 {
918 name: "HeadMapPtrNilMultiFieldsNotRoot",
919 data: struct {
920 A struct {
921 A *map[string]int `json:"a"`
922 }
923 B struct {
924 B *map[string]int `json:"b"`
925 }
926 }{A: struct {
927 A *map[string]int `json:"a"`
928 }{A: nil}, B: struct {
929 B *map[string]int `json:"b"`
930 }{B: nil}},
931 },
932 {
933 name: "HeadMapPtrNilMultiFieldsNotRootOmitEmpty",
934 data: struct {
935 A struct {
936 A *map[string]int `json:"a,omitempty"`
937 }
938 B struct {
939 B *map[string]int `json:"b,omitempty"`
940 }
941 }{A: struct {
942 A *map[string]int `json:"a,omitempty"`
943 }{A: nil}, B: struct {
944 B *map[string]int `json:"b,omitempty"`
945 }{B: nil}},
946 },
947 {
948 name: "HeadMapPtrNilMultiFieldsNotRootString",
949 data: struct {
950 A struct {
951 A *map[string]int `json:"a,string"`
952 }
953 B struct {
954 B *map[string]int `json:"b,string"`
955 }
956 }{A: struct {
957 A *map[string]int `json:"a,string"`
958 }{A: nil}, B: struct {
959 B *map[string]int `json:"b,string"`
960 }{B: nil}},
961 },
962
963
964 {
965 name: "PtrHeadMapZeroMultiFieldsNotRoot",
966 data: &struct {
967 A struct {
968 A map[string]int `json:"a"`
969 }
970 B struct {
971 B map[string]int `json:"b"`
972 }
973 }{},
974 },
975 {
976 name: "PtrHeadMapZeroMultiFieldsNotRootOmitEmpty",
977 data: &struct {
978 A struct {
979 A map[string]int `json:"a,omitempty"`
980 }
981 B struct {
982 B map[string]int `json:"b,omitempty"`
983 }
984 }{},
985 },
986 {
987 name: "PtrHeadMapZeroMultiFieldsNotRootString",
988 data: &struct {
989 A struct {
990 A map[string]int `json:"a,string"`
991 }
992 B struct {
993 B map[string]int `json:"b,string"`
994 }
995 }{},
996 },
997
998
999 {
1000 name: "PtrHeadMapMultiFieldsNotRoot",
1001 data: &struct {
1002 A struct {
1003 A map[string]int `json:"a"`
1004 }
1005 B struct {
1006 B map[string]int `json:"b"`
1007 }
1008 }{A: struct {
1009 A map[string]int `json:"a"`
1010 }{A: map[string]int{"m": -1}}, B: struct {
1011 B map[string]int `json:"b"`
1012 }{B: map[string]int{"m": 1}}},
1013 },
1014 {
1015 name: "PtrHeadMapMultiFieldsNotRootOmitEmpty",
1016 data: &struct {
1017 A struct {
1018 A map[string]int `json:"a,omitempty"`
1019 }
1020 B struct {
1021 B map[string]int `json:"b,omitempty"`
1022 }
1023 }{A: struct {
1024 A map[string]int `json:"a,omitempty"`
1025 }{A: map[string]int{"m": -1}}, B: struct {
1026 B map[string]int `json:"b,omitempty"`
1027 }{B: map[string]int{"m": 1}}},
1028 },
1029 {
1030 name: "PtrHeadMapMultiFieldsNotRootString",
1031 data: &struct {
1032 A struct {
1033 A map[string]int `json:"a,string"`
1034 }
1035 B struct {
1036 B map[string]int `json:"b,string"`
1037 }
1038 }{A: struct {
1039 A map[string]int `json:"a,string"`
1040 }{A: map[string]int{"m": -1}}, B: struct {
1041 B map[string]int `json:"b,string"`
1042 }{B: map[string]int{"m": 1}}},
1043 },
1044
1045
1046 {
1047 name: "PtrHeadMapPtrMultiFieldsNotRoot",
1048 data: &struct {
1049 A *struct {
1050 A *map[string]int `json:"a"`
1051 }
1052 B *struct {
1053 B *map[string]int `json:"b"`
1054 }
1055 }{A: &(struct {
1056 A *map[string]int `json:"a"`
1057 }{A: mapptr(map[string]int{"m": -1})}), B: &(struct {
1058 B *map[string]int `json:"b"`
1059 }{B: mapptr(map[string]int{"m": 1})})},
1060 },
1061 {
1062 name: "PtrHeadMapPtrMultiFieldsNotRootOmitEmpty",
1063 data: &struct {
1064 A *struct {
1065 A *map[string]int `json:"a,omitempty"`
1066 }
1067 B *struct {
1068 B *map[string]int `json:"b,omitempty"`
1069 }
1070 }{A: &(struct {
1071 A *map[string]int `json:"a,omitempty"`
1072 }{A: mapptr(map[string]int{"m": -1})}), B: &(struct {
1073 B *map[string]int `json:"b,omitempty"`
1074 }{B: mapptr(map[string]int{"m": 1})})},
1075 },
1076 {
1077 name: "PtrHeadMapPtrMultiFieldsNotRootString",
1078 data: &struct {
1079 A *struct {
1080 A *map[string]int `json:"a,string"`
1081 }
1082 B *struct {
1083 B *map[string]int `json:"b,string"`
1084 }
1085 }{A: &(struct {
1086 A *map[string]int `json:"a,string"`
1087 }{A: mapptr(map[string]int{"m": -1})}), B: &(struct {
1088 B *map[string]int `json:"b,string"`
1089 }{B: mapptr(map[string]int{"m": 1})})},
1090 },
1091
1092
1093 {
1094 name: "PtrHeadMapPtrNilMultiFieldsNotRoot",
1095 data: &struct {
1096 A *struct {
1097 A *map[string]int `json:"a"`
1098 }
1099 B *struct {
1100 B *map[string]int `json:"b"`
1101 }
1102 }{A: nil, B: nil},
1103 },
1104 {
1105 name: "PtrHeadMapPtrNilMultiFieldsNotRootOmitEmpty",
1106 data: &struct {
1107 A *struct {
1108 A *map[string]int `json:"a,omitempty"`
1109 } `json:",omitempty"`
1110 B *struct {
1111 B *map[string]int `json:"b,omitempty"`
1112 } `json:",omitempty"`
1113 }{A: nil, B: nil},
1114 },
1115 {
1116 name: "PtrHeadMapPtrNilMultiFieldsNotRootString",
1117 data: &struct {
1118 A *struct {
1119 A *map[string]int `json:"a,string"`
1120 } `json:",string"`
1121 B *struct {
1122 B *map[string]int `json:"b,string"`
1123 } `json:",string"`
1124 }{A: nil, B: nil},
1125 },
1126
1127
1128 {
1129 name: "PtrHeadMapNilMultiFieldsNotRoot",
1130 data: (*struct {
1131 A *struct {
1132 A *map[string]int `json:"a"`
1133 }
1134 B *struct {
1135 B *map[string]int `json:"b"`
1136 }
1137 })(nil),
1138 },
1139 {
1140 name: "PtrHeadMapNilMultiFieldsNotRootOmitEmpty",
1141 data: (*struct {
1142 A *struct {
1143 A *map[string]int `json:"a,omitempty"`
1144 }
1145 B *struct {
1146 B *map[string]int `json:"b,omitempty"`
1147 }
1148 })(nil),
1149 },
1150 {
1151 name: "PtrHeadMapNilMultiFieldsNotRootString",
1152 data: (*struct {
1153 A *struct {
1154 A *map[string]int `json:"a,string"`
1155 }
1156 B *struct {
1157 B *map[string]int `json:"b,string"`
1158 }
1159 })(nil),
1160 },
1161
1162
1163 {
1164 name: "PtrHeadMapDoubleMultiFieldsNotRoot",
1165 data: &struct {
1166 A *struct {
1167 A map[string]int `json:"a"`
1168 B map[string]int `json:"b"`
1169 }
1170 B *struct {
1171 A map[string]int `json:"a"`
1172 B map[string]int `json:"b"`
1173 }
1174 }{A: &(struct {
1175 A map[string]int `json:"a"`
1176 B map[string]int `json:"b"`
1177 }{A: map[string]int{"m": -1}, B: map[string]int{"m": 1}}), B: &(struct {
1178 A map[string]int `json:"a"`
1179 B map[string]int `json:"b"`
1180 }{A: map[string]int{"m": -1}, B: nil})},
1181 },
1182 {
1183 name: "PtrHeadMapDoubleMultiFieldsNotRootOmitEmpty",
1184 data: &struct {
1185 A *struct {
1186 A map[string]int `json:"a,omitempty"`
1187 B map[string]int `json:"b,omitempty"`
1188 }
1189 B *struct {
1190 A map[string]int `json:"a,omitempty"`
1191 B map[string]int `json:"b,omitempty"`
1192 }
1193 }{A: &(struct {
1194 A map[string]int `json:"a,omitempty"`
1195 B map[string]int `json:"b,omitempty"`
1196 }{A: map[string]int{"m": -1}, B: map[string]int{"m": 1}}), B: &(struct {
1197 A map[string]int `json:"a,omitempty"`
1198 B map[string]int `json:"b,omitempty"`
1199 }{A: map[string]int{"m": -1}, B: nil})},
1200 },
1201 {
1202 name: "PtrHeadMapDoubleMultiFieldsNotRootString",
1203 data: &struct {
1204 A *struct {
1205 A map[string]int `json:"a,string"`
1206 B map[string]int `json:"b,string"`
1207 }
1208 B *struct {
1209 A map[string]int `json:"a,string"`
1210 B map[string]int `json:"b,string"`
1211 }
1212 }{A: &(struct {
1213 A map[string]int `json:"a,string"`
1214 B map[string]int `json:"b,string"`
1215 }{A: map[string]int{"m": -1}, B: map[string]int{"m": 1}}), B: &(struct {
1216 A map[string]int `json:"a,string"`
1217 B map[string]int `json:"b,string"`
1218 }{A: map[string]int{"m": -1}, B: nil})},
1219 },
1220
1221
1222 {
1223 name: "PtrHeadMapNilDoubleMultiFieldsNotRoot",
1224 data: &struct {
1225 A *struct {
1226 A map[string]int `json:"a"`
1227 B map[string]int `json:"b"`
1228 }
1229 B *struct {
1230 A map[string]int `json:"a"`
1231 B map[string]int `json:"b"`
1232 }
1233 }{A: nil, B: nil},
1234 },
1235 {
1236 name: "PtrHeadMapNilDoubleMultiFieldsNotRootOmitEmpty",
1237 data: &struct {
1238 A *struct {
1239 A map[string]int `json:"a,omitempty"`
1240 B map[string]int `json:"b,omitempty"`
1241 } `json:",omitempty"`
1242 B *struct {
1243 A map[string]int `json:"a,omitempty"`
1244 B map[string]int `json:"b,omitempty"`
1245 } `json:",omitempty"`
1246 }{A: nil, B: nil},
1247 },
1248 {
1249 name: "PtrHeadMapNilDoubleMultiFieldsNotRootString",
1250 data: &struct {
1251 A *struct {
1252 A map[string]int `json:"a,string"`
1253 B map[string]int `json:"b,string"`
1254 }
1255 B *struct {
1256 A map[string]int `json:"a,string"`
1257 B map[string]int `json:"b,string"`
1258 }
1259 }{A: nil, B: nil},
1260 },
1261
1262
1263 {
1264 name: "PtrHeadMapNilDoubleMultiFieldsNotRoot",
1265 data: (*struct {
1266 A *struct {
1267 A map[string]int `json:"a"`
1268 B map[string]int `json:"b"`
1269 }
1270 B *struct {
1271 A map[string]int `json:"a"`
1272 B map[string]int `json:"b"`
1273 }
1274 })(nil),
1275 },
1276 {
1277 name: "PtrHeadMapNilDoubleMultiFieldsNotRootOmitEmpty",
1278 data: (*struct {
1279 A *struct {
1280 A map[string]int `json:"a,omitempty"`
1281 B map[string]int `json:"b,omitempty"`
1282 }
1283 B *struct {
1284 A map[string]int `json:"a,omitempty"`
1285 B map[string]int `json:"b,omitempty"`
1286 }
1287 })(nil),
1288 },
1289 {
1290 name: "PtrHeadMapNilDoubleMultiFieldsNotRootString",
1291 data: (*struct {
1292 A *struct {
1293 A map[string]int `json:"a,string"`
1294 B map[string]int `json:"b,string"`
1295 }
1296 B *struct {
1297 A map[string]int `json:"a,string"`
1298 B map[string]int `json:"b,string"`
1299 }
1300 })(nil),
1301 },
1302
1303
1304 {
1305 name: "PtrHeadMapPtrDoubleMultiFieldsNotRoot",
1306 data: &struct {
1307 A *struct {
1308 A *map[string]int `json:"a"`
1309 B *map[string]int `json:"b"`
1310 }
1311 B *struct {
1312 A *map[string]int `json:"a"`
1313 B *map[string]int `json:"b"`
1314 }
1315 }{A: &(struct {
1316 A *map[string]int `json:"a"`
1317 B *map[string]int `json:"b"`
1318 }{A: mapptr(map[string]int{"m": -1}), B: mapptr(map[string]int{"m": 1})}), B: &(struct {
1319 A *map[string]int `json:"a"`
1320 B *map[string]int `json:"b"`
1321 }{A: nil, B: nil})},
1322 },
1323 {
1324 name: "PtrHeadMapPtrDoubleMultiFieldsNotRootOmitEmpty",
1325 data: &struct {
1326 A *struct {
1327 A *map[string]int `json:"a,omitempty"`
1328 B *map[string]int `json:"b,omitempty"`
1329 }
1330 B *struct {
1331 A *map[string]int `json:"a,omitempty"`
1332 B *map[string]int `json:"b,omitempty"`
1333 }
1334 }{A: &(struct {
1335 A *map[string]int `json:"a,omitempty"`
1336 B *map[string]int `json:"b,omitempty"`
1337 }{A: mapptr(map[string]int{"m": -1}), B: mapptr(map[string]int{"m": 1})}), B: &(struct {
1338 A *map[string]int `json:"a,omitempty"`
1339 B *map[string]int `json:"b,omitempty"`
1340 }{A: nil, B: nil})},
1341 },
1342 {
1343 name: "PtrHeadMapPtrDoubleMultiFieldsNotRootString",
1344 data: &struct {
1345 A *struct {
1346 A *map[string]int `json:"a,string"`
1347 B *map[string]int `json:"b,string"`
1348 }
1349 B *struct {
1350 A *map[string]int `json:"a,string"`
1351 B *map[string]int `json:"b,string"`
1352 }
1353 }{A: &(struct {
1354 A *map[string]int `json:"a,string"`
1355 B *map[string]int `json:"b,string"`
1356 }{A: mapptr(map[string]int{"m": -1}), B: mapptr(map[string]int{"m": 1})}), B: &(struct {
1357 A *map[string]int `json:"a,string"`
1358 B *map[string]int `json:"b,string"`
1359 }{A: nil, B: nil})},
1360 },
1361
1362
1363 {
1364 name: "PtrHeadMapPtrNilDoubleMultiFieldsNotRoot",
1365 data: &struct {
1366 A *struct {
1367 A *map[string]int `json:"a"`
1368 B *map[string]int `json:"b"`
1369 }
1370 B *struct {
1371 A *map[string]int `json:"a"`
1372 B *map[string]int `json:"b"`
1373 }
1374 }{A: nil, B: nil},
1375 },
1376 {
1377 name: "PtrHeadMapPtrNilDoubleMultiFieldsNotRootOmitEmpty",
1378 data: &struct {
1379 A *struct {
1380 A *map[string]int `json:"a,omitempty"`
1381 B *map[string]int `json:"b,omitempty"`
1382 } `json:",omitempty"`
1383 B *struct {
1384 A *map[string]int `json:"a,omitempty"`
1385 B *map[string]int `json:"b,omitempty"`
1386 } `json:",omitempty"`
1387 }{A: nil, B: nil},
1388 },
1389 {
1390 name: "PtrHeadMapPtrNilDoubleMultiFieldsNotRootString",
1391 data: &struct {
1392 A *struct {
1393 A *map[string]int `json:"a,string"`
1394 B *map[string]int `json:"b,string"`
1395 }
1396 B *struct {
1397 A *map[string]int `json:"a,string"`
1398 B *map[string]int `json:"b,string"`
1399 }
1400 }{A: nil, B: nil},
1401 },
1402
1403
1404 {
1405 name: "PtrHeadMapPtrNilDoubleMultiFieldsNotRoot",
1406 data: (*struct {
1407 A *struct {
1408 A *map[string]int `json:"a"`
1409 B *map[string]int `json:"b"`
1410 }
1411 B *struct {
1412 A *map[string]int `json:"a"`
1413 B *map[string]int `json:"b"`
1414 }
1415 })(nil),
1416 },
1417 {
1418 name: "PtrHeadMapPtrNilDoubleMultiFieldsNotRootOmitEmpty",
1419 data: (*struct {
1420 A *struct {
1421 A *map[string]int `json:"a,omitempty"`
1422 B *map[string]int `json:"b,omitempty"`
1423 }
1424 B *struct {
1425 A *map[string]int `json:"a,omitempty"`
1426 B *map[string]int `json:"b,omitempty"`
1427 }
1428 })(nil),
1429 },
1430 {
1431 name: "PtrHeadMapPtrNilDoubleMultiFieldsNotRootString",
1432 data: (*struct {
1433 A *struct {
1434 A *map[string]int `json:"a,string"`
1435 B *map[string]int `json:"b,string"`
1436 }
1437 B *struct {
1438 A *map[string]int `json:"a,string"`
1439 B *map[string]int `json:"b,string"`
1440 }
1441 })(nil),
1442 },
1443
1444
1445 {
1446 name: "AnonymousHeadMap",
1447 data: struct {
1448 structMap
1449 B map[string]int `json:"b"`
1450 }{
1451 structMap: structMap{A: map[string]int{"m": -1}},
1452 B: nil,
1453 },
1454 },
1455 {
1456 name: "AnonymousHeadMapOmitEmpty",
1457 data: struct {
1458 structMapOmitEmpty
1459 B map[string]int `json:"b,omitempty"`
1460 }{
1461 structMapOmitEmpty: structMapOmitEmpty{A: map[string]int{"m": -1}},
1462 B: nil,
1463 },
1464 },
1465 {
1466 name: "AnonymousHeadMapString",
1467 data: struct {
1468 structMapString
1469 B map[string]int `json:"b,string"`
1470 }{
1471 structMapString: structMapString{A: map[string]int{"m": -1}},
1472 B: nil,
1473 },
1474 },
1475
1476
1477 {
1478 name: "PtrAnonymousHeadMap",
1479 data: struct {
1480 *structMap
1481 B map[string]int `json:"b"`
1482 }{
1483 structMap: &structMap{A: map[string]int{"m": -1}},
1484 B: nil,
1485 },
1486 },
1487 {
1488 name: "PtrAnonymousHeadMapOmitEmpty",
1489 data: struct {
1490 *structMapOmitEmpty
1491 B map[string]int `json:"b,omitempty"`
1492 }{
1493 structMapOmitEmpty: &structMapOmitEmpty{A: map[string]int{"m": -1}},
1494 B: nil,
1495 },
1496 },
1497 {
1498 name: "PtrAnonymousHeadMapString",
1499 data: struct {
1500 *structMapString
1501 B map[string]int `json:"b,string"`
1502 }{
1503 structMapString: &structMapString{A: map[string]int{"m": -1}},
1504 B: nil,
1505 },
1506 },
1507
1508
1509 {
1510 name: "PtrAnonymousHeadMapNil",
1511 data: struct {
1512 *structMap
1513 B map[string]int `json:"b"`
1514 }{
1515 structMap: &structMap{A: nil},
1516 B: nil,
1517 },
1518 },
1519 {
1520 name: "PtrAnonymousHeadMapNilOmitEmpty",
1521 data: struct {
1522 *structMapOmitEmpty
1523 B map[string]int `json:"b,omitempty"`
1524 }{
1525 structMapOmitEmpty: &structMapOmitEmpty{A: nil},
1526 B: nil,
1527 },
1528 },
1529 {
1530 name: "PtrAnonymousHeadMapNilString",
1531 data: struct {
1532 *structMapString
1533 B map[string]int `json:"b,string"`
1534 }{
1535 structMapString: &structMapString{A: nil},
1536 B: nil,
1537 },
1538 },
1539
1540
1541 {
1542 name: "NilPtrAnonymousHeadMap",
1543 data: struct {
1544 *structMap
1545 B map[string]int `json:"b"`
1546 }{
1547 structMap: nil,
1548 B: map[string]int{"m": -1},
1549 },
1550 },
1551 {
1552 name: "NilPtrAnonymousHeadMapOmitEmpty",
1553 data: struct {
1554 *structMapOmitEmpty
1555 B map[string]int `json:"b,omitempty"`
1556 }{
1557 structMapOmitEmpty: nil,
1558 B: map[string]int{"m": -1},
1559 },
1560 },
1561 {
1562 name: "NilPtrAnonymousHeadMapString",
1563 data: struct {
1564 *structMapString
1565 B map[string]int `json:"b,string"`
1566 }{
1567 structMapString: nil,
1568 B: map[string]int{"m": -1},
1569 },
1570 },
1571
1572
1573 {
1574 name: "AnonymousHeadMapPtr",
1575 data: struct {
1576 structMapPtr
1577 B *map[string]int `json:"b"`
1578 }{
1579 structMapPtr: structMapPtr{A: mapptr(map[string]int{"m": -1})},
1580 B: nil,
1581 },
1582 },
1583 {
1584 name: "AnonymousHeadMapPtrOmitEmpty",
1585 data: struct {
1586 structMapPtrOmitEmpty
1587 B *map[string]int `json:"b,omitempty"`
1588 }{
1589 structMapPtrOmitEmpty: structMapPtrOmitEmpty{A: mapptr(map[string]int{"m": -1})},
1590 B: nil,
1591 },
1592 },
1593 {
1594 name: "AnonymousHeadMapPtrString",
1595 data: struct {
1596 structMapPtrString
1597 B *map[string]int `json:"b,string"`
1598 }{
1599 structMapPtrString: structMapPtrString{A: mapptr(map[string]int{"m": -1})},
1600 B: nil,
1601 },
1602 },
1603
1604
1605 {
1606 name: "AnonymousHeadMapPtrNil",
1607 data: struct {
1608 structMapPtr
1609 B *map[string]int `json:"b"`
1610 }{
1611 structMapPtr: structMapPtr{A: nil},
1612 B: mapptr(map[string]int{"m": -1}),
1613 },
1614 },
1615 {
1616 name: "AnonymousHeadMapPtrNilOmitEmpty",
1617 data: struct {
1618 structMapPtrOmitEmpty
1619 B *map[string]int `json:"b,omitempty"`
1620 }{
1621 structMapPtrOmitEmpty: structMapPtrOmitEmpty{A: nil},
1622 B: mapptr(map[string]int{"m": -1}),
1623 },
1624 },
1625 {
1626 name: "AnonymousHeadMapPtrNilString",
1627 data: struct {
1628 structMapPtrString
1629 B *map[string]int `json:"b,string"`
1630 }{
1631 structMapPtrString: structMapPtrString{A: nil},
1632 B: mapptr(map[string]int{"m": -1}),
1633 },
1634 },
1635
1636
1637 {
1638 name: "PtrAnonymousHeadMapPtr",
1639 data: struct {
1640 *structMapPtr
1641 B *map[string]int `json:"b"`
1642 }{
1643 structMapPtr: &structMapPtr{A: mapptr(map[string]int{"m": -1})},
1644 B: nil,
1645 },
1646 },
1647 {
1648 name: "PtrAnonymousHeadMapPtrOmitEmpty",
1649 data: struct {
1650 *structMapPtrOmitEmpty
1651 B *map[string]int `json:"b,omitempty"`
1652 }{
1653 structMapPtrOmitEmpty: &structMapPtrOmitEmpty{A: mapptr(map[string]int{"m": -1})},
1654 B: nil,
1655 },
1656 },
1657 {
1658 name: "PtrAnonymousHeadMapPtrString",
1659 data: struct {
1660 *structMapPtrString
1661 B *map[string]int `json:"b,string"`
1662 }{
1663 structMapPtrString: &structMapPtrString{A: mapptr(map[string]int{"m": -1})},
1664 B: nil,
1665 },
1666 },
1667
1668
1669 {
1670 name: "NilPtrAnonymousHeadMapPtr",
1671 data: struct {
1672 *structMapPtr
1673 B *map[string]int `json:"b"`
1674 }{
1675 structMapPtr: nil,
1676 B: mapptr(map[string]int{"m": -1}),
1677 },
1678 },
1679 {
1680 name: "NilPtrAnonymousHeadMapPtrOmitEmpty",
1681 data: struct {
1682 *structMapPtrOmitEmpty
1683 B *map[string]int `json:"b,omitempty"`
1684 }{
1685 structMapPtrOmitEmpty: nil,
1686 B: mapptr(map[string]int{"m": -1}),
1687 },
1688 },
1689 {
1690 name: "NilPtrAnonymousHeadMapPtrString",
1691 data: struct {
1692 *structMapPtrString
1693 B *map[string]int `json:"b,string"`
1694 }{
1695 structMapPtrString: nil,
1696 B: mapptr(map[string]int{"m": -1}),
1697 },
1698 },
1699
1700
1701 {
1702 name: "AnonymousHeadMapOnly",
1703 data: struct {
1704 structMap
1705 }{
1706 structMap: structMap{A: map[string]int{"m": -1}},
1707 },
1708 },
1709 {
1710 name: "AnonymousHeadMapOnlyOmitEmpty",
1711 data: struct {
1712 structMapOmitEmpty
1713 }{
1714 structMapOmitEmpty: structMapOmitEmpty{A: map[string]int{"m": -1}},
1715 },
1716 },
1717 {
1718 name: "AnonymousHeadMapOnlyString",
1719 data: struct {
1720 structMapString
1721 }{
1722 structMapString: structMapString{A: map[string]int{"m": -1}},
1723 },
1724 },
1725
1726
1727 {
1728 name: "PtrAnonymousHeadMapOnly",
1729 data: struct {
1730 *structMap
1731 }{
1732 structMap: &structMap{A: map[string]int{"m": -1}},
1733 },
1734 },
1735 {
1736 name: "PtrAnonymousHeadMapOnlyOmitEmpty",
1737 data: struct {
1738 *structMapOmitEmpty
1739 }{
1740 structMapOmitEmpty: &structMapOmitEmpty{A: map[string]int{"m": -1}},
1741 },
1742 },
1743 {
1744 name: "PtrAnonymousHeadMapOnlyString",
1745 data: struct {
1746 *structMapString
1747 }{
1748 structMapString: &structMapString{A: map[string]int{"m": -1}},
1749 },
1750 },
1751
1752
1753 {
1754 name: "NilPtrAnonymousHeadMapOnly",
1755 data: struct {
1756 *structMap
1757 }{
1758 structMap: nil,
1759 },
1760 },
1761 {
1762 name: "NilPtrAnonymousHeadMapOnlyOmitEmpty",
1763 data: struct {
1764 *structMapOmitEmpty
1765 }{
1766 structMapOmitEmpty: nil,
1767 },
1768 },
1769 {
1770 name: "NilPtrAnonymousHeadMapOnlyString",
1771 data: struct {
1772 *structMapString
1773 }{
1774 structMapString: nil,
1775 },
1776 },
1777
1778
1779 {
1780 name: "AnonymousHeadMapPtrOnly",
1781 data: struct {
1782 structMapPtr
1783 }{
1784 structMapPtr: structMapPtr{A: mapptr(map[string]int{"m": -1})},
1785 },
1786 },
1787 {
1788 name: "AnonymousHeadMapPtrOnlyOmitEmpty",
1789 data: struct {
1790 structMapPtrOmitEmpty
1791 }{
1792 structMapPtrOmitEmpty: structMapPtrOmitEmpty{A: mapptr(map[string]int{"m": -1})},
1793 },
1794 },
1795 {
1796 name: "AnonymousHeadMapPtrOnlyString",
1797 data: struct {
1798 structMapPtrString
1799 }{
1800 structMapPtrString: structMapPtrString{A: mapptr(map[string]int{"m": -1})},
1801 },
1802 },
1803
1804
1805 {
1806 name: "AnonymousHeadMapPtrNilOnly",
1807 data: struct {
1808 structMapPtr
1809 }{
1810 structMapPtr: structMapPtr{A: nil},
1811 },
1812 },
1813 {
1814 name: "AnonymousHeadMapPtrNilOnlyOmitEmpty",
1815 data: struct {
1816 structMapPtrOmitEmpty
1817 }{
1818 structMapPtrOmitEmpty: structMapPtrOmitEmpty{A: nil},
1819 },
1820 },
1821 {
1822 name: "AnonymousHeadMapPtrNilOnlyString",
1823 data: struct {
1824 structMapPtrString
1825 }{
1826 structMapPtrString: structMapPtrString{A: nil},
1827 },
1828 },
1829
1830
1831 {
1832 name: "PtrAnonymousHeadMapPtrOnly",
1833 data: struct {
1834 *structMapPtr
1835 }{
1836 structMapPtr: &structMapPtr{A: mapptr(map[string]int{"m": -1})},
1837 },
1838 },
1839 {
1840 name: "PtrAnonymousHeadMapPtrOnlyOmitEmpty",
1841 data: struct {
1842 *structMapPtrOmitEmpty
1843 }{
1844 structMapPtrOmitEmpty: &structMapPtrOmitEmpty{A: mapptr(map[string]int{"m": -1})},
1845 },
1846 },
1847 {
1848 name: "PtrAnonymousHeadMapPtrOnlyString",
1849 data: struct {
1850 *structMapPtrString
1851 }{
1852 structMapPtrString: &structMapPtrString{A: mapptr(map[string]int{"m": -1})},
1853 },
1854 },
1855
1856
1857 {
1858 name: "NilPtrAnonymousHeadMapPtrOnly",
1859 data: struct {
1860 *structMapPtr
1861 }{
1862 structMapPtr: nil,
1863 },
1864 },
1865 {
1866 name: "NilPtrAnonymousHeadMapPtrOnlyOmitEmpty",
1867 data: struct {
1868 *structMapPtrOmitEmpty
1869 }{
1870 structMapPtrOmitEmpty: nil,
1871 },
1872 },
1873 {
1874 name: "NilPtrAnonymousHeadMapPtrOnlyString",
1875 data: struct {
1876 *structMapPtrString
1877 }{
1878 structMapPtrString: nil,
1879 },
1880 },
1881 }
1882 for _, test := range tests {
1883 for _, indent := range []bool{true, false} {
1884 for _, htmlEscape := range []bool{true, false} {
1885 t.Run(fmt.Sprintf("%s_indent_%t_escape_%t", test.name, indent, htmlEscape), func(t *testing.T) {
1886 var buf bytes.Buffer
1887 enc := json.NewEncoder(&buf)
1888 enc.SetEscapeHTML(htmlEscape)
1889 if indent {
1890 enc.SetIndent("", " ")
1891 }
1892 if err := enc.Encode(test.data); err != nil {
1893 t.Fatalf("%s(htmlEscape:%v,indent:%v): %+v: %s", test.name, htmlEscape, indent, test.data, err)
1894 }
1895 stdresult := encodeByEncodingJSON(test.data, indent, htmlEscape)
1896 if buf.String() != stdresult {
1897 t.Errorf("%s(htmlEscape:%v,indent:%v): doesn't compatible with encoding/json. expected %q but got %q", test.name, htmlEscape, indent, stdresult, buf.String())
1898 }
1899 })
1900 }
1901 }
1902 }
1903 }
1904
View as plain text