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