github.com/Big-big-orange/protoreflect@v0.0.0-20240408141420-285cedfdf6a4/dynamic/extension_test.go (about)

     1  package dynamic
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/golang/protobuf/proto"
     7  
     8  	"github.com/Big-big-orange/protoreflect/desc"
     9  	"github.com/Big-big-orange/protoreflect/internal/testprotos"
    10  	"github.com/Big-big-orange/protoreflect/internal/testutil"
    11  )
    12  
    13  func TestSetExtension(t *testing.T) {
    14  	extd, err := desc.LoadFieldDescriptorForExtension(testprotos.E_TestMessage_NestedMessage_AnotherNestedMessage_Flags)
    15  	testutil.Ok(t, err)
    16  
    17  	// with dynamic message
    18  	dm := NewMessage(extd.GetOwner())
    19  	err = SetExtension(dm, extd, []bool{true, false, true})
    20  	testutil.Ok(t, err)
    21  	testutil.Eq(t, []bool{true, false, true}, dm.GetField(extd))
    22  
    23  	// with non-dynamic message
    24  	var msg testprotos.AnotherTestMessage
    25  	err = SetExtension(&msg, extd, []bool{true, false, true})
    26  	testutil.Ok(t, err)
    27  	val, err := proto.GetExtension(&msg, testprotos.E_TestMessage_NestedMessage_AnotherNestedMessage_Flags)
    28  	testutil.Ok(t, err)
    29  	testutil.Eq(t, []bool{true, false, true}, val)
    30  
    31  	// fails with wrong value type
    32  	err = SetExtension(&msg, extd, "foo")
    33  	testutil.Require(t, err != nil)
    34  
    35  	// fails if you use wrong type of message
    36  	var msg2 testprotos.TestMessage
    37  	err = SetExtension(&msg2, extd, []bool{true, false, true})
    38  	testutil.Require(t, err != nil)
    39  
    40  }