blob: dd67e9f65cd49c811bf6f5c82a712c85ba3aed42 [file] [log] [blame]
Damien Neil92f76182019-08-02 16:58:08 -07001// Copyright 2019 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style.
3// license that can be found in the LICENSE file.
4
5package proto_test
6
7import (
8 "fmt"
9 "testing"
10
11 "github.com/google/go-cmp/cmp"
12 "google.golang.org/protobuf/proto"
13 pref "google.golang.org/protobuf/reflect/protoreflect"
14 "google.golang.org/protobuf/runtime/protoimpl"
15
16 legacy1pb "google.golang.org/protobuf/internal/testprotos/legacy/proto2.v0.0.0-20160225-2fc053c5"
17 testpb "google.golang.org/protobuf/internal/testprotos/test"
18)
19
20func TestExtensionFuncs(t *testing.T) {
21 for _, test := range []struct {
22 message proto.Message
23 ext pref.ExtensionType
24 wantDefault interface{}
25 value interface{}
26 }{
27 {
28 message: &testpb.TestAllExtensions{},
29 ext: testpb.E_OptionalInt32Extension,
30 wantDefault: int32(0),
31 value: int32(1),
32 },
33 {
Joe Tsai8e9d5f62019-10-04 18:57:48 -070034 message: &testpb.TestAllExtensions{},
35 ext: testpb.E_RepeatedStringExtension,
Damien Neil293dc762019-08-29 11:42:57 -070036 wantDefault: ([]string)(nil),
37 value: []string{"a", "b", "c"},
Damien Neil92f76182019-08-02 16:58:08 -070038 },
39 {
40 message: protoimpl.X.MessageOf(&legacy1pb.Message{}).Interface(),
41 ext: legacy1pb.E_Message_ExtensionOptionalBool,
42 wantDefault: false,
43 value: true,
44 },
45 } {
Damien Neil79bfdbe2019-08-28 11:08:22 -070046 desc := fmt.Sprintf("Extension %v, value %v", test.ext.TypeDescriptor().FullName(), test.value)
Damien Neil92f76182019-08-02 16:58:08 -070047 if proto.HasExtension(test.message, test.ext) {
48 t.Errorf("%v:\nbefore setting extension HasExtension(...) = true, want false", desc)
49 }
50 got := proto.GetExtension(test.message, test.ext)
51 if d := cmp.Diff(test.wantDefault, got); d != "" {
52 t.Errorf("%v:\nbefore setting extension GetExtension(...) returns unexpected value (-want,+got):\n%v", desc, d)
53 }
54 proto.SetExtension(test.message, test.ext, test.value)
55 if !proto.HasExtension(test.message, test.ext) {
56 t.Errorf("%v:\nafter setting extension HasExtension(...) = false, want true", desc)
57 }
58 got = proto.GetExtension(test.message, test.ext)
59 if d := cmp.Diff(test.value, got); d != "" {
60 t.Errorf("%v:\nafter setting extension GetExtension(...) returns unexpected value (-want,+got):\n%v", desc, d)
61 }
62 proto.ClearExtension(test.message, test.ext)
63 if proto.HasExtension(test.message, test.ext) {
64 t.Errorf("%v:\nafter clearing extension HasExtension(...) = true, want false", desc)
65 }
66
67 }
68}