generated_class_test.php 26 KB

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