MCPcopy
hub / github.com/protocolbuffers/protobuf-go / testFieldList

Function testFieldList

testing/prototest/message.go:447–533  ·  view source on GitHub ↗

testFieldList exercises set/get/append/truncate of values in a list.

(t testing.TB, m protoreflect.Message, fd protoreflect.FieldDescriptor)

Source from the content-addressed store, hash-verified

445
446// testFieldList exercises set/get/append/truncate of values in a list.
447func testFieldList(t testing.TB, m protoreflect.Message, fd protoreflect.FieldDescriptor) {
448 name := fd.FullName()
449 num := fd.Number()
450
451 m.Clear(fd) // start with an empty list
452 list := m.Get(fd).List()
453 if list.IsValid() {
454 t.Errorf("message.Get(%v).IsValid() = true, want false", name)
455 }
456 if !panics(func() {
457 m.Set(fd, protoreflect.ValueOfList(list))
458 }) {
459 t.Errorf("message.Set(%v, <invalid>) does not panic", name)
460 }
461 if !panics(func() {
462 list.Append(newListElement(fd, list, 0, nil))
463 }) {
464 t.Errorf("message.Get(%v).Append(...) of invalid list does not panic", name)
465 }
466 if got, want := list.NewElement(), newListElement(fd, list, 0, nil); !valueEqual(got, want) {
467 t.Errorf("message.Get(%v).NewElement() = %v, want %v", name, formatValue(got), formatValue(want))
468 }
469 list = m.Mutable(fd).List() // mutable list
470 if !list.IsValid() {
471 t.Errorf("message.Get(%v).IsValid() = false, want true", name)
472 }
473 if got, want := list.NewElement(), newListElement(fd, list, 0, nil); !valueEqual(got, want) {
474 t.Errorf("message.Mutable(%v).NewElement() = %v, want %v", name, formatValue(got), formatValue(want))
475 }
476
477 // Append values.
478 var want protoreflect.List = &testList{}
479 for i, n := range []seed{1, 0, minVal, maxVal} {
480 if got, want := m.Has(fd), i > 0; got != want {
481 t.Errorf("after appending %d elements to %q:\nMessage.Has(%v) = %v, want %v", i, name, num, got, want)
482 }
483 v := newListElement(fd, list, n, nil)
484 want.Append(v)
485 list.Append(v)
486
487 if got, want := m.Get(fd), protoreflect.ValueOfList(want); !valueEqual(got, want) {
488 t.Errorf("after appending %d elements to %q:\nMessage.Get(%v) = %v, want %v", i+1, name, num, formatValue(got), formatValue(want))
489 }
490 }
491
492 // Set values.
493 for i := 0; i < want.Len(); i++ {
494 v := newListElement(fd, list, seed(i+10), nil)
495 want.Set(i, v)
496 list.Set(i, v)
497 if got, want := m.Get(fd), protoreflect.ValueOfList(want); !valueEqual(got, want) {
498 t.Errorf("after setting element %d of %q:\nMessage.Get(%v) = %v, want %v", i, name, num, formatValue(got), formatValue(want))
499 }
500 }
501
502 // Truncate.
503 for want.Len() > 0 {
504 n := want.Len() - 1

Callers 1

testFieldFunction · 0.85

Calls 15

AppendMethod · 0.95
LenMethod · 0.95
SetMethod · 0.95
TruncateMethod · 0.95
ValueOfListFunction · 0.92
panicsFunction · 0.85
newListElementFunction · 0.85
valueEqualFunction · 0.85
formatValueFunction · 0.85
seedTypeAlias · 0.85
populateMessageFunction · 0.85
ListMethod · 0.80

Tested by

no test coverage detected