diff options
| author | Paul Yang <TeBoring@users.noreply.github.com> | 2019-01-23 12:44:20 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-01-23 12:44:20 -0800 |
| commit | d750fbf648256c7c631f51ffdbf67d7c18b0114e (patch) | |
| tree | e9c2bab5239d05edf170b23cc96e9bc238395f17 /php/tests | |
| parent | 30851ca2662c5a3e8323432bc660e37345f8fae1 (diff) | |
| download | platform_external_protobuf-d750fbf648256c7c631f51ffdbf67d7c18b0114e.tar.gz platform_external_protobuf-d750fbf648256c7c631f51ffdbf67d7c18b0114e.tar.bz2 platform_external_protobuf-d750fbf648256c7c631f51ffdbf67d7c18b0114e.zip | |
Fix more issues for reference values (#5613)
* Fix more issues for reference values
* Revert change in gdb test
* Add more tests
Diffstat (limited to 'php/tests')
| -rw-r--r-- | php/tests/array_test.php | 44 | ||||
| -rw-r--r-- | php/tests/generated_class_test.php | 103 | ||||
| -rw-r--r-- | php/tests/map_field_test.php | 37 | ||||
| -rw-r--r-- | php/tests/proto/test.proto | 1 |
4 files changed, 166 insertions, 19 deletions
diff --git a/php/tests/array_test.php b/php/tests/array_test.php index d47a10776..b25140408 100644 --- a/php/tests/array_test.php +++ b/php/tests/array_test.php @@ -533,31 +533,39 @@ class RepeatedFieldTest extends \PHPUnit\Framework\TestCase # Test reference in array ######################################################### - public function testArrayElementIsReference() + public function testArrayElementIsReferenceInSetters() { + // Bool elements + $values = [true]; + array_walk($values, function (&$value) {}); $m = new TestMessage(); - $subs = [1, 2]; - - foreach ($subs as &$sub) { - $sub = new Sub(['a' => $sub]); - } + $m->setRepeatedBool($values); - $m->setRepeatedMessage($subs); - } + // Int32 elements + $values = [1]; + array_walk($values, function (&$value) {}); + $m = new TestMessage(); + $m->setRepeatedInt32($values); - public function testArrayIsReference() - { - $keys = [['repeated_message' => [['a' => 1]]]]; + // Double elements + $values = [1.0]; + array_walk($values, function (&$value) {}); + $m = new TestMessage(); + $m->setRepeatedDouble($values); - foreach ($keys as &$key) { - foreach ($key['repeated_message'] as &$element) { - $element = new Sub($element); - } - $key = new TestMessage($key); - } + // String elements + $values = ['a']; + array_walk($values, function (&$value) {}); + $m = new TestMessage(); + $m->setRepeatedString($values); + // Message elements $m = new TestMessage(); - $m->setRepeatedDeep($keys); + $subs = [1, 2]; + foreach ($subs as &$sub) { + $sub = new Sub(['a' => $sub]); + } + $m->setRepeatedMessage($subs); } ######################################################### diff --git a/php/tests/generated_class_test.php b/php/tests/generated_class_test.php index 83deaba16..93b7b29bb 100644 --- a/php/tests/generated_class_test.php +++ b/php/tests/generated_class_test.php @@ -1375,6 +1375,78 @@ class GeneratedClassTest extends TestBase $this->assertTrue(true); } + public function testReferenceInArrayConstructor() + { + $keys = [[ + 'optional_bool' => true, + 'repeated_bool' => [true], + 'map_bool_bool' => [true => true], + 'optional_double' => 1.0, + 'repeated_double' => [1.0], + 'map_int32_double' => [1 => 1.0], + 'optional_int32' => 1, + 'repeated_int32' => [1], + 'map_int32_int32' => [1 => 1], + 'optional_string' => 'a', + 'repeated_string' => ['a'], + 'map_string_string' => ['a' => 'a'], + 'optional_message' => ['a' => 1], + 'repeated_message' => [['a' => 1]], + 'map_int32_message' => [1 => ['a' => 1]], + ]]; + + foreach ($keys as &$key) { + foreach ($key as $id => &$value) { + if ($id === 'repeated_bool') { + foreach ($value as &$element) { + } + } + if ($id === 'map_bool_bool') { + foreach ($value as $mapKey => &$element) { + } + } + if ($id === 'repeated_double') { + foreach ($value as &$element) { + } + } + if ($id === 'map_int32_double') { + foreach ($value as $mapKey => &$element) { + } + } + if ($id === 'repeated_int32') { + foreach ($value as &$element) { + } + } + if ($id === 'map_int32_int32') { + foreach ($value as $mapKey => &$element) { + } + } + if ($id === 'repeated_string') { + foreach ($value as &$element) { + } + } + if ($id === 'map_string_string') { + foreach ($value as $mapKey => &$element) { + } + } + if ($id === 'optional_message') { + $value = new Sub($value); + } + if ($id === 'repeated_message') { + foreach ($value as &$element) { + $element = new Sub($element); + } + } + if ($id === 'map_int32_message') { + foreach ($value as $mapKey => &$element) { + $element = new Sub($element); + } + } + } + $key = new TestMessage($key); + } + } + ######################################################### # Test message equals. ######################################################### @@ -1387,4 +1459,35 @@ class GeneratedClassTest extends TestBase TestUtil::setTestMessage($n); $this->assertEquals($m, $n); } + + ######################################################### + # Test reference of value + ######################################################### + + public function testValueIsReference() + { + // Bool element + $values = [true]; + array_walk($values, function (&$value) {}); + $m = new TestMessage(); + $m->setOptionalBool($values[0]); + + // Int32 element + $values = [1]; + array_walk($values, function (&$value) {}); + $m = new TestMessage(); + $m->setOptionalInt32($values[0]); + + // Double element + $values = [1.0]; + array_walk($values, function (&$value) {}); + $m = new TestMessage(); + $m->setOptionalDouble($values[0]); + + // String element + $values = ['a']; + array_walk($values, function (&$value) {}); + $m = new TestMessage(); + $m->setOptionalString($values[0]); + } } diff --git a/php/tests/map_field_test.php b/php/tests/map_field_test.php index 026087932..577be681b 100644 --- a/php/tests/map_field_test.php +++ b/php/tests/map_field_test.php @@ -443,6 +443,43 @@ class MapFieldTest extends \PHPUnit\Framework\TestCase { } ######################################################### + # Test reference in map + ######################################################### + + public function testMapElementIsReference() + { + // Bool elements + $values = [true => true]; + array_walk($values, function (&$value) {}); + $m = new TestMessage(); + $m->setMapBoolBool($values); + + // Int32 elements + $values = [1 => 1]; + array_walk($values, function (&$value) {}); + $m = new TestMessage(); + $m->setMapInt32Int32($values); + + // Double elements + $values = [1 => 1.0]; + array_walk($values, function (&$value) {}); + $m = new TestMessage(); + $m->setMapInt32Double($values); + + // String elements + $values = ['a' => 'a']; + array_walk($values, function (&$value) {}); + $m = new TestMessage(); + $m->setMapStringString($values); + + // Message elements + $values = [1 => new Sub()]; + array_walk($values, function (&$value) {}); + $m = new TestMessage(); + $m->setMapInt32Message($values); + } + + ######################################################### # Test memory leak ######################################################### diff --git a/php/tests/proto/test.proto b/php/tests/proto/test.proto index ca39ea46a..e610c581b 100644 --- a/php/tests/proto/test.proto +++ b/php/tests/proto/test.proto @@ -31,7 +31,6 @@ message TestMessage { Sub optional_message = 17; bar.TestInclude optional_included_message = 18; TestMessage recursive = 19; - repeated TestMessage repeated_deep = 20; // Repeated repeated int32 repeated_int32 = 31; |
