github.com/jhump/protoreflect@v1.16.0/dynamic/extension_test.go (about) 1 package dynamic 2 3 import ( 4 "testing" 5 6 "github.com/golang/protobuf/proto" 7 8 "github.com/jhump/protoreflect/desc" 9 "github.com/jhump/protoreflect/internal/testprotos" 10 "github.com/jhump/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 }