encode_decode_test.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445
  1. <?php
  2. require_once('test_base.php');
  3. require_once('test_util.php');
  4. use Google\Protobuf\RepeatedField;
  5. use Google\Protobuf\GPBType;
  6. use Foo\TestEnum;
  7. use Foo\TestMessage;
  8. use Foo\TestMessage_Sub;
  9. use Foo\TestPackedMessage;
  10. use Foo\TestUnpackedMessage;
  11. class EncodeDecodeTest extends TestBase
  12. {
  13. # public function testEncode()
  14. # {
  15. # $from = new TestMessage();
  16. # $this->expectEmptyFields($from);
  17. # $this->setFields($from);
  18. # $this->expectFields($from);
  19. #
  20. # $data = $from->serializeToString();
  21. # $this->assertSame(bin2hex(TestUtil::getGoldenTestMessage()),
  22. # bin2hex($data));
  23. # }
  24. #
  25. # public function testDecode()
  26. # {
  27. # $to = new TestMessage();
  28. # $to->mergeFromString(TestUtil::getGoldenTestMessage());
  29. # $this->expectFields($to);
  30. # }
  31. #
  32. # public function testEncodeDecode()
  33. # {
  34. # $from = new TestMessage();
  35. # $this->expectEmptyFields($from);
  36. # $this->setFields($from);
  37. # $this->expectFields($from);
  38. #
  39. # $data = $from->serializeToString();
  40. #
  41. # $to = new TestMessage();
  42. # $to->mergeFromString($data);
  43. # $this->expectFields($to);
  44. # }
  45. #
  46. # public function testEncodeDecodeEmpty()
  47. # {
  48. # $from = new TestMessage();
  49. # $this->expectEmptyFields($from);
  50. #
  51. # $data = $from->serializeToString();
  52. #
  53. # $to = new TestMessage();
  54. # $to->mergeFromString($data);
  55. # $this->expectEmptyFields($to);
  56. # }
  57. public function testEncodeDecodeOneof()
  58. {
  59. $m = new TestMessage();
  60. # $m->setOneofInt32(1);
  61. # $data = $m->serializeToString();
  62. # $n = new TestMessage();
  63. # $n->mergeFromString($data);
  64. # $this->assertSame(1, $n->getOneofInt32());
  65. #
  66. # $m->setOneofFloat(2.0);
  67. # $data = $m->serializeToString();
  68. # $n = new TestMessage();
  69. # $n->mergeFromString($data);
  70. # $this->assertSame(2.0, $n->getOneofFloat());
  71. #
  72. # $m->setOneofString('abc');
  73. # $data = $m->serializeToString();
  74. # $n = new TestMessage();
  75. # $n->mergeFromString($data);
  76. # $this->assertSame('abc', $n->getOneofString());
  77. #
  78. # $sub_m = new TestMessage_Sub();
  79. # $sub_m->setA(1);
  80. # $m->setOneofMessage($sub_m);
  81. # $data = $m->serializeToString();
  82. # $n = new TestMessage();
  83. # $n->mergeFromString($data);
  84. # $this->assertSame(1, $n->getOneofMessage()->getA());
  85. // Encode default value
  86. # $m->setOneofEnum(TestEnum::ZERO);
  87. # $data = $m->serializeToString();
  88. # $n = new TestMessage();
  89. # $n->mergeFromString($data);
  90. # $this->assertSame("oneof_enum", $n->getMyOneof());
  91. # $this->assertSame(TestEnum::ZERO, $n->getOneofEnum());
  92. $m->setOneofString("");
  93. $data = $m->serializeToString();
  94. $n = new TestMessage();
  95. $n->mergeFromString($data);
  96. $this->assertSame("oneof_string", $n->getMyOneof());
  97. $this->assertSame("", $n->getOneofString());
  98. # $sub_m = new TestMessage_Sub();
  99. # $m->setOneofMessage($sub_m);
  100. # $data = $m->serializeToString();
  101. # $n = new TestMessage();
  102. # $n->mergeFromString($data);
  103. # $this->assertSame("oneof_message", $n->getMyOneof());
  104. # $this->assertFalse(is_null($n->getOneofMessage()));
  105. }
  106. # public function testPackedEncode()
  107. # {
  108. # $from = new TestPackedMessage();
  109. # TestUtil::setTestPackedMessage($from);
  110. # $this->assertSame(TestUtil::getGoldenTestPackedMessage(),
  111. # $from->serializeToString());
  112. # }
  113. #
  114. # public function testPackedDecodePacked()
  115. # {
  116. # $to = new TestPackedMessage();
  117. # $to->mergeFromString(TestUtil::getGoldenTestPackedMessage());
  118. # TestUtil::assertTestPackedMessage($to);
  119. # }
  120. #
  121. # public function testPackedDecodeUnpacked()
  122. # {
  123. # $to = new TestPackedMessage();
  124. # $to->mergeFromString(TestUtil::getGoldenTestUnpackedMessage());
  125. # TestUtil::assertTestPackedMessage($to);
  126. # }
  127. #
  128. # public function testUnpackedEncode()
  129. # {
  130. # $from = new TestUnpackedMessage();
  131. # TestUtil::setTestPackedMessage($from);
  132. # $this->assertSame(TestUtil::getGoldenTestUnpackedMessage(),
  133. # $from->serializeToString());
  134. # }
  135. #
  136. # public function testUnpackedDecodePacked()
  137. # {
  138. # $to = new TestUnpackedMessage();
  139. # $to->mergeFromString(TestUtil::getGoldenTestPackedMessage());
  140. # TestUtil::assertTestPackedMessage($to);
  141. # }
  142. #
  143. # public function testUnpackedDecodeUnpacked()
  144. # {
  145. # $to = new TestUnpackedMessage();
  146. # $to->mergeFromString(TestUtil::getGoldenTestUnpackedMessage());
  147. # TestUtil::assertTestPackedMessage($to);
  148. # }
  149. #
  150. # public function testDecodeInt64()
  151. # {
  152. # // Read 64 testing
  153. # $testVals = array(
  154. # '10' => '100a',
  155. # '100' => '1064',
  156. # '800' => '10a006',
  157. # '6400' => '108032',
  158. # '70400' => '1080a604',
  159. # '774400' => '1080a22f',
  160. # '9292800' => '108098b704',
  161. # '74342400' => '1080c0b923',
  162. # '743424000' => '108080bfe202',
  163. # '8177664000' => '108080b5bb1e',
  164. # '65421312000' => '108080a8dbf301',
  165. # '785055744000' => '108080e0c7ec16',
  166. # '9420668928000' => '10808080dd969202',
  167. # '103627358208000' => '10808080fff9c717',
  168. # '1139900940288000' => '10808080f5bd978302',
  169. # '13678811283456000' => '10808080fce699a618',
  170. # '109430490267648000' => '10808080e0b7ceb1c201',
  171. # '984874412408832000' => '10808080e0f5c1bed50d',
  172. # );
  173. #
  174. # $msg = new TestMessage();
  175. # foreach ($testVals as $original => $encoded) {
  176. # $msg->setOptionalInt64($original);
  177. # $data = $msg->serializeToString();
  178. # $this->assertSame($encoded, bin2hex($data));
  179. # $msg->setOptionalInt64(0);
  180. # $msg->mergeFromString($data);
  181. # $this->assertEquals($original, $msg->getOptionalInt64());
  182. # }
  183. # }
  184. #
  185. # public function testDecodeToExistingMessage()
  186. # {
  187. # $m1 = new TestMessage();
  188. # $this->setFields($m1);
  189. # $this->expectFields($m1);
  190. #
  191. # $m2 = new TestMessage();
  192. # $this->setFields2($m2);
  193. # $data = $m2->serializeToString();
  194. #
  195. # $m1->mergeFromString($data);
  196. # $this->expectFieldsMerged($m1);
  197. # }
  198. #
  199. # public function testDecodeFieldNonExist()
  200. # {
  201. # $data = hex2bin('c80501');
  202. # $m = new TestMessage();
  203. # $m->mergeFromString($data);
  204. # }
  205. #
  206. # public function testEncodeNegativeInt32()
  207. # {
  208. # $m = new TestMessage();
  209. # $m->setOptionalInt32(-1);
  210. # $data = $m->serializeToString();
  211. # $this->assertSame("08ffffffffffffffffff01", bin2hex($data));
  212. # }
  213. #
  214. # public function testDecodeNegativeInt32()
  215. # {
  216. # $m = new TestMessage();
  217. # $this->assertEquals(0, $m->getOptionalInt32());
  218. # $m->mergeFromString(hex2bin("08ffffffffffffffffff01"));
  219. # $this->assertEquals(-1, $m->getOptionalInt32());
  220. #
  221. # $m = new TestMessage();
  222. # $this->assertEquals(0, $m->getOptionalInt32());
  223. # $m->mergeFromString(hex2bin("08ffffffff0f"));
  224. # $this->assertEquals(-1, $m->getOptionalInt32());
  225. # }
  226. #
  227. # /**
  228. # * @expectedException Exception
  229. # */
  230. # public function testDecodeInvalidInt32()
  231. # {
  232. # $m = new TestMessage();
  233. # $m->mergeFromString(hex2bin('08'));
  234. # }
  235. #
  236. # /**
  237. # * @expectedException Exception
  238. # */
  239. # public function testDecodeInvalidSubMessage()
  240. # {
  241. # $m = new TestMessage();
  242. # $m->mergeFromString(hex2bin('9A010108'));
  243. # }
  244. #
  245. # /**
  246. # * @expectedException Exception
  247. # */
  248. # public function testDecodeInvalidInt64()
  249. # {
  250. # $m = new TestMessage();
  251. # $m->mergeFromString(hex2bin('10'));
  252. # }
  253. #
  254. # /**
  255. # * @expectedException Exception
  256. # */
  257. # public function testDecodeInvalidUInt32()
  258. # {
  259. # $m = new TestMessage();
  260. # $m->mergeFromString(hex2bin('18'));
  261. # }
  262. #
  263. # /**
  264. # * @expectedException Exception
  265. # */
  266. # public function testDecodeInvalidUInt64()
  267. # {
  268. # $m = new TestMessage();
  269. # $m->mergeFromString(hex2bin('20'));
  270. # }
  271. #
  272. # /**
  273. # * @expectedException Exception
  274. # */
  275. # public function testDecodeInvalidSInt32()
  276. # {
  277. # $m = new TestMessage();
  278. # $m->mergeFromString(hex2bin('28'));
  279. # }
  280. #
  281. # /**
  282. # * @expectedException Exception
  283. # */
  284. # public function testDecodeInvalidSInt64()
  285. # {
  286. # $m = new TestMessage();
  287. # $m->mergeFromString(hex2bin('30'));
  288. # }
  289. #
  290. # /**
  291. # * @expectedException Exception
  292. # */
  293. # public function testDecodeInvalidFixed32()
  294. # {
  295. # $m = new TestMessage();
  296. # $m->mergeFromString(hex2bin('3D'));
  297. # }
  298. #
  299. # /**
  300. # * @expectedException Exception
  301. # */
  302. # public function testDecodeInvalidFixed64()
  303. # {
  304. # $m = new TestMessage();
  305. # $m->mergeFromString(hex2bin('41'));
  306. # }
  307. #
  308. # /**
  309. # * @expectedException Exception
  310. # */
  311. # public function testDecodeInvalidSFixed32()
  312. # {
  313. # $m = new TestMessage();
  314. # $m->mergeFromString(hex2bin('4D'));
  315. # }
  316. #
  317. # /**
  318. # * @expectedException Exception
  319. # */
  320. # public function testDecodeInvalidSFixed64()
  321. # {
  322. # $m = new TestMessage();
  323. # $m->mergeFromString(hex2bin('51'));
  324. # }
  325. #
  326. # /**
  327. # * @expectedException Exception
  328. # */
  329. # public function testDecodeInvalidFloat()
  330. # {
  331. # $m = new TestMessage();
  332. # $m->mergeFromString(hex2bin('5D'));
  333. # }
  334. #
  335. # /**
  336. # * @expectedException Exception
  337. # */
  338. # public function testDecodeInvalidDouble()
  339. # {
  340. # $m = new TestMessage();
  341. # $m->mergeFromString(hex2bin('61'));
  342. # }
  343. #
  344. # /**
  345. # * @expectedException Exception
  346. # */
  347. # public function testDecodeInvalidBool()
  348. # {
  349. # $m = new TestMessage();
  350. # $m->mergeFromString(hex2bin('68'));
  351. # }
  352. #
  353. # /**
  354. # * @expectedException Exception
  355. # */
  356. # public function testDecodeInvalidStringLengthMiss()
  357. # {
  358. # $m = new TestMessage();
  359. # $m->mergeFromString(hex2bin('72'));
  360. # }
  361. #
  362. # /**
  363. # * @expectedException Exception
  364. # */
  365. # public function testDecodeInvalidStringDataMiss()
  366. # {
  367. # $m = new TestMessage();
  368. # $m->mergeFromString(hex2bin('7201'));
  369. # }
  370. #
  371. # /**
  372. # * @expectedException Exception
  373. # */
  374. # public function testDecodeInvalidBytesLengthMiss()
  375. # {
  376. # $m = new TestMessage();
  377. # $m->mergeFromString(hex2bin('7A'));
  378. # }
  379. #
  380. # /**
  381. # * @expectedException Exception
  382. # */
  383. # public function testDecodeInvalidBytesDataMiss()
  384. # {
  385. # $m = new TestMessage();
  386. # $m->mergeFromString(hex2bin('7A01'));
  387. # }
  388. #
  389. # /**
  390. # * @expectedException Exception
  391. # */
  392. # public function testDecodeInvalidEnum()
  393. # {
  394. # $m = new TestMessage();
  395. # $m->mergeFromString(hex2bin('8001'));
  396. # }
  397. #
  398. # /**
  399. # * @expectedException Exception
  400. # */
  401. # public function testDecodeInvalidMessageLengthMiss()
  402. # {
  403. # $m = new TestMessage();
  404. # $m->mergeFromString(hex2bin('8A01'));
  405. # }
  406. #
  407. # /**
  408. # * @expectedException Exception
  409. # */
  410. # public function testDecodeInvalidMessageDataMiss()
  411. # {
  412. # $m = new TestMessage();
  413. # $m->mergeFromString(hex2bin('8A0101'));
  414. # }
  415. #
  416. # /**
  417. # * @expectedException Exception
  418. # */
  419. # public function testDecodeInvalidPackedMessageLength()
  420. # {
  421. # $m = new TestPackedMessage();
  422. # $m->mergeFromString(hex2bin('D205'));
  423. # }
  424. #
  425. # public function testJsonEncode()
  426. # {
  427. # $from = new TestMessage();
  428. # $this->setFields($from);
  429. # $data = $from->serializeToJsonString();
  430. # $to = new TestMessage();
  431. # $to->mergeFromJsonString($data);
  432. # $this->expectFields($to);
  433. # }
  434. }