blob: e272838c813f35fd3c3f77f9ee186ef60ae0e120 [file] [log] [blame]
// Copyright 2021 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.
// Only test compatibility with the Marshal/Unmarshal functionality with
// pure protobuf reflection since there is no support for nullable fields
// in the table-driven implementation.
// +build protoreflect
package nullable
import (
"testing"
"github.com/google/go-cmp/cmp"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/reflect/protoreflect"
"google.golang.org/protobuf/testing/protocmp"
)
func init() {
testMethods = func(t *testing.T, mt protoreflect.MessageType) {
m1 := mt.New()
populated := testPopulateMessage(t, m1, 2)
b, err := proto.Marshal(m1.Interface())
if err != nil {
t.Errorf("proto.Marshal error: %v", err)
}
if populated && len(b) == 0 {
t.Errorf("len(proto.Marshal) = 0, want >0")
}
m2 := mt.New()
if err := proto.Unmarshal(b, m2.Interface()); err != nil {
t.Errorf("proto.Unmarshal error: %v", err)
}
if diff := cmp.Diff(m1.Interface(), m2.Interface(), protocmp.Transform()); diff != "" {
t.Errorf("message mismatch:\n%v", diff)
}
proto.Reset(m2.Interface())
testEmptyMessage(t, m2, true)
proto.Merge(m2.Interface(), m1.Interface())
if diff := cmp.Diff(m1.Interface(), m2.Interface(), protocmp.Transform()); diff != "" {
t.Errorf("message mismatch:\n%v", diff)
}
}
}