blob: 9f4f32082c26db1a012a62445ac5f1fc78569887 [file] [log] [blame]
// Copyright 2024 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package reflection_test
import (
"testing"
testopaquepb "google.golang.org/protobuf/internal/testprotos/testeditions/testeditions_opaque"
"google.golang.org/protobuf/proto"
)
func TestOpaqueRepeated(t *testing.T) {
m := testopaquepb.TestAllTypes_builder{
RepeatedNestedMessage: []*testopaquepb.TestAllTypes_NestedMessage{
testopaquepb.TestAllTypes_NestedMessage_builder{
A: proto.Int32(42),
}.Build(),
},
}.Build()
// Clear the repeated_nested_message field. This should not clear the presence bit.
mr := m.ProtoReflect()
fd := mr.Descriptor().Fields().ByNumber(48)
mr.Clear(fd)
if len(m.GetRepeatedNestedMessage()) != 0 {
t.Errorf("protoreflect Clear did not empty the repeated field: got %v, expected []", m.GetRepeatedNestedMessage())
}
// Append a new submessage to the input field and set its A field to 23.
dst := mr.Mutable(fd).List()
v := dst.NewElement()
dst.Append(v)
if len(m.GetRepeatedNestedMessage()) != 1 {
t.Fatalf("unexpected number of elements in repeated field: got %v, expected 1", len(m.GetRepeatedNestedMessage()))
}
m.GetRepeatedNestedMessage()[0].SetA(23)
if mr.Get(fd).List().Len() != 1 {
t.Fatalf("presence bit (incorrectly) cleared")
}
}