1<?php 2 3# phpunit has memory leak by itself. Thus, it cannot be used to test memory leak. 4 5require_once('generated/NoNamespaceEnum.php'); 6require_once('generated/NoNamespaceMessage.php'); 7require_once('generated/NoNamespaceMessage/NestedEnum.php'); 8require_once('generated/NoNamespaceMessage/NestedMessage.php'); 9require_once('generated/PrefixEmpty.php'); 10require_once('generated/PrefixTestPrefix.php'); 11require_once('generated/PrefixTestPrefix/PrefixNestedEnum.php'); 12require_once('generated/PrefixTestPrefix/PrefixNestedMessage.php'); 13require_once('generated/TestEmptyNamespace.php'); 14require_once('generated/TestEmptyNamespace/NestedEnum.php'); 15require_once('generated/TestEmptyNamespace/NestedMessage.php'); 16require_once('generated/Bar/TestInclude.php'); 17require_once('generated/Bar/TestLegacyMessage.php'); 18require_once('generated/Bar/TestLegacyMessage/NestedEnum.php'); 19require_once('generated/Bar/TestLegacyMessage/NestedMessage.php'); 20require_once('generated/Foo/PBARRAY.php'); 21require_once('generated/Foo/PBEmpty.php'); 22require_once('generated/Foo/TestAny.php'); 23require_once('generated/Foo/TestEnum.php'); 24require_once('generated/Foo/TestIncludeNamespaceMessage.php'); 25require_once('generated/Foo/TestIncludePrefixMessage.php'); 26require_once('generated/Foo/TestMessage.php'); 27require_once('generated/Foo/TestMessage/PBEmpty.php'); 28require_once('generated/Foo/TestMessage/NestedEnum.php'); 29require_once('generated/Foo/TestMessage/Sub.php'); 30require_once('generated/Foo/TestPackedMessage.php'); 31require_once('generated/Foo/TestPhpDoc.php'); 32require_once('generated/Foo/TestRandomFieldOrder.php'); 33require_once('generated/Foo/TestReverseFieldOrder.php'); 34require_once('generated/Foo/TestUnpackedMessage.php'); 35require_once('generated/Foo/testLowerCaseMessage.php'); 36require_once('generated/Foo/testLowerCaseEnum.php'); 37require_once('generated/GPBMetadata/Proto/Test.php'); 38require_once('generated/TestEmptyPhpNamespace.php'); 39require_once('generated/GPBMetadata/Proto/TestInclude.php'); 40require_once('generated/TestNoNamespace.php'); 41require_once('generated/Metadata/Php/Test/TestPhpNamespace.php'); 42require_once('generated/GPBMetadata/Proto/TestPrefix.php'); 43require_once('generated/Php/Test/TestNamespace.php'); 44require_once('generated/Php/Test/TestNamespace/PBEmpty.php'); 45require_once('generated/Php/Test/TestNamespace/PBEmpty/NestedEnum.php'); 46require_once('generated/Php/Test/TestNamespace/PBEmpty/NestedMessage.php'); 47require_once('generated/Php/Test/TestNamespace/NestedEnum.php'); 48require_once('generated/Php/Test/TestNamespace/NestedMessage.php'); 49require_once('test_util.php'); 50 51use Google\Protobuf\Internal\RepeatedField; 52use Google\Protobuf\Internal\GPBType; 53use Foo\TestAny; 54use Foo\TestMessage; 55use Foo\TestMessage\Sub; 56 57$from = new TestMessage(); 58TestUtil::setTestMessage($from); 59TestUtil::assertTestMessage($from); 60 61$data = $from->serializeToString(); 62 63$to = new TestMessage(); 64$to->mergeFromString($data); 65 66TestUtil::assertTestMessage($to); 67 68$from = new TestMessage(); 69TestUtil::setTestMessage2($from); 70 71$data = $from->serializeToString(); 72 73$to->mergeFromString($data); 74 75// TODO(teboring): This causes following tests fail in php7. 76# $from->setRecursive($from); 77 78$arr = new RepeatedField(GPBType::MESSAGE, TestMessage::class); 79$arr[] = new TestMessage; 80$arr[0]->SetRepeatedRecursive($arr); 81 82// Test oneof fields. 83$m = new TestMessage(); 84 85$m->setOneofInt32(1); 86assert(1 === $m->getOneofInt32()); 87assert(0.0 === $m->getOneofFloat()); 88assert('' === $m->getOneofString()); 89assert(NULL === $m->getOneofMessage()); 90$data = $m->serializeToString(); 91$n = new TestMessage(); 92$n->mergeFromString($data); 93assert(1 === $n->getOneofInt32()); 94 95$m->setOneofFloat(2.0); 96assert(0 === $m->getOneofInt32()); 97assert(2.0 === $m->getOneofFloat()); 98assert('' === $m->getOneofString()); 99assert(NULL === $m->getOneofMessage()); 100$data = $m->serializeToString(); 101$n = new TestMessage(); 102$n->mergeFromString($data); 103assert(2.0 === $n->getOneofFloat()); 104 105$m->setOneofString('abc'); 106assert(0 === $m->getOneofInt32()); 107assert(0.0 === $m->getOneofFloat()); 108assert('abc' === $m->getOneofString()); 109assert(NULL === $m->getOneofMessage()); 110$data = $m->serializeToString(); 111$n = new TestMessage(); 112$n->mergeFromString($data); 113assert('abc' === $n->getOneofString()); 114 115$sub_m = new Sub(); 116$sub_m->setA(1); 117$m->setOneofMessage($sub_m); 118assert(0 === $m->getOneofInt32()); 119assert(0.0 === $m->getOneofFloat()); 120assert('' === $m->getOneofString()); 121assert(1 === $m->getOneofMessage()->getA()); 122$data = $m->serializeToString(); 123$n = new TestMessage(); 124$n->mergeFromString($data); 125assert(1 === $n->getOneofMessage()->getA()); 126 127$m = new TestMessage(); 128$m->mergeFromString(hex2bin('F80601')); 129assert('f80601' === bin2hex($m->serializeToString())); 130 131// Test create repeated field via array. 132$str_arr = array("abc"); 133$m = new TestMessage(); 134$m->setRepeatedString($str_arr); 135 136// Test create map field via array. 137$str_arr = array("abc"=>"abc"); 138$m = new TestMessage(); 139$m->setMapStringString($str_arr); 140 141// Test unset 142$from = new TestMessage(); 143TestUtil::setTestMessage($from); 144unset($from); 145 146// Test wellknown 147$from = new \Google\Protobuf\Timestamp(); 148$from->setSeconds(1); 149assert(1, $from->getSeconds()); 150 151$timestamp = new \Google\Protobuf\Timestamp(); 152 153date_default_timezone_set('UTC'); 154$from = new DateTime('2011-01-01T15:03:01.012345UTC'); 155$timestamp->fromDateTime($from); 156assert($from->format('U') == $timestamp->getSeconds()); 157assert(1000 * $from->format('u') == $timestamp->getNanos()); 158 159$to = $timestamp->toDateTime(); 160assert(\DateTime::class == get_class($to)); 161assert($from->format('U') == $to->format('U')); 162 163$from = new \Google\Protobuf\Value(); 164$from->setNumberValue(1); 165assert(1, $from->getNumberValue()); 166 167// Test discard unknown in message. 168$m = new TestMessage(); 169$from = hex2bin('F80601'); 170$m->mergeFromString($from); 171$m->discardUnknownFields(); 172$to = $m->serializeToString(); 173assert("" === bin2hex($to)); 174 175// Test clear 176$m = new TestMessage(); 177TestUtil::setTestMessage($m); 178$m->clear(); 179 180// Test unset map element 181$m = new TestMessage(); 182$map = $m->getMapStringString(); 183$map[1] = 1; 184unset($map[1]); 185 186// Test descriptor 187$pool = \Google\Protobuf\DescriptorPool::getGeneratedPool(); 188$desc = $pool->getDescriptorByClassName("\Foo\TestMessage"); 189$field = $desc->getField(1); 190 191$from = new TestMessage(); 192$to = new TestMessage(); 193TestUtil::setTestMessage($from); 194$to->mergeFrom($from); 195TestUtil::assertTestMessage($to); 196 197// Test decode Any 198// Make sure packed message has been created at least once. 199$packed = new TestMessage(); 200 201$m = new TestAny(); 202$m->mergeFromJsonString( 203 "{\"any\":" . 204 " {\"@type\":\"type.googleapis.com/foo.TestMessage\"," . 205 " \"optionalInt32\":1}}"); 206assert("type.googleapis.com/foo.TestMessage" === 207 $m->getAny()->getTypeUrl()); 208assert("0801" === bin2hex($m->getAny()->getValue())); 209