| 524 | } |
| 525 | |
| 526 | func TestBooleanFieldData(t *testing.T) { |
| 527 | var sampleMessage = []byte{ |
| 528 | // field 1: varint boolean true |
| 529 | (1 << 3), 0x01, |
| 530 | // field 2: regular repeated boolean - true, true, false |
| 531 | (2 << 3), 0x01, |
| 532 | (2 << 3), 0x01, |
| 533 | (2 << 3), 0x00, |
| 534 | // field 3: packed repeated boolean - true, false, true |
| 535 | (3 << 3) | 2, 0x03, 0x01, 0x00, 0x01, |
| 536 | // field 4: fixed32 (invalid for bool value) |
| 537 | (4 << 3) | 5, 0x00, 0x01, 0x02, 0x03, |
| 538 | } |
| 539 | t.Parallel() |
| 540 | t.Run("single boolean", func(t *testing.T) { |
| 541 | t.Parallel() |
| 542 | def := NewDef(1) |
| 543 | res, err := Decode(sampleMessage, def) |
| 544 | defer func() { _ = res.Close() }() |
| 545 | assert.NoError(t, err) |
| 546 | |
| 547 | fd, err := res.FieldData(1) |
| 548 | assert.NoError(t, err) |
| 549 | |
| 550 | b, err := fd.BoolValue() |
| 551 | assert.NoError(t, err) |
| 552 | assert.True(t, b) |
| 553 | }) |
| 554 | t.Run("repeated boolean", func(t *testing.T) { |
| 555 | t.Parallel() |
| 556 | def := NewDef(2) |
| 557 | res, err := Decode(sampleMessage, def) |
| 558 | defer func() { _ = res.Close() }() |
| 559 | assert.NoError(t, err) |
| 560 | |
| 561 | fd, err := res.FieldData(2) |
| 562 | assert.NoError(t, err) |
| 563 | |
| 564 | bs, err := fd.BoolValues() |
| 565 | assert.NoError(t, err) |
| 566 | assert.Len(t, bs, 3) |
| 567 | for i, expected := range []bool{true, true, false} { |
| 568 | assert.Equal(t, expected, bs[i], "mismatched values at index %d", i) |
| 569 | } |
| 570 | }) |
| 571 | t.Run("tag not present", func(t *testing.T) { |
| 572 | t.Parallel() |
| 573 | def := NewDef(1) |
| 574 | res, err := Decode(sampleMessage, def) |
| 575 | defer func() { _ = res.Close() }() |
| 576 | assert.NoError(t, err) |
| 577 | |
| 578 | fd, err := res.FieldData(2) |
| 579 | assert.ErrorIs(t, err, ErrTagNotFound) |
| 580 | assert.Nil(t, fd) |
| 581 | }) |
| 582 | t.Run("incorrect wire type", func(t *testing.T) { |
| 583 | t.Parallel() |