github.com/goccy/go-json@v0.10.3-0.20240509105655-5e2ae3f23c1d/test/cover/cover_bytes_test.go (about) 1 package json_test 2 3 import ( 4 "bytes" 5 "fmt" 6 "testing" 7 8 "github.com/goccy/go-json" 9 ) 10 11 func TestCoverBytes(t *testing.T) { 12 type structBytes struct { 13 A []byte `json:"a"` 14 } 15 type structBytesOmitEmpty struct { 16 A []byte `json:"a,omitempty"` 17 } 18 type structBytesBytes struct { 19 A []byte `json:"a,bytes"` 20 } 21 22 type structBytesPtr struct { 23 A *[]byte `json:"a"` 24 } 25 type structBytesPtrOmitEmpty struct { 26 A *[]byte `json:"a,omitempty"` 27 } 28 type structBytesPtrBytes struct { 29 A *[]byte `json:"a,bytes"` 30 } 31 32 tests := []struct { 33 name string 34 data interface{} 35 }{ 36 { 37 name: "Bytes", 38 data: []byte("a"), 39 }, 40 { 41 name: "BytesPtr", 42 data: []byte("a"), 43 }, 44 { 45 name: "BytesPtr3", 46 data: bytesptr3([]byte("a")), 47 }, 48 { 49 name: "BytesPtrNil", 50 data: (*[]byte)(nil), 51 }, 52 { 53 name: "BytesPtr3Nil", 54 data: (***[]byte)(nil), 55 }, 56 57 // HeadBytesZero 58 { 59 name: "HeadBytesZero", 60 data: struct { 61 A []byte `json:"a"` 62 }{}, 63 }, 64 { 65 name: "HeadBytesZeroOmitEmpty", 66 data: struct { 67 A []byte `json:"a,omitempty"` 68 }{}, 69 }, 70 { 71 name: "HeadBytesZeroString", 72 data: struct { 73 A []byte `json:"a,string"` 74 }{}, 75 }, 76 77 // HeadBytes 78 { 79 name: "HeadString", 80 data: struct { 81 A []byte `json:"a"` 82 }{A: []byte("foo")}, 83 }, 84 { 85 name: "HeadBytesOmitEmpty", 86 data: struct { 87 A []byte `json:"a,omitempty"` 88 }{A: []byte("foo")}, 89 }, 90 { 91 name: "HeadBytesString", 92 data: struct { 93 A []byte `json:"a,string"` 94 }{A: []byte("foo")}, 95 }, 96 97 // HeadBytesPtr 98 { 99 name: "HeadBytesPtr", 100 data: struct { 101 A *[]byte `json:"a"` 102 }{A: bytesptr([]byte("foo"))}, 103 }, 104 { 105 name: "HeadBytesPtrOmitEmpty", 106 data: struct { 107 A *[]byte `json:"a,omitempty"` 108 }{A: bytesptr([]byte("foo"))}, 109 }, 110 { 111 name: "HeadBytesPtrString", 112 data: struct { 113 A *[]byte `json:"a,string"` 114 }{A: bytesptr([]byte("foo"))}, 115 }, 116 117 // HeadBytesPtrNil 118 { 119 name: "HeadBytesPtrNil", 120 data: struct { 121 A *[]byte `json:"a"` 122 }{A: nil}, 123 }, 124 { 125 name: "HeadBytesPtrNilOmitEmpty", 126 data: struct { 127 A *[]byte `json:"a,omitempty"` 128 }{A: nil}, 129 }, 130 { 131 name: "HeadBytesPtrNilString", 132 data: struct { 133 A *[]byte `json:"a,string"` 134 }{A: nil}, 135 }, 136 137 // PtrHeadBytesZero 138 { 139 name: "PtrHeadBytesZero", 140 data: &struct { 141 A []byte `json:"a"` 142 }{}, 143 }, 144 { 145 name: "PtrHeadBytesZeroOmitEmpty", 146 data: &struct { 147 A []byte `json:"a,omitempty"` 148 }{}, 149 }, 150 { 151 name: "PtrHeadBytesZeroString", 152 data: &struct { 153 A []byte `json:"a,string"` 154 }{}, 155 }, 156 157 // PtrHeadBytes 158 { 159 name: "PtrHeadString", 160 data: &struct { 161 A []byte `json:"a"` 162 }{A: []byte("foo")}, 163 }, 164 { 165 name: "PtrHeadBytesOmitEmpty", 166 data: &struct { 167 A []byte `json:"a,omitempty"` 168 }{A: []byte("foo")}, 169 }, 170 { 171 name: "PtrHeadBytesString", 172 data: &struct { 173 A []byte `json:"a,string"` 174 }{A: []byte("foo")}, 175 }, 176 177 // PtrHeadBytesPtr 178 { 179 name: "PtrHeadBytesPtr", 180 data: &struct { 181 A *[]byte `json:"a"` 182 }{A: bytesptr([]byte("foo"))}, 183 }, 184 { 185 name: "PtrHeadBytesPtrOmitEmpty", 186 data: &struct { 187 A *[]byte `json:"a,omitempty"` 188 }{A: bytesptr([]byte("foo"))}, 189 }, 190 { 191 name: "PtrHeadBytesPtrString", 192 data: &struct { 193 A *[]byte `json:"a,string"` 194 }{A: bytesptr([]byte("foo"))}, 195 }, 196 197 // PtrHeadBytesPtrNil 198 { 199 name: "PtrHeadBytesPtrNil", 200 data: &struct { 201 A *[]byte `json:"a"` 202 }{A: nil}, 203 }, 204 { 205 name: "PtrHeadBytesPtrNilOmitEmpty", 206 data: &struct { 207 A *[]byte `json:"a,omitempty"` 208 }{A: nil}, 209 }, 210 { 211 name: "PtrHeadBytesPtrNilString", 212 data: &struct { 213 A *[]byte `json:"a,string"` 214 }{A: nil}, 215 }, 216 217 // PtrHeadBytesNil 218 { 219 name: "PtrHeadBytesNil", 220 data: (*struct { 221 A *[]byte `json:"a"` 222 })(nil), 223 }, 224 { 225 name: "PtrHeadBytesNilOmitEmpty", 226 data: (*struct { 227 A *[]byte `json:"a,omitempty"` 228 })(nil), 229 }, 230 { 231 name: "PtrHeadBytesNilString", 232 data: (*struct { 233 A *[]byte `json:"a,string"` 234 })(nil), 235 }, 236 237 // HeadBytesZeroMultiFields 238 { 239 name: "HeadBytesZeroMultiFields", 240 data: struct { 241 A []byte `json:"a"` 242 B []byte `json:"b"` 243 C []byte `json:"c"` 244 }{}, 245 }, 246 { 247 name: "HeadBytesZeroMultiFieldsOmitEmpty", 248 data: struct { 249 A []byte `json:"a,omitempty"` 250 B []byte `json:"b,omitempty"` 251 C []byte `json:"c,omitempty"` 252 }{}, 253 }, 254 { 255 name: "HeadBytesZeroMultiFieldsString", 256 data: struct { 257 A []byte `json:"a,string"` 258 B []byte `json:"b,string"` 259 C []byte `json:"c,string"` 260 }{}, 261 }, 262 263 // HeadBytesMultiFields 264 { 265 name: "HeadBytesMultiFields", 266 data: struct { 267 A []byte `json:"a"` 268 B []byte `json:"b"` 269 C []byte `json:"c"` 270 }{A: []byte("foo"), B: []byte("bar"), C: []byte([]byte("baz"))}, 271 }, 272 { 273 name: "HeadBytesMultiFieldsOmitEmpty", 274 data: struct { 275 A []byte `json:"a,omitempty"` 276 B []byte `json:"b,omitempty"` 277 C []byte `json:"c,omitempty"` 278 }{A: []byte("foo"), B: []byte("bar"), C: []byte([]byte("baz"))}, 279 }, 280 { 281 name: "HeadBytesMultiFieldsString", 282 data: struct { 283 A []byte `json:"a,string"` 284 B []byte `json:"b,string"` 285 C []byte `json:"c,string"` 286 }{A: []byte("foo"), B: []byte("bar"), C: []byte([]byte("baz"))}, 287 }, 288 289 // HeadBytesPtrMultiFields 290 { 291 name: "HeadBytesPtrMultiFields", 292 data: struct { 293 A *[]byte `json:"a"` 294 B *[]byte `json:"b"` 295 C *[]byte `json:"c"` 296 }{A: bytesptr([]byte("foo")), B: bytesptr([]byte("bar")), C: bytesptr([]byte([]byte("baz")))}, 297 }, 298 { 299 name: "HeadBytesPtrMultiFieldsOmitEmpty", 300 data: struct { 301 A *[]byte `json:"a,omitempty"` 302 B *[]byte `json:"b,omitempty"` 303 C *[]byte `json:"c,omitempty"` 304 }{A: bytesptr([]byte("foo")), B: bytesptr([]byte("bar")), C: bytesptr([]byte([]byte("baz")))}, 305 }, 306 { 307 name: "HeadBytesPtrMultiFieldsString", 308 data: struct { 309 A *[]byte `json:"a,string"` 310 B *[]byte `json:"b,string"` 311 C *[]byte `json:"c,string"` 312 }{A: bytesptr([]byte("foo")), B: bytesptr([]byte("bar")), C: bytesptr([]byte([]byte("baz")))}, 313 }, 314 315 // HeadBytesPtrNilMultiFields 316 { 317 name: "HeadBytesPtrNilMultiFields", 318 data: struct { 319 A *[]byte `json:"a"` 320 B *[]byte `json:"b"` 321 C *[]byte `json:"c"` 322 }{A: nil, B: nil, C: nil}, 323 }, 324 { 325 name: "HeadBytesPtrNilMultiFieldsOmitEmpty", 326 data: struct { 327 A *[]byte `json:"a,omitempty"` 328 B *[]byte `json:"b,omitempty"` 329 C *[]byte `json:"c,omitempty"` 330 }{A: nil, B: nil, C: nil}, 331 }, 332 { 333 name: "HeadBytesPtrNilMultiFieldsString", 334 data: struct { 335 A *[]byte `json:"a,string"` 336 B *[]byte `json:"b,string"` 337 C *[]byte `json:"c,string"` 338 }{A: nil, B: nil, C: nil}, 339 }, 340 341 // PtrHeadBytesZeroMultiFields 342 { 343 name: "PtrHeadBytesZeroMultiFields", 344 data: &struct { 345 A []byte `json:"a"` 346 B []byte `json:"b"` 347 C []byte `json:"c"` 348 }{}, 349 }, 350 { 351 name: "PtrHeadBytesZeroMultiFieldsOmitEmpty", 352 data: &struct { 353 A []byte `json:"a,omitempty"` 354 B []byte `json:"b,omitempty"` 355 C []byte `json:"c,omitempty"` 356 }{}, 357 }, 358 { 359 name: "PtrHeadBytesZeroMultiFieldsString", 360 data: &struct { 361 A []byte `json:"a,string"` 362 B []byte `json:"b,string"` 363 C []byte `json:"c,string"` 364 }{}, 365 }, 366 367 // PtrHeadBytesMultiFields 368 { 369 name: "PtrHeadBytesMultiFields", 370 data: &struct { 371 A []byte `json:"a"` 372 B []byte `json:"b"` 373 C []byte `json:"c"` 374 }{A: []byte("foo"), B: []byte("bar"), C: []byte("baz")}, 375 }, 376 { 377 name: "PtrHeadBytesMultiFieldsOmitEmpty", 378 data: &struct { 379 A []byte `json:"a,omitempty"` 380 B []byte `json:"b,omitempty"` 381 C []byte `json:"c,omitempty"` 382 }{A: []byte("foo"), B: []byte("bar"), C: []byte("baz")}, 383 }, 384 { 385 name: "PtrHeadBytesMultiFieldsString", 386 data: &struct { 387 A []byte `json:"a,string"` 388 B []byte `json:"b,string"` 389 C []byte `json:"c,string"` 390 }{A: []byte("foo"), B: []byte("bar"), C: []byte("baz")}, 391 }, 392 393 // PtrHeadBytesPtrMultiFields 394 { 395 name: "PtrHeadBytesPtrMultiFields", 396 data: &struct { 397 A *[]byte `json:"a"` 398 B *[]byte `json:"b"` 399 C *[]byte `json:"c"` 400 }{A: bytesptr([]byte("foo")), B: bytesptr([]byte("bar")), C: bytesptr([]byte("baz"))}, 401 }, 402 { 403 name: "PtrHeadBytesPtrMultiFieldsOmitEmpty", 404 data: &struct { 405 A *[]byte `json:"a,omitempty"` 406 B *[]byte `json:"b,omitempty"` 407 C *[]byte `json:"c,omitempty"` 408 }{A: bytesptr([]byte("foo")), B: bytesptr([]byte("bar")), C: bytesptr([]byte("baz"))}, 409 }, 410 { 411 name: "PtrHeadBytesPtrMultiFieldsString", 412 data: &struct { 413 A *[]byte `json:"a,string"` 414 B *[]byte `json:"b,string"` 415 C *[]byte `json:"c,string"` 416 }{A: bytesptr([]byte("foo")), B: bytesptr([]byte("bar")), C: bytesptr([]byte("baz"))}, 417 }, 418 419 // PtrHeadBytesPtrNilMultiFields 420 { 421 name: "PtrHeadBytesPtrNilMultiFields", 422 data: &struct { 423 A *[]byte `json:"a"` 424 B *[]byte `json:"b"` 425 C *[]byte `json:"c"` 426 }{A: nil, B: nil, C: nil}, 427 }, 428 { 429 name: "PtrHeadBytesPtrNilMultiFieldsOmitEmpty", 430 data: &struct { 431 A *[]byte `json:"a,omitempty"` 432 B *[]byte `json:"b,omitempty"` 433 C *[]byte `json:"c,omitempty"` 434 }{A: nil, B: nil, C: nil}, 435 }, 436 { 437 name: "PtrHeadBytesPtrNilMultiFieldsString", 438 data: &struct { 439 A *[]byte `json:"a,string"` 440 B *[]byte `json:"b,string"` 441 C *[]byte `json:"c,string"` 442 }{A: nil, B: nil, C: nil}, 443 }, 444 445 // PtrHeadBytesNilMultiFields 446 { 447 name: "PtrHeadBytesNilMultiFields", 448 data: (*struct { 449 A *[]byte `json:"a"` 450 B *[]byte `json:"b"` 451 C *[]byte `json:"c"` 452 })(nil), 453 }, 454 { 455 name: "PtrHeadBytesNilMultiFieldsOmitEmpty", 456 data: (*struct { 457 A *[]byte `json:"a,omitempty"` 458 B *[]byte `json:"b,omitempty"` 459 C *[]byte `json:"c,omitempty"` 460 })(nil), 461 }, 462 { 463 name: "PtrHeadBytesNilMultiFieldsString", 464 data: (*struct { 465 A *[]byte `json:"a,string"` 466 B *[]byte `json:"b,string"` 467 C *[]byte `json:"c,string"` 468 })(nil), 469 }, 470 471 // HeadBytesZeroNotRoot 472 { 473 name: "HeadBytesZeroNotRoot", 474 data: struct { 475 A struct { 476 A []byte `json:"a"` 477 } 478 }{}, 479 }, 480 { 481 name: "HeadBytesZeroNotRootOmitEmpty", 482 data: struct { 483 A struct { 484 A []byte `json:"a,omitempty"` 485 } 486 }{}, 487 }, 488 { 489 name: "HeadBytesZeroNotRootString", 490 data: struct { 491 A struct { 492 A []byte `json:"a,string"` 493 } 494 }{}, 495 }, 496 497 // HeadBytesNotRoot 498 { 499 name: "HeadBytesNotRoot", 500 data: struct { 501 A struct { 502 A []byte `json:"a"` 503 } 504 }{A: struct { 505 A []byte `json:"a"` 506 }{A: []byte("foo")}}, 507 }, 508 { 509 name: "HeadBytesNotRootOmitEmpty", 510 data: struct { 511 A struct { 512 A []byte `json:"a,omitempty"` 513 } 514 }{A: struct { 515 A []byte `json:"a,omitempty"` 516 }{A: []byte("foo")}}, 517 }, 518 { 519 name: "HeadBytesNotRootString", 520 data: struct { 521 A struct { 522 A []byte `json:"a,string"` 523 } 524 }{A: struct { 525 A []byte `json:"a,string"` 526 }{A: []byte("foo")}}, 527 }, 528 529 // HeadBytesPtrNotRoot 530 { 531 name: "HeadBytesPtrNotRoot", 532 data: struct { 533 A struct { 534 A *[]byte `json:"a"` 535 } 536 }{A: struct { 537 A *[]byte `json:"a"` 538 }{bytesptr([]byte("foo"))}}, 539 }, 540 { 541 name: "HeadBytesPtrNotRootOmitEmpty", 542 data: struct { 543 A struct { 544 A *[]byte `json:"a,omitempty"` 545 } 546 }{A: struct { 547 A *[]byte `json:"a,omitempty"` 548 }{bytesptr([]byte("foo"))}}, 549 }, 550 { 551 name: "HeadBytesPtrNotRootString", 552 data: struct { 553 A struct { 554 A *[]byte `json:"a,string"` 555 } 556 }{A: struct { 557 A *[]byte `json:"a,string"` 558 }{bytesptr([]byte("foo"))}}, 559 }, 560 561 // HeadBytesPtrNilNotRoot 562 { 563 name: "HeadBytesPtrNilNotRoot", 564 data: struct { 565 A struct { 566 A *[]byte `json:"a"` 567 } 568 }{}, 569 }, 570 { 571 name: "HeadBytesPtrNilNotRootOmitEmpty", 572 data: struct { 573 A struct { 574 A *[]byte `json:"a,omitempty"` 575 } 576 }{}, 577 }, 578 { 579 name: "HeadBytesPtrNilNotRootString", 580 data: struct { 581 A struct { 582 A *[]byte `json:"a,string"` 583 } 584 }{}, 585 }, 586 587 // PtrHeadBytesZeroNotRoot 588 { 589 name: "PtrHeadBytesZeroNotRoot", 590 data: struct { 591 A *struct { 592 A []byte `json:"a"` 593 } 594 }{A: new(struct { 595 A []byte `json:"a"` 596 })}, 597 }, 598 { 599 name: "PtrHeadBytesZeroNotRootOmitEmpty", 600 data: struct { 601 A *struct { 602 A []byte `json:"a,omitempty"` 603 } 604 }{A: new(struct { 605 A []byte `json:"a,omitempty"` 606 })}, 607 }, 608 { 609 name: "PtrHeadBytesZeroNotRootString", 610 data: struct { 611 A *struct { 612 A []byte `json:"a,string"` 613 } 614 }{A: new(struct { 615 A []byte `json:"a,string"` 616 })}, 617 }, 618 619 // PtrHeadBytesNotRoot 620 { 621 name: "PtrHeadBytesNotRoot", 622 data: struct { 623 A *struct { 624 A []byte `json:"a"` 625 } 626 }{A: &(struct { 627 A []byte `json:"a"` 628 }{A: []byte("foo")})}, 629 }, 630 { 631 name: "PtrHeadBytesNotRootOmitEmpty", 632 data: struct { 633 A *struct { 634 A []byte `json:"a,omitempty"` 635 } 636 }{A: &(struct { 637 A []byte `json:"a,omitempty"` 638 }{A: []byte("foo")})}, 639 }, 640 { 641 name: "PtrHeadBytesNotRootString", 642 data: struct { 643 A *struct { 644 A []byte `json:"a,string"` 645 } 646 }{A: &(struct { 647 A []byte `json:"a,string"` 648 }{A: []byte("foo")})}, 649 }, 650 651 // PtrHeadBytesPtrNotRoot 652 { 653 name: "PtrHeadBytesPtrNotRoot", 654 data: struct { 655 A *struct { 656 A *[]byte `json:"a"` 657 } 658 }{A: &(struct { 659 A *[]byte `json:"a"` 660 }{A: bytesptr([]byte("foo"))})}, 661 }, 662 { 663 name: "PtrHeadBytesPtrNotRootOmitEmpty", 664 data: struct { 665 A *struct { 666 A *[]byte `json:"a,omitempty"` 667 } 668 }{A: &(struct { 669 A *[]byte `json:"a,omitempty"` 670 }{A: bytesptr([]byte("foo"))})}, 671 }, 672 { 673 name: "PtrHeadBytesPtrNotRootString", 674 data: struct { 675 A *struct { 676 A *[]byte `json:"a,string"` 677 } 678 }{A: &(struct { 679 A *[]byte `json:"a,string"` 680 }{A: bytesptr([]byte("foo"))})}, 681 }, 682 683 // PtrHeadBytesPtrNilNotRoot 684 { 685 name: "PtrHeadBytesPtrNilNotRoot", 686 data: struct { 687 A *struct { 688 A *[]byte `json:"a"` 689 } 690 }{A: &(struct { 691 A *[]byte `json:"a"` 692 }{A: nil})}, 693 }, 694 { 695 name: "PtrHeadBytesPtrNilNotRootOmitEmpty", 696 data: struct { 697 A *struct { 698 A *[]byte `json:"a,omitempty"` 699 } 700 }{A: &(struct { 701 A *[]byte `json:"a,omitempty"` 702 }{A: nil})}, 703 }, 704 { 705 name: "PtrHeadBytesPtrNilNotRootString", 706 data: struct { 707 A *struct { 708 A *[]byte `json:"a,string"` 709 } 710 }{A: &(struct { 711 A *[]byte `json:"a,string"` 712 }{A: nil})}, 713 }, 714 715 // PtrHeadBytesNilNotRoot 716 { 717 name: "PtrHeadBytesNilNotRoot", 718 data: struct { 719 A *struct { 720 A *[]byte `json:"a"` 721 } 722 }{A: nil}, 723 }, 724 { 725 name: "PtrHeadBytesNilNotRootOmitEmpty", 726 data: struct { 727 A *struct { 728 A *[]byte `json:"a,omitempty"` 729 } `json:",omitempty"` 730 }{A: nil}, 731 }, 732 { 733 name: "PtrHeadBytesNilNotRootString", 734 data: struct { 735 A *struct { 736 A *[]byte `json:"a,string"` 737 } `json:",string"` 738 }{A: nil}, 739 }, 740 741 // HeadBytesZeroMultiFieldsNotRoot 742 { 743 name: "HeadBytesZeroMultiFieldsNotRoot", 744 data: struct { 745 A struct { 746 A []byte `json:"a"` 747 } 748 B struct { 749 B []byte `json:"b"` 750 } 751 }{}, 752 }, 753 { 754 name: "HeadBytesZeroMultiFieldsNotRootOmitEmpty", 755 data: struct { 756 A struct { 757 A []byte `json:"a,omitempty"` 758 } 759 B struct { 760 B []byte `json:"b,omitempty"` 761 } 762 }{}, 763 }, 764 { 765 name: "HeadBytesZeroMultiFieldsNotRootString", 766 data: struct { 767 A struct { 768 A []byte `json:"a,string"` 769 } 770 B struct { 771 B []byte `json:"b,string"` 772 } 773 }{}, 774 }, 775 776 // HeadBytesMultiFieldsNotRoot 777 { 778 name: "HeadBytesMultiFieldsNotRoot", 779 data: struct { 780 A struct { 781 A []byte `json:"a"` 782 } 783 B struct { 784 B []byte `json:"b"` 785 } 786 }{A: struct { 787 A []byte `json:"a"` 788 }{A: []byte("foo")}, B: struct { 789 B []byte `json:"b"` 790 }{B: []byte("bar")}}, 791 }, 792 { 793 name: "HeadBytesMultiFieldsNotRootOmitEmpty", 794 data: struct { 795 A struct { 796 A []byte `json:"a,omitempty"` 797 } 798 B struct { 799 B []byte `json:"b,omitempty"` 800 } 801 }{A: struct { 802 A []byte `json:"a,omitempty"` 803 }{A: []byte("foo")}, B: struct { 804 B []byte `json:"b,omitempty"` 805 }{B: []byte("bar")}}, 806 }, 807 { 808 name: "HeadBytesMultiFieldsNotRootString", 809 data: struct { 810 A struct { 811 A []byte `json:"a,string"` 812 } 813 B struct { 814 B []byte `json:"b,string"` 815 } 816 }{A: struct { 817 A []byte `json:"a,string"` 818 }{A: []byte("foo")}, B: struct { 819 B []byte `json:"b,string"` 820 }{B: []byte("bar")}}, 821 }, 822 823 // HeadBytesPtrMultiFieldsNotRoot 824 { 825 name: "HeadBytesPtrMultiFieldsNotRoot", 826 data: struct { 827 A struct { 828 A *[]byte `json:"a"` 829 } 830 B struct { 831 B *[]byte `json:"b"` 832 } 833 }{A: struct { 834 A *[]byte `json:"a"` 835 }{A: bytesptr([]byte("foo"))}, B: struct { 836 B *[]byte `json:"b"` 837 }{B: bytesptr([]byte("bar"))}}, 838 }, 839 { 840 name: "HeadBytesPtrMultiFieldsNotRootOmitEmpty", 841 data: struct { 842 A struct { 843 A *[]byte `json:"a,omitempty"` 844 } 845 B struct { 846 B *[]byte `json:"b,omitempty"` 847 } 848 }{A: struct { 849 A *[]byte `json:"a,omitempty"` 850 }{A: bytesptr([]byte("foo"))}, B: struct { 851 B *[]byte `json:"b,omitempty"` 852 }{B: bytesptr([]byte("bar"))}}, 853 }, 854 { 855 name: "HeadBytesPtrMultiFieldsNotRootString", 856 data: struct { 857 A struct { 858 A *[]byte `json:"a,string"` 859 } 860 B struct { 861 B *[]byte `json:"b,string"` 862 } 863 }{A: struct { 864 A *[]byte `json:"a,string"` 865 }{A: bytesptr([]byte("foo"))}, B: struct { 866 B *[]byte `json:"b,string"` 867 }{B: bytesptr([]byte("bar"))}}, 868 }, 869 870 // HeadBytesPtrNilMultiFieldsNotRoot 871 { 872 name: "HeadBytesPtrNilMultiFieldsNotRoot", 873 data: struct { 874 A struct { 875 A *[]byte `json:"a"` 876 } 877 B struct { 878 B *[]byte `json:"b"` 879 } 880 }{A: struct { 881 A *[]byte `json:"a"` 882 }{A: nil}, B: struct { 883 B *[]byte `json:"b"` 884 }{B: nil}}, 885 }, 886 { 887 name: "HeadBytesPtrNilMultiFieldsNotRootOmitEmpty", 888 data: struct { 889 A struct { 890 A *[]byte `json:"a,omitempty"` 891 } 892 B struct { 893 B *[]byte `json:"b,omitempty"` 894 } 895 }{A: struct { 896 A *[]byte `json:"a,omitempty"` 897 }{A: nil}, B: struct { 898 B *[]byte `json:"b,omitempty"` 899 }{B: nil}}, 900 }, 901 { 902 name: "HeadBytesPtrNilMultiFieldsNotRootString", 903 data: struct { 904 A struct { 905 A *[]byte `json:"a,string"` 906 } 907 B struct { 908 B *[]byte `json:"b,string"` 909 } 910 }{A: struct { 911 A *[]byte `json:"a,string"` 912 }{A: nil}, B: struct { 913 B *[]byte `json:"b,string"` 914 }{B: nil}}, 915 }, 916 917 // PtrHeadBytesZeroMultiFieldsNotRoot 918 { 919 name: "PtrHeadBytesZeroMultiFieldsNotRoot", 920 data: &struct { 921 A struct { 922 A []byte `json:"a"` 923 } 924 B struct { 925 B []byte `json:"b"` 926 } 927 }{}, 928 }, 929 { 930 name: "PtrHeadBytesZeroMultiFieldsNotRootOmitEmpty", 931 data: &struct { 932 A struct { 933 A []byte `json:"a,omitempty"` 934 } 935 B struct { 936 B []byte `json:"b,omitempty"` 937 } 938 }{}, 939 }, 940 { 941 name: "PtrHeadBytesZeroMultiFieldsNotRootString", 942 data: &struct { 943 A struct { 944 A []byte `json:"a,string"` 945 } 946 B struct { 947 B []byte `json:"b,string"` 948 } 949 }{}, 950 }, 951 952 // PtrHeadBytesMultiFieldsNotRoot 953 { 954 name: "PtrHeadBytesMultiFieldsNotRoot", 955 data: &struct { 956 A struct { 957 A []byte `json:"a"` 958 } 959 B struct { 960 B []byte `json:"b"` 961 } 962 }{A: struct { 963 A []byte `json:"a"` 964 }{A: []byte("foo")}, B: struct { 965 B []byte `json:"b"` 966 }{B: []byte("bar")}}, 967 }, 968 { 969 name: "PtrHeadBytesMultiFieldsNotRootOmitEmpty", 970 data: &struct { 971 A struct { 972 A []byte `json:"a,omitempty"` 973 } 974 B struct { 975 B []byte `json:"b,omitempty"` 976 } 977 }{A: struct { 978 A []byte `json:"a,omitempty"` 979 }{A: []byte("foo")}, B: struct { 980 B []byte `json:"b,omitempty"` 981 }{B: []byte("bar")}}, 982 }, 983 { 984 name: "PtrHeadBytesMultiFieldsNotRootString", 985 data: &struct { 986 A struct { 987 A []byte `json:"a,string"` 988 } 989 B struct { 990 B []byte `json:"b,string"` 991 } 992 }{A: struct { 993 A []byte `json:"a,string"` 994 }{A: []byte("foo")}, B: struct { 995 B []byte `json:"b,string"` 996 }{B: []byte("bar")}}, 997 }, 998 999 // PtrHeadBytesPtrMultiFieldsNotRoot 1000 { 1001 name: "PtrHeadBytesPtrMultiFieldsNotRoot", 1002 data: &struct { 1003 A *struct { 1004 A *[]byte `json:"a"` 1005 } 1006 B *struct { 1007 B *[]byte `json:"b"` 1008 } 1009 }{A: &(struct { 1010 A *[]byte `json:"a"` 1011 }{A: bytesptr([]byte("foo"))}), B: &(struct { 1012 B *[]byte `json:"b"` 1013 }{B: bytesptr([]byte("bar"))})}, 1014 }, 1015 { 1016 name: "PtrHeadBytesPtrMultiFieldsNotRootOmitEmpty", 1017 data: &struct { 1018 A *struct { 1019 A *[]byte `json:"a,omitempty"` 1020 } 1021 B *struct { 1022 B *[]byte `json:"b,omitempty"` 1023 } 1024 }{A: &(struct { 1025 A *[]byte `json:"a,omitempty"` 1026 }{A: bytesptr([]byte("foo"))}), B: &(struct { 1027 B *[]byte `json:"b,omitempty"` 1028 }{B: bytesptr([]byte("bar"))})}, 1029 }, 1030 { 1031 name: "PtrHeadBytesPtrMultiFieldsNotRootString", 1032 data: &struct { 1033 A *struct { 1034 A *[]byte `json:"a,string"` 1035 } 1036 B *struct { 1037 B *[]byte `json:"b,string"` 1038 } 1039 }{A: &(struct { 1040 A *[]byte `json:"a,string"` 1041 }{A: bytesptr([]byte("foo"))}), B: &(struct { 1042 B *[]byte `json:"b,string"` 1043 }{B: bytesptr([]byte("bar"))})}, 1044 }, 1045 1046 // PtrHeadBytesPtrNilMultiFieldsNotRoot 1047 { 1048 name: "PtrHeadBytesPtrNilMultiFieldsNotRoot", 1049 data: &struct { 1050 A *struct { 1051 A *[]byte `json:"a"` 1052 } 1053 B *struct { 1054 B *[]byte `json:"b"` 1055 } 1056 }{A: nil, B: nil}, 1057 }, 1058 { 1059 name: "PtrHeadBytesPtrNilMultiFieldsNotRootOmitEmpty", 1060 data: &struct { 1061 A *struct { 1062 A *[]byte `json:"a,omitempty"` 1063 } 1064 B *struct { 1065 B *[]byte `json:"b,omitempty"` 1066 } 1067 }{A: nil, B: nil}, 1068 }, 1069 { 1070 name: "PtrHeadBytesPtrNilMultiFieldsNotRootString", 1071 data: &struct { 1072 A *struct { 1073 A *[]byte `json:"a,string"` 1074 } 1075 B *struct { 1076 B *[]byte `json:"b,string"` 1077 } 1078 }{A: nil, B: nil}, 1079 }, 1080 1081 // PtrHeadBytesNilMultiFieldsNotRoot 1082 { 1083 name: "PtrHeadBytesNilMultiFieldsNotRoot", 1084 data: (*struct { 1085 A *struct { 1086 A *[]byte `json:"a"` 1087 } 1088 B *struct { 1089 B *[]byte `json:"b"` 1090 } 1091 })(nil), 1092 }, 1093 { 1094 name: "PtrHeadBytesNilMultiFieldsNotRootOmitEmpty", 1095 data: (*struct { 1096 A *struct { 1097 A *[]byte `json:"a,omitempty"` 1098 } 1099 B *struct { 1100 B *[]byte `json:"b,omitempty"` 1101 } 1102 })(nil), 1103 }, 1104 { 1105 name: "PtrHeadBytesNilMultiFieldsNotRootString", 1106 data: (*struct { 1107 A *struct { 1108 A *[]byte `json:"a,string"` 1109 } 1110 B *struct { 1111 B *[]byte `json:"b,string"` 1112 } 1113 })(nil), 1114 }, 1115 1116 // PtrHeadBytesDoubleMultiFieldsNotRoot 1117 { 1118 name: "PtrHeadBytesDoubleMultiFieldsNotRoot", 1119 data: &struct { 1120 A *struct { 1121 A []byte `json:"a"` 1122 B []byte `json:"b"` 1123 C []byte `json:"c"` 1124 } 1125 B *struct { 1126 A []byte `json:"a"` 1127 B []byte `json:"b"` 1128 C []byte `json:"c"` 1129 } 1130 }{A: &(struct { 1131 A []byte `json:"a"` 1132 B []byte `json:"b"` 1133 C []byte `json:"c"` 1134 }{A: []byte("foo"), B: []byte("bar"), C: []byte("baz")}), B: &(struct { 1135 A []byte `json:"a"` 1136 B []byte `json:"b"` 1137 C []byte `json:"c"` 1138 }{A: []byte("foo"), B: []byte("bar"), C: []byte("baz")})}, 1139 }, 1140 { 1141 name: "PtrHeadBytesDoubleMultiFieldsNotRootOmitEmpty", 1142 data: &struct { 1143 A *struct { 1144 A []byte `json:"a,omitempty"` 1145 B []byte `json:"b,omitempty"` 1146 } 1147 B *struct { 1148 A []byte `json:"a,omitempty"` 1149 B []byte `json:"b,omitempty"` 1150 } 1151 }{A: &(struct { 1152 A []byte `json:"a,omitempty"` 1153 B []byte `json:"b,omitempty"` 1154 }{A: []byte("foo"), B: []byte("bar")}), B: &(struct { 1155 A []byte `json:"a,omitempty"` 1156 B []byte `json:"b,omitempty"` 1157 }{A: []byte("foo"), B: []byte("bar")})}, 1158 }, 1159 { 1160 name: "PtrHeadBytesDoubleMultiFieldsNotRootString", 1161 data: &struct { 1162 A *struct { 1163 A []byte `json:"a,string"` 1164 B []byte `json:"b,string"` 1165 } 1166 B *struct { 1167 A []byte `json:"a,string"` 1168 B []byte `json:"b,string"` 1169 } 1170 }{A: &(struct { 1171 A []byte `json:"a,string"` 1172 B []byte `json:"b,string"` 1173 }{A: []byte("foo"), B: []byte("bar")}), B: &(struct { 1174 A []byte `json:"a,string"` 1175 B []byte `json:"b,string"` 1176 }{A: []byte("foo"), B: []byte("bar")})}, 1177 }, 1178 1179 // PtrHeadBytesNilDoubleMultiFieldsNotRoot 1180 { 1181 name: "PtrHeadBytesNilDoubleMultiFieldsNotRoot", 1182 data: &struct { 1183 A *struct { 1184 A []byte `json:"a"` 1185 B []byte `json:"b"` 1186 } 1187 B *struct { 1188 A []byte `json:"a"` 1189 B []byte `json:"b"` 1190 } 1191 }{A: nil, B: nil}, 1192 }, 1193 { 1194 name: "PtrHeadBytesNilDoubleMultiFieldsNotRootOmitEmpty", 1195 data: &struct { 1196 A *struct { 1197 A []byte `json:"a,omitempty"` 1198 B []byte `json:"b,omitempty"` 1199 } 1200 B *struct { 1201 A []byte `json:"a,omitempty"` 1202 B []byte `json:"b,omitempty"` 1203 } 1204 }{A: nil, B: nil}, 1205 }, 1206 { 1207 name: "PtrHeadBytesNilDoubleMultiFieldsNotRootString", 1208 data: &struct { 1209 A *struct { 1210 A []byte `json:"a,string"` 1211 B []byte `json:"b,string"` 1212 } 1213 B *struct { 1214 A []byte `json:"a,string"` 1215 B []byte `json:"b,string"` 1216 } 1217 }{A: nil, B: nil}, 1218 }, 1219 1220 // PtrHeadBytesNilDoubleMultiFieldsNotRoot 1221 { 1222 name: "PtrHeadBytesNilDoubleMultiFieldsNotRoot", 1223 data: (*struct { 1224 A *struct { 1225 A []byte `json:"a"` 1226 B []byte `json:"b"` 1227 } 1228 B *struct { 1229 A []byte `json:"a"` 1230 B []byte `json:"b"` 1231 } 1232 })(nil), 1233 }, 1234 { 1235 name: "PtrHeadBytesNilDoubleMultiFieldsNotRootOmitEmpty", 1236 data: (*struct { 1237 A *struct { 1238 A []byte `json:"a,omitempty"` 1239 B []byte `json:"b,omitempty"` 1240 } 1241 B *struct { 1242 A []byte `json:"a,omitempty"` 1243 B []byte `json:"b,omitempty"` 1244 } 1245 })(nil), 1246 }, 1247 { 1248 name: "PtrHeadBytesNilDoubleMultiFieldsNotRootString", 1249 data: (*struct { 1250 A *struct { 1251 A []byte `json:"a,string"` 1252 B []byte `json:"b,string"` 1253 } 1254 B *struct { 1255 A []byte `json:"a,string"` 1256 B []byte `json:"b,string"` 1257 } 1258 })(nil), 1259 }, 1260 1261 // PtrHeadBytesPtrDoubleMultiFieldsNotRoot 1262 { 1263 name: "PtrHeadBytesPtrDoubleMultiFieldsNotRoot", 1264 data: &struct { 1265 A *struct { 1266 A *[]byte `json:"a"` 1267 B *[]byte `json:"b"` 1268 } 1269 B *struct { 1270 A *[]byte `json:"a"` 1271 B *[]byte `json:"b"` 1272 } 1273 }{A: &(struct { 1274 A *[]byte `json:"a"` 1275 B *[]byte `json:"b"` 1276 }{A: bytesptr([]byte("foo")), B: bytesptr([]byte("bar"))}), B: &(struct { 1277 A *[]byte `json:"a"` 1278 B *[]byte `json:"b"` 1279 }{A: bytesptr([]byte("foo")), B: bytesptr([]byte("bar"))})}, 1280 }, 1281 { 1282 name: "PtrHeadBytesPtrDoubleMultiFieldsNotRootOmitEmpty", 1283 data: &struct { 1284 A *struct { 1285 A *[]byte `json:"a,omitempty"` 1286 B *[]byte `json:"b,omitempty"` 1287 } 1288 B *struct { 1289 A *[]byte `json:"a,omitempty"` 1290 B *[]byte `json:"b,omitempty"` 1291 } 1292 }{A: &(struct { 1293 A *[]byte `json:"a,omitempty"` 1294 B *[]byte `json:"b,omitempty"` 1295 }{A: bytesptr([]byte("foo")), B: bytesptr([]byte("bar"))}), B: &(struct { 1296 A *[]byte `json:"a,omitempty"` 1297 B *[]byte `json:"b,omitempty"` 1298 }{A: bytesptr([]byte("foo")), B: bytesptr([]byte("bar"))})}, 1299 }, 1300 { 1301 name: "PtrHeadBytesPtrDoubleMultiFieldsNotRootString", 1302 data: &struct { 1303 A *struct { 1304 A *[]byte `json:"a,string"` 1305 B *[]byte `json:"b,string"` 1306 } 1307 B *struct { 1308 A *[]byte `json:"a,string"` 1309 B *[]byte `json:"b,string"` 1310 } 1311 }{A: &(struct { 1312 A *[]byte `json:"a,string"` 1313 B *[]byte `json:"b,string"` 1314 }{A: bytesptr([]byte("foo")), B: bytesptr([]byte("bar"))}), B: &(struct { 1315 A *[]byte `json:"a,string"` 1316 B *[]byte `json:"b,string"` 1317 }{A: bytesptr([]byte("foo")), B: bytesptr([]byte("bar"))})}, 1318 }, 1319 1320 // PtrHeadBytesPtrNilDoubleMultiFieldsNotRoot 1321 { 1322 name: "PtrHeadBytesPtrNilDoubleMultiFieldsNotRoot", 1323 data: &struct { 1324 A *struct { 1325 A *[]byte `json:"a"` 1326 B *[]byte `json:"b"` 1327 } 1328 B *struct { 1329 A *[]byte `json:"a"` 1330 B *[]byte `json:"b"` 1331 } 1332 }{A: nil, B: nil}, 1333 }, 1334 { 1335 name: "PtrHeadBytesPtrNilDoubleMultiFieldsNotRootOmitEmpty", 1336 data: &struct { 1337 A *struct { 1338 A *[]byte `json:"a,omitempty"` 1339 B *[]byte `json:"b,omitempty"` 1340 } 1341 B *struct { 1342 A *[]byte `json:"a,omitempty"` 1343 B *[]byte `json:"b,omitempty"` 1344 } 1345 }{A: nil, B: nil}, 1346 }, 1347 { 1348 name: "PtrHeadBytesPtrNilDoubleMultiFieldsNotRootString", 1349 data: &struct { 1350 A *struct { 1351 A *[]byte `json:"a,string"` 1352 B *[]byte `json:"b,string"` 1353 } 1354 B *struct { 1355 A *[]byte `json:"a,string"` 1356 B *[]byte `json:"b,string"` 1357 } 1358 }{A: nil, B: nil}, 1359 }, 1360 1361 // PtrHeadBytesPtrNilDoubleMultiFieldsNotRoot 1362 { 1363 name: "PtrHeadBytesPtrNilDoubleMultiFieldsNotRoot", 1364 data: (*struct { 1365 A *struct { 1366 A *[]byte `json:"a"` 1367 B *[]byte `json:"b"` 1368 } 1369 B *struct { 1370 A *[]byte `json:"a"` 1371 B *[]byte `json:"b"` 1372 } 1373 })(nil), 1374 }, 1375 { 1376 name: "PtrHeadBytesPtrNilDoubleMultiFieldsNotRootOmitEmpty", 1377 data: (*struct { 1378 A *struct { 1379 A *[]byte `json:"a,omitempty"` 1380 B *[]byte `json:"b,omitempty"` 1381 } 1382 B *struct { 1383 A *[]byte `json:"a,omitempty"` 1384 B *[]byte `json:"b,omitempty"` 1385 } 1386 })(nil), 1387 }, 1388 { 1389 name: "PtrHeadBytesPtrNilDoubleMultiFieldsNotRootString", 1390 data: (*struct { 1391 A *struct { 1392 A *[]byte `json:"a,string"` 1393 B *[]byte `json:"b,string"` 1394 } 1395 B *struct { 1396 A *[]byte `json:"a,string"` 1397 B *[]byte `json:"b,string"` 1398 } 1399 })(nil), 1400 }, 1401 1402 // AnonymousHeadBytes 1403 { 1404 name: "AnonymousHeadString", 1405 data: struct { 1406 structBytes 1407 B []byte `json:"b"` 1408 }{ 1409 structBytes: structBytes{A: []byte("foo")}, 1410 B: []byte("bar"), 1411 }, 1412 }, 1413 { 1414 name: "AnonymousHeadBytesOmitEmpty", 1415 data: struct { 1416 structBytesOmitEmpty 1417 B []byte `json:"b,omitempty"` 1418 }{ 1419 structBytesOmitEmpty: structBytesOmitEmpty{A: []byte("foo")}, 1420 B: []byte("bar"), 1421 }, 1422 }, 1423 { 1424 name: "AnonymousHeadBytesString", 1425 data: struct { 1426 structBytesBytes 1427 B []byte `json:"b,string"` 1428 }{ 1429 structBytesBytes: structBytesBytes{A: []byte("foo")}, 1430 B: []byte("bar"), 1431 }, 1432 }, 1433 1434 // PtrAnonymousHeadBytes 1435 { 1436 name: "PtrAnonymousHeadString", 1437 data: struct { 1438 *structBytes 1439 B []byte `json:"b"` 1440 }{ 1441 structBytes: &structBytes{A: []byte("foo")}, 1442 B: []byte("bar"), 1443 }, 1444 }, 1445 { 1446 name: "PtrAnonymousHeadBytesOmitEmpty", 1447 data: struct { 1448 *structBytesOmitEmpty 1449 B []byte `json:"b,omitempty"` 1450 }{ 1451 structBytesOmitEmpty: &structBytesOmitEmpty{A: []byte("foo")}, 1452 B: []byte("bar"), 1453 }, 1454 }, 1455 { 1456 name: "PtrAnonymousHeadBytesString", 1457 data: struct { 1458 *structBytesBytes 1459 B []byte `json:"b,string"` 1460 }{ 1461 structBytesBytes: &structBytesBytes{A: []byte("foo")}, 1462 B: []byte("bar"), 1463 }, 1464 }, 1465 1466 // NilPtrAnonymousHeadBytes 1467 { 1468 name: "NilPtrAnonymousHeadString", 1469 data: struct { 1470 *structBytes 1471 B []byte `json:"b"` 1472 }{ 1473 structBytes: nil, 1474 B: []byte("baz"), 1475 }, 1476 }, 1477 { 1478 name: "NilPtrAnonymousHeadBytesOmitEmpty", 1479 data: struct { 1480 *structBytesOmitEmpty 1481 B []byte `json:"b,omitempty"` 1482 }{ 1483 structBytesOmitEmpty: nil, 1484 B: []byte("baz"), 1485 }, 1486 }, 1487 { 1488 name: "NilPtrAnonymousHeadBytesString", 1489 data: struct { 1490 *structBytesBytes 1491 B []byte `json:"b,string"` 1492 }{ 1493 structBytesBytes: nil, 1494 B: []byte("baz"), 1495 }, 1496 }, 1497 1498 // AnonymousHeadBytesPtr 1499 { 1500 name: "AnonymousHeadBytesPtr", 1501 data: struct { 1502 structBytesPtr 1503 B *[]byte `json:"b"` 1504 }{ 1505 structBytesPtr: structBytesPtr{A: bytesptr([]byte("foo"))}, 1506 B: bytesptr([]byte("bar")), 1507 }, 1508 }, 1509 { 1510 name: "AnonymousHeadBytesPtrOmitEmpty", 1511 data: struct { 1512 structBytesPtrOmitEmpty 1513 B *[]byte `json:"b,omitempty"` 1514 }{ 1515 structBytesPtrOmitEmpty: structBytesPtrOmitEmpty{A: bytesptr([]byte("foo"))}, 1516 B: bytesptr([]byte("bar")), 1517 }, 1518 }, 1519 { 1520 name: "AnonymousHeadBytesPtrString", 1521 data: struct { 1522 structBytesPtrBytes 1523 B *[]byte `json:"b,string"` 1524 }{ 1525 structBytesPtrBytes: structBytesPtrBytes{A: bytesptr([]byte("foo"))}, 1526 B: bytesptr([]byte("bar")), 1527 }, 1528 }, 1529 1530 // AnonymousHeadBytesPtrNil 1531 { 1532 name: "AnonymousHeadBytesPtrNil", 1533 data: struct { 1534 structBytesPtr 1535 B *[]byte `json:"b"` 1536 }{ 1537 structBytesPtr: structBytesPtr{A: nil}, 1538 B: bytesptr([]byte("foo")), 1539 }, 1540 }, 1541 { 1542 name: "AnonymousHeadBytesPtrNilOmitEmpty", 1543 data: struct { 1544 structBytesPtrOmitEmpty 1545 B *[]byte `json:"b,omitempty"` 1546 }{ 1547 structBytesPtrOmitEmpty: structBytesPtrOmitEmpty{A: nil}, 1548 B: bytesptr([]byte("foo")), 1549 }, 1550 }, 1551 { 1552 name: "AnonymousHeadBytesPtrNilString", 1553 data: struct { 1554 structBytesPtrBytes 1555 B *[]byte `json:"b,string"` 1556 }{ 1557 structBytesPtrBytes: structBytesPtrBytes{A: nil}, 1558 B: bytesptr([]byte("foo")), 1559 }, 1560 }, 1561 1562 // PtrAnonymousHeadBytesPtr 1563 { 1564 name: "PtrAnonymousHeadBytesPtr", 1565 data: struct { 1566 *structBytesPtr 1567 B *[]byte `json:"b"` 1568 }{ 1569 structBytesPtr: &structBytesPtr{A: bytesptr([]byte("foo"))}, 1570 B: bytesptr([]byte("bar")), 1571 }, 1572 }, 1573 { 1574 name: "PtrAnonymousHeadBytesPtrOmitEmpty", 1575 data: struct { 1576 *structBytesPtrOmitEmpty 1577 B *[]byte `json:"b,omitempty"` 1578 }{ 1579 structBytesPtrOmitEmpty: &structBytesPtrOmitEmpty{A: bytesptr([]byte("foo"))}, 1580 B: bytesptr([]byte("bar")), 1581 }, 1582 }, 1583 { 1584 name: "PtrAnonymousHeadBytesPtrString", 1585 data: struct { 1586 *structBytesPtrBytes 1587 B *[]byte `json:"b,string"` 1588 }{ 1589 structBytesPtrBytes: &structBytesPtrBytes{A: bytesptr([]byte("foo"))}, 1590 B: bytesptr([]byte("bar")), 1591 }, 1592 }, 1593 1594 // NilPtrAnonymousHeadBytesPtr 1595 { 1596 name: "NilPtrAnonymousHeadBytesPtr", 1597 data: struct { 1598 *structBytesPtr 1599 B *[]byte `json:"b"` 1600 }{ 1601 structBytesPtr: nil, 1602 B: bytesptr([]byte("foo")), 1603 }, 1604 }, 1605 { 1606 name: "NilPtrAnonymousHeadBytesPtrOmitEmpty", 1607 data: struct { 1608 *structBytesPtrOmitEmpty 1609 B *[]byte `json:"b,omitempty"` 1610 }{ 1611 structBytesPtrOmitEmpty: nil, 1612 B: bytesptr([]byte("foo")), 1613 }, 1614 }, 1615 { 1616 name: "NilPtrAnonymousHeadBytesPtrString", 1617 data: struct { 1618 *structBytesPtrBytes 1619 B *[]byte `json:"b,string"` 1620 }{ 1621 structBytesPtrBytes: nil, 1622 B: bytesptr([]byte("foo")), 1623 }, 1624 }, 1625 1626 // AnonymousHeadBytesOnly 1627 { 1628 name: "AnonymousHeadBytesOnly", 1629 data: struct { 1630 structBytes 1631 }{ 1632 structBytes: structBytes{A: []byte("foo")}, 1633 }, 1634 }, 1635 { 1636 name: "AnonymousHeadBytesOnlyOmitEmpty", 1637 data: struct { 1638 structBytesOmitEmpty 1639 }{ 1640 structBytesOmitEmpty: structBytesOmitEmpty{A: []byte("foo")}, 1641 }, 1642 }, 1643 { 1644 name: "AnonymousHeadBytesOnlyString", 1645 data: struct { 1646 structBytesBytes 1647 }{ 1648 structBytesBytes: structBytesBytes{A: []byte("foo")}, 1649 }, 1650 }, 1651 1652 // PtrAnonymousHeadBytesOnly 1653 { 1654 name: "PtrAnonymousHeadBytesOnly", 1655 data: struct { 1656 *structBytes 1657 }{ 1658 structBytes: &structBytes{A: []byte("foo")}, 1659 }, 1660 }, 1661 { 1662 name: "PtrAnonymousHeadBytesOnlyOmitEmpty", 1663 data: struct { 1664 *structBytesOmitEmpty 1665 }{ 1666 structBytesOmitEmpty: &structBytesOmitEmpty{A: []byte("foo")}, 1667 }, 1668 }, 1669 { 1670 name: "PtrAnonymousHeadBytesOnlyString", 1671 data: struct { 1672 *structBytesBytes 1673 }{ 1674 structBytesBytes: &structBytesBytes{A: []byte("foo")}, 1675 }, 1676 }, 1677 1678 // NilPtrAnonymousHeadBytesOnly 1679 { 1680 name: "NilPtrAnonymousHeadBytesOnly", 1681 data: struct { 1682 *structBytes 1683 }{ 1684 structBytes: nil, 1685 }, 1686 }, 1687 { 1688 name: "NilPtrAnonymousHeadBytesOnlyOmitEmpty", 1689 data: struct { 1690 *structBytesOmitEmpty 1691 }{ 1692 structBytesOmitEmpty: nil, 1693 }, 1694 }, 1695 { 1696 name: "NilPtrAnonymousHeadBytesOnlyString", 1697 data: struct { 1698 *structBytesBytes 1699 }{ 1700 structBytesBytes: nil, 1701 }, 1702 }, 1703 1704 // AnonymousHeadBytesPtrOnly 1705 { 1706 name: "AnonymousHeadBytesPtrOnly", 1707 data: struct { 1708 structBytesPtr 1709 }{ 1710 structBytesPtr: structBytesPtr{A: bytesptr([]byte("foo"))}, 1711 }, 1712 }, 1713 { 1714 name: "AnonymousHeadBytesPtrOnlyOmitEmpty", 1715 data: struct { 1716 structBytesPtrOmitEmpty 1717 }{ 1718 structBytesPtrOmitEmpty: structBytesPtrOmitEmpty{A: bytesptr([]byte("foo"))}, 1719 }, 1720 }, 1721 { 1722 name: "AnonymousHeadBytesPtrOnlyString", 1723 data: struct { 1724 structBytesPtrBytes 1725 }{ 1726 structBytesPtrBytes: structBytesPtrBytes{A: bytesptr([]byte("foo"))}, 1727 }, 1728 }, 1729 1730 // AnonymousHeadBytesPtrNilOnly 1731 { 1732 name: "AnonymousHeadBytesPtrNilOnly", 1733 data: struct { 1734 structBytesPtr 1735 }{ 1736 structBytesPtr: structBytesPtr{A: nil}, 1737 }, 1738 }, 1739 { 1740 name: "AnonymousHeadBytesPtrNilOnlyOmitEmpty", 1741 data: struct { 1742 structBytesPtrOmitEmpty 1743 }{ 1744 structBytesPtrOmitEmpty: structBytesPtrOmitEmpty{A: nil}, 1745 }, 1746 }, 1747 { 1748 name: "AnonymousHeadBytesPtrNilOnlyString", 1749 data: struct { 1750 structBytesPtrBytes 1751 }{ 1752 structBytesPtrBytes: structBytesPtrBytes{A: nil}, 1753 }, 1754 }, 1755 1756 // PtrAnonymousHeadBytesPtrOnly 1757 { 1758 name: "PtrAnonymousHeadBytesPtrOnly", 1759 data: struct { 1760 *structBytesPtr 1761 }{ 1762 structBytesPtr: &structBytesPtr{A: bytesptr([]byte("foo"))}, 1763 }, 1764 }, 1765 { 1766 name: "PtrAnonymousHeadBytesPtrOnlyOmitEmpty", 1767 data: struct { 1768 *structBytesPtrOmitEmpty 1769 }{ 1770 structBytesPtrOmitEmpty: &structBytesPtrOmitEmpty{A: bytesptr([]byte("foo"))}, 1771 }, 1772 }, 1773 { 1774 name: "PtrAnonymousHeadBytesPtrOnlyString", 1775 data: struct { 1776 *structBytesPtrBytes 1777 }{ 1778 structBytesPtrBytes: &structBytesPtrBytes{A: bytesptr([]byte("foo"))}, 1779 }, 1780 }, 1781 1782 // NilPtrAnonymousHeadBytesPtrOnly 1783 { 1784 name: "NilPtrAnonymousHeadBytesPtrOnly", 1785 data: struct { 1786 *structBytesPtr 1787 }{ 1788 structBytesPtr: nil, 1789 }, 1790 }, 1791 { 1792 name: "NilPtrAnonymousHeadBytesPtrOnlyOmitEmpty", 1793 data: struct { 1794 *structBytesPtrOmitEmpty 1795 }{ 1796 structBytesPtrOmitEmpty: nil, 1797 }, 1798 }, 1799 { 1800 name: "NilPtrAnonymousHeadBytesPtrOnlyString", 1801 data: struct { 1802 *structBytesPtrBytes 1803 }{ 1804 structBytesPtrBytes: nil, 1805 }, 1806 }, 1807 } 1808 for _, test := range tests { 1809 for _, indent := range []bool{true, false} { 1810 for _, htmlEscape := range []bool{true, false} { 1811 t.Run(fmt.Sprintf("%s_indent_%t_escape_%t", test.name, indent, htmlEscape), func(t *testing.T) { 1812 var buf bytes.Buffer 1813 enc := json.NewEncoder(&buf) 1814 enc.SetEscapeHTML(htmlEscape) 1815 if indent { 1816 enc.SetIndent("", " ") 1817 } 1818 if err := enc.Encode(test.data); err != nil { 1819 t.Fatalf("%s(htmlEscape:%v,indent:%v): %v: %s", test.name, htmlEscape, indent, test.data, err) 1820 } 1821 stdresult := encodeByEncodingJSON(test.data, indent, htmlEscape) 1822 if buf.String() != stdresult { 1823 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()) 1824 } 1825 }) 1826 } 1827 } 1828 } 1829 }