// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style.
// license that can be found in the LICENSE file.

package proto_test

import (
	"fmt"
	"testing"

	"google.golang.org/protobuf/proto"

	testpb "google.golang.org/protobuf/internal/testprotos/test"
)

func TestIsInitializedErrors(t *testing.T) {
	for _, test := range []struct {
		m    proto.Message
		want string
	}{
		{
			&testpb.TestRequired{},
			`proto: required field goproto.proto.test.TestRequired.required_field not set`,
		},
		{
			&testpb.TestRequiredForeign{
				OptionalMessage: &testpb.TestRequired{},
			},
			`proto: required field goproto.proto.test.TestRequired.required_field not set`,
		},
		{
			&testpb.TestRequiredForeign{
				RepeatedMessage: []*testpb.TestRequired{
					{RequiredField: proto.Int32(1)},
					{},
				},
			},
			`proto: required field goproto.proto.test.TestRequired.required_field not set`,
		},
		{
			&testpb.TestRequiredForeign{
				MapMessage: map[int32]*testpb.TestRequired{
					1: {},
				},
			},
			`proto: required field goproto.proto.test.TestRequired.required_field not set`,
		},
	} {
		err := proto.IsInitialized(test.m)
		got := "<nil>"
		if err != nil {
			got = fmt.Sprintf("%q", err)
		}
		want := fmt.Sprintf("%q", test.want)
		if got != want {
			t.Errorf("IsInitialized(m):\n got: %v\nwant: %v\nMessage:\n%v", got, want, marshalText(test.m))
		}
	}
}
