Handle empty value objects properly (#481)

Co-authored-by: James Hilton-Balfe <gobot1234yt@gmail.com>
This commit is contained in:
Ollie
2023-06-24 20:19:13 +01:00
committed by GitHub
parent a7532bbadc
commit 182aedaec4
3 changed files with 31 additions and 7 deletions

View File

@@ -2,14 +2,16 @@ syntax = "proto3";
package google_impl_behavior_equivalence;
message Foo{
int64 bar = 1;
}
message Foo { int64 bar = 1; }
message Test{
oneof group{
message Test {
oneof group {
string string = 1;
int64 integer = 2;
Foo foo = 3;
}
}
message Request { Empty foo = 1; }
message Empty {}

View File

@@ -3,17 +3,20 @@ from google.protobuf import json_format
import betterproto
from tests.output_betterproto.google_impl_behavior_equivalence import (
Empty,
Foo,
Request,
Test,
)
from tests.output_reference.google_impl_behavior_equivalence.google_impl_behavior_equivalence_pb2 import (
Empty as ReferenceEmpty,
Foo as ReferenceFoo,
Request as ReferenceRequest,
Test as ReferenceTest,
)
def test_oneof_serializes_similar_to_google_oneof():
tests = [
(Test(string="abc"), ReferenceTest(string="abc")),
(Test(integer=2), ReferenceTest(integer=2)),
@@ -30,7 +33,6 @@ def test_oneof_serializes_similar_to_google_oneof():
def test_bytes_are_the_same_for_oneof():
message = Test(string="")
message_reference = ReferenceTest(string="")
@@ -53,3 +55,16 @@ def test_bytes_are_the_same_for_oneof():
assert isinstance(message_reference.foo, ReferenceFoo)
assert isinstance(message_reference2.foo, ReferenceFoo)
def test_empty_message_field():
message = Request()
reference_message = ReferenceRequest()
message.foo = Empty()
reference_message.foo.CopyFrom(ReferenceEmpty())
assert betterproto.serialized_on_wire(message.foo)
assert reference_message.HasField("foo")
assert bytes(message) == reference_message.SerializeToString()