1package dynamic
2
3import (
4	"github.com/golang/protobuf/proto"
5	"testing"
6
7	"github.com/jhump/protoreflect/desc"
8
9	"github.com/jhump/protoreflect/internal/testprotos"
10	"github.com/jhump/protoreflect/internal/testutil"
11)
12
13func 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}
41