Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
P
protobuf
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
protobuf
Commits
c4f2a92c
Unverified
Commit
c4f2a92c
authored
Jan 17, 2019
by
Paul Yang
Committed by
GitHub
Jan 17, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix field mask for php in json (#5591)
* Fix field mask for php in json * Update byte size
parent
dda7ab03
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
196 additions
and
119 deletions
+196
-119
failure_list_php_c.txt
conformance/failure_list_php_c.txt
+1
-10
encode_decode.c
php/ext/google/protobuf/encode_decode.c
+114
-87
upb.c
php/ext/google/protobuf/upb.c
+0
-0
upb.h
php/ext/google/protobuf/upb.h
+1
-0
encode_decode_test.php
php/tests/encode_decode_test.php
+58
-0
generated_class_test.php
php/tests/generated_class_test.php
+3
-3
php_implementation_test.php
php/tests/php_implementation_test.php
+1
-1
test_base.php
php/tests/test_base.php
+6
-6
test_util.php
php/tests/test_util.php
+12
-12
No files found.
conformance/failure_list_php_c.txt
View file @
c4f2a92c
...
...
@@ -5,6 +5,7 @@ Recommended.Proto3.JsonInput.BytesFieldBase64Url.JsonOutput
Recommended.Proto3.JsonInput.BytesFieldBase64Url.ProtobufOutput
Recommended.Proto3.JsonInput.DurationHas3FractionalDigits.Validator
Recommended.Proto3.JsonInput.DurationHas6FractionalDigits.Validator
Recommended.Proto3.JsonInput.FieldMaskInvalidCharacter
Recommended.Proto3.JsonInput.Int64FieldBeString.Validator
Recommended.Proto3.JsonInput.MapFieldValueIsNull
Recommended.Proto3.JsonInput.OneofZeroBytes.JsonOutput
...
...
@@ -22,8 +23,6 @@ Required.DurationProtoInputTooLarge.JsonOutput
Required.DurationProtoInputTooSmall.JsonOutput
Required.TimestampProtoInputTooLarge.JsonOutput
Required.TimestampProtoInputTooSmall.JsonOutput
Required.Proto3.JsonInput.AnyWithFieldMask.JsonOutput
Required.Proto3.JsonInput.AnyWithFieldMask.ProtobufOutput
Required.Proto3.JsonInput.BoolMapField.JsonOutput
Required.Proto3.JsonInput.DoubleFieldMaxNegativeValue.JsonOutput
Required.Proto3.JsonInput.DoubleFieldMaxNegativeValue.ProtobufOutput
...
...
@@ -32,22 +31,14 @@ Required.Proto3.JsonInput.DoubleFieldMinPositiveValue.ProtobufOutput
Required.Proto3.JsonInput.DoubleFieldNan.JsonOutput
Required.Proto3.JsonInput.DurationMinValue.JsonOutput
Required.Proto3.JsonInput.DurationRepeatedValue.JsonOutput
Required.Proto3.JsonInput.FieldMask.JsonOutput
Required.Proto3.JsonInput.FieldMask.ProtobufOutput
Required.Proto3.JsonInput.FloatFieldInfinity.JsonOutput
Required.Proto3.JsonInput.FloatFieldNan.JsonOutput
Required.Proto3.JsonInput.FloatFieldNegativeInfinity.JsonOutput
Required.Proto3.JsonInput.OneofFieldDuplicate
Required.Proto3.JsonInput.OptionalWrapperTypesWithNonDefaultValue.JsonOutput
Required.Proto3.JsonInput.OptionalWrapperTypesWithNonDefaultValue.ProtobufOutput
Required.Proto3.JsonInput.StringFieldEscape.JsonOutput
Required.Proto3.JsonInput.StringFieldEscape.ProtobufOutput
Required.Proto3.JsonInput.StringFieldSurrogatePair.JsonOutput
Required.Proto3.JsonInput.StringFieldSurrogatePair.ProtobufOutput
Required.Proto3.JsonInput.StringFieldUnicodeEscape.JsonOutput
Required.Proto3.JsonInput.StringFieldUnicodeEscape.ProtobufOutput
Required.Proto3.JsonInput.StringFieldUnicodeEscapeWithLowercaseHexLetters.JsonOutput
Required.Proto3.JsonInput.StringFieldUnicodeEscapeWithLowercaseHexLetters.ProtobufOutput
Required.Proto3.ProtobufInput.DoubleFieldNormalizeQuietNan.JsonOutput
Required.Proto3.ProtobufInput.DoubleFieldNormalizeSignalingNan.JsonOutput
Required.Proto3.ProtobufInput.FloatFieldNormalizeQuietNan.JsonOutput
...
...
php/ext/google/protobuf/encode_decode.c
View file @
c4f2a92c
...
...
@@ -148,6 +148,11 @@ static const void* newhandlerdata(upb_handlers* h, uint32_t ofs) {
return
hd_ofs
;
}
typedef
struct
{
void
*
closure
;
stringsink
sink
;
}
stringfields_parseframe_t
;
typedef
size_t
(
*
encodeunknown_handlerfunc
)(
void
*
_sink
,
const
void
*
hd
,
const
char
*
ptr
,
size_t
len
,
const
upb_bufhandle
*
handle
);
...
...
@@ -245,46 +250,41 @@ DEFINE_APPEND_HANDLER(int64, int64_t)
DEFINE_APPEND_HANDLER
(
uint64
,
uint64_t
)
DEFINE_APPEND_HANDLER
(
double
,
double
)
// Appends a string to a repeated field.
// Appends a string
or 'bytes' string
to a repeated field.
static
void
*
appendstr_handler
(
void
*
closure
,
const
void
*
hd
,
size_t
size_hint
)
{
zval
*
array
=
(
zval
*
)
closure
;
TSRMLS_FETCH
();
RepeatedField
*
intern
=
UNBOX
(
RepeatedField
,
array
);
UPB_UNUSED
(
hd
);
#if PHP_MAJOR_VERSION < 7
zval
*
str
;
MAKE_STD_ZVAL
(
str
);
PHP_PROTO_ZVAL_STRING
(
str
,
""
,
1
);
repeated_field_push_native
(
intern
,
&
str
);
return
(
void
*
)
str
;
#else
zend_string
*
str
=
zend_string_init
(
""
,
0
,
1
);
repeated_field_push_native
(
intern
,
&
str
);
return
intern
;
#endif
stringfields_parseframe_t
*
frame
=
(
stringfields_parseframe_t
*
)
malloc
(
sizeof
(
stringfields_parseframe_t
));
frame
->
closure
=
closure
;
stringsink_init
(
&
frame
->
sink
);
return
frame
;
}
// Appends a 'bytes' string to a repeated field.
static
void
*
appendbytes_handler
(
void
*
closure
,
const
void
*
hd
,
size_t
size_hint
)
{
zval
*
array
=
(
zval
*
)
closure
;
static
bool
appendstr_end_handler
(
void
*
closure
,
const
void
*
hd
)
{
stringfields_parseframe_t
*
frame
=
closure
;
zval
*
array
=
(
zval
*
)
frame
->
closure
;
TSRMLS_FETCH
();
RepeatedField
*
intern
=
UNBOX
(
RepeatedField
,
array
);
#if PHP_MAJOR_VERSION < 7
zval
*
str
;
MAKE_STD_ZVAL
(
str
);
PHP_PROTO_ZVAL_STRING
(
str
,
""
,
1
);
PHP_PROTO_ZVAL_STRING
L
(
str
,
frame
->
sink
.
ptr
,
frame
->
sink
.
len
,
1
);
repeated_field_push_native
(
intern
,
&
str
);
return
(
void
*
)
str
;
#else
zend_string
*
str
=
zend_string_init
(
""
,
0
,
1
);
zend_string
*
str
=
zend_string_init
(
frame
->
sink
.
ptr
,
frame
->
sink
.
len
,
1
);
repeated_field_push_native
(
intern
,
&
str
);
return
intern
;
#endif
stringsink_uninit
(
&
frame
->
sink
);
free
(
frame
);
return
true
;
}
// Handlers that append primitive values to a repeated field.
...
...
@@ -326,64 +326,76 @@ static void *empty_php_string(zval* value_ptr) {
return
value_ptr
;
}
#endif
#if PHP_MAJOR_VERSION < 7
static
void
*
empty_php_string2
(
zval
**
value_ptr
)
{
SEPARATE_ZVAL_IF_NOT_REF
(
value_ptr
);
if
(
Z_TYPE_PP
(
value_ptr
)
==
IS_STRING
&&
!
IS_INTERNED
(
Z_STRVAL_PP
(
value_ptr
)))
{
FREE
(
Z_STRVAL_PP
(
value_ptr
));
}
ZVAL_EMPTY_STRING
(
*
value_ptr
);
return
(
void
*
)(
*
value_ptr
);
}
static
void
new_php_string
(
zval
**
value_ptr
,
const
char
*
str
,
size_t
len
)
{
SEPARATE_ZVAL_IF_NOT_REF
(
value_ptr
);
if
(
Z_TYPE_PP
(
value_ptr
)
==
IS_STRING
&&
!
IS_INTERNED
(
Z_STRVAL_PP
(
value_ptr
)))
{
FREE
(
Z_STRVAL_PP
(
value_ptr
));
}
ZVAL_EMPTY_STRING
(
*
value_ptr
);
ZVAL_STRINGL
(
*
value_ptr
,
str
,
len
,
1
);
}
#else
static
void
*
empty_php_string2
(
zval
*
value_ptr
)
{
if
(
Z_TYPE_P
(
value_ptr
)
==
IS_STRING
)
{
zend_string_release
(
Z_STR_P
(
value_ptr
));
}
ZVAL_EMPTY_STRING
(
value_ptr
);
return
value_ptr
;
}
static
void
new_php_string
(
zval
*
value_ptr
,
const
char
*
str
,
size_t
len
)
{
if
(
Z_TYPE_P
(
value_ptr
)
==
IS_STRING
)
{
zend_string_release
(
Z_STR_P
(
value_ptr
));
}
ZVAL_NEW_STR
(
value_ptr
,
zend_string_init
(
str
,
len
,
0
));
}
#endif
// Sets a non-repeated string field in a message.
// Sets a non-repeated string
/bytes
field in a message.
static
void
*
str_handler
(
void
*
closure
,
const
void
*
hd
,
size_t
size_hint
)
{
MessageHeader
*
msg
=
closure
;
const
size_t
*
ofs
=
hd
;
return
empty_php_string
(
DEREF
(
message_data
(
msg
),
*
ofs
,
CACHED_VALUE
*
));
UPB_UNUSED
(
hd
);
stringfields_parseframe_t
*
frame
=
(
stringfields_parseframe_t
*
)
malloc
(
sizeof
(
stringfields_parseframe_t
));
frame
->
closure
=
closure
;
stringsink_init
(
&
frame
->
sink
);
return
frame
;
}
// Sets a non-repeated 'bytes' field in a message.
static
void
*
bytes_handler
(
void
*
closure
,
const
void
*
hd
,
size_t
size_hint
)
{
MessageHeader
*
msg
=
closure
;
static
bool
str_end_handler
(
void
*
closure
,
const
void
*
hd
)
{
stringfields_parseframe_t
*
frame
=
closure
;
const
size_t
*
ofs
=
hd
;
return
empty_php_string
(
DEREF
(
message_data
(
msg
),
*
ofs
,
CACHED_VALUE
*
));
MessageHeader
*
msg
=
(
MessageHeader
*
)
frame
->
closure
;
new_php_string
(
DEREF
(
message_data
(
msg
),
*
ofs
,
CACHED_VALUE
*
),
frame
->
sink
.
ptr
,
frame
->
sink
.
len
);
stringsink_uninit
(
&
frame
->
sink
);
free
(
frame
);
return
true
;
}
static
size_t
stringdata_handler
(
void
*
closure
,
const
void
*
hd
,
const
char
*
str
,
size_t
len
,
const
upb_bufhandle
*
handle
)
{
zval
*
php_str
=
(
zval
*
)
closure
;
#if PHP_MAJOR_VERSION < 7
// Oneof string/bytes fields may have NULL initial value, which doesn't need
// to be freed.
if
(
Z_TYPE_P
(
php_str
)
==
IS_STRING
&&
!
IS_INTERNED
(
Z_STRVAL_P
(
php_str
)))
{
FREE
(
Z_STRVAL_P
(
php_str
));
}
ZVAL_STRINGL
(
php_str
,
str
,
len
,
1
);
#else
if
(
Z_TYPE_P
(
php_str
)
==
IS_STRING
)
{
zend_string_release
(
Z_STR_P
(
php_str
));
}
ZVAL_NEW_STR
(
php_str
,
zend_string_init
(
str
,
len
,
0
));
#endif
return
len
;
stringfields_parseframe_t
*
frame
=
closure
;
return
stringsink_string
(
&
frame
->
sink
,
hd
,
str
,
len
,
handle
);
}
#if PHP_MAJOR_VERSION >= 7
static
size_t
zendstringdata_handler
(
void
*
closure
,
const
void
*
hd
,
const
char
*
str
,
size_t
len
,
const
upb_bufhandle
*
handle
)
{
RepeatedField
*
intern
=
(
RepeatedField
*
)
closure
;
unsigned
char
memory
[
NATIVE_SLOT_MAX_SIZE
];
memset
(
memory
,
0
,
NATIVE_SLOT_MAX_SIZE
);
*
(
zend_string
**
)
memory
=
zend_string_init
(
str
,
len
,
0
);
HashTable
*
ht
=
PHP_PROTO_HASH_OF
(
intern
->
array
);
int
index
=
zend_hash_num_elements
(
ht
)
-
1
;
php_proto_zend_hash_index_update_mem
(
ht
,
index
,
memory
,
sizeof
(
zend_string
*
),
NULL
);
return
len
;
}
#endif
// Appends a submessage to a repeated field.
static
void
*
appendsubmsg_handler
(
void
*
closure
,
const
void
*
hd
)
{
zval
*
array
=
(
zval
*
)
closure
;
...
...
@@ -744,13 +756,38 @@ static void *oneofbytes_handler(void *closure,
return
empty_php_string
(
DEREF
(
message_data
(
msg
),
oneofdata
->
ofs
,
CACHED_VALUE
*
));
}
static
bool
oneofstr_end_handler
(
void
*
closure
,
const
void
*
hd
)
{
stringfields_parseframe_t
*
frame
=
closure
;
MessageHeader
*
msg
=
(
MessageHeader
*
)
frame
->
closure
;
const
oneof_handlerdata_t
*
oneofdata
=
hd
;
oneof_cleanup
(
msg
,
oneofdata
);
DEREF
(
message_data
(
msg
),
oneofdata
->
case_ofs
,
uint32_t
)
=
oneofdata
->
oneof_case_num
;
DEREF
(
message_data
(
msg
),
oneofdata
->
ofs
,
CACHED_VALUE
*
)
=
OBJ_PROP
(
&
msg
->
std
,
oneofdata
->
property_ofs
);
new_php_string
(
DEREF
(
message_data
(
msg
),
oneofdata
->
ofs
,
CACHED_VALUE
*
),
frame
->
sink
.
ptr
,
frame
->
sink
.
len
);
stringsink_uninit
(
&
frame
->
sink
);
free
(
frame
);
return
true
;
}
static
void
*
oneofstr_handler
(
void
*
closure
,
const
void
*
hd
,
size_t
size_hint
)
{
// TODO(teboring): Add it back.
// rb_enc_associate(str, kRubyString8bitEncoding);
return
oneofbytes_handler
(
closure
,
hd
,
size_hint
);
UPB_UNUSED
(
hd
);
stringfields_parseframe_t
*
frame
=
(
stringfields_parseframe_t
*
)
malloc
(
sizeof
(
stringfields_parseframe_t
));
frame
->
closure
=
closure
;
stringsink_init
(
&
frame
->
sink
);
return
frame
;
}
// Handler for a submessage field in a oneof.
...
...
@@ -822,15 +859,9 @@ static void add_handlers_for_repeated_field(upb_handlers *h,
case
UPB_TYPE_STRING
:
case
UPB_TYPE_BYTES
:
{
bool
is_bytes
=
upb_fielddef_type
(
f
)
==
UPB_TYPE_BYTES
;
upb_handlers_setstartstr
(
h
,
f
,
is_bytes
?
appendbytes_handler
:
appendstr_handler
,
NULL
);
#if PHP_MAJOR_VERSION < 7
upb_handlers_setstartstr
(
h
,
f
,
appendstr_handler
,
NULL
);
upb_handlers_setstring
(
h
,
f
,
stringdata_handler
,
NULL
);
#else
upb_handlers_setstring
(
h
,
f
,
zendstringdata_handler
,
NULL
);
#endif
upb_handlers_setendstr
(
h
,
f
,
appendstr_end_handler
,
&
attr
);
break
;
}
case
UPB_TYPE_MESSAGE
:
{
...
...
@@ -870,13 +901,11 @@ static void add_handlers_for_singular_field(upb_handlers *h,
case
UPB_TYPE_STRING
:
case
UPB_TYPE_BYTES
:
{
bool
is_bytes
=
upb_fielddef_type
(
f
)
==
UPB_TYPE_BYTES
;
upb_handlerattr
attr
=
UPB_HANDLERATTR_INITIALIZER
;
upb_handlerattr_sethandlerdata
(
&
attr
,
newhandlerdata
(
h
,
offset
));
upb_handlers_setstartstr
(
h
,
f
,
is_bytes
?
bytes_handler
:
str_handler
,
&
attr
);
upb_handlers_setstartstr
(
h
,
f
,
str_handler
,
&
attr
);
upb_handlers_setstring
(
h
,
f
,
stringdata_handler
,
&
attr
);
upb_handlers_setendstr
(
h
,
f
,
str_end_handler
,
&
attr
);
upb_handlerattr_uninit
(
&
attr
);
break
;
}
...
...
@@ -958,11 +987,9 @@ static void add_handlers_for_oneof_field(upb_handlers *h,
case
UPB_TYPE_STRING
:
case
UPB_TYPE_BYTES
:
{
bool
is_bytes
=
upb_fielddef_type
(
f
)
==
UPB_TYPE_BYTES
;
upb_handlers_setstartstr
(
h
,
f
,
is_bytes
?
oneofbytes_handler
:
oneofstr_handler
,
&
attr
);
upb_handlers_setstartstr
(
h
,
f
,
oneofstr_handler
,
&
attr
);
upb_handlers_setstring
(
h
,
f
,
stringdata_handler
,
NULL
);
upb_handlers_setendstr
(
h
,
f
,
oneofstr_end_handler
,
&
attr
);
break
;
}
case
UPB_TYPE_MESSAGE
:
{
...
...
php/ext/google/protobuf/upb.c
View file @
c4f2a92c
This diff is collapsed.
Click to expand it.
php/ext/google/protobuf/upb.h
View file @
c4f2a92c
...
...
@@ -2014,6 +2014,7 @@ typedef enum {
typedef
enum
{
UPB_WELLKNOWN_UNSPECIFIED
,
UPB_WELLKNOWN_ANY
,
UPB_WELLKNOWN_FIELDMASK
,
UPB_WELLKNOWN_DURATION
,
UPB_WELLKNOWN_TIMESTAMP
,
/* number wrappers */
...
...
php/tests/encode_decode_test.php
View file @
c4f2a92c
...
...
@@ -14,6 +14,7 @@ use Foo\TestRandomFieldOrder;
use
Foo\TestUnpackedMessage
;
use
Google\Protobuf\Any
;
use
Google\Protobuf\DoubleValue
;
use
Google\Protobuf\FieldMask
;
use
Google\Protobuf\FloatValue
;
use
Google\Protobuf\Int32Value
;
use
Google\Protobuf\UInt32Value
;
...
...
@@ -266,6 +267,40 @@ class EncodeDecodeTest extends TestBase
}
public
function
testJsonEncodeDecodeOneof
()
{
$m
=
new
TestMessage
();
$m
->
setOneofEnum
(
TestEnum
::
ONE
);
$data
=
$m
->
serializeToJsonString
();
$n
=
new
TestMessage
();
$n
->
mergeFromJsonString
(
$data
);
$this
->
assertSame
(
"oneof_enum"
,
$n
->
getMyOneof
());
$this
->
assertSame
(
TestEnum
::
ONE
,
$n
->
getOneofEnum
());
$m
->
setOneofString
(
"a"
);
$data
=
$m
->
serializeToJsonString
();
$n
=
new
TestMessage
();
$n
->
mergeFromJsonString
(
$data
);
$this
->
assertSame
(
"oneof_string"
,
$n
->
getMyOneof
());
$this
->
assertSame
(
"a"
,
$n
->
getOneofString
());
$m
->
setOneofBytes
(
"bbbb"
);
$data
=
$m
->
serializeToJsonString
();
$n
=
new
TestMessage
();
$n
->
mergeFromJsonString
(
$data
);
$this
->
assertSame
(
"oneof_bytes"
,
$n
->
getMyOneof
());
$this
->
assertSame
(
"bbbb"
,
$n
->
getOneofBytes
());
$sub_m
=
new
Sub
();
$m
->
setOneofMessage
(
$sub_m
);
$data
=
$m
->
serializeToJsonString
();
$n
=
new
TestMessage
();
$n
->
mergeFromJsonString
(
$data
);
$this
->
assertSame
(
"oneof_message"
,
$n
->
getMyOneof
());
$this
->
assertFalse
(
is_null
(
$n
->
getOneofMessage
()));
}
public
function
testPackedEncode
()
{
$from
=
new
TestPackedMessage
();
...
...
@@ -1070,4 +1105,27 @@ class EncodeDecodeTest extends TestBase
$m
->
serializeToJsonString
());
}
public
function
testDecodeTopLevelFieldMask
()
{
$m
=
new
TestMessage
();
$m
->
setMapStringString
([
'a'
=>
'abcdefg'
]);
$data1
=
$m
->
serializeToJsonString
();
$n
=
new
TestMessage
();
$n
->
mergeFromJsonString
(
$data1
);
$data2
=
$n
->
serializeToJsonString
();
$this
->
assertSame
(
$data1
,
$data2
);
$m
=
new
FieldMask
();
$m
->
mergeFromJsonString
(
"
\"
foo.barBaz,qux
\"
"
);
$this
->
assertSame
(
"foo.bar_baz"
,
$m
->
getPaths
()[
0
]);
$this
->
assertSame
(
"qux"
,
$m
->
getPaths
()[
1
]);
}
public
function
testEncodeTopLevelFieldMask
()
{
$m
=
new
FieldMask
();
$m
->
setPaths
([
"foo.bar_baz"
,
"qux"
]);
$this
->
assertSame
(
"
\"
foo.barBaz,qux
\"
"
,
$m
->
serializeToJsonString
());
}
}
php/tests/generated_class_test.php
View file @
c4f2a92c
...
...
@@ -1329,7 +1329,7 @@ class GeneratedClassTest extends TestBase
'optional_double'
=>
1.6
,
'optional_bool'
=>
true
,
'optional_string'
=>
'a'
,
'optional_bytes'
=>
'b'
,
'optional_bytes'
=>
'b
bbb
'
,
'optional_enum'
=>
TestEnum
::
ONE
,
'optional_message'
=>
new
Sub
([
'a'
=>
33
...
...
@@ -1348,7 +1348,7 @@ class GeneratedClassTest extends TestBase
'repeated_double'
=>
[
1.6
,
2.6
],
'repeated_bool'
=>
[
true
,
false
],
'repeated_string'
=>
[
'a'
,
'c'
],
'repeated_bytes'
=>
[
'b
'
,
'
d'
],
'repeated_bytes'
=>
[
'b
bbb'
,
'ddd
d'
],
'repeated_enum'
=>
[
TestEnum
::
ZERO
,
TestEnum
::
ONE
],
'repeated_message'
=>
[
new
Sub
([
'a'
=>
34
]),
new
Sub
([
'a'
=>
35
])],
...
...
@@ -1366,7 +1366,7 @@ class GeneratedClassTest extends TestBase
'map_int32_double'
=>
[
1
=>
3.6
],
'map_bool_bool'
=>
[
true
=>
true
],
'map_string_string'
=>
[
'e'
=>
'e'
],
'map_int32_bytes'
=>
[
1
=>
'f'
],
'map_int32_bytes'
=>
[
1
=>
'f
fff
'
],
'map_int32_enum'
=>
[
1
=>
TestEnum
::
ONE
],
'map_int32_message'
=>
[
1
=>
new
Sub
([
'a'
=>
36
])],
]);
...
...
php/tests/php_implementation_test.php
View file @
c4f2a92c
...
...
@@ -504,7 +504,7 @@ class ImplementationTest extends TestBase
{
$m
=
new
TestMessage
();
TestUtil
::
setTestMessage
(
$m
);
$this
->
assertSame
(
5
06
,
$m
->
byteSize
());
$this
->
assertSame
(
5
18
,
$m
->
byteSize
());
}
public
function
testPackedByteSize
()
...
...
php/tests/test_base.php
View file @
c4f2a92c
...
...
@@ -28,7 +28,7 @@ class TestBase extends \PHPUnit\Framework\TestCase
$this
->
assertSame
(
1.6
,
$m
->
getOptionalDouble
());
$this
->
assertSame
(
true
,
$m
->
getOptionalBool
());
$this
->
assertSame
(
'a'
,
$m
->
getOptionalString
());
$this
->
assertSame
(
'b'
,
$m
->
getOptionalBytes
());
$this
->
assertSame
(
'b
bbb
'
,
$m
->
getOptionalBytes
());
$this
->
assertSame
(
TestEnum
::
ONE
,
$m
->
getOptionalEnum
());
$this
->
assertSame
(
33
,
$m
->
getOptionalMessage
()
->
getA
());
if
(
PHP_INT_SIZE
==
4
)
{
...
...
@@ -59,7 +59,7 @@ class TestBase extends \PHPUnit\Framework\TestCase
$this
->
assertEquals
(
1.6
,
$m
->
getRepeatedDouble
()[
0
]);
$this
->
assertEquals
(
true
,
$m
->
getRepeatedBool
()[
0
]);
$this
->
assertEquals
(
'a'
,
$m
->
getRepeatedString
()[
0
]);
$this
->
assertEquals
(
'b'
,
$m
->
getRepeatedBytes
()[
0
]);
$this
->
assertEquals
(
'b
bbb
'
,
$m
->
getRepeatedBytes
()[
0
]);
$this
->
assertEquals
(
34
,
$m
->
getRepeatedMessage
()[
0
]
->
GetA
());
$this
->
assertEquals
(
-
52
,
$m
->
getRepeatedInt32
()[
1
]);
...
...
@@ -76,7 +76,7 @@ class TestBase extends \PHPUnit\Framework\TestCase
$this
->
assertEquals
(
2.6
,
$m
->
getRepeatedDouble
()[
1
]);
$this
->
assertEquals
(
false
,
$m
->
getRepeatedBool
()[
1
]);
$this
->
assertEquals
(
'c'
,
$m
->
getRepeatedString
()[
1
]);
$this
->
assertEquals
(
'd'
,
$m
->
getRepeatedBytes
()[
1
]);
$this
->
assertEquals
(
'd
ddd
'
,
$m
->
getRepeatedBytes
()[
1
]);
$this
->
assertEquals
(
35
,
$m
->
getRepeatedMessage
()[
1
]
->
GetA
());
if
(
PHP_INT_SIZE
==
4
)
{
...
...
@@ -101,7 +101,7 @@ class TestBase extends \PHPUnit\Framework\TestCase
$this
->
assertEquals
(
3.6
,
$m
->
getMapInt32Double
()[
1
]);
$this
->
assertEquals
(
true
,
$m
->
getMapBoolBool
()[
true
]);
$this
->
assertEquals
(
'e'
,
$m
->
getMapStringString
()[
'e'
]);
$this
->
assertEquals
(
'f'
,
$m
->
getMapInt32Bytes
()[
1
]);
$this
->
assertEquals
(
'f
fff
'
,
$m
->
getMapInt32Bytes
()[
1
]);
$this
->
assertEquals
(
TestEnum
::
ONE
,
$m
->
getMapInt32Enum
()[
1
]);
$this
->
assertEquals
(
36
,
$m
->
getMapInt32Message
()[
1
]
->
GetA
());
}
...
...
@@ -146,7 +146,7 @@ class TestBase extends \PHPUnit\Framework\TestCase
$this
->
assertEquals
(
1.6
,
$m
->
getRepeatedDouble
()[
0
]);
$this
->
assertEquals
(
true
,
$m
->
getRepeatedBool
()[
0
]);
$this
->
assertEquals
(
'a'
,
$m
->
getRepeatedString
()[
0
]);
$this
->
assertEquals
(
'b'
,
$m
->
getRepeatedBytes
()[
0
]);
$this
->
assertEquals
(
'b
bbb
'
,
$m
->
getRepeatedBytes
()[
0
]);
$this
->
assertEquals
(
TestEnum
::
ZERO
,
$m
->
getRepeatedEnum
()[
0
]);
$this
->
assertEquals
(
34
,
$m
->
getRepeatedMessage
()[
0
]
->
GetA
());
...
...
@@ -164,7 +164,7 @@ class TestBase extends \PHPUnit\Framework\TestCase
$this
->
assertEquals
(
2.6
,
$m
->
getRepeatedDouble
()[
1
]);
$this
->
assertEquals
(
false
,
$m
->
getRepeatedBool
()[
1
]);
$this
->
assertEquals
(
'c'
,
$m
->
getRepeatedString
()[
1
]);
$this
->
assertEquals
(
'd'
,
$m
->
getRepeatedBytes
()[
1
]);
$this
->
assertEquals
(
'd
ddd
'
,
$m
->
getRepeatedBytes
()[
1
]);
$this
->
assertEquals
(
TestEnum
::
ONE
,
$m
->
getRepeatedEnum
()[
1
]);
$this
->
assertEquals
(
35
,
$m
->
getRepeatedMessage
()[
1
]
->
GetA
());
...
...
php/tests/test_util.php
View file @
c4f2a92c
...
...
@@ -65,7 +65,7 @@ class TestUtil
$m
->
setOptionalDouble
(
1.6
);
$m
->
setOptionalBool
(
true
);
$m
->
setOptionalString
(
'a'
);
$m
->
setOptionalBytes
(
'b'
);
$m
->
setOptionalBytes
(
'b
bbb
'
);
$m
->
setOptionalEnum
(
TestEnum
::
ONE
);
$sub
=
new
Sub
();
$m
->
setOptionalMessage
(
$sub
);
...
...
@@ -85,7 +85,7 @@ class TestUtil
self
::
appendHelper
(
$m
,
'RepeatedDouble'
,
1.6
);
self
::
appendHelper
(
$m
,
'RepeatedBool'
,
true
);
self
::
appendHelper
(
$m
,
'RepeatedString'
,
'a'
);
self
::
appendHelper
(
$m
,
'RepeatedBytes'
,
'b'
);
self
::
appendHelper
(
$m
,
'RepeatedBytes'
,
'b
bbb
'
);
self
::
appendHelper
(
$m
,
'RepeatedEnum'
,
TestEnum
::
ZERO
);
self
::
appendHelper
(
$m
,
'RepeatedMessage'
,
new
Sub
());
$m
->
getRepeatedMessage
()[
0
]
->
setA
(
34
);
...
...
@@ -104,7 +104,7 @@ class TestUtil
self
::
appendHelper
(
$m
,
'RepeatedDouble'
,
2.6
);
self
::
appendHelper
(
$m
,
'RepeatedBool'
,
false
);
self
::
appendHelper
(
$m
,
'RepeatedString'
,
'c'
);
self
::
appendHelper
(
$m
,
'RepeatedBytes'
,
'd'
);
self
::
appendHelper
(
$m
,
'RepeatedBytes'
,
'd
ddd
'
);
self
::
appendHelper
(
$m
,
'RepeatedEnum'
,
TestEnum
::
ONE
);
self
::
appendHelper
(
$m
,
'RepeatedMessage'
,
new
Sub
());
$m
->
getRepeatedMessage
()[
1
]
->
SetA
(
35
);
...
...
@@ -123,7 +123,7 @@ class TestUtil
self
::
kvUpdateHelper
(
$m
,
'MapInt32Double'
,
1
,
3.6
);
self
::
kvUpdateHelper
(
$m
,
'MapBoolBool'
,
true
,
true
);
self
::
kvUpdateHelper
(
$m
,
'MapStringString'
,
'e'
,
'e'
);
self
::
kvUpdateHelper
(
$m
,
'MapInt32Bytes'
,
1
,
'f'
);
self
::
kvUpdateHelper
(
$m
,
'MapInt32Bytes'
,
1
,
'f
fff
'
);
self
::
kvUpdateHelper
(
$m
,
'MapInt32Enum'
,
1
,
TestEnum
::
ONE
);
self
::
kvUpdateHelper
(
$m
,
'MapInt32Message'
,
1
,
new
Sub
());
$m
->
getMapInt32Message
()[
1
]
->
SetA
(
36
);
...
...
@@ -234,7 +234,7 @@ class TestUtil
assert
(
1.6
===
$m
->
getOptionalDouble
());
assert
(
true
===
$m
->
getOptionalBool
());
assert
(
'a'
===
$m
->
getOptionalString
());
assert
(
'b'
===
$m
->
getOptionalBytes
());
assert
(
'b
bbb
'
===
$m
->
getOptionalBytes
());
assert
(
TestEnum
::
ONE
===
$m
->
getOptionalEnum
());
assert
(
33
===
$m
->
getOptionalMessage
()
->
getA
());
...
...
@@ -260,7 +260,7 @@ class TestUtil
assert
(
1.6
===
$m
->
getRepeatedDouble
()[
0
]);
assert
(
true
===
$m
->
getRepeatedBool
()[
0
]);
assert
(
'a'
===
$m
->
getRepeatedString
()[
0
]);
assert
(
'b'
===
$m
->
getRepeatedBytes
()[
0
]);
assert
(
'b
bbb
'
===
$m
->
getRepeatedBytes
()[
0
]);
assert
(
TestEnum
::
ZERO
===
$m
->
getRepeatedEnum
()[
0
]);
assert
(
34
===
$m
->
getRepeatedMessage
()[
0
]
->
getA
());
...
...
@@ -286,7 +286,7 @@ class TestUtil
assert
(
2.6
===
$m
->
getRepeatedDouble
()[
1
]);
assert
(
false
===
$m
->
getRepeatedBool
()[
1
]);
assert
(
'c'
===
$m
->
getRepeatedString
()[
1
]);
assert
(
'd'
===
$m
->
getRepeatedBytes
()[
1
]);
assert
(
'd
ddd
'
===
$m
->
getRepeatedBytes
()[
1
]);
assert
(
TestEnum
::
ONE
===
$m
->
getRepeatedEnum
()[
1
]);
assert
(
35
===
$m
->
getRepeatedMessage
()[
1
]
->
getA
());
...
...
@@ -312,7 +312,7 @@ class TestUtil
assert
(
3.6
===
$m
->
getMapInt32Double
()[
1
]);
assert
(
true
===
$m
->
getMapBoolBool
()[
true
]);
assert
(
'e'
===
$m
->
getMapStringString
()[
'e'
]);
assert
(
'f'
===
$m
->
getMapInt32Bytes
()[
1
]);
assert
(
'f
fff
'
===
$m
->
getMapInt32Bytes
()[
1
]);
assert
(
TestEnum
::
ONE
===
$m
->
getMapInt32Enum
()[
1
]);
assert
(
36
===
$m
->
getMapInt32Message
()[
1
]
->
GetA
());
}
...
...
@@ -334,7 +334,7 @@ class TestUtil
"619A9999999999F93F"
.
"6801"
.
"720161"
.
"7A0
1
62"
.
"7A0
4626262
62"
.
"800101"
.
"8A01020821"
.
...
...
@@ -366,8 +366,8 @@ class TestUtil
"D80200"
.
"E2020161"
.
"E2020163"
.
"EA020
1
62"
.
"EA020
1
64"
.
"EA020
4626262
62"
.
"EA020
4646464
64"
.
"F00200"
.
"F00201"
.
"FA02020822"
.
...
...
@@ -387,7 +387,7 @@ class TestUtil
"92050B080111CDCCCCCCCCCC0C40"
.
"9A050408011001"
.
"A205060a0165120165"
.
"AA050
508011201
66"
.
"AA050
808011204666666
66"
.
"B2050408011001"
.
"Ba0506080112020824"
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment