generated_class_test.php 28 KB

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