Merge pull request #5646 from TeBoring/3.7.x-cherrypick

Default values should also be serialized for json map key/value (#5643)
pull/5644/head
Paul Yang 6 years ago committed by GitHub
commit 32339be92a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      conformance/failure_list_php_c.txt
  2. 5
      php/ext/google/protobuf/encode_decode.c
  3. 13
      php/tests/encode_decode_test.php

@ -23,7 +23,6 @@ Required.DurationProtoInputTooLarge.JsonOutput
Required.DurationProtoInputTooSmall.JsonOutput
Required.TimestampProtoInputTooLarge.JsonOutput
Required.TimestampProtoInputTooSmall.JsonOutput
Required.Proto3.JsonInput.BoolMapField.JsonOutput
Required.Proto3.JsonInput.DoubleFieldMaxNegativeValue.JsonOutput
Required.Proto3.JsonInput.DoubleFieldMaxNegativeValue.ProtobufOutput
Required.Proto3.JsonInput.DoubleFieldMinPositiveValue.JsonOutput

@ -1163,7 +1163,7 @@ static void put_optional_value(const void* memory, int len,
#define T(upbtypeconst, upbtype, ctype, default_value) \
case upbtypeconst: { \
ctype value = DEREF(memory, 0, ctype); \
if (value != default_value) { \
if (is_json || value != default_value) { \
upb_selector_t sel = getsel(f, upb_handlers_getprimitivehandlertype(f)); \
upb_sink_put##upbtype(sink, sel, value); \
} \
@ -1181,8 +1181,7 @@ static void put_optional_value(const void* memory, int len,
#undef T
case UPB_TYPE_STRING:
case UPB_TYPE_BYTES:
putrawstr(memory, len, f, sink,
is_json && is_wrapper_msg(upb_fielddef_containingtype(f)));
putrawstr(memory, len, f, sink, is_json);
break;
case UPB_TYPE_MESSAGE: {
#if PHP_MAJOR_VERSION < 7

@ -1135,4 +1135,17 @@ class EncodeDecodeTest extends TestBase
$this->assertEquals("", $m->serializeToString());
}
public function testJsonDecodeMapWithDefaultValueKey()
{
$m = new TestMessage();
$m->getMapInt32Int32()[0] = 0;
$this->assertSame("{\"mapInt32Int32\":{\"0\":0}}",
$m->serializeToJsonString());
$m = new TestMessage();
$m->getMapStringString()[""] = "";
$this->assertSame("{\"mapStringString\":{\"\":\"\"}}",
$m->serializeToJsonString());
}
}

Loading…
Cancel
Save