upb: fix textformat encoder to print group name instead of field name

PiperOrigin-RevId: 618228797
pull/16263/head
Eric Salo 11 months ago committed by Copybara-Service
parent 312240c406
commit d452a16b8c
  1. 11
      python/google/protobuf/internal/text_format_test.py
  2. 13
      upb/text/encode.c

@ -2299,6 +2299,17 @@ class TokenizerTest(unittest.TestCase):
tokenizer = text_format.Tokenizer(text.splitlines(), skip_comments=False)
tokenizer.ConsumeString()
def testGroupName(self):
grp = unittest_pb2.TestGroupExtension()
grp.Extensions[unittest_pb2.TestNestedExtension.optionalgroup_extension].a = 6
self.assertEqual('[protobuf_unittest.TestNestedExtension.optionalgroup_extension] {\n a: 6\n}\n', str(grp))
msg = unittest_pb2.TestAllTypes(
repeatedgroup=[unittest_pb2.TestAllTypes.RepeatedGroup(a=1)])
if api_implementation.Type() == 'upb':
self.assertEqual('repeatedgroup {\n a: 1\n}\n', str(msg))
else:
self.assertEqual('RepeatedGroup {\n a: 1\n}\n', str(msg))
# Tests for pretty printer functionality.
@_parameterized.parameters((unittest_pb2), (unittest_proto3_arena_pb2))

@ -230,12 +230,19 @@ static void txtenc_bytes(txtenc* e, upb_StringView data) {
static void txtenc_field(txtenc* e, upb_MessageValue val,
const upb_FieldDef* f) {
txtenc_indent(e);
const upb_CType type = upb_FieldDef_CType(f);
const upb_CType ctype = upb_FieldDef_CType(f);
const bool is_ext = upb_FieldDef_IsExtension(f);
const char* full = upb_FieldDef_FullName(f);
const char* name = upb_FieldDef_Name(f);
if (type == kUpb_CType_Message) {
if (ctype == kUpb_CType_Message) {
// begin:google_only
// // TODO: Turn this into a feature check and opensource it.
// if (upb_FieldDef_Type(f) == kUpb_FieldType_Group) {
// const upb_MessageDef* m = upb_FieldDef_MessageSubDef(f);
// name = upb_MessageDef_Name(m);
// }
// end:google_only
if (is_ext) {
txtenc_printf(e, "[%s] {", full);
} else {
@ -257,7 +264,7 @@ static void txtenc_field(txtenc* e, upb_MessageValue val,
txtenc_printf(e, "%s: ", name);
}
switch (type) {
switch (ctype) {
case kUpb_CType_Bool:
txtenc_putstr(e, val.bool_val ? "true" : "false");
break;

Loading…
Cancel
Save