generated_class_test.php 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841
  1. <?php
  2. require_once('generated/NoNameSpaceEnum.php');
  3. require_once('generated/NoNameSpaceMessage.php');
  4. require_once('test_base.php');
  5. require_once('test_util.php');
  6. use Google\Protobuf\Internal\RepeatedField;
  7. use Google\Protobuf\Internal\MapField;
  8. use Google\Protobuf\Internal\GPBType;
  9. use Foo\TestEnum;
  10. use Foo\TestMessage;
  11. use Foo\TestMessage_Sub;
  12. class GeneratedClassTest extends TestBase
  13. {
  14. #########################################################
  15. # Test field accessors.
  16. #########################################################
  17. public function testSetterGetter()
  18. {
  19. $m = new TestMessage();
  20. $m->setOptionalInt32(1);
  21. $this->assertSame(1, $m->getOptionalInt32());
  22. }
  23. #########################################################
  24. # Test int32 field.
  25. #########################################################
  26. public function testInt32Field()
  27. {
  28. $m = new TestMessage();
  29. // Set integer.
  30. $m->setOptionalInt32(MAX_INT32);
  31. $this->assertSame(MAX_INT32, $m->getOptionalInt32());
  32. $m->setOptionalInt32(MIN_INT32);
  33. $this->assertSame(MIN_INT32, $m->getOptionalInt32());
  34. // Set float.
  35. $m->setOptionalInt32(1.1);
  36. $this->assertSame(1, $m->getOptionalInt32());
  37. $m->setOptionalInt32(MAX_INT32_FLOAT);
  38. $this->assertSame(MAX_INT32, $m->getOptionalInt32());
  39. $m->setOptionalInt32(MIN_INT32_FLOAT);
  40. $this->assertSame(MIN_INT32, $m->getOptionalInt32());
  41. // Set string.
  42. $m->setOptionalInt32('2');
  43. $this->assertSame(2, $m->getOptionalInt32());
  44. $m->setOptionalInt32('3.1');
  45. $this->assertSame(3, $m->getOptionalInt32());
  46. $m->setOptionalInt32(MAX_INT32_STRING);
  47. $this->assertSame(MAX_INT32, $m->getOptionalInt32());
  48. $m->setOptionalInt32(MIN_INT32_STRING);
  49. $this->assertSame(MIN_INT32, $m->getOptionalInt32());
  50. }
  51. /**
  52. * @expectedException PHPUnit_Framework_Error
  53. */
  54. public function testInt32FieldInvalidTypeFail()
  55. {
  56. $m = new TestMessage();
  57. $m->setOptionalInt32(new TestMessage());
  58. }
  59. /**
  60. * @expectedException PHPUnit_Framework_Error
  61. */
  62. public function testInt32FieldInvalidStringFail()
  63. {
  64. $m = new TestMessage();
  65. $m->setOptionalInt32('abc');
  66. }
  67. #########################################################
  68. # Test uint32 field.
  69. #########################################################
  70. public function testUint32Field()
  71. {
  72. $m = new TestMessage();
  73. // Set integer.
  74. $m->setOptionalUint32(MAX_UINT32);
  75. $this->assertSame(-1, $m->getOptionalUint32());
  76. $m->setOptionalUint32(-1);
  77. $this->assertSame(-1, $m->getOptionalUint32());
  78. $m->setOptionalUint32(MIN_UINT32);
  79. $this->assertSame(MIN_INT32, $m->getOptionalUint32());
  80. // Set float.
  81. $m->setOptionalUint32(1.1);
  82. $this->assertSame(1, $m->getOptionalUint32());
  83. $m->setOptionalUint32(MAX_UINT32_FLOAT);
  84. $this->assertSame(-1, $m->getOptionalUint32());
  85. $m->setOptionalUint32(-1.0);
  86. $this->assertSame(-1, $m->getOptionalUint32());
  87. $m->setOptionalUint32(MIN_UINT32_FLOAT);
  88. $this->assertSame(MIN_INT32, $m->getOptionalUint32());
  89. // Set string.
  90. $m->setOptionalUint32('2');
  91. $this->assertSame(2, $m->getOptionalUint32());
  92. $m->setOptionalUint32('3.1');
  93. $this->assertSame(3, $m->getOptionalUint32());
  94. $m->setOptionalUint32(MAX_UINT32_STRING);
  95. $this->assertSame(-1, $m->getOptionalUint32());
  96. $m->setOptionalUint32('-1.0');
  97. $this->assertSame(-1, $m->getOptionalUint32());
  98. $m->setOptionalUint32(MIN_UINT32_STRING);
  99. $this->assertSame(MIN_INT32, $m->getOptionalUint32());
  100. }
  101. /**
  102. * @expectedException PHPUnit_Framework_Error
  103. */
  104. public function testUint32FieldInvalidTypeFail()
  105. {
  106. $m = new TestMessage();
  107. $m->setOptionalUint32(new TestMessage());
  108. }
  109. /**
  110. * @expectedException PHPUnit_Framework_Error
  111. */
  112. public function testUint32FieldInvalidStringFail()
  113. {
  114. $m = new TestMessage();
  115. $m->setOptionalUint32('abc');
  116. }
  117. #########################################################
  118. # Test int64 field.
  119. #########################################################
  120. public function testInt64Field()
  121. {
  122. $m = new TestMessage();
  123. // Set integer.
  124. $m->setOptionalInt64(MAX_INT64);
  125. $this->assertSame(MAX_INT64, $m->getOptionalInt64());
  126. $m->setOptionalInt64(MIN_INT64);
  127. $this->assertEquals(MIN_INT64, $m->getOptionalInt64());
  128. // Set float.
  129. $m->setOptionalInt64(1.1);
  130. if (PHP_INT_SIZE == 4) {
  131. $this->assertSame('1', $m->getOptionalInt64());
  132. } else {
  133. $this->assertSame(1, $m->getOptionalInt64());
  134. }
  135. // Set string.
  136. $m->setOptionalInt64('2');
  137. if (PHP_INT_SIZE == 4) {
  138. $this->assertSame('2', $m->getOptionalInt64());
  139. } else {
  140. $this->assertSame(2, $m->getOptionalInt64());
  141. }
  142. $m->setOptionalInt64('3.1');
  143. if (PHP_INT_SIZE == 4) {
  144. $this->assertSame('3', $m->getOptionalInt64());
  145. } else {
  146. $this->assertSame(3, $m->getOptionalInt64());
  147. }
  148. $m->setOptionalInt64(MAX_INT64_STRING);
  149. if (PHP_INT_SIZE == 4) {
  150. $this->assertSame(MAX_INT64_STRING, $m->getOptionalInt64());
  151. } else {
  152. $this->assertSame(MAX_INT64, $m->getOptionalInt64());
  153. }
  154. $m->setOptionalInt64(MIN_INT64_STRING);
  155. if (PHP_INT_SIZE == 4) {
  156. $this->assertSame(MIN_INT64_STRING, $m->getOptionalInt64());
  157. } else {
  158. $this->assertSame(MIN_INT64, $m->getOptionalInt64());
  159. }
  160. }
  161. /**
  162. * @expectedException PHPUnit_Framework_Error
  163. */
  164. public function testInt64FieldInvalidTypeFail()
  165. {
  166. $m = new TestMessage();
  167. $m->setOptionalInt64(new TestMessage());
  168. }
  169. /**
  170. * @expectedException PHPUnit_Framework_Error
  171. */
  172. public function testInt64FieldInvalidStringFail()
  173. {
  174. $m = new TestMessage();
  175. $m->setOptionalInt64('abc');
  176. }
  177. #########################################################
  178. # Test uint64 field.
  179. #########################################################
  180. public function testUint64Field()
  181. {
  182. $m = new TestMessage();
  183. // Set integer.
  184. $m->setOptionalUint64(MAX_UINT64);
  185. if (PHP_INT_SIZE == 4) {
  186. $this->assertSame(MAX_UINT64_STRING, $m->getOptionalUint64());
  187. } else {
  188. $this->assertSame(MAX_UINT64, $m->getOptionalUint64());
  189. }
  190. // Set float.
  191. $m->setOptionalUint64(1.1);
  192. if (PHP_INT_SIZE == 4) {
  193. $this->assertSame('1', $m->getOptionalUint64());
  194. } else {
  195. $this->assertSame(1, $m->getOptionalUint64());
  196. }
  197. // Set string.
  198. $m->setOptionalUint64('2');
  199. if (PHP_INT_SIZE == 4) {
  200. $this->assertSame('2', $m->getOptionalUint64());
  201. } else {
  202. $this->assertSame(2, $m->getOptionalUint64());
  203. }
  204. $m->setOptionalUint64('3.1');
  205. if (PHP_INT_SIZE == 4) {
  206. $this->assertSame('3', $m->getOptionalUint64());
  207. } else {
  208. $this->assertSame(3, $m->getOptionalUint64());
  209. }
  210. $m->setOptionalUint64(MAX_UINT64_STRING);
  211. if (PHP_INT_SIZE == 4) {
  212. $this->assertSame(MAX_UINT64_STRING, $m->getOptionalUint64());
  213. } else {
  214. $this->assertSame(MAX_UINT64, $m->getOptionalUint64());
  215. }
  216. }
  217. /**
  218. * @expectedException PHPUnit_Framework_Error
  219. */
  220. public function testUint64FieldInvalidTypeFail()
  221. {
  222. $m = new TestMessage();
  223. $m->setOptionalUint64(new TestMessage());
  224. }
  225. /**
  226. * @expectedException PHPUnit_Framework_Error
  227. */
  228. public function testUint64FieldInvalidStringFail()
  229. {
  230. $m = new TestMessage();
  231. $m->setOptionalUint64('abc');
  232. }
  233. #########################################################
  234. # Test enum field.
  235. #########################################################
  236. public function testEnumField()
  237. {
  238. $m = new TestMessage();
  239. // Set enum.
  240. $m->setOptionalEnum(TestEnum::ONE);
  241. $this->assertEquals(TestEnum::ONE, $m->getOptionalEnum());
  242. // Set integer.
  243. $m->setOptionalEnum(1);
  244. $this->assertEquals(TestEnum::ONE, $m->getOptionalEnum());
  245. // Set float.
  246. $m->setOptionalEnum(1.1);
  247. $this->assertEquals(TestEnum::ONE, $m->getOptionalEnum());
  248. // Set string.
  249. $m->setOptionalEnum("1");
  250. $this->assertEquals(TestEnum::ONE, $m->getOptionalEnum());
  251. }
  252. #########################################################
  253. # Test float field.
  254. #########################################################
  255. public function testFloatField()
  256. {
  257. $m = new TestMessage();
  258. // Set integer.
  259. $m->setOptionalFloat(1);
  260. $this->assertEquals(1.0, $m->getOptionalFloat(), '', MAX_FLOAT_DIFF);
  261. // Set float.
  262. $m->setOptionalFloat(1.1);
  263. $this->assertEquals(1.1, $m->getOptionalFloat(), '', MAX_FLOAT_DIFF);
  264. // Set string.
  265. $m->setOptionalFloat('2');
  266. $this->assertEquals(2.0, $m->getOptionalFloat(), '', MAX_FLOAT_DIFF);
  267. $m->setOptionalFloat('3.1');
  268. $this->assertEquals(3.1, $m->getOptionalFloat(), '', MAX_FLOAT_DIFF);
  269. }
  270. /**
  271. * @expectedException PHPUnit_Framework_Error
  272. */
  273. public function testFloatFieldInvalidTypeFail()
  274. {
  275. $m = new TestMessage();
  276. $m->setOptionalFloat(new TestMessage());
  277. }
  278. /**
  279. * @expectedException PHPUnit_Framework_Error
  280. */
  281. public function testFloatFieldInvalidStringFail()
  282. {
  283. $m = new TestMessage();
  284. $m->setOptionalFloat('abc');
  285. }
  286. #########################################################
  287. # Test double field.
  288. #########################################################
  289. public function testDoubleField()
  290. {
  291. $m = new TestMessage();
  292. // Set integer.
  293. $m->setOptionalDouble(1);
  294. $this->assertEquals(1.0, $m->getOptionalDouble(), '', MAX_FLOAT_DIFF);
  295. // Set float.
  296. $m->setOptionalDouble(1.1);
  297. $this->assertEquals(1.1, $m->getOptionalDouble(), '', MAX_FLOAT_DIFF);
  298. // Set string.
  299. $m->setOptionalDouble('2');
  300. $this->assertEquals(2.0, $m->getOptionalDouble(), '', MAX_FLOAT_DIFF);
  301. $m->setOptionalDouble('3.1');
  302. $this->assertEquals(3.1, $m->getOptionalDouble(), '', MAX_FLOAT_DIFF);
  303. }
  304. /**
  305. * @expectedException PHPUnit_Framework_Error
  306. */
  307. public function testDoubleFieldInvalidTypeFail()
  308. {
  309. $m = new TestMessage();
  310. $m->setOptionalDouble(new TestMessage());
  311. }
  312. /**
  313. * @expectedException PHPUnit_Framework_Error
  314. */
  315. public function testDoubleFieldInvalidStringFail()
  316. {
  317. $m = new TestMessage();
  318. $m->setOptionalDouble('abc');
  319. }
  320. #########################################################
  321. # Test bool field.
  322. #########################################################
  323. public function testBoolField()
  324. {
  325. $m = new TestMessage();
  326. // Set bool.
  327. $m->setOptionalBool(true);
  328. $this->assertSame(true, $m->getOptionalBool());
  329. // Set integer.
  330. $m->setOptionalBool(-1);
  331. $this->assertSame(true, $m->getOptionalBool());
  332. // Set float.
  333. $m->setOptionalBool(1.1);
  334. $this->assertSame(true, $m->getOptionalBool());
  335. // Set string.
  336. $m->setOptionalBool('');
  337. $this->assertSame(false, $m->getOptionalBool());
  338. }
  339. /**
  340. * @expectedException PHPUnit_Framework_Error
  341. */
  342. public function testBoolFieldInvalidStringFail()
  343. {
  344. $m = new TestMessage();
  345. $m->setOptionalBool(new TestMessage());
  346. }
  347. #########################################################
  348. # Test string field.
  349. #########################################################
  350. public function testStringField()
  351. {
  352. $m = new TestMessage();
  353. // Set string.
  354. $m->setOptionalString('abc');
  355. $this->assertSame('abc', $m->getOptionalString());
  356. // Set integer.
  357. $m->setOptionalString(1);
  358. $this->assertSame('1', $m->getOptionalString());
  359. // Set double.
  360. $m->setOptionalString(1.1);
  361. $this->assertSame('1.1', $m->getOptionalString());
  362. // Set bool.
  363. $m->setOptionalString(true);
  364. $this->assertSame('1', $m->getOptionalString());
  365. }
  366. /**
  367. * @expectedException PHPUnit_Framework_Error
  368. */
  369. public function testStringFieldInvalidUTF8Fail()
  370. {
  371. $m = new TestMessage();
  372. $hex = hex2bin("ff");
  373. $m->setOptionalString($hex);
  374. }
  375. #########################################################
  376. # Test bytes field.
  377. #########################################################
  378. public function testBytesField()
  379. {
  380. $m = new TestMessage();
  381. // Set string.
  382. $m->setOptionalBytes('abc');
  383. $this->assertSame('abc', $m->getOptionalBytes());
  384. // Set integer.
  385. $m->setOptionalBytes(1);
  386. $this->assertSame('1', $m->getOptionalBytes());
  387. // Set double.
  388. $m->setOptionalBytes(1.1);
  389. $this->assertSame('1.1', $m->getOptionalBytes());
  390. // Set bool.
  391. $m->setOptionalBytes(true);
  392. $this->assertSame('1', $m->getOptionalBytes());
  393. }
  394. public function testBytesFieldInvalidUTF8Success()
  395. {
  396. $m = new TestMessage();
  397. $hex = hex2bin("ff");
  398. $m->setOptionalBytes($hex);
  399. }
  400. #########################################################
  401. # Test message field.
  402. #########################################################
  403. public function testMessageField()
  404. {
  405. $m = new TestMessage();
  406. $sub_m = new TestMessage_Sub();
  407. $sub_m->setA(1);
  408. $m->setOptionalMessage($sub_m);
  409. $this->assertSame(1, $m->getOptionalMessage()->getA());
  410. $null = null;
  411. $m->setOptionalMessage($null);
  412. $this->assertNull($m->getOptionalMessage());
  413. }
  414. /**
  415. * @expectedException PHPUnit_Framework_Error
  416. */
  417. public function testMessageFieldWrongTypeFail()
  418. {
  419. $m = new TestMessage();
  420. $a = 1;
  421. $m->setOptionalMessage($a);
  422. }
  423. /**
  424. * @expectedException PHPUnit_Framework_Error
  425. */
  426. public function testMessageFieldWrongClassFail()
  427. {
  428. $m = new TestMessage();
  429. $m->setOptionalMessage(new TestMessage());
  430. }
  431. #########################################################
  432. # Test repeated field.
  433. #########################################################
  434. public function testRepeatedField()
  435. {
  436. $m = new TestMessage();
  437. $repeated_int32 = new RepeatedField(GPBType::INT32);
  438. $m->setRepeatedInt32($repeated_int32);
  439. $this->assertSame($repeated_int32, $m->getRepeatedInt32());
  440. }
  441. public function testRepeatedFieldViaArray()
  442. {
  443. $m = new TestMessage();
  444. $arr = array();
  445. $m->setRepeatedInt32($arr);
  446. $this->assertSame(0, count($m->getRepeatedInt32()));
  447. $arr = array(1, 2.1, "3");
  448. $m->setRepeatedInt32($arr);
  449. $this->assertTrue($m->getRepeatedInt32() instanceof RepeatedField);
  450. $this->assertSame("Google\Protobuf\Internal\RepeatedField",
  451. get_class($m->getRepeatedInt32()));
  452. $this->assertSame(3, count($m->getRepeatedInt32()));
  453. $this->assertSame(1, $m->getRepeatedInt32()[0]);
  454. $this->assertSame(2, $m->getRepeatedInt32()[1]);
  455. $this->assertSame(3, $m->getRepeatedInt32()[2]);
  456. $this->assertFalse($arr instanceof RepeatedField);
  457. }
  458. /**
  459. * @expectedException PHPUnit_Framework_Error
  460. */
  461. public function testRepeatedFieldWrongTypeFail()
  462. {
  463. $m = new TestMessage();
  464. $a = 1;
  465. $m->setRepeatedInt32($a);
  466. }
  467. /**
  468. * @expectedException PHPUnit_Framework_Error
  469. */
  470. public function testRepeatedFieldWrongObjectFail()
  471. {
  472. $m = new TestMessage();
  473. $m->setRepeatedInt32($m);
  474. }
  475. /**
  476. * @expectedException PHPUnit_Framework_Error
  477. */
  478. public function testRepeatedFieldWrongRepeatedTypeFail()
  479. {
  480. $m = new TestMessage();
  481. $repeated_int32 = new RepeatedField(GPBType::UINT32);
  482. $m->setRepeatedInt32($repeated_int32);
  483. }
  484. /**
  485. * @expectedException PHPUnit_Framework_Error
  486. */
  487. public function testRepeatedFieldWrongRepeatedMessageClassFail()
  488. {
  489. $m = new TestMessage();
  490. $repeated_message = new RepeatedField(GPBType::MESSAGE,
  491. TestMessage::class);
  492. $m->setRepeatedMessage($repeated_message);
  493. }
  494. #########################################################
  495. # Test map field.
  496. #########################################################
  497. public function testMapField()
  498. {
  499. $m = new TestMessage();
  500. $map_int32_int32 = new MapField(GPBType::INT32, GPBType::INT32);
  501. $m->setMapInt32Int32($map_int32_int32);
  502. $this->assertSame($map_int32_int32, $m->getMapInt32Int32());
  503. }
  504. public function testMapFieldViaArray()
  505. {
  506. $m = new TestMessage();
  507. $dict = array();
  508. $m->setMapInt32Int32($dict);
  509. $this->assertSame(0, count($m->getMapInt32Int32()));
  510. $dict = array(5 => 5, 6.1 => 6.1, "7" => "7");
  511. $m->setMapInt32Int32($dict);
  512. $this->assertTrue($m->getMapInt32Int32() instanceof MapField);
  513. $this->assertSame(3, count($m->getMapInt32Int32()));
  514. $this->assertSame(5, $m->getMapInt32Int32()[5]);
  515. $this->assertSame(6, $m->getMapInt32Int32()[6]);
  516. $this->assertSame(7, $m->getMapInt32Int32()[7]);
  517. $this->assertFalse($dict instanceof MapField);
  518. }
  519. /**
  520. * @expectedException PHPUnit_Framework_Error
  521. */
  522. public function testMapFieldWrongTypeFail()
  523. {
  524. $m = new TestMessage();
  525. $a = 1;
  526. $m->setMapInt32Int32($a);
  527. }
  528. /**
  529. * @expectedException PHPUnit_Framework_Error
  530. */
  531. public function testMapFieldWrongObjectFail()
  532. {
  533. $m = new TestMessage();
  534. $m->setMapInt32Int32($m);
  535. }
  536. /**
  537. * @expectedException PHPUnit_Framework_Error
  538. */
  539. public function testMapFieldWrongRepeatedTypeFail()
  540. {
  541. $m = new TestMessage();
  542. $map_uint32_uint32 = new MapField(GPBType::UINT32, GPBType::UINT32);
  543. $m->setMapInt32Int32($map_uint32_uint32);
  544. }
  545. /**
  546. * @expectedException PHPUnit_Framework_Error
  547. */
  548. public function testMapFieldWrongRepeatedMessageClassFail()
  549. {
  550. $m = new TestMessage();
  551. $map_int32_message = new MapField(GPBType::INT32,
  552. GPBType::MESSAGE,
  553. TestMessage::class);
  554. $m->setMapInt32Message($map_int32_message);
  555. }
  556. #########################################################
  557. # Test oneof field.
  558. #########################################################
  559. public function testOneofField() {
  560. $m = new TestMessage();
  561. $this->assertSame("", $m->getMyOneof());
  562. $m->setOneofInt32(1);
  563. $this->assertSame(1, $m->getOneofInt32());
  564. $this->assertSame(0.0, $m->getOneofFloat());
  565. $this->assertSame('', $m->getOneofString());
  566. $this->assertSame(NULL, $m->getOneofMessage());
  567. $this->assertSame("oneof_int32", $m->getMyOneof());
  568. $m->setOneofFloat(2.0);
  569. $this->assertSame(0, $m->getOneofInt32());
  570. $this->assertSame(2.0, $m->getOneofFloat());
  571. $this->assertSame('', $m->getOneofString());
  572. $this->assertSame(NULL, $m->getOneofMessage());
  573. $this->assertSame("oneof_float", $m->getMyOneof());
  574. $m->setOneofString('abc');
  575. $this->assertSame(0, $m->getOneofInt32());
  576. $this->assertSame(0.0, $m->getOneofFloat());
  577. $this->assertSame('abc', $m->getOneofString());
  578. $this->assertSame(NULL, $m->getOneofMessage());
  579. $this->assertSame("oneof_string", $m->getMyOneof());
  580. $sub_m = new TestMessage_Sub();
  581. $sub_m->setA(1);
  582. $m->setOneofMessage($sub_m);
  583. $this->assertSame(0, $m->getOneofInt32());
  584. $this->assertSame(0.0, $m->getOneofFloat());
  585. $this->assertSame('', $m->getOneofString());
  586. $this->assertSame(1, $m->getOneofMessage()->getA());
  587. $this->assertSame("oneof_message", $m->getMyOneof());
  588. }
  589. #########################################################
  590. # Test clear method.
  591. #########################################################
  592. public function testMessageClear()
  593. {
  594. $m = new TestMessage();
  595. $this->setFields($m);
  596. $this->expectFields($m);
  597. $m->clear();
  598. $this->expectEmptyFields($m);
  599. }
  600. #########################################################
  601. # Test mergeFrom method.
  602. #########################################################
  603. public function testMessageMergeFrom()
  604. {
  605. $m = new TestMessage();
  606. $this->setFields($m);
  607. $this->expectFields($m);
  608. $arr = $m->getOptionalMessage()->getB();
  609. $arr[] = 1;
  610. $n = new TestMessage();
  611. // Singular
  612. $n->setOptionalInt32(100);
  613. $sub1 = new TestMessage_Sub();
  614. $sub1->setA(101);
  615. $sub1->getB()[] = 102;
  616. $n->setOptionalMessage($sub1);
  617. // Repeated
  618. $n->getRepeatedInt32()[] = 200;
  619. $n->getRepeatedString()[] = 'abc';
  620. $sub2 = new TestMessage_Sub();
  621. $sub2->setA(201);
  622. $n->getRepeatedMessage()[] = $sub2;
  623. // Map
  624. $n->getMapInt32Int32()[1] = 300;
  625. $n->getMapInt32Int32()[-62] = 301;
  626. $n->getMapStringString()['def'] = 'def';
  627. $n->getMapInt32Message()[1] = new TestMessage_Sub();
  628. $n->getMapInt32Message()[1]->setA(302);
  629. $n->getMapInt32Message()[2] = new TestMessage_Sub();
  630. $n->getMapInt32Message()[2]->setA(303);
  631. $m->mergeFrom($n);
  632. $this->assertSame(100, $m->getOptionalInt32());
  633. $this->assertSame(42, $m->getOptionalUint32());
  634. $this->assertSame(101, $m->getOptionalMessage()->getA());
  635. $this->assertSame(2, count($m->getOptionalMessage()->getB()));
  636. $this->assertSame(1, $m->getOptionalMessage()->getB()[0]);
  637. $this->assertSame(102, $m->getOptionalMessage()->getB()[1]);
  638. $this->assertSame(3, count($m->getRepeatedInt32()));
  639. $this->assertSame(200, $m->getRepeatedInt32()[2]);
  640. $this->assertSame(2, count($m->getRepeatedUint32()));
  641. $this->assertSame(3, count($m->getRepeatedString()));
  642. $this->assertSame('abc', $m->getRepeatedString()[2]);
  643. $this->assertSame(3, count($m->getRepeatedMessage()));
  644. $this->assertSame(201, $m->getRepeatedMessage()[2]->getA());
  645. $this->assertSame(2, count($m->getMapInt32Int32()));
  646. $this->assertSame(300, $m->getMapInt32Int32()[1]);
  647. $this->assertSame(301, $m->getMapInt32Int32()[-62]);
  648. $this->assertSame(1, count($m->getMapUint32Uint32()));
  649. $this->assertSame(2, count($m->getMapStringString()));
  650. $this->assertSame('def', $m->getMapStringString()['def']);
  651. $this->assertSame(2, count($m->getMapInt32Message()));
  652. $this->assertSame(302, $m->getMapInt32Message()[1]->getA());
  653. $this->assertSame(303, $m->getMapInt32Message()[2]->getA());
  654. $this->assertSame("", $m->getMyOneof());
  655. // Check sub-messages are copied by value.
  656. $n->getOptionalMessage()->setA(-101);
  657. $this->assertSame(101, $m->getOptionalMessage()->getA());
  658. $n->getRepeatedMessage()[0]->setA(-201);
  659. $this->assertSame(201, $m->getRepeatedMessage()[2]->getA());
  660. $n->getMapInt32Message()[1]->setA(-302);
  661. $this->assertSame(302, $m->getMapInt32Message()[1]->getA());
  662. // Test merge oneof.
  663. $m = new TestMessage();
  664. $n = new TestMessage();
  665. $n->setOneofInt32(1);
  666. $m->mergeFrom($n);
  667. $this->assertSame(1, $m->getOneofInt32());
  668. $sub = new TestMessage_Sub();
  669. $n->setOneofMessage($sub);
  670. $n->getOneofMessage()->setA(400);
  671. $m->mergeFrom($n);
  672. $this->assertSame(400, $m->getOneofMessage()->getA());
  673. $n->getOneofMessage()->setA(-400);
  674. $this->assertSame(400, $m->getOneofMessage()->getA());
  675. // Test all fields
  676. $m = new TestMessage();
  677. $n = new TestMessage();
  678. $this->setFields($m);
  679. $n->mergeFrom($m);
  680. $this->expectFields($n);
  681. }
  682. /**
  683. * @expectedException PHPUnit_Framework_Error
  684. */
  685. public function testMessageMergeFromInvalidTypeFail()
  686. {
  687. $m = new TestMessage();
  688. $n = new TestMessage_Sub();
  689. $m->mergeFrom($n);
  690. }
  691. #########################################################
  692. # Test message/enum without namespace.
  693. #########################################################
  694. public function testMessageWithoutNamespace()
  695. {
  696. $m = new NoNameSpaceMessage();
  697. }
  698. public function testEnumWithoutNamespace()
  699. {
  700. $m = new NoNameSpaceEnum();
  701. }
  702. }