aboutsummaryrefslogtreecommitdiffstats
path: root/php/tests
diff options
context:
space:
mode:
authorPaul Yang <TeBoring@users.noreply.github.com>2019-01-23 12:44:20 -0800
committerGitHub <noreply@github.com>2019-01-23 12:44:20 -0800
commitd750fbf648256c7c631f51ffdbf67d7c18b0114e (patch)
treee9c2bab5239d05edf170b23cc96e9bc238395f17 /php/tests
parent30851ca2662c5a3e8323432bc660e37345f8fae1 (diff)
downloadplatform_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.php44
-rw-r--r--php/tests/generated_class_test.php103
-rw-r--r--php/tests/map_field_test.php37
-rw-r--r--php/tests/proto/test.proto1
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;