73 lines
1.7 KiB
Go
73 lines
1.7 KiB
Go
package demo_protobuf3_optional
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"google.golang.org/protobuf/proto"
|
|
)
|
|
|
|
func TestOptionalNilId(t *testing.T) {
|
|
noid := &WithOptional{
|
|
Username: "me",
|
|
Userid: nil,
|
|
}
|
|
t.Log(noid.String())
|
|
wiremessage, err := proto.Marshal(noid)
|
|
if err != nil {
|
|
t.Fatal("marshal failed: ", err)
|
|
}
|
|
|
|
unmarshaled := &WithOptional{}
|
|
if err := proto.Unmarshal(wiremessage, unmarshaled); err != nil {
|
|
t.Fatal("failed to unmarshal message: ", err)
|
|
}
|
|
t.Log("id: ", unmarshaled.Userid)
|
|
if unmarshaled.Userid != nil {
|
|
t.Fatalf("expected userid is nil, got %v", unmarshaled.Userid)
|
|
}
|
|
}
|
|
|
|
func TestOptionalZeroId(t *testing.T) {
|
|
id := int64(0)
|
|
noid := &WithOptional{
|
|
Username: "me",
|
|
Userid: &id,
|
|
}
|
|
t.Log(noid.String())
|
|
wiremessage, err := proto.Marshal(noid)
|
|
if err != nil {
|
|
t.Fatal("marshal failed: ", err)
|
|
}
|
|
|
|
unmarshaled := &WithOptional{}
|
|
if err := proto.Unmarshal(wiremessage, unmarshaled); err != nil {
|
|
t.Fatal("failed to unmarshal message: ", err)
|
|
}
|
|
if unmarshaled.Userid == nil || *unmarshaled.Userid != 0 {
|
|
t.Fatalf("expected userid is non nil 0, got %v", unmarshaled.Userid)
|
|
}
|
|
t.Log("id: ", unmarshaled.Userid)
|
|
}
|
|
|
|
func TestOptionalNonZeroId(t *testing.T) {
|
|
id := int64(1)
|
|
noid := &WithOptional{
|
|
Username: "me",
|
|
Userid: &id,
|
|
}
|
|
t.Log(noid.String())
|
|
wiremessage, err := proto.Marshal(noid)
|
|
if err != nil {
|
|
t.Fatal("marshal failed: ", err)
|
|
}
|
|
|
|
unmarshaled := &WithOptional{}
|
|
if err := proto.Unmarshal(wiremessage, unmarshaled); err != nil {
|
|
t.Fatal("failed to unmarshal message: ", err)
|
|
}
|
|
if unmarshaled.Userid == nil || *unmarshaled.Userid != 1 {
|
|
t.Fatalf("expected userid is non nil 1, got %v", unmarshaled.Userid)
|
|
}
|
|
t.Log("id: ", unmarshaled.Userid)
|
|
}
|