1 package json_test
2
3 import (
4 "bytes"
5 "fmt"
6 "testing"
7
8 "github.com/goccy/go-json"
9 )
10
11 func TestCoverInt(t *testing.T) {
12 type structInt struct {
13 A int `json:"a"`
14 }
15 type structIntOmitEmpty struct {
16 A int `json:"a,omitempty"`
17 }
18 type structIntString struct {
19 A int `json:"a,string"`
20 }
21 type structIntStringOmitEmpty struct {
22 A int `json:"a,omitempty,string"`
23 }
24
25 type structIntPtr struct {
26 A *int `json:"a"`
27 }
28 type structIntPtrOmitEmpty struct {
29 A *int `json:"a,omitempty"`
30 }
31 type structIntPtrString struct {
32 A *int `json:"a,string"`
33 }
34 type structIntPtrStringOmitEmpty struct {
35 A *int `json:"a,omitempty,string"`
36 }
37
38 tests := []struct {
39 name string
40 data interface{}
41 }{
42 {
43 name: "Int",
44 data: 10,
45 },
46 {
47 name: "IntPtr",
48 data: intptr(10),
49 },
50 {
51 name: "IntPtr3",
52 data: intptr3(10),
53 },
54 {
55 name: "IntPtrNil",
56 data: (*int)(nil),
57 },
58 {
59 name: "IntPtr3Nil",
60 data: (***int)(nil),
61 },
62
63
64 {
65 name: "HeadIntZero",
66 data: struct {
67 A int `json:"a"`
68 }{},
69 },
70 {
71 name: "HeadIntZeroOmitEmpty",
72 data: struct {
73 A int `json:"a,omitempty"`
74 }{},
75 },
76 {
77 name: "HeadIntZeroString",
78 data: struct {
79 A int `json:"a,string"`
80 }{},
81 },
82
83
84 {
85 name: "HeadInt",
86 data: struct {
87 A int `json:"a"`
88 }{A: -1},
89 },
90 {
91 name: "HeadIntOmitEmpty",
92 data: struct {
93 A int `json:"a,omitempty"`
94 }{A: -1},
95 },
96 {
97 name: "HeadIntString",
98 data: struct {
99 A int `json:"a,string"`
100 }{A: -1},
101 },
102
103
104 {
105 name: "HeadIntPtr",
106 data: struct {
107 A *int `json:"a"`
108 }{A: intptr(-1)},
109 },
110 {
111 name: "HeadIntPtrOmitEmpty",
112 data: struct {
113 A *int `json:"a,omitempty"`
114 }{A: intptr(-1)},
115 },
116 {
117 name: "HeadIntPtrString",
118 data: struct {
119 A *int `json:"a,string"`
120 }{A: intptr(-1)},
121 },
122
123
124 {
125 name: "HeadIntPtrNil",
126 data: struct {
127 A *int `json:"a"`
128 }{A: nil},
129 },
130 {
131 name: "HeadIntPtrNilOmitEmpty",
132 data: struct {
133 A *int `json:"a,omitempty"`
134 }{A: nil},
135 },
136 {
137 name: "HeadIntPtrNilString",
138 data: struct {
139 A *int `json:"a,string"`
140 }{A: nil},
141 },
142
143
144 {
145 name: "PtrHeadIntZero",
146 data: &struct {
147 A int `json:"a"`
148 }{},
149 },
150 {
151 name: "PtrHeadIntZeroOmitEmpty",
152 data: &struct {
153 A int `json:"a,omitempty"`
154 }{},
155 },
156 {
157 name: "PtrHeadIntZeroString",
158 data: &struct {
159 A int `json:"a,string"`
160 }{},
161 },
162 {
163 name: "PtrHeadIntZeroStringOmitEmpty",
164 data: &struct {
165 A int `json:"a,string,omitempty"`
166 }{},
167 },
168
169
170 {
171 name: "PtrHeadInt",
172 data: &struct {
173 A int `json:"a"`
174 }{A: -1},
175 },
176 {
177 name: "PtrHeadIntOmitEmpty",
178 data: &struct {
179 A int `json:"a,omitempty"`
180 }{A: -1},
181 },
182 {
183 name: "PtrHeadIntString",
184 data: &struct {
185 A int `json:"a,string"`
186 }{A: -1},
187 },
188 {
189 name: "PtrHeadIntStringOmitEmpty",
190 data: &struct {
191 A int `json:"a,string,omitempty"`
192 }{A: -1},
193 },
194
195
196 {
197 name: "PtrHeadIntPtr",
198 data: &struct {
199 A *int `json:"a"`
200 }{A: intptr(-1)},
201 },
202 {
203 name: "PtrHeadIntPtrOmitEmpty",
204 data: &struct {
205 A *int `json:"a,omitempty"`
206 }{A: intptr(-1)},
207 },
208 {
209 name: "PtrHeadIntPtrString",
210 data: &struct {
211 A *int `json:"a,string"`
212 }{A: intptr(-1)},
213 },
214 {
215 name: "PtrHeadIntPtrStringOmitEmpty",
216 data: &struct {
217 A *int `json:"a,string,omitempty"`
218 }{A: intptr(-1)},
219 },
220
221
222 {
223 name: "PtrHeadIntPtrNil",
224 data: &struct {
225 A *int `json:"a"`
226 }{A: nil},
227 },
228 {
229 name: "PtrHeadIntPtrNilOmitEmpty",
230 data: &struct {
231 A *int `json:"a,omitempty"`
232 }{A: nil},
233 },
234 {
235 name: "PtrHeadIntPtrNilString",
236 data: &struct {
237 A *int `json:"a,string"`
238 }{A: nil},
239 },
240 {
241 name: "PtrHeadIntPtrNilStringOmitEmpty",
242 data: &struct {
243 A *int `json:"a,string,omitempty"`
244 }{A: nil},
245 },
246
247
248 {
249 name: "PtrHeadIntNil",
250 data: (*struct {
251 A *int `json:"a"`
252 })(nil),
253 },
254 {
255 name: "PtrHeadIntNilOmitEmpty",
256 data: (*struct {
257 A *int `json:"a,omitempty"`
258 })(nil),
259 },
260 {
261 name: "PtrHeadIntNilString",
262 data: (*struct {
263 A *int `json:"a,string"`
264 })(nil),
265 },
266 {
267 name: "PtrHeadIntNilStringOmitEmpty",
268 data: (*struct {
269 A *int `json:"a,string,omitempty"`
270 })(nil),
271 },
272
273
274 {
275 name: "HeadIntZeroMultiFields",
276 data: struct {
277 A int `json:"a"`
278 B int `json:"b"`
279 C int `json:"c"`
280 }{},
281 },
282 {
283 name: "HeadIntZeroMultiFieldsOmitEmpty",
284 data: struct {
285 A int `json:"a,omitempty"`
286 B int `json:"b,omitempty"`
287 C int `json:"c,omitempty"`
288 }{},
289 },
290 {
291 name: "HeadIntZeroMultiFieldsString",
292 data: struct {
293 A int `json:"a,string"`
294 B int `json:"b,string"`
295 C int `json:"c,string"`
296 }{},
297 },
298 {
299 name: "HeadIntZeroMultiFieldsStringOmitEmpty",
300 data: struct {
301 A int `json:"a,string,omitempty"`
302 B int `json:"b,string,omitempty"`
303 C int `json:"c,string,omitempty"`
304 }{},
305 },
306
307
308 {
309 name: "HeadIntMultiFields",
310 data: struct {
311 A int `json:"a"`
312 B int `json:"b"`
313 C int `json:"c"`
314 }{A: -1, B: 2, C: 3},
315 },
316 {
317 name: "HeadIntMultiFieldsOmitEmpty",
318 data: struct {
319 A int `json:"a,omitempty"`
320 B int `json:"b,omitempty"`
321 C int `json:"c,omitempty"`
322 }{A: -1, B: 2, C: 3},
323 },
324 {
325 name: "HeadIntMultiFieldsString",
326 data: struct {
327 A int `json:"a,string"`
328 B int `json:"b,string"`
329 C int `json:"c,string"`
330 }{A: -1, B: 2, C: 3},
331 },
332 {
333 name: "HeadIntMultiFieldsStringOmitEmpty",
334 data: struct {
335 A int `json:"a,string,omitempty"`
336 B int `json:"b,string,omitempty"`
337 C int `json:"c,string,omitempty"`
338 }{A: -1, B: 2, C: 3},
339 },
340
341
342 {
343 name: "HeadIntPtrMultiFields",
344 data: struct {
345 A *int `json:"a"`
346 B *int `json:"b"`
347 C *int `json:"c"`
348 }{A: intptr(-1), B: intptr(2), C: intptr(3)},
349 },
350 {
351 name: "HeadIntPtrMultiFieldsOmitEmpty",
352 data: struct {
353 A *int `json:"a,omitempty"`
354 B *int `json:"b,omitempty"`
355 C *int `json:"c,omitempty"`
356 }{A: intptr(-1), B: intptr(2), C: intptr(3)},
357 },
358 {
359 name: "HeadIntPtrMultiFieldsString",
360 data: struct {
361 A *int `json:"a,string"`
362 B *int `json:"b,string"`
363 C *int `json:"c,string"`
364 }{A: intptr(-1), B: intptr(2), C: intptr(3)},
365 },
366 {
367 name: "HeadIntPtrMultiFieldsStringOmitEmpty",
368 data: struct {
369 A *int `json:"a,string,omitempty"`
370 B *int `json:"b,string,omitempty"`
371 C *int `json:"c,string,omitempty"`
372 }{A: intptr(-1), B: intptr(2), C: intptr(3)},
373 },
374
375
376 {
377 name: "HeadIntPtrNilMultiFields",
378 data: struct {
379 A *int `json:"a"`
380 B *int `json:"b"`
381 C *int `json:"c"`
382 }{A: nil, B: nil, C: nil},
383 },
384 {
385 name: "HeadIntPtrNilMultiFieldsOmitEmpty",
386 data: struct {
387 A *int `json:"a,omitempty"`
388 B *int `json:"b,omitempty"`
389 C *int `json:"c,omitempty"`
390 }{A: nil, B: nil, C: nil},
391 },
392 {
393 name: "HeadIntPtrNilMultiFieldsString",
394 data: struct {
395 A *int `json:"a,string"`
396 B *int `json:"b,string"`
397 C *int `json:"c,string"`
398 }{A: nil, B: nil, C: nil},
399 },
400 {
401 name: "HeadIntPtrNilMultiFieldsStringOmitEmpty",
402 data: struct {
403 A *int `json:"a,string,omitempty"`
404 B *int `json:"b,string,omitempty"`
405 C *int `json:"c,string,omitempty"`
406 }{A: nil, B: nil, C: nil},
407 },
408
409
410 {
411 name: "PtrHeadIntZeroMultiFields",
412 data: &struct {
413 A int `json:"a"`
414 B int `json:"b"`
415 }{},
416 },
417 {
418 name: "PtrHeadIntZeroMultiFieldsOmitEmpty",
419 data: &struct {
420 A int `json:"a,omitempty"`
421 B int `json:"b,omitempty"`
422 }{},
423 },
424 {
425 name: "PtrHeadIntZeroMultiFieldsString",
426 data: &struct {
427 A int `json:"a,string"`
428 B int `json:"b,string"`
429 }{},
430 },
431 {
432 name: "PtrHeadIntZeroMultiFieldsStringOmitEmpty",
433 data: &struct {
434 A int `json:"a,string,omitempty"`
435 B int `json:"b,string,omitempty"`
436 }{},
437 },
438
439
440 {
441 name: "PtrHeadIntMultiFields",
442 data: &struct {
443 A int `json:"a"`
444 B int `json:"b"`
445 }{A: -1, B: 2},
446 },
447 {
448 name: "PtrHeadIntMultiFieldsOmitEmpty",
449 data: &struct {
450 A int `json:"a,omitempty"`
451 B int `json:"b,omitempty"`
452 }{A: -1, B: 2},
453 },
454 {
455 name: "PtrHeadIntMultiFieldsString",
456 data: &struct {
457 A int `json:"a,string"`
458 B int `json:"b,string"`
459 }{A: -1, B: 2},
460 },
461 {
462 name: "PtrHeadIntMultiFieldsStringOmitEmpty",
463 data: &struct {
464 A int `json:"a,string,omitempty"`
465 B int `json:"b,string,omitempty"`
466 }{A: -1, B: 2},
467 },
468
469
470 {
471 name: "PtrHeadIntPtrMultiFields",
472 data: &struct {
473 A *int `json:"a"`
474 B *int `json:"b"`
475 }{A: intptr(-1), B: intptr(2)},
476 },
477 {
478 name: "PtrHeadIntPtrMultiFieldsOmitEmpty",
479 data: &struct {
480 A *int `json:"a,omitempty"`
481 B *int `json:"b,omitempty"`
482 }{A: intptr(-1), B: intptr(2)},
483 },
484 {
485 name: "PtrHeadIntPtrMultiFieldsString",
486 data: &struct {
487 A *int `json:"a,string"`
488 B *int `json:"b,string"`
489 }{A: intptr(-1), B: intptr(2)},
490 },
491 {
492 name: "PtrHeadIntPtrMultiFieldsStringOmitEmpty",
493 data: &struct {
494 A *int `json:"a,string,omitempty"`
495 B *int `json:"b,string,omitempty"`
496 }{A: intptr(-1), B: intptr(2)},
497 },
498
499
500 {
501 name: "PtrHeadIntPtrNilMultiFields",
502 data: &struct {
503 A *int `json:"a"`
504 B *int `json:"b"`
505 }{A: nil, B: nil},
506 },
507 {
508 name: "PtrHeadIntPtrNilMultiFieldsOmitEmpty",
509 data: &struct {
510 A *int `json:"a,omitempty"`
511 B *int `json:"b,omitempty"`
512 }{A: nil, B: nil},
513 },
514 {
515 name: "PtrHeadIntPtrNilMultiFieldsString",
516 data: &struct {
517 A *int `json:"a,string"`
518 B *int `json:"b,string"`
519 }{A: nil, B: nil},
520 },
521 {
522 name: "PtrHeadIntPtrNilMultiFieldsStringOmitEmpty",
523 data: &struct {
524 A *int `json:"a,string,omitempty"`
525 B *int `json:"b,string,omitempty"`
526 }{A: nil, B: nil},
527 },
528
529
530 {
531 name: "PtrHeadIntNilMultiFields",
532 data: (*struct {
533 A *int `json:"a"`
534 B *int `json:"b"`
535 })(nil),
536 },
537 {
538 name: "PtrHeadIntNilMultiFieldsOmitEmpty",
539 data: (*struct {
540 A *int `json:"a,omitempty"`
541 B *int `json:"b,omitempty"`
542 })(nil),
543 },
544 {
545 name: "PtrHeadIntNilMultiFieldsString",
546 data: (*struct {
547 A *int `json:"a,string"`
548 B *int `json:"b,string"`
549 })(nil),
550 },
551 {
552 name: "PtrHeadIntNilMultiFieldsStringOmitEmpty",
553 data: (*struct {
554 A *int `json:"a,string,omitempty"`
555 B *int `json:"b,string,omitempty"`
556 })(nil),
557 },
558
559
560 {
561 name: "HeadIntZeroNotRoot",
562 data: struct {
563 A struct {
564 A int `json:"a"`
565 }
566 }{},
567 },
568 {
569 name: "HeadIntZeroNotRootOmitEmpty",
570 data: struct {
571 A struct {
572 A int `json:"a,omitempty"`
573 }
574 }{},
575 },
576 {
577 name: "HeadIntZeroNotRootString",
578 data: struct {
579 A struct {
580 A int `json:"a,string"`
581 }
582 }{},
583 },
584 {
585 name: "HeadIntZeroNotRootStringOmitEmpty",
586 data: struct {
587 A struct {
588 A int `json:"a,string,omitempty"`
589 }
590 }{},
591 },
592
593
594 {
595 name: "HeadIntNotRoot",
596 data: struct {
597 A struct {
598 A int `json:"a"`
599 }
600 }{A: struct {
601 A int `json:"a"`
602 }{A: -1}},
603 },
604 {
605 name: "HeadIntNotRootOmitEmpty",
606 data: struct {
607 A struct {
608 A int `json:"a,omitempty"`
609 }
610 }{A: struct {
611 A int `json:"a,omitempty"`
612 }{A: -1}},
613 },
614 {
615 name: "HeadIntNotRootString",
616 data: struct {
617 A struct {
618 A int `json:"a,string"`
619 }
620 }{A: struct {
621 A int `json:"a,string"`
622 }{A: -1}},
623 },
624 {
625 name: "HeadIntNotRootStringOmitEmpty",
626 data: struct {
627 A struct {
628 A int `json:"a,string,omitempty"`
629 }
630 }{A: struct {
631 A int `json:"a,string,omitempty"`
632 }{A: -1}},
633 },
634
635
636 {
637 name: "HeadIntNotRootMultiFields",
638 data: struct {
639 A struct {
640 A int `json:"a"`
641 B int `json:"b"`
642 }
643 }{A: struct {
644 A int `json:"a"`
645 B int `json:"b"`
646 }{A: -1, B: 1}},
647 },
648 {
649 name: "HeadIntNotRootOmitEmptyMultiFields",
650 data: struct {
651 A struct {
652 A int `json:"a,omitempty"`
653 B int `json:"b,omitempty"`
654 }
655 }{A: struct {
656 A int `json:"a,omitempty"`
657 B int `json:"b,omitempty"`
658 }{A: -1, B: 1}},
659 },
660 {
661 name: "HeadIntNotRootStringMultiFields",
662 data: struct {
663 A struct {
664 A int `json:"a,string"`
665 B int `json:"b,string"`
666 }
667 }{A: struct {
668 A int `json:"a,string"`
669 B int `json:"b,string"`
670 }{A: -1, B: 1}},
671 },
672 {
673 name: "HeadIntNotRootStringOmitEmptyMultiFields",
674 data: struct {
675 A struct {
676 A int `json:"a,string,omitempty"`
677 B int `json:"b,string,omitempty"`
678 }
679 }{A: struct {
680 A int `json:"a,string,omitempty"`
681 B int `json:"b,string,omitempty"`
682 }{A: -1, B: 1}},
683 },
684
685
686 {
687 name: "HeadIntPtrNotRoot",
688 data: struct {
689 A struct {
690 A *int `json:"a"`
691 }
692 }{A: struct {
693 A *int `json:"a"`
694 }{intptr(-1)}},
695 },
696 {
697 name: "HeadIntPtrNotRootOmitEmpty",
698 data: struct {
699 A struct {
700 A *int `json:"a,omitempty"`
701 }
702 }{A: struct {
703 A *int `json:"a,omitempty"`
704 }{intptr(-1)}},
705 },
706 {
707 name: "HeadIntPtrNotRootString",
708 data: struct {
709 A struct {
710 A *int `json:"a,string"`
711 }
712 }{A: struct {
713 A *int `json:"a,string"`
714 }{intptr(-1)}},
715 },
716 {
717 name: "HeadIntPtrNotRootStringOmitEmpty",
718 data: struct {
719 A struct {
720 A *int `json:"a,string,omitempty"`
721 }
722 }{A: struct {
723 A *int `json:"a,string,omitempty"`
724 }{intptr(-1)}},
725 },
726
727
728 {
729 name: "HeadIntPtrNilNotRoot",
730 data: struct {
731 A struct {
732 A *int `json:"a"`
733 }
734 }{},
735 },
736 {
737 name: "HeadIntPtrNilNotRootOmitEmpty",
738 data: struct {
739 A struct {
740 A *int `json:"a,omitempty"`
741 }
742 }{},
743 },
744 {
745 name: "HeadIntPtrNilNotRootString",
746 data: struct {
747 A struct {
748 A *int `json:"a,string"`
749 }
750 }{},
751 },
752 {
753 name: "HeadIntPtrNilNotRootStringOmitEmpty",
754 data: struct {
755 A struct {
756 A *int `json:"a,string,omitempty"`
757 }
758 }{},
759 },
760
761
762 {
763 name: "PtrHeadIntZeroNotRoot",
764 data: struct {
765 A *struct {
766 A int `json:"a"`
767 }
768 }{A: new(struct {
769 A int `json:"a"`
770 })},
771 },
772 {
773 name: "PtrHeadIntZeroNotRootOmitEmpty",
774 data: struct {
775 A *struct {
776 A int `json:"a,omitempty"`
777 }
778 }{A: new(struct {
779 A int `json:"a,omitempty"`
780 })},
781 },
782 {
783 name: "PtrHeadIntZeroNotRootString",
784 data: struct {
785 A *struct {
786 A int `json:"a,string"`
787 }
788 }{A: new(struct {
789 A int `json:"a,string"`
790 })},
791 },
792 {
793 name: "PtrHeadIntZeroNotRootStringOmitEmpty",
794 data: struct {
795 A *struct {
796 A int `json:"a,string,omitempty"`
797 }
798 }{A: new(struct {
799 A int `json:"a,string,omitempty"`
800 })},
801 },
802
803
804 {
805 name: "PtrHeadIntNotRoot",
806 data: struct {
807 A *struct {
808 A int `json:"a"`
809 }
810 }{A: &(struct {
811 A int `json:"a"`
812 }{A: -1})},
813 },
814 {
815 name: "PtrHeadIntNotRootOmitEmpty",
816 data: struct {
817 A *struct {
818 A int `json:"a,omitempty"`
819 }
820 }{A: &(struct {
821 A int `json:"a,omitempty"`
822 }{A: -1})},
823 },
824 {
825 name: "PtrHeadIntNotRootString",
826 data: struct {
827 A *struct {
828 A int `json:"a,string"`
829 }
830 }{A: &(struct {
831 A int `json:"a,string"`
832 }{A: -1})},
833 },
834 {
835 name: "PtrHeadIntNotRootStringOmitEmpty",
836 data: struct {
837 A *struct {
838 A int `json:"a,string,omitempty"`
839 }
840 }{A: &(struct {
841 A int `json:"a,string,omitempty"`
842 }{A: -1})},
843 },
844
845
846 {
847 name: "PtrHeadIntNotRootMultiFields",
848 data: struct {
849 A *struct {
850 A int `json:"a"`
851 B int `json:"b"`
852 }
853 }{A: &(struct {
854 A int `json:"a"`
855 B int `json:"b"`
856 }{A: -1, B: 1})},
857 },
858 {
859 name: "PtrHeadIntNotRootOmitEmptyMultiFields",
860 data: struct {
861 A *struct {
862 A int `json:"a,omitempty"`
863 B int `json:"b,omitempty"`
864 }
865 }{A: &(struct {
866 A int `json:"a,omitempty"`
867 B int `json:"b,omitempty"`
868 }{A: -1, B: 1})},
869 },
870 {
871 name: "PtrHeadIntNotRootStringMultiFields",
872 data: struct {
873 A *struct {
874 A int `json:"a,string"`
875 B int `json:"b,string"`
876 }
877 }{A: &(struct {
878 A int `json:"a,string"`
879 B int `json:"b,string"`
880 }{A: -1, B: 1})},
881 },
882 {
883 name: "PtrHeadIntNotRootStringOmitEmptyMultiFields",
884 data: struct {
885 A *struct {
886 A int `json:"a,string,omitempty"`
887 B int `json:"b,string,omitempty"`
888 }
889 }{A: &(struct {
890 A int `json:"a,string,omitempty"`
891 B int `json:"b,string,omitempty"`
892 }{A: -1, B: 1})},
893 },
894
895
896 {
897 name: "PtrHeadIntPtrNotRoot",
898 data: struct {
899 A *struct {
900 A *int `json:"a"`
901 }
902 }{A: &(struct {
903 A *int `json:"a"`
904 }{A: intptr(-1)})},
905 },
906 {
907 name: "PtrHeadIntPtrNotRootOmitEmpty",
908 data: struct {
909 A *struct {
910 A *int `json:"a,omitempty"`
911 }
912 }{A: &(struct {
913 A *int `json:"a,omitempty"`
914 }{A: intptr(-1)})},
915 },
916 {
917 name: "PtrHeadIntPtrNotRootString",
918 data: struct {
919 A *struct {
920 A *int `json:"a,string"`
921 }
922 }{A: &(struct {
923 A *int `json:"a,string"`
924 }{A: intptr(-1)})},
925 },
926 {
927 name: "PtrHeadIntPtrNotRootStringOmitEmpty",
928 data: struct {
929 A *struct {
930 A *int `json:"a,string,omitempty"`
931 }
932 }{A: &(struct {
933 A *int `json:"a,string,omitempty"`
934 }{A: intptr(-1)})},
935 },
936
937
938 {
939 name: "PtrHeadIntPtrNilNotRoot",
940 data: struct {
941 A *struct {
942 A *int `json:"a"`
943 }
944 }{A: &(struct {
945 A *int `json:"a"`
946 }{A: nil})},
947 },
948 {
949 name: "PtrHeadIntPtrNilNotRootOmitEmpty",
950 data: struct {
951 A *struct {
952 A *int `json:"a,omitempty"`
953 }
954 }{A: &(struct {
955 A *int `json:"a,omitempty"`
956 }{A: nil})},
957 },
958 {
959 name: "PtrHeadIntPtrNilNotRootString",
960 data: struct {
961 A *struct {
962 A *int `json:"a,string"`
963 }
964 }{A: &(struct {
965 A *int `json:"a,string"`
966 }{A: nil})},
967 },
968 {
969 name: "PtrHeadIntPtrNilNotRootStringOmitEmpty",
970 data: struct {
971 A *struct {
972 A *int `json:"a,string,omitempty"`
973 }
974 }{A: &(struct {
975 A *int `json:"a,string,omitempty"`
976 }{A: nil})},
977 },
978
979
980 {
981 name: "PtrHeadIntNilNotRoot",
982 data: struct {
983 A *struct {
984 A *int `json:"a"`
985 }
986 }{A: nil},
987 },
988 {
989 name: "PtrHeadIntNilNotRootOmitEmpty",
990 data: struct {
991 A *struct {
992 A *int `json:"a,omitempty"`
993 } `json:",omitempty"`
994 }{A: nil},
995 },
996 {
997 name: "PtrHeadIntNilNotRootString",
998 data: struct {
999 A *struct {
1000 A *int `json:"a,string"`
1001 } `json:",string"`
1002 }{A: nil},
1003 },
1004 {
1005 name: "PtrHeadIntNilNotRootStringOmitEmpty",
1006 data: struct {
1007 A *struct {
1008 A *int `json:"a,string,omitempty"`
1009 } `json:",string,omitempty"`
1010 }{A: nil},
1011 },
1012
1013
1014 {
1015 name: "HeadIntZeroMultiFieldsNotRoot",
1016 data: struct {
1017 A struct {
1018 A int `json:"a"`
1019 }
1020 B struct {
1021 B int `json:"b"`
1022 }
1023 }{},
1024 },
1025 {
1026 name: "HeadIntZeroMultiFieldsNotRootOmitEmpty",
1027 data: struct {
1028 A struct {
1029 A int `json:"a,omitempty"`
1030 }
1031 B struct {
1032 B int `json:"b,omitempty"`
1033 }
1034 }{},
1035 },
1036 {
1037 name: "HeadIntZeroMultiFieldsNotRootString",
1038 data: struct {
1039 A struct {
1040 A int `json:"a,string"`
1041 }
1042 B struct {
1043 B int `json:"b,string"`
1044 }
1045 }{},
1046 },
1047 {
1048 name: "HeadIntZeroMultiFieldsNotRootStringOmitEmpty",
1049 data: struct {
1050 A struct {
1051 A int `json:"a,string,omitempty"`
1052 }
1053 B struct {
1054 B int `json:"b,string,omitempty"`
1055 }
1056 }{},
1057 },
1058
1059
1060 {
1061 name: "HeadIntMultiFieldsNotRoot",
1062 data: struct {
1063 A struct {
1064 A int `json:"a"`
1065 }
1066 B struct {
1067 B int `json:"b"`
1068 }
1069 }{A: struct {
1070 A int `json:"a"`
1071 }{A: -1}, B: struct {
1072 B int `json:"b"`
1073 }{B: 2}},
1074 },
1075 {
1076 name: "HeadIntMultiFieldsNotRootOmitEmpty",
1077 data: struct {
1078 A struct {
1079 A int `json:"a,omitempty"`
1080 }
1081 B struct {
1082 B int `json:"b,omitempty"`
1083 }
1084 }{A: struct {
1085 A int `json:"a,omitempty"`
1086 }{A: -1}, B: struct {
1087 B int `json:"b,omitempty"`
1088 }{B: 2}},
1089 },
1090 {
1091 name: "HeadIntMultiFieldsNotRootString",
1092 data: struct {
1093 A struct {
1094 A int `json:"a,string"`
1095 }
1096 B struct {
1097 B int `json:"b,string"`
1098 }
1099 }{A: struct {
1100 A int `json:"a,string"`
1101 }{A: -1}, B: struct {
1102 B int `json:"b,string"`
1103 }{B: 2}},
1104 },
1105 {
1106 name: "HeadIntMultiFieldsNotRootStringOmitEmpty",
1107 data: struct {
1108 A struct {
1109 A int `json:"a,string,omitempty"`
1110 }
1111 B struct {
1112 B int `json:"b,string,omitempty"`
1113 }
1114 }{A: struct {
1115 A int `json:"a,string,omitempty"`
1116 }{A: -1}, B: struct {
1117 B int `json:"b,string,omitempty"`
1118 }{B: 2}},
1119 },
1120
1121
1122 {
1123 name: "HeadIntPtrMultiFieldsNotRoot",
1124 data: struct {
1125 A struct {
1126 A *int `json:"a"`
1127 }
1128 B struct {
1129 B *int `json:"b"`
1130 }
1131 }{A: struct {
1132 A *int `json:"a"`
1133 }{A: intptr(-1)}, B: struct {
1134 B *int `json:"b"`
1135 }{B: intptr(2)}},
1136 },
1137 {
1138 name: "HeadIntPtrMultiFieldsNotRootOmitEmpty",
1139 data: struct {
1140 A struct {
1141 A *int `json:"a,omitempty"`
1142 }
1143 B struct {
1144 B *int `json:"b,omitempty"`
1145 }
1146 }{A: struct {
1147 A *int `json:"a,omitempty"`
1148 }{A: intptr(-1)}, B: struct {
1149 B *int `json:"b,omitempty"`
1150 }{B: intptr(2)}},
1151 },
1152 {
1153 name: "HeadIntPtrMultiFieldsNotRootString",
1154 data: struct {
1155 A struct {
1156 A *int `json:"a,string"`
1157 }
1158 B struct {
1159 B *int `json:"b,string"`
1160 }
1161 }{A: struct {
1162 A *int `json:"a,string"`
1163 }{A: intptr(-1)}, B: struct {
1164 B *int `json:"b,string"`
1165 }{B: intptr(2)}},
1166 },
1167 {
1168 name: "HeadIntPtrMultiFieldsNotRootStringOmitEmpty",
1169 data: struct {
1170 A struct {
1171 A *int `json:"a,string,omitempty"`
1172 }
1173 B struct {
1174 B *int `json:"b,string,omitempty"`
1175 }
1176 }{A: struct {
1177 A *int `json:"a,string,omitempty"`
1178 }{A: intptr(-1)}, B: struct {
1179 B *int `json:"b,string,omitempty"`
1180 }{B: intptr(2)}},
1181 },
1182
1183
1184 {
1185 name: "HeadIntPtrNilMultiFieldsNotRoot",
1186 data: struct {
1187 A struct {
1188 A *int `json:"a"`
1189 }
1190 B struct {
1191 B *int `json:"b"`
1192 }
1193 }{A: struct {
1194 A *int `json:"a"`
1195 }{A: nil}, B: struct {
1196 B *int `json:"b"`
1197 }{B: nil}},
1198 },
1199 {
1200 name: "HeadIntPtrNilMultiFieldsNotRootOmitEmpty",
1201 data: struct {
1202 A struct {
1203 A *int `json:"a,omitempty"`
1204 }
1205 B struct {
1206 B *int `json:"b,omitempty"`
1207 }
1208 }{A: struct {
1209 A *int `json:"a,omitempty"`
1210 }{A: nil}, B: struct {
1211 B *int `json:"b,omitempty"`
1212 }{B: nil}},
1213 },
1214 {
1215 name: "HeadIntPtrNilMultiFieldsNotRootString",
1216 data: struct {
1217 A struct {
1218 A *int `json:"a,string"`
1219 }
1220 B struct {
1221 B *int `json:"b,string"`
1222 }
1223 }{A: struct {
1224 A *int `json:"a,string"`
1225 }{A: nil}, B: struct {
1226 B *int `json:"b,string"`
1227 }{B: nil}},
1228 },
1229 {
1230 name: "HeadIntPtrNilMultiFieldsNotRootStringOmitEmpty",
1231 data: struct {
1232 A struct {
1233 A *int `json:"a,string,omitempty"`
1234 }
1235 B struct {
1236 B *int `json:"b,string,omitempty"`
1237 }
1238 }{A: struct {
1239 A *int `json:"a,string,omitempty"`
1240 }{A: nil}, B: struct {
1241 B *int `json:"b,string,omitempty"`
1242 }{B: nil}},
1243 },
1244
1245
1246 {
1247 name: "PtrHeadIntZeroMultiFieldsNotRoot",
1248 data: &struct {
1249 A struct {
1250 A int `json:"a"`
1251 }
1252 B struct {
1253 B int `json:"b"`
1254 }
1255 }{},
1256 },
1257 {
1258 name: "PtrHeadIntZeroMultiFieldsNotRootOmitEmpty",
1259 data: &struct {
1260 A struct {
1261 A int `json:"a,omitempty"`
1262 }
1263 B struct {
1264 B int `json:"b,omitempty"`
1265 }
1266 }{},
1267 },
1268 {
1269 name: "PtrHeadIntZeroMultiFieldsNotRootString",
1270 data: &struct {
1271 A struct {
1272 A int `json:"a,string"`
1273 }
1274 B struct {
1275 B int `json:"b,string"`
1276 }
1277 }{},
1278 },
1279 {
1280 name: "PtrHeadIntZeroMultiFieldsNotRootStringOmitEmpty",
1281 data: &struct {
1282 A struct {
1283 A int `json:"a,string,omitempty"`
1284 }
1285 B struct {
1286 B int `json:"b,string,omitempty"`
1287 }
1288 }{},
1289 },
1290
1291
1292 {
1293 name: "PtrHeadIntMultiFieldsNotRoot",
1294 data: &struct {
1295 A struct {
1296 A int `json:"a"`
1297 }
1298 B struct {
1299 B int `json:"b"`
1300 }
1301 }{A: struct {
1302 A int `json:"a"`
1303 }{A: -1}, B: struct {
1304 B int `json:"b"`
1305 }{B: 2}},
1306 },
1307 {
1308 name: "PtrHeadIntMultiFieldsNotRootOmitEmpty",
1309 data: &struct {
1310 A struct {
1311 A int `json:"a,omitempty"`
1312 }
1313 B struct {
1314 B int `json:"b,omitempty"`
1315 }
1316 }{A: struct {
1317 A int `json:"a,omitempty"`
1318 }{A: -1}, B: struct {
1319 B int `json:"b,omitempty"`
1320 }{B: 2}},
1321 },
1322 {
1323 name: "PtrHeadIntMultiFieldsNotRootString",
1324 data: &struct {
1325 A struct {
1326 A int `json:"a,string"`
1327 }
1328 B struct {
1329 B int `json:"b,string"`
1330 }
1331 }{A: struct {
1332 A int `json:"a,string"`
1333 }{A: -1}, B: struct {
1334 B int `json:"b,string"`
1335 }{B: 2}},
1336 },
1337 {
1338 name: "PtrHeadIntMultiFieldsNotRootStringOmitEmpty",
1339 data: &struct {
1340 A struct {
1341 A int `json:"a,string,omitempty"`
1342 }
1343 B struct {
1344 B int `json:"b,string,omitempty"`
1345 }
1346 }{A: struct {
1347 A int `json:"a,string,omitempty"`
1348 }{A: -1}, B: struct {
1349 B int `json:"b,string,omitempty"`
1350 }{B: 2}},
1351 },
1352
1353
1354 {
1355 name: "PtrHeadIntPtrMultiFieldsNotRoot",
1356 data: &struct {
1357 A *struct {
1358 A *int `json:"a"`
1359 }
1360 B *struct {
1361 B *int `json:"b"`
1362 }
1363 }{A: &(struct {
1364 A *int `json:"a"`
1365 }{A: intptr(-1)}), B: &(struct {
1366 B *int `json:"b"`
1367 }{B: intptr(2)})},
1368 },
1369 {
1370 name: "PtrHeadIntPtrMultiFieldsNotRootOmitEmpty",
1371 data: &struct {
1372 A *struct {
1373 A *int `json:"a,omitempty"`
1374 }
1375 B *struct {
1376 B *int `json:"b,omitempty"`
1377 }
1378 }{A: &(struct {
1379 A *int `json:"a,omitempty"`
1380 }{A: intptr(-1)}), B: &(struct {
1381 B *int `json:"b,omitempty"`
1382 }{B: intptr(2)})},
1383 },
1384 {
1385 name: "PtrHeadIntPtrMultiFieldsNotRootString",
1386 data: &struct {
1387 A *struct {
1388 A *int `json:"a,string"`
1389 }
1390 B *struct {
1391 B *int `json:"b,string"`
1392 }
1393 }{A: &(struct {
1394 A *int `json:"a,string"`
1395 }{A: intptr(-1)}), B: &(struct {
1396 B *int `json:"b,string"`
1397 }{B: intptr(2)})},
1398 },
1399 {
1400 name: "PtrHeadIntPtrMultiFieldsNotRootStringOmitEmpty",
1401 data: &struct {
1402 A *struct {
1403 A *int `json:"a,string,omitempty"`
1404 }
1405 B *struct {
1406 B *int `json:"b,string,omitempty"`
1407 }
1408 }{A: &(struct {
1409 A *int `json:"a,string,omitempty"`
1410 }{A: intptr(-1)}), B: &(struct {
1411 B *int `json:"b,string,omitempty"`
1412 }{B: intptr(2)})},
1413 },
1414
1415
1416 {
1417 name: "PtrHeadIntPtrNilMultiFieldsNotRoot",
1418 data: &struct {
1419 A *struct {
1420 A *int `json:"a"`
1421 }
1422 B *struct {
1423 B *int `json:"b"`
1424 }
1425 }{A: nil, B: nil},
1426 },
1427 {
1428 name: "PtrHeadIntPtrNilMultiFieldsNotRootOmitEmpty",
1429 data: &struct {
1430 A *struct {
1431 A *int `json:"a,omitempty"`
1432 } `json:",omitempty"`
1433 B *struct {
1434 B *int `json:"b,omitempty"`
1435 } `json:",omitempty"`
1436 }{A: nil, B: nil},
1437 },
1438 {
1439 name: "PtrHeadIntPtrNilMultiFieldsNotRootString",
1440 data: &struct {
1441 A *struct {
1442 A *int `json:"a,string"`
1443 } `json:",string"`
1444 B *struct {
1445 B *int `json:"b,string"`
1446 } `json:",string"`
1447 }{A: nil, B: nil},
1448 },
1449 {
1450 name: "PtrHeadIntPtrNilMultiFieldsNotRootStringOmitEmpty",
1451 data: &struct {
1452 A *struct {
1453 A *int `json:"a,string,omitempty"`
1454 } `json:",string,omitempty"`
1455 B *struct {
1456 B *int `json:"b,string,omitempty"`
1457 } `json:",string,omitempty"`
1458 }{A: nil, B: nil},
1459 },
1460
1461
1462 {
1463 name: "PtrHeadIntNilMultiFieldsNotRoot",
1464 data: (*struct {
1465 A *struct {
1466 A *int `json:"a"`
1467 }
1468 B *struct {
1469 B *int `json:"b"`
1470 }
1471 })(nil),
1472 },
1473 {
1474 name: "PtrHeadIntNilMultiFieldsNotRootOmitEmpty",
1475 data: (*struct {
1476 A *struct {
1477 A *int `json:"a,omitempty"`
1478 }
1479 B *struct {
1480 B *int `json:"b,omitempty"`
1481 }
1482 })(nil),
1483 },
1484 {
1485 name: "PtrHeadIntNilMultiFieldsNotRootString",
1486 data: (*struct {
1487 A *struct {
1488 A *int `json:"a,string"`
1489 }
1490 B *struct {
1491 B *int `json:"b,string"`
1492 }
1493 })(nil),
1494 },
1495 {
1496 name: "PtrHeadIntNilMultiFieldsNotRootStringOmitEmpty",
1497 data: (*struct {
1498 A *struct {
1499 A *int `json:"a,string,omitempty"`
1500 }
1501 B *struct {
1502 B *int `json:"b,string,omitempty"`
1503 }
1504 })(nil),
1505 },
1506
1507
1508 {
1509 name: "PtrHeadIntDoubleMultiFieldsNotRoot",
1510 data: &struct {
1511 A *struct {
1512 A int `json:"a"`
1513 B int `json:"b"`
1514 }
1515 B *struct {
1516 A int `json:"a"`
1517 B int `json:"b"`
1518 }
1519 }{A: &(struct {
1520 A int `json:"a"`
1521 B int `json:"b"`
1522 }{A: -1, B: 2}), B: &(struct {
1523 A int `json:"a"`
1524 B int `json:"b"`
1525 }{A: 3, B: 4})},
1526 },
1527 {
1528 name: "PtrHeadIntDoubleMultiFieldsNotRootOmitEmpty",
1529 data: &struct {
1530 A *struct {
1531 A int `json:"a,omitempty"`
1532 B int `json:"b,omitempty"`
1533 }
1534 B *struct {
1535 A int `json:"a,omitempty"`
1536 B int `json:"b,omitempty"`
1537 }
1538 }{A: &(struct {
1539 A int `json:"a,omitempty"`
1540 B int `json:"b,omitempty"`
1541 }{A: -1, B: 2}), B: &(struct {
1542 A int `json:"a,omitempty"`
1543 B int `json:"b,omitempty"`
1544 }{A: 3, B: 4})},
1545 },
1546 {
1547 name: "PtrHeadIntDoubleMultiFieldsNotRootString",
1548 data: &struct {
1549 A *struct {
1550 A int `json:"a,string"`
1551 B int `json:"b,string"`
1552 }
1553 B *struct {
1554 A int `json:"a,string"`
1555 B int `json:"b,string"`
1556 }
1557 }{A: &(struct {
1558 A int `json:"a,string"`
1559 B int `json:"b,string"`
1560 }{A: -1, B: 2}), B: &(struct {
1561 A int `json:"a,string"`
1562 B int `json:"b,string"`
1563 }{A: 3, B: 4})},
1564 },
1565 {
1566 name: "PtrHeadIntDoubleMultiFieldsNotRootStringOmitEmpty",
1567 data: &struct {
1568 A *struct {
1569 A int `json:"a,string,omitempty"`
1570 B int `json:"b,string,omitempty"`
1571 }
1572 B *struct {
1573 A int `json:"a,string,omitempty"`
1574 B int `json:"b,string,omitempty"`
1575 }
1576 }{A: &(struct {
1577 A int `json:"a,string,omitempty"`
1578 B int `json:"b,string,omitempty"`
1579 }{A: -1, B: 2}), B: &(struct {
1580 A int `json:"a,string,omitempty"`
1581 B int `json:"b,string,omitempty"`
1582 }{A: 3, B: 4})},
1583 },
1584
1585
1586 {
1587 name: "PtrHeadIntNilDoubleMultiFieldsNotRoot",
1588 data: &struct {
1589 A *struct {
1590 A int `json:"a"`
1591 B int `json:"b"`
1592 }
1593 B *struct {
1594 A int `json:"a"`
1595 B int `json:"b"`
1596 }
1597 }{A: nil, B: nil},
1598 },
1599 {
1600 name: "PtrHeadIntNilDoubleMultiFieldsNotRootOmitEmpty",
1601 data: &struct {
1602 A *struct {
1603 A int `json:"a,omitempty"`
1604 B int `json:"b,omitempty"`
1605 } `json:",omitempty"`
1606 B *struct {
1607 A int `json:"a,omitempty"`
1608 B int `json:"b,omitempty"`
1609 } `json:",omitempty"`
1610 }{A: nil, B: nil},
1611 },
1612 {
1613 name: "PtrHeadIntNilDoubleMultiFieldsNotRootString",
1614 data: &struct {
1615 A *struct {
1616 A int `json:"a,string"`
1617 B int `json:"b,string"`
1618 }
1619 B *struct {
1620 A int `json:"a,string"`
1621 B int `json:"b,string"`
1622 }
1623 }{A: nil, B: nil},
1624 },
1625 {
1626 name: "PtrHeadIntNilDoubleMultiFieldsNotRootStringOmitEmpty",
1627 data: &struct {
1628 A *struct {
1629 A int `json:"a,string,omitempty"`
1630 B int `json:"b,string,omitempty"`
1631 }
1632 B *struct {
1633 A int `json:"a,string,omitempty"`
1634 B int `json:"b,string,omitempty"`
1635 }
1636 }{A: nil, B: nil},
1637 },
1638
1639
1640 {
1641 name: "PtrHeadIntNilDoubleMultiFieldsNotRoot",
1642 data: (*struct {
1643 A *struct {
1644 A int `json:"a"`
1645 B int `json:"b"`
1646 }
1647 B *struct {
1648 A int `json:"a"`
1649 B int `json:"b"`
1650 }
1651 })(nil),
1652 },
1653 {
1654 name: "PtrHeadIntNilDoubleMultiFieldsNotRootOmitEmpty",
1655 data: (*struct {
1656 A *struct {
1657 A int `json:"a,omitempty"`
1658 B int `json:"b,omitempty"`
1659 }
1660 B *struct {
1661 A int `json:"a,omitempty"`
1662 B int `json:"b,omitempty"`
1663 }
1664 })(nil),
1665 },
1666 {
1667 name: "PtrHeadIntNilDoubleMultiFieldsNotRootString",
1668 data: (*struct {
1669 A *struct {
1670 A int `json:"a,string"`
1671 B int `json:"b,string"`
1672 }
1673 B *struct {
1674 A int `json:"a,string"`
1675 B int `json:"b,string"`
1676 }
1677 })(nil),
1678 },
1679 {
1680 name: "PtrHeadIntNilDoubleMultiFieldsNotRootStringOmitEmpty",
1681 data: (*struct {
1682 A *struct {
1683 A int `json:"a,string,omitempty"`
1684 B int `json:"b,string,omitempty"`
1685 }
1686 B *struct {
1687 A int `json:"a,string,omitempty"`
1688 B int `json:"b,string,omitempty"`
1689 }
1690 })(nil),
1691 },
1692
1693
1694 {
1695 name: "PtrHeadIntPtrDoubleMultiFieldsNotRoot",
1696 data: &struct {
1697 A *struct {
1698 A *int `json:"a"`
1699 B *int `json:"b"`
1700 }
1701 B *struct {
1702 A *int `json:"a"`
1703 B *int `json:"b"`
1704 }
1705 }{A: &(struct {
1706 A *int `json:"a"`
1707 B *int `json:"b"`
1708 }{A: intptr(-1), B: intptr(2)}), B: &(struct {
1709 A *int `json:"a"`
1710 B *int `json:"b"`
1711 }{A: intptr(3), B: intptr(4)})},
1712 },
1713 {
1714 name: "PtrHeadIntPtrDoubleMultiFieldsNotRootOmitEmpty",
1715 data: &struct {
1716 A *struct {
1717 A *int `json:"a,omitempty"`
1718 B *int `json:"b,omitempty"`
1719 }
1720 B *struct {
1721 A *int `json:"a,omitempty"`
1722 B *int `json:"b,omitempty"`
1723 }
1724 }{A: &(struct {
1725 A *int `json:"a,omitempty"`
1726 B *int `json:"b,omitempty"`
1727 }{A: intptr(-1), B: intptr(2)}), B: &(struct {
1728 A *int `json:"a,omitempty"`
1729 B *int `json:"b,omitempty"`
1730 }{A: intptr(3), B: intptr(4)})},
1731 },
1732 {
1733 name: "PtrHeadIntPtrDoubleMultiFieldsNotRootString",
1734 data: &struct {
1735 A *struct {
1736 A *int `json:"a,string"`
1737 B *int `json:"b,string"`
1738 }
1739 B *struct {
1740 A *int `json:"a,string"`
1741 B *int `json:"b,string"`
1742 }
1743 }{A: &(struct {
1744 A *int `json:"a,string"`
1745 B *int `json:"b,string"`
1746 }{A: intptr(-1), B: intptr(2)}), B: &(struct {
1747 A *int `json:"a,string"`
1748 B *int `json:"b,string"`
1749 }{A: intptr(3), B: intptr(4)})},
1750 },
1751 {
1752 name: "PtrHeadIntPtrDoubleMultiFieldsNotRootStringOmitEmpty",
1753 data: &struct {
1754 A *struct {
1755 A *int `json:"a,string,omitempty"`
1756 B *int `json:"b,string,omitempty"`
1757 }
1758 B *struct {
1759 A *int `json:"a,string,omitempty"`
1760 B *int `json:"b,string,omitempty"`
1761 }
1762 }{A: &(struct {
1763 A *int `json:"a,string,omitempty"`
1764 B *int `json:"b,string,omitempty"`
1765 }{A: intptr(-1), B: intptr(2)}), B: &(struct {
1766 A *int `json:"a,string,omitempty"`
1767 B *int `json:"b,string,omitempty"`
1768 }{A: intptr(3), B: intptr(4)})},
1769 },
1770
1771
1772 {
1773 name: "PtrHeadIntPtrNilDoubleMultiFieldsNotRoot",
1774 data: &struct {
1775 A *struct {
1776 A *int `json:"a"`
1777 B *int `json:"b"`
1778 }
1779 B *struct {
1780 A *int `json:"a"`
1781 B *int `json:"b"`
1782 }
1783 }{A: nil, B: nil},
1784 },
1785 {
1786 name: "PtrHeadIntPtrNilDoubleMultiFieldsNotRootOmitEmpty",
1787 data: &struct {
1788 A *struct {
1789 A *int `json:"a,omitempty"`
1790 B *int `json:"b,omitempty"`
1791 } `json:",omitempty"`
1792 B *struct {
1793 A *int `json:"a,omitempty"`
1794 B *int `json:"b,omitempty"`
1795 } `json:",omitempty"`
1796 }{A: nil, B: nil},
1797 },
1798 {
1799 name: "PtrHeadIntPtrNilDoubleMultiFieldsNotRootString",
1800 data: &struct {
1801 A *struct {
1802 A *int `json:"a,string"`
1803 B *int `json:"b,string"`
1804 }
1805 B *struct {
1806 A *int `json:"a,string"`
1807 B *int `json:"b,string"`
1808 }
1809 }{A: nil, B: nil},
1810 },
1811 {
1812 name: "PtrHeadIntPtrNilDoubleMultiFieldsNotRootStringOmitEmpty",
1813 data: &struct {
1814 A *struct {
1815 A *int `json:"a,string,omitempty"`
1816 B *int `json:"b,string,omitempty"`
1817 }
1818 B *struct {
1819 A *int `json:"a,string,omitempty"`
1820 B *int `json:"b,string,omitempty"`
1821 }
1822 }{A: nil, B: nil},
1823 },
1824
1825
1826 {
1827 name: "PtrHeadIntPtrNilDoubleMultiFieldsNotRoot",
1828 data: (*struct {
1829 A *struct {
1830 A *int `json:"a"`
1831 B *int `json:"b"`
1832 }
1833 B *struct {
1834 A *int `json:"a"`
1835 B *int `json:"b"`
1836 }
1837 })(nil),
1838 },
1839 {
1840 name: "PtrHeadIntPtrNilDoubleMultiFieldsNotRootOmitEmpty",
1841 data: (*struct {
1842 A *struct {
1843 A *int `json:"a,omitempty"`
1844 B *int `json:"b,omitempty"`
1845 }
1846 B *struct {
1847 A *int `json:"a,omitempty"`
1848 B *int `json:"b,omitempty"`
1849 }
1850 })(nil),
1851 },
1852 {
1853 name: "PtrHeadIntPtrNilDoubleMultiFieldsNotRootString",
1854 data: (*struct {
1855 A *struct {
1856 A *int `json:"a,string"`
1857 B *int `json:"b,string"`
1858 }
1859 B *struct {
1860 A *int `json:"a,string"`
1861 B *int `json:"b,string"`
1862 }
1863 })(nil),
1864 },
1865 {
1866 name: "PtrHeadIntPtrNilDoubleMultiFieldsNotRootStringOmitEmpty",
1867 data: (*struct {
1868 A *struct {
1869 A *int `json:"a,string,omitempty"`
1870 B *int `json:"b,string,omitempty"`
1871 }
1872 B *struct {
1873 A *int `json:"a,string,omitempty"`
1874 B *int `json:"b,string,omitempty"`
1875 }
1876 })(nil),
1877 },
1878
1879
1880 {
1881 name: "AnonymousHeadInt",
1882 data: struct {
1883 structInt
1884 B int `json:"b"`
1885 }{
1886 structInt: structInt{A: -1},
1887 B: 2,
1888 },
1889 },
1890 {
1891 name: "AnonymousHeadIntOmitEmpty",
1892 data: struct {
1893 structIntOmitEmpty
1894 B int `json:"b,omitempty"`
1895 }{
1896 structIntOmitEmpty: structIntOmitEmpty{A: -1},
1897 B: 2,
1898 },
1899 },
1900 {
1901 name: "AnonymousHeadIntString",
1902 data: struct {
1903 structIntString
1904 B int `json:"b,string"`
1905 }{
1906 structIntString: structIntString{A: -1},
1907 B: 2,
1908 },
1909 },
1910 {
1911 name: "AnonymousHeadIntStringOmitEmpty",
1912 data: struct {
1913 structIntStringOmitEmpty
1914 B int `json:"b,string,omitempty"`
1915 }{
1916 structIntStringOmitEmpty: structIntStringOmitEmpty{A: -1},
1917 B: 2,
1918 },
1919 },
1920
1921
1922 {
1923 name: "PtrAnonymousHeadInt",
1924 data: struct {
1925 *structInt
1926 B int `json:"b"`
1927 }{
1928 structInt: &structInt{A: -1},
1929 B: 2,
1930 },
1931 },
1932 {
1933 name: "PtrAnonymousHeadIntOmitEmpty",
1934 data: struct {
1935 *structIntOmitEmpty
1936 B int `json:"b,omitempty"`
1937 }{
1938 structIntOmitEmpty: &structIntOmitEmpty{A: -1},
1939 B: 2,
1940 },
1941 },
1942 {
1943 name: "PtrAnonymousHeadIntString",
1944 data: struct {
1945 *structIntString
1946 B int `json:"b,string"`
1947 }{
1948 structIntString: &structIntString{A: -1},
1949 B: 2,
1950 },
1951 },
1952 {
1953 name: "PtrAnonymousHeadIntStringOmitEmpty",
1954 data: struct {
1955 *structIntStringOmitEmpty
1956 B int `json:"b,string,omitempty"`
1957 }{
1958 structIntStringOmitEmpty: &structIntStringOmitEmpty{A: -1},
1959 B: 2,
1960 },
1961 },
1962
1963
1964 {
1965 name: "NilPtrAnonymousHeadInt",
1966 data: struct {
1967 *structInt
1968 B int `json:"b"`
1969 }{
1970 structInt: nil,
1971 B: 2,
1972 },
1973 },
1974 {
1975 name: "NilPtrAnonymousHeadIntOmitEmpty",
1976 data: struct {
1977 *structIntOmitEmpty
1978 B int `json:"b,omitempty"`
1979 }{
1980 structIntOmitEmpty: nil,
1981 B: 2,
1982 },
1983 },
1984 {
1985 name: "NilPtrAnonymousHeadIntString",
1986 data: struct {
1987 *structIntString
1988 B int `json:"b,string"`
1989 }{
1990 structIntString: nil,
1991 B: 2,
1992 },
1993 },
1994 {
1995 name: "NilPtrAnonymousHeadIntStringOmitEmpty",
1996 data: struct {
1997 *structIntStringOmitEmpty
1998 B int `json:"b,string,omitempty"`
1999 }{
2000 structIntStringOmitEmpty: nil,
2001 B: 2,
2002 },
2003 },
2004
2005
2006 {
2007 name: "AnonymousHeadIntPtr",
2008 data: struct {
2009 structIntPtr
2010 B *int `json:"b"`
2011 }{
2012 structIntPtr: structIntPtr{A: intptr(-1)},
2013 B: intptr(2),
2014 },
2015 },
2016 {
2017 name: "AnonymousHeadIntPtrOmitEmpty",
2018 data: struct {
2019 structIntPtrOmitEmpty
2020 B *int `json:"b,omitempty"`
2021 }{
2022 structIntPtrOmitEmpty: structIntPtrOmitEmpty{A: intptr(-1)},
2023 B: intptr(2),
2024 },
2025 },
2026 {
2027 name: "AnonymousHeadIntPtrString",
2028 data: struct {
2029 structIntPtrString
2030 B *int `json:"b,string"`
2031 }{
2032 structIntPtrString: structIntPtrString{A: intptr(-1)},
2033 B: intptr(2),
2034 },
2035 },
2036 {
2037 name: "AnonymousHeadIntPtrStringOmitEmpty",
2038 data: struct {
2039 structIntPtrStringOmitEmpty
2040 B *int `json:"b,string,omitempty"`
2041 }{
2042 structIntPtrStringOmitEmpty: structIntPtrStringOmitEmpty{A: intptr(-1)},
2043 B: intptr(2),
2044 },
2045 },
2046
2047
2048 {
2049 name: "AnonymousHeadIntPtrNil",
2050 data: struct {
2051 structIntPtr
2052 B *int `json:"b"`
2053 }{
2054 structIntPtr: structIntPtr{A: nil},
2055 B: intptr(2),
2056 },
2057 },
2058 {
2059 name: "AnonymousHeadIntPtrNilOmitEmpty",
2060 data: struct {
2061 structIntPtrOmitEmpty
2062 B *int `json:"b,omitempty"`
2063 }{
2064 structIntPtrOmitEmpty: structIntPtrOmitEmpty{A: nil},
2065 B: intptr(2),
2066 },
2067 },
2068 {
2069 name: "AnonymousHeadIntPtrNilString",
2070 data: struct {
2071 structIntPtrString
2072 B *int `json:"b,string"`
2073 }{
2074 structIntPtrString: structIntPtrString{A: nil},
2075 B: intptr(2),
2076 },
2077 },
2078 {
2079 name: "AnonymousHeadIntPtrNilStringOmitEmpty",
2080 data: struct {
2081 structIntPtrStringOmitEmpty
2082 B *int `json:"b,string,omitempty"`
2083 }{
2084 structIntPtrStringOmitEmpty: structIntPtrStringOmitEmpty{A: nil},
2085 B: intptr(2),
2086 },
2087 },
2088
2089
2090 {
2091 name: "PtrAnonymousHeadIntPtr",
2092 data: struct {
2093 *structIntPtr
2094 B *int `json:"b"`
2095 }{
2096 structIntPtr: &structIntPtr{A: intptr(-1)},
2097 B: intptr(2),
2098 },
2099 },
2100 {
2101 name: "PtrAnonymousHeadIntPtrOmitEmpty",
2102 data: struct {
2103 *structIntPtrOmitEmpty
2104 B *int `json:"b,omitempty"`
2105 }{
2106 structIntPtrOmitEmpty: &structIntPtrOmitEmpty{A: intptr(-1)},
2107 B: intptr(2),
2108 },
2109 },
2110 {
2111 name: "PtrAnonymousHeadIntPtrString",
2112 data: struct {
2113 *structIntPtrString
2114 B *int `json:"b,string"`
2115 }{
2116 structIntPtrString: &structIntPtrString{A: intptr(-1)},
2117 B: intptr(2),
2118 },
2119 },
2120 {
2121 name: "PtrAnonymousHeadIntPtrStringOmitEmpty",
2122 data: struct {
2123 *structIntPtrStringOmitEmpty
2124 B *int `json:"b,string,omitempty"`
2125 }{
2126 structIntPtrStringOmitEmpty: &structIntPtrStringOmitEmpty{A: intptr(-1)},
2127 B: intptr(2),
2128 },
2129 },
2130
2131
2132 {
2133 name: "NilPtrAnonymousHeadIntPtr",
2134 data: struct {
2135 *structIntPtr
2136 B *int `json:"b"`
2137 }{
2138 structIntPtr: nil,
2139 B: intptr(2),
2140 },
2141 },
2142 {
2143 name: "NilPtrAnonymousHeadIntPtrOmitEmpty",
2144 data: struct {
2145 *structIntPtrOmitEmpty
2146 B *int `json:"b,omitempty"`
2147 }{
2148 structIntPtrOmitEmpty: nil,
2149 B: intptr(2),
2150 },
2151 },
2152 {
2153 name: "NilPtrAnonymousHeadIntPtrString",
2154 data: struct {
2155 *structIntPtrString
2156 B *int `json:"b,string"`
2157 }{
2158 structIntPtrString: nil,
2159 B: intptr(2),
2160 },
2161 },
2162 {
2163 name: "NilPtrAnonymousHeadIntPtrStringOmitEmpty",
2164 data: struct {
2165 *structIntPtrStringOmitEmpty
2166 B *int `json:"b,string,omitempty"`
2167 }{
2168 structIntPtrStringOmitEmpty: nil,
2169 B: intptr(2),
2170 },
2171 },
2172
2173
2174 {
2175 name: "AnonymousHeadIntOnly",
2176 data: struct {
2177 structInt
2178 }{
2179 structInt: structInt{A: -1},
2180 },
2181 },
2182 {
2183 name: "AnonymousHeadIntOnlyOmitEmpty",
2184 data: struct {
2185 structIntOmitEmpty
2186 }{
2187 structIntOmitEmpty: structIntOmitEmpty{A: -1},
2188 },
2189 },
2190 {
2191 name: "AnonymousHeadIntOnlyString",
2192 data: struct {
2193 structIntString
2194 }{
2195 structIntString: structIntString{A: -1},
2196 },
2197 },
2198 {
2199 name: "AnonymousHeadIntOnlyStringOmitEmpty",
2200 data: struct {
2201 structIntStringOmitEmpty
2202 }{
2203 structIntStringOmitEmpty: structIntStringOmitEmpty{A: -1},
2204 },
2205 },
2206
2207
2208 {
2209 name: "PtrAnonymousHeadIntOnly",
2210 data: struct {
2211 *structInt
2212 }{
2213 structInt: &structInt{A: -1},
2214 },
2215 },
2216 {
2217 name: "PtrAnonymousHeadIntOnlyOmitEmpty",
2218 data: struct {
2219 *structIntOmitEmpty
2220 }{
2221 structIntOmitEmpty: &structIntOmitEmpty{A: -1},
2222 },
2223 },
2224 {
2225 name: "PtrAnonymousHeadIntOnlyString",
2226 data: struct {
2227 *structIntString
2228 }{
2229 structIntString: &structIntString{A: -1},
2230 },
2231 },
2232 {
2233 name: "PtrAnonymousHeadIntOnlyStringOmitEmpty",
2234 data: struct {
2235 *structIntStringOmitEmpty
2236 }{
2237 structIntStringOmitEmpty: &structIntStringOmitEmpty{A: -1},
2238 },
2239 },
2240
2241
2242 {
2243 name: "NilPtrAnonymousHeadIntOnly",
2244 data: struct {
2245 *structInt
2246 }{
2247 structInt: nil,
2248 },
2249 },
2250 {
2251 name: "NilPtrAnonymousHeadIntOnlyOmitEmpty",
2252 data: struct {
2253 *structIntOmitEmpty
2254 }{
2255 structIntOmitEmpty: nil,
2256 },
2257 },
2258 {
2259 name: "NilPtrAnonymousHeadIntOnlyString",
2260 data: struct {
2261 *structIntString
2262 }{
2263 structIntString: nil,
2264 },
2265 },
2266 {
2267 name: "NilPtrAnonymousHeadIntOnlyStringOmitEmpty",
2268 data: struct {
2269 *structIntStringOmitEmpty
2270 }{
2271 structIntStringOmitEmpty: nil,
2272 },
2273 },
2274
2275
2276 {
2277 name: "AnonymousHeadIntPtrOnly",
2278 data: struct {
2279 structIntPtr
2280 }{
2281 structIntPtr: structIntPtr{A: intptr(-1)},
2282 },
2283 },
2284 {
2285 name: "AnonymousHeadIntPtrOnlyOmitEmpty",
2286 data: struct {
2287 structIntPtrOmitEmpty
2288 }{
2289 structIntPtrOmitEmpty: structIntPtrOmitEmpty{A: intptr(-1)},
2290 },
2291 },
2292 {
2293 name: "AnonymousHeadIntPtrOnlyString",
2294 data: struct {
2295 structIntPtrString
2296 }{
2297 structIntPtrString: structIntPtrString{A: intptr(-1)},
2298 },
2299 },
2300 {
2301 name: "AnonymousHeadIntPtrOnlyStringOmitEmpty",
2302 data: struct {
2303 structIntPtrStringOmitEmpty
2304 }{
2305 structIntPtrStringOmitEmpty: structIntPtrStringOmitEmpty{A: intptr(-1)},
2306 },
2307 },
2308
2309
2310 {
2311 name: "AnonymousHeadIntPtrNilOnly",
2312 data: struct {
2313 structIntPtr
2314 }{
2315 structIntPtr: structIntPtr{A: nil},
2316 },
2317 },
2318 {
2319 name: "AnonymousHeadIntPtrNilOnlyOmitEmpty",
2320 data: struct {
2321 structIntPtrOmitEmpty
2322 }{
2323 structIntPtrOmitEmpty: structIntPtrOmitEmpty{A: nil},
2324 },
2325 },
2326 {
2327 name: "AnonymousHeadIntPtrNilOnlyString",
2328 data: struct {
2329 structIntPtrString
2330 }{
2331 structIntPtrString: structIntPtrString{A: nil},
2332 },
2333 },
2334 {
2335 name: "AnonymousHeadIntPtrNilOnlyStringOmitEmpty",
2336 data: struct {
2337 structIntPtrStringOmitEmpty
2338 }{
2339 structIntPtrStringOmitEmpty: structIntPtrStringOmitEmpty{A: nil},
2340 },
2341 },
2342
2343
2344 {
2345 name: "PtrAnonymousHeadIntPtrOnly",
2346 data: struct {
2347 *structIntPtr
2348 }{
2349 structIntPtr: &structIntPtr{A: intptr(-1)},
2350 },
2351 },
2352 {
2353 name: "PtrAnonymousHeadIntPtrOnlyOmitEmpty",
2354 data: struct {
2355 *structIntPtrOmitEmpty
2356 }{
2357 structIntPtrOmitEmpty: &structIntPtrOmitEmpty{A: intptr(-1)},
2358 },
2359 },
2360 {
2361 name: "PtrAnonymousHeadIntPtrOnlyString",
2362 data: struct {
2363 *structIntPtrString
2364 }{
2365 structIntPtrString: &structIntPtrString{A: intptr(-1)},
2366 },
2367 },
2368 {
2369 name: "PtrAnonymousHeadIntPtrOnlyStringOmitEmpty",
2370 data: struct {
2371 *structIntPtrStringOmitEmpty
2372 }{
2373 structIntPtrStringOmitEmpty: &structIntPtrStringOmitEmpty{A: intptr(-1)},
2374 },
2375 },
2376
2377
2378 {
2379 name: "NilPtrAnonymousHeadIntPtrOnly",
2380 data: struct {
2381 *structIntPtr
2382 }{
2383 structIntPtr: nil,
2384 },
2385 },
2386 {
2387 name: "NilPtrAnonymousHeadIntPtrOnlyOmitEmpty",
2388 data: struct {
2389 *structIntPtrOmitEmpty
2390 }{
2391 structIntPtrOmitEmpty: nil,
2392 },
2393 },
2394 {
2395 name: "NilPtrAnonymousHeadIntPtrOnlyString",
2396 data: struct {
2397 *structIntPtrString
2398 }{
2399 structIntPtrString: nil,
2400 },
2401 },
2402 {
2403 name: "NilPtrAnonymousHeadIntPtrOnlyStringOmitEmpty",
2404 data: struct {
2405 *structIntPtrStringOmitEmpty
2406 }{
2407 structIntPtrStringOmitEmpty: nil,
2408 },
2409 },
2410 }
2411 for _, test := range tests {
2412 for _, indent := range []bool{true, false} {
2413 for _, htmlEscape := range []bool{true, false} {
2414 t.Run(fmt.Sprintf("%s_indent_%t_escape_%t", test.name, indent, htmlEscape), func(t *testing.T) {
2415 var buf bytes.Buffer
2416 enc := json.NewEncoder(&buf)
2417 enc.SetEscapeHTML(htmlEscape)
2418 if indent {
2419 enc.SetIndent("", " ")
2420 }
2421 if err := enc.Encode(test.data); err != nil {
2422 t.Fatalf("%s(htmlEscape:%v,indent:%v): %+v: %s", test.name, htmlEscape, indent, test.data, err)
2423 }
2424 stdresult := encodeByEncodingJSON(test.data, indent, htmlEscape)
2425 if buf.String() != stdresult {
2426 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())
2427 }
2428 })
2429 }
2430 }
2431 }
2432 }
2433
View as plain text