...

Source file src/google.golang.org/protobuf/proto/checkinit_test.go

Documentation: google.golang.org/protobuf/proto

     1  // 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  
     5  package proto_test
     6  
     7  import (
     8  	"fmt"
     9  	"strings"
    10  	"testing"
    11  
    12  	"google.golang.org/protobuf/encoding/prototext"
    13  	"google.golang.org/protobuf/internal/flags"
    14  	"google.golang.org/protobuf/proto"
    15  
    16  	testpb "google.golang.org/protobuf/internal/testprotos/test"
    17  	weakpb "google.golang.org/protobuf/internal/testprotos/test/weak1"
    18  )
    19  
    20  func TestCheckInitializedErrors(t *testing.T) {
    21  	type test struct {
    22  		m    proto.Message
    23  		want string
    24  		skip bool
    25  	}
    26  	tests := []test{{
    27  		m:    &testpb.TestRequired{},
    28  		want: `goproto.proto.test.TestRequired.required_field`,
    29  	}, {
    30  		m: &testpb.TestRequiredForeign{
    31  			OptionalMessage: &testpb.TestRequired{},
    32  		},
    33  		want: `goproto.proto.test.TestRequired.required_field`,
    34  	}, {
    35  		m: &testpb.TestRequiredForeign{
    36  			RepeatedMessage: []*testpb.TestRequired{
    37  				{RequiredField: proto.Int32(1)},
    38  				{},
    39  			},
    40  		},
    41  		want: `goproto.proto.test.TestRequired.required_field`,
    42  	}, {
    43  		m: &testpb.TestRequiredForeign{
    44  			MapMessage: map[int32]*testpb.TestRequired{
    45  				1: {},
    46  			},
    47  		},
    48  		want: `goproto.proto.test.TestRequired.required_field`,
    49  	}, {
    50  		m:    &testpb.TestWeak{},
    51  		want: `<nil>`,
    52  		skip: !flags.ProtoLegacy,
    53  	}, {
    54  		m: func() proto.Message {
    55  			m := &testpb.TestWeak{}
    56  			m.SetWeakMessage1(&weakpb.WeakImportMessage1{})
    57  			return m
    58  		}(),
    59  		want: `goproto.proto.test.weak.WeakImportMessage1.a`,
    60  		skip: !flags.ProtoLegacy,
    61  	}, {
    62  		m: func() proto.Message {
    63  			m := &testpb.TestWeak{}
    64  			m.SetWeakMessage1(&weakpb.WeakImportMessage1{
    65  				A: proto.Int32(1),
    66  			})
    67  			return m
    68  		}(),
    69  		want: `<nil>`,
    70  		skip: !flags.ProtoLegacy,
    71  	}}
    72  
    73  	for _, tt := range tests {
    74  		t.Run("", func(t *testing.T) {
    75  			if tt.skip {
    76  				t.SkipNow()
    77  			}
    78  
    79  			err := proto.CheckInitialized(tt.m)
    80  			got := "<nil>"
    81  			if err != nil {
    82  				got = fmt.Sprintf("%q", err)
    83  			}
    84  			if !strings.Contains(got, tt.want) {
    85  				t.Errorf("CheckInitialized(m):\n got: %v\nwant contains: %v\nMessage:\n%v", got, tt.want, prototext.Format(tt.m))
    86  			}
    87  		})
    88  	}
    89  }
    90  

View as plain text