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