memory_leak_test.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <?php
  2. # phpunit has memory leak by itself. Thus, it cannot be used to test memory leak.
  3. require_once('generated/NoNamespaceEnum.php');
  4. require_once('generated/NoNamespaceMessage.php');
  5. require_once('generated/NoNamespaceMessage_NestedEnum.php');
  6. require_once('generated/PrefixEmpty.php');
  7. require_once('generated/PrefixTestPrefix.php');
  8. require_once('generated/TestEmptyNamespace.php');
  9. require_once('generated/Bar/TestInclude.php');
  10. require_once('generated/Foo/PBARRAY.php');
  11. require_once('generated/Foo/PBEmpty.php');
  12. require_once('generated/Foo/TestEnum.php');
  13. require_once('generated/Foo/TestIncludeNamespaceMessage.php');
  14. require_once('generated/Foo/TestIncludePrefixMessage.php');
  15. require_once('generated/Foo/TestMessage.php');
  16. require_once('generated/Foo/TestMessage_Empty.php');
  17. require_once('generated/Foo/TestMessage_NestedEnum.php');
  18. require_once('generated/Foo/TestMessage_Sub.php');
  19. require_once('generated/Foo/TestPackedMessage.php');
  20. require_once('generated/Foo/TestPhpDoc.php');
  21. require_once('generated/Foo/TestRandomFieldOrder.php');
  22. require_once('generated/Foo/TestReverseFieldOrder.php');
  23. require_once('generated/Foo/TestUnpackedMessage.php');
  24. require_once('generated/Foo/testLowerCaseMessage.php');
  25. require_once('generated/Foo/testLowerCaseEnum.php');
  26. require_once('generated/GPBMetadata/Proto/Test.php');
  27. require_once('generated/GPBMetadata/Proto/TestEmptyPhpNamespace.php');
  28. require_once('generated/GPBMetadata/Proto/TestInclude.php');
  29. require_once('generated/GPBMetadata/Proto/TestNoNamespace.php');
  30. require_once('generated/GPBMetadata/Proto/TestPhpNamespace.php');
  31. require_once('generated/GPBMetadata/Proto/TestPrefix.php');
  32. require_once('generated/Php/Test/TestNamespace.php');
  33. require_once('test_util.php');
  34. use Google\Protobuf\Internal\RepeatedField;
  35. use Google\Protobuf\Internal\GPBType;
  36. use Foo\TestMessage;
  37. use Foo\TestMessage_Sub;
  38. $from = new TestMessage();
  39. TestUtil::setTestMessage($from);
  40. TestUtil::assertTestMessage($from);
  41. $data = $from->serializeToString();
  42. $to = new TestMessage();
  43. $to->mergeFromString($data);
  44. TestUtil::assertTestMessage($to);
  45. // TODO(teboring): This causes following tests fail in php7.
  46. # $from->setRecursive($from);
  47. $arr = new RepeatedField(GPBType::MESSAGE, TestMessage::class);
  48. $arr[] = new TestMessage;
  49. $arr[0]->SetRepeatedRecursive($arr);
  50. // Test oneof fields.
  51. $m = new TestMessage();
  52. $m->setOneofInt32(1);
  53. assert(1 === $m->getOneofInt32());
  54. assert(0.0 === $m->getOneofFloat());
  55. assert('' === $m->getOneofString());
  56. assert(NULL === $m->getOneofMessage());
  57. $data = $m->serializeToString();
  58. $n = new TestMessage();
  59. $n->mergeFromString($data);
  60. assert(1 === $n->getOneofInt32());
  61. $m->setOneofFloat(2.0);
  62. assert(0 === $m->getOneofInt32());
  63. assert(2.0 === $m->getOneofFloat());
  64. assert('' === $m->getOneofString());
  65. assert(NULL === $m->getOneofMessage());
  66. $data = $m->serializeToString();
  67. $n = new TestMessage();
  68. $n->mergeFromString($data);
  69. assert(2.0 === $n->getOneofFloat());
  70. $m->setOneofString('abc');
  71. assert(0 === $m->getOneofInt32());
  72. assert(0.0 === $m->getOneofFloat());
  73. assert('abc' === $m->getOneofString());
  74. assert(NULL === $m->getOneofMessage());
  75. $data = $m->serializeToString();
  76. $n = new TestMessage();
  77. $n->mergeFromString($data);
  78. assert('abc' === $n->getOneofString());
  79. $sub_m = new TestMessage_Sub();
  80. $sub_m->setA(1);
  81. $m->setOneofMessage($sub_m);
  82. assert(0 === $m->getOneofInt32());
  83. assert(0.0 === $m->getOneofFloat());
  84. assert('' === $m->getOneofString());
  85. assert(1 === $m->getOneofMessage()->getA());
  86. $data = $m->serializeToString();
  87. $n = new TestMessage();
  88. $n->mergeFromString($data);
  89. assert(1 === $n->getOneofMessage()->getA());
  90. $m = new TestMessage();
  91. $m->mergeFromString(hex2bin('F80601'));
  92. assert('F80601', bin2hex($m->serializeToString()));
  93. // Test create repeated field via array.
  94. $str_arr = array("abc");
  95. $m = new TestMessage();
  96. $m->setRepeatedString($str_arr);
  97. // Test create map field via array.
  98. $str_arr = array("abc"=>"abc");
  99. $m = new TestMessage();
  100. $m->setMapStringString($str_arr);
  101. // Test unset
  102. $from = new TestMessage();
  103. TestUtil::setTestMessage($from);
  104. unset($from);
  105. // Test wellknown
  106. $from = new \Google\Protobuf\Timestamp();
  107. $from->setSeconds(1);
  108. assert(1, $from->getSeconds());
  109. $timestamp = new \Google\Protobuf\Timestamp();
  110. date_default_timezone_set('UTC');
  111. $from = new DateTime('2011-01-01T15:03:01.012345UTC');
  112. $timestamp->fromDateTime($from);
  113. assert($from->format('U') == $timestamp->getSeconds());
  114. assert(0 == $timestamp->getNanos());
  115. $to = $timestamp->toDateTime();
  116. assert(\DateTime::class == get_class($to));
  117. assert($from->format('U') == $to->format('U'));
  118. $from = new \Google\Protobuf\Value();
  119. $from->setNumberValue(1);
  120. assert(1, $from->getNumberValue());
  121. // Test descriptor
  122. $pool = \Google\Protobuf\DescriptorPool::getGeneratedPool();
  123. $desc = $pool->getDescriptorByClassName("\Foo\TestMessage");
  124. $field = $desc->getField(1);
  125. # $from = new TestMessage();
  126. # $to = new TestMessage();
  127. # TestUtil::setTestMessage($from);
  128. # $to->mergeFrom($from);
  129. # TestUtil::assertTestMessage($to);