xref: /aosp_15_r20/external/golang-protobuf/proto/checkinit_test.go (revision 1c12ee1efe575feb122dbf939ff15148a3b3e8f2)
1*1c12ee1eSDan Willemsen// Copyright 2019 The Go Authors. All rights reserved.
2*1c12ee1eSDan Willemsen// Use of this source code is governed by a BSD-style
3*1c12ee1eSDan Willemsen// license that can be found in the LICENSE file.
4*1c12ee1eSDan Willemsen
5*1c12ee1eSDan Willemsenpackage proto_test
6*1c12ee1eSDan Willemsen
7*1c12ee1eSDan Willemsenimport (
8*1c12ee1eSDan Willemsen	"fmt"
9*1c12ee1eSDan Willemsen	"strings"
10*1c12ee1eSDan Willemsen	"testing"
11*1c12ee1eSDan Willemsen
12*1c12ee1eSDan Willemsen	"google.golang.org/protobuf/encoding/prototext"
13*1c12ee1eSDan Willemsen	"google.golang.org/protobuf/internal/flags"
14*1c12ee1eSDan Willemsen	"google.golang.org/protobuf/proto"
15*1c12ee1eSDan Willemsen
16*1c12ee1eSDan Willemsen	testpb "google.golang.org/protobuf/internal/testprotos/test"
17*1c12ee1eSDan Willemsen	weakpb "google.golang.org/protobuf/internal/testprotos/test/weak1"
18*1c12ee1eSDan Willemsen)
19*1c12ee1eSDan Willemsen
20*1c12ee1eSDan Willemsenfunc TestCheckInitializedErrors(t *testing.T) {
21*1c12ee1eSDan Willemsen	type test struct {
22*1c12ee1eSDan Willemsen		m    proto.Message
23*1c12ee1eSDan Willemsen		want string
24*1c12ee1eSDan Willemsen		skip bool
25*1c12ee1eSDan Willemsen	}
26*1c12ee1eSDan Willemsen	tests := []test{{
27*1c12ee1eSDan Willemsen		m:    &testpb.TestRequired{},
28*1c12ee1eSDan Willemsen		want: `goproto.proto.test.TestRequired.required_field`,
29*1c12ee1eSDan Willemsen	}, {
30*1c12ee1eSDan Willemsen		m: &testpb.TestRequiredForeign{
31*1c12ee1eSDan Willemsen			OptionalMessage: &testpb.TestRequired{},
32*1c12ee1eSDan Willemsen		},
33*1c12ee1eSDan Willemsen		want: `goproto.proto.test.TestRequired.required_field`,
34*1c12ee1eSDan Willemsen	}, {
35*1c12ee1eSDan Willemsen		m: &testpb.TestRequiredForeign{
36*1c12ee1eSDan Willemsen			RepeatedMessage: []*testpb.TestRequired{
37*1c12ee1eSDan Willemsen				{RequiredField: proto.Int32(1)},
38*1c12ee1eSDan Willemsen				{},
39*1c12ee1eSDan Willemsen			},
40*1c12ee1eSDan Willemsen		},
41*1c12ee1eSDan Willemsen		want: `goproto.proto.test.TestRequired.required_field`,
42*1c12ee1eSDan Willemsen	}, {
43*1c12ee1eSDan Willemsen		m: &testpb.TestRequiredForeign{
44*1c12ee1eSDan Willemsen			MapMessage: map[int32]*testpb.TestRequired{
45*1c12ee1eSDan Willemsen				1: {},
46*1c12ee1eSDan Willemsen			},
47*1c12ee1eSDan Willemsen		},
48*1c12ee1eSDan Willemsen		want: `goproto.proto.test.TestRequired.required_field`,
49*1c12ee1eSDan Willemsen	}, {
50*1c12ee1eSDan Willemsen		m:    &testpb.TestWeak{},
51*1c12ee1eSDan Willemsen		want: `<nil>`,
52*1c12ee1eSDan Willemsen		skip: !flags.ProtoLegacy,
53*1c12ee1eSDan Willemsen	}, {
54*1c12ee1eSDan Willemsen		m: func() proto.Message {
55*1c12ee1eSDan Willemsen			m := &testpb.TestWeak{}
56*1c12ee1eSDan Willemsen			m.SetWeakMessage1(&weakpb.WeakImportMessage1{})
57*1c12ee1eSDan Willemsen			return m
58*1c12ee1eSDan Willemsen		}(),
59*1c12ee1eSDan Willemsen		want: `goproto.proto.test.weak.WeakImportMessage1.a`,
60*1c12ee1eSDan Willemsen		skip: !flags.ProtoLegacy,
61*1c12ee1eSDan Willemsen	}, {
62*1c12ee1eSDan Willemsen		m: func() proto.Message {
63*1c12ee1eSDan Willemsen			m := &testpb.TestWeak{}
64*1c12ee1eSDan Willemsen			m.SetWeakMessage1(&weakpb.WeakImportMessage1{
65*1c12ee1eSDan Willemsen				A: proto.Int32(1),
66*1c12ee1eSDan Willemsen			})
67*1c12ee1eSDan Willemsen			return m
68*1c12ee1eSDan Willemsen		}(),
69*1c12ee1eSDan Willemsen		want: `<nil>`,
70*1c12ee1eSDan Willemsen		skip: !flags.ProtoLegacy,
71*1c12ee1eSDan Willemsen	}}
72*1c12ee1eSDan Willemsen
73*1c12ee1eSDan Willemsen	for _, tt := range tests {
74*1c12ee1eSDan Willemsen		t.Run("", func(t *testing.T) {
75*1c12ee1eSDan Willemsen			if tt.skip {
76*1c12ee1eSDan Willemsen				t.SkipNow()
77*1c12ee1eSDan Willemsen			}
78*1c12ee1eSDan Willemsen
79*1c12ee1eSDan Willemsen			err := proto.CheckInitialized(tt.m)
80*1c12ee1eSDan Willemsen			got := "<nil>"
81*1c12ee1eSDan Willemsen			if err != nil {
82*1c12ee1eSDan Willemsen				got = fmt.Sprintf("%q", err)
83*1c12ee1eSDan Willemsen			}
84*1c12ee1eSDan Willemsen			if !strings.Contains(got, tt.want) {
85*1c12ee1eSDan Willemsen				t.Errorf("CheckInitialized(m):\n got: %v\nwant contains: %v\nMessage:\n%v", got, tt.want, prototext.Format(tt.m))
86*1c12ee1eSDan Willemsen			}
87*1c12ee1eSDan Willemsen		})
88*1c12ee1eSDan Willemsen	}
89*1c12ee1eSDan Willemsen}
90