generated_class_test.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637
  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\GPBType;
  8. use Foo\TestEnum;
  9. use Foo\TestMessage;
  10. use Foo\TestMessage_Sub;
  11. class GeneratedClassTest extends TestBase
  12. {
  13. #########################################################
  14. # Test field accessors.
  15. #########################################################
  16. public function testSetterGetter()
  17. {
  18. $m = new TestMessage();
  19. $m->setOptionalInt32(1);
  20. $this->assertSame(1, $m->getOptionalInt32());
  21. }
  22. #########################################################
  23. # Test int32 field.
  24. #########################################################
  25. public function testInt32Field()
  26. {
  27. $m = new TestMessage();
  28. // Set integer.
  29. $m->setOptionalInt32(MAX_INT32);
  30. $this->assertSame(MAX_INT32, $m->getOptionalInt32());
  31. $m->setOptionalInt32(MIN_INT32);
  32. $this->assertSame(MIN_INT32, $m->getOptionalInt32());
  33. // Set float.
  34. $m->setOptionalInt32(1.1);
  35. $this->assertSame(1, $m->getOptionalInt32());
  36. $m->setOptionalInt32(MAX_INT32_FLOAT);
  37. $this->assertSame(MAX_INT32, $m->getOptionalInt32());
  38. $m->setOptionalInt32(MIN_INT32_FLOAT);
  39. $this->assertSame(MIN_INT32, $m->getOptionalInt32());
  40. // Set string.
  41. $m->setOptionalInt32('2');
  42. $this->assertSame(2, $m->getOptionalInt32());
  43. $m->setOptionalInt32('3.1');
  44. $this->assertSame(3, $m->getOptionalInt32());
  45. $m->setOptionalInt32(MAX_INT32_STRING);
  46. $this->assertSame(MAX_INT32, $m->getOptionalInt32());
  47. $m->setOptionalInt32(MIN_INT32_STRING);
  48. $this->assertSame(MIN_INT32, $m->getOptionalInt32());
  49. }
  50. /**
  51. * @expectedException PHPUnit_Framework_Error
  52. */
  53. public function testInt32FieldInvalidTypeFail()
  54. {
  55. $m = new TestMessage();
  56. $m->setOptionalInt32(new TestMessage());
  57. }
  58. /**
  59. * @expectedException PHPUnit_Framework_Error
  60. */
  61. public function testInt32FieldInvalidStringFail()
  62. {
  63. $m = new TestMessage();
  64. $m->setOptionalInt32('abc');
  65. }
  66. #########################################################
  67. # Test uint32 field.
  68. #########################################################
  69. public function testUint32Field()
  70. {
  71. $m = new TestMessage();
  72. // Set integer.
  73. $m->setOptionalUint32(MAX_UINT32);
  74. $this->assertSame(-1, $m->getOptionalUint32());
  75. $m->setOptionalUint32(-1);
  76. $this->assertSame(-1, $m->getOptionalUint32());
  77. $m->setOptionalUint32(MIN_UINT32);
  78. $this->assertSame(MIN_INT32, $m->getOptionalUint32());
  79. // Set float.
  80. $m->setOptionalUint32(1.1);
  81. $this->assertSame(1, $m->getOptionalUint32());
  82. $m->setOptionalUint32(MAX_UINT32_FLOAT);
  83. $this->assertSame(-1, $m->getOptionalUint32());
  84. $m->setOptionalUint32(-1.0);
  85. $this->assertSame(-1, $m->getOptionalUint32());
  86. $m->setOptionalUint32(MIN_UINT32_FLOAT);
  87. $this->assertSame(MIN_INT32, $m->getOptionalUint32());
  88. // Set string.
  89. $m->setOptionalUint32('2');
  90. $this->assertSame(2, $m->getOptionalUint32());
  91. $m->setOptionalUint32('3.1');
  92. $this->assertSame(3, $m->getOptionalUint32());
  93. $m->setOptionalUint32(MAX_UINT32_STRING);
  94. $this->assertSame(-1, $m->getOptionalUint32());
  95. $m->setOptionalUint32('-1.0');
  96. $this->assertSame(-1, $m->getOptionalUint32());
  97. $m->setOptionalUint32(MIN_UINT32_STRING);
  98. $this->assertSame(MIN_INT32, $m->getOptionalUint32());
  99. }
  100. /**
  101. * @expectedException PHPUnit_Framework_Error
  102. */
  103. public function testUint32FieldInvalidTypeFail()
  104. {
  105. $m = new TestMessage();
  106. $m->setOptionalUint32(new TestMessage());
  107. }
  108. /**
  109. * @expectedException PHPUnit_Framework_Error
  110. */
  111. public function testUint32FieldInvalidStringFail()
  112. {
  113. $m = new TestMessage();
  114. $m->setOptionalUint32('abc');
  115. }
  116. #########################################################
  117. # Test int64 field.
  118. #########################################################
  119. public function testInt64Field()
  120. {
  121. $m = new TestMessage();
  122. // Set integer.
  123. $m->setOptionalInt64(MAX_INT64);
  124. $this->assertSame(MAX_INT64, $m->getOptionalInt64());
  125. $m->setOptionalInt64(MIN_INT64);
  126. $this->assertEquals(MIN_INT64, $m->getOptionalInt64());
  127. // Set float.
  128. $m->setOptionalInt64(1.1);
  129. if (PHP_INT_SIZE == 4) {
  130. $this->assertSame('1', $m->getOptionalInt64());
  131. } else {
  132. $this->assertSame(1, $m->getOptionalInt64());
  133. }
  134. // Set string.
  135. $m->setOptionalInt64('2');
  136. if (PHP_INT_SIZE == 4) {
  137. $this->assertSame('2', $m->getOptionalInt64());
  138. } else {
  139. $this->assertSame(2, $m->getOptionalInt64());
  140. }
  141. $m->setOptionalInt64('3.1');
  142. if (PHP_INT_SIZE == 4) {
  143. $this->assertSame('3', $m->getOptionalInt64());
  144. } else {
  145. $this->assertSame(3, $m->getOptionalInt64());
  146. }
  147. $m->setOptionalInt64(MAX_INT64_STRING);
  148. if (PHP_INT_SIZE == 4) {
  149. $this->assertSame(MAX_INT64_STRING, $m->getOptionalInt64());
  150. } else {
  151. $this->assertSame(MAX_INT64, $m->getOptionalInt64());
  152. }
  153. $m->setOptionalInt64(MIN_INT64_STRING);
  154. if (PHP_INT_SIZE == 4) {
  155. $this->assertSame(MIN_INT64_STRING, $m->getOptionalInt64());
  156. } else {
  157. $this->assertSame(MIN_INT64, $m->getOptionalInt64());
  158. }
  159. }
  160. /**
  161. * @expectedException PHPUnit_Framework_Error
  162. */
  163. public function testInt64FieldInvalidTypeFail()
  164. {
  165. $m = new TestMessage();
  166. $m->setOptionalInt64(new TestMessage());
  167. }
  168. /**
  169. * @expectedException PHPUnit_Framework_Error
  170. */
  171. public function testInt64FieldInvalidStringFail()
  172. {
  173. $m = new TestMessage();
  174. $m->setOptionalInt64('abc');
  175. }
  176. #########################################################
  177. # Test uint64 field.
  178. #########################################################
  179. public function testUint64Field()
  180. {
  181. $m = new TestMessage();
  182. // Set integer.
  183. $m->setOptionalUint64(MAX_UINT64);
  184. if (PHP_INT_SIZE == 4) {
  185. $this->assertSame(MAX_UINT64_STRING, $m->getOptionalUint64());
  186. } else {
  187. $this->assertSame(MAX_UINT64, $m->getOptionalUint64());
  188. }
  189. // Set float.
  190. $m->setOptionalUint64(1.1);
  191. if (PHP_INT_SIZE == 4) {
  192. $this->assertSame('1', $m->getOptionalUint64());
  193. } else {
  194. $this->assertSame(1, $m->getOptionalUint64());
  195. }
  196. // Set string.
  197. $m->setOptionalUint64('2');
  198. if (PHP_INT_SIZE == 4) {
  199. $this->assertSame('2', $m->getOptionalUint64());
  200. } else {
  201. $this->assertSame(2, $m->getOptionalUint64());
  202. }
  203. $m->setOptionalUint64('3.1');
  204. if (PHP_INT_SIZE == 4) {
  205. $this->assertSame('3', $m->getOptionalUint64());
  206. } else {
  207. $this->assertSame(3, $m->getOptionalUint64());
  208. }
  209. $m->setOptionalUint64(MAX_UINT64_STRING);
  210. if (PHP_INT_SIZE == 4) {
  211. $this->assertSame(MAX_UINT64_STRING, $m->getOptionalUint64());
  212. } else {
  213. $this->assertSame(MAX_UINT64, $m->getOptionalUint64());
  214. }
  215. }
  216. /**
  217. * @expectedException PHPUnit_Framework_Error
  218. */
  219. public function testUint64FieldInvalidTypeFail()
  220. {
  221. $m = new TestMessage();
  222. $m->setOptionalUint64(new TestMessage());
  223. }
  224. /**
  225. * @expectedException PHPUnit_Framework_Error
  226. */
  227. public function testUint64FieldInvalidStringFail()
  228. {
  229. $m = new TestMessage();
  230. $m->setOptionalUint64('abc');
  231. }
  232. #########################################################
  233. # Test enum field.
  234. #########################################################
  235. public function testEnumField()
  236. {
  237. $m = new TestMessage();
  238. // Set enum.
  239. $m->setOptionalEnum(TestEnum::ONE);
  240. $this->assertEquals(TestEnum::ONE, $m->getOptionalEnum());
  241. // Set integer.
  242. $m->setOptionalEnum(1);
  243. $this->assertEquals(TestEnum::ONE, $m->getOptionalEnum());
  244. // Set float.
  245. $m->setOptionalEnum(1.1);
  246. $this->assertEquals(TestEnum::ONE, $m->getOptionalEnum());
  247. // Set string.
  248. $m->setOptionalEnum("1");
  249. $this->assertEquals(TestEnum::ONE, $m->getOptionalEnum());
  250. }
  251. #########################################################
  252. # Test float field.
  253. #########################################################
  254. public function testFloatField()
  255. {
  256. $m = new TestMessage();
  257. // Set integer.
  258. $m->setOptionalFloat(1);
  259. $this->assertEquals(1.0, $m->getOptionalFloat(), '', MAX_FLOAT_DIFF);
  260. // Set float.
  261. $m->setOptionalFloat(1.1);
  262. $this->assertEquals(1.1, $m->getOptionalFloat(), '', MAX_FLOAT_DIFF);
  263. // Set string.
  264. $m->setOptionalFloat('2');
  265. $this->assertEquals(2.0, $m->getOptionalFloat(), '', MAX_FLOAT_DIFF);
  266. $m->setOptionalFloat('3.1');
  267. $this->assertEquals(3.1, $m->getOptionalFloat(), '', MAX_FLOAT_DIFF);
  268. }
  269. /**
  270. * @expectedException PHPUnit_Framework_Error
  271. */
  272. public function testFloatFieldInvalidTypeFail()
  273. {
  274. $m = new TestMessage();
  275. $m->setOptionalFloat(new TestMessage());
  276. }
  277. /**
  278. * @expectedException PHPUnit_Framework_Error
  279. */
  280. public function testFloatFieldInvalidStringFail()
  281. {
  282. $m = new TestMessage();
  283. $m->setOptionalFloat('abc');
  284. }
  285. #########################################################
  286. # Test double field.
  287. #########################################################
  288. public function testDoubleField()
  289. {
  290. $m = new TestMessage();
  291. // Set integer.
  292. $m->setOptionalDouble(1);
  293. $this->assertEquals(1.0, $m->getOptionalDouble(), '', MAX_FLOAT_DIFF);
  294. // Set float.
  295. $m->setOptionalDouble(1.1);
  296. $this->assertEquals(1.1, $m->getOptionalDouble(), '', MAX_FLOAT_DIFF);
  297. // Set string.
  298. $m->setOptionalDouble('2');
  299. $this->assertEquals(2.0, $m->getOptionalDouble(), '', MAX_FLOAT_DIFF);
  300. $m->setOptionalDouble('3.1');
  301. $this->assertEquals(3.1, $m->getOptionalDouble(), '', MAX_FLOAT_DIFF);
  302. }
  303. /**
  304. * @expectedException PHPUnit_Framework_Error
  305. */
  306. public function testDoubleFieldInvalidTypeFail()
  307. {
  308. $m = new TestMessage();
  309. $m->setOptionalDouble(new TestMessage());
  310. }
  311. /**
  312. * @expectedException PHPUnit_Framework_Error
  313. */
  314. public function testDoubleFieldInvalidStringFail()
  315. {
  316. $m = new TestMessage();
  317. $m->setOptionalDouble('abc');
  318. }
  319. #########################################################
  320. # Test bool field.
  321. #########################################################
  322. public function testBoolField()
  323. {
  324. $m = new TestMessage();
  325. // Set bool.
  326. $m->setOptionalBool(true);
  327. $this->assertSame(true, $m->getOptionalBool());
  328. // Set integer.
  329. $m->setOptionalBool(-1);
  330. $this->assertSame(true, $m->getOptionalBool());
  331. // Set float.
  332. $m->setOptionalBool(1.1);
  333. $this->assertSame(true, $m->getOptionalBool());
  334. // Set string.
  335. $m->setOptionalBool('');
  336. $this->assertSame(false, $m->getOptionalBool());
  337. }
  338. /**
  339. * @expectedException PHPUnit_Framework_Error
  340. */
  341. public function testBoolFieldInvalidStringFail()
  342. {
  343. $m = new TestMessage();
  344. $m->setOptionalBool(new TestMessage());
  345. }
  346. #########################################################
  347. # Test string field.
  348. #########################################################
  349. public function testStringField()
  350. {
  351. $m = new TestMessage();
  352. // Set string.
  353. $m->setOptionalString('abc');
  354. $this->assertSame('abc', $m->getOptionalString());
  355. // Set integer.
  356. $m->setOptionalString(1);
  357. $this->assertSame('1', $m->getOptionalString());
  358. // Set double.
  359. $m->setOptionalString(1.1);
  360. $this->assertSame('1.1', $m->getOptionalString());
  361. // Set bool.
  362. $m->setOptionalString(true);
  363. $this->assertSame('1', $m->getOptionalString());
  364. }
  365. /**
  366. * @expectedException PHPUnit_Framework_Error
  367. */
  368. public function testStringFieldInvalidUTF8Fail()
  369. {
  370. $m = new TestMessage();
  371. $hex = hex2bin("ff");
  372. $m->setOptionalString($hex);
  373. }
  374. #########################################################
  375. # Test bytes field.
  376. #########################################################
  377. public function testBytesField()
  378. {
  379. $m = new TestMessage();
  380. // Set string.
  381. $m->setOptionalBytes('abc');
  382. $this->assertSame('abc', $m->getOptionalBytes());
  383. // Set integer.
  384. $m->setOptionalBytes(1);
  385. $this->assertSame('1', $m->getOptionalBytes());
  386. // Set double.
  387. $m->setOptionalBytes(1.1);
  388. $this->assertSame('1.1', $m->getOptionalBytes());
  389. // Set bool.
  390. $m->setOptionalBytes(true);
  391. $this->assertSame('1', $m->getOptionalBytes());
  392. }
  393. public function testBytesFieldInvalidUTF8Success()
  394. {
  395. $m = new TestMessage();
  396. $hex = hex2bin("ff");
  397. $m->setOptionalBytes($hex);
  398. }
  399. #########################################################
  400. # Test message field.
  401. #########################################################
  402. public function testMessageField()
  403. {
  404. $m = new TestMessage();
  405. $sub_m = new TestMessage_Sub();
  406. $sub_m->setA(1);
  407. $m->setOptionalMessage($sub_m);
  408. $this->assertSame(1, $m->getOptionalMessage()->getA());
  409. $null = null;
  410. $m->setOptionalMessage($null);
  411. $this->assertNull($m->getOptionalMessage());
  412. }
  413. /**
  414. * @expectedException PHPUnit_Framework_Error
  415. */
  416. public function testMessageFieldWrongTypeFail()
  417. {
  418. $m = new TestMessage();
  419. $a = 1;
  420. $m->setOptionalMessage($a);
  421. }
  422. /**
  423. * @expectedException PHPUnit_Framework_Error
  424. */
  425. public function testMessageFieldWrongClassFail()
  426. {
  427. $m = new TestMessage();
  428. $m->setOptionalMessage(new TestMessage());
  429. }
  430. #########################################################
  431. # Test repeated field.
  432. #########################################################
  433. public function testRepeatedField()
  434. {
  435. $m = new TestMessage();
  436. $repeated_int32 = new RepeatedField(GPBType::INT32);
  437. $m->setRepeatedInt32($repeated_int32);
  438. $this->assertSame($repeated_int32, $m->getRepeatedInt32());
  439. }
  440. /**
  441. * @expectedException PHPUnit_Framework_Error
  442. */
  443. public function testRepeatedFieldWrongTypeFail()
  444. {
  445. $m = new TestMessage();
  446. $a = 1;
  447. $m->setRepeatedInt32($a);
  448. }
  449. /**
  450. * @expectedException PHPUnit_Framework_Error
  451. */
  452. public function testRepeatedFieldWrongObjectFail()
  453. {
  454. $m = new TestMessage();
  455. $m->setRepeatedInt32($m);
  456. }
  457. /**
  458. * @expectedException PHPUnit_Framework_Error
  459. */
  460. public function testRepeatedFieldWrongRepeatedTypeFail()
  461. {
  462. $m = new TestMessage();
  463. $repeated_int32 = new RepeatedField(GPBType::UINT32);
  464. $m->setRepeatedInt32($repeated_int32);
  465. }
  466. /**
  467. * @expectedException PHPUnit_Framework_Error
  468. */
  469. public function testRepeatedFieldWrongRepeatedMessageClassFail()
  470. {
  471. $m = new TestMessage();
  472. $repeated_message = new RepeatedField(GPBType::MESSAGE,
  473. TestMessage::class);
  474. $m->setRepeatedMessage($repeated_message);
  475. }
  476. #########################################################
  477. # Test oneof field.
  478. #########################################################
  479. public function testOneofField() {
  480. $m = new TestMessage();
  481. $this->assertSame("", $m->getMyOneof());
  482. $m->setOneofInt32(1);
  483. $this->assertSame(1, $m->getOneofInt32());
  484. $this->assertSame(0.0, $m->getOneofFloat());
  485. $this->assertSame('', $m->getOneofString());
  486. $this->assertSame(NULL, $m->getOneofMessage());
  487. $this->assertSame("oneof_int32", $m->getMyOneof());
  488. $m->setOneofFloat(2.0);
  489. $this->assertSame(0, $m->getOneofInt32());
  490. $this->assertSame(2.0, $m->getOneofFloat());
  491. $this->assertSame('', $m->getOneofString());
  492. $this->assertSame(NULL, $m->getOneofMessage());
  493. $this->assertSame("oneof_float", $m->getMyOneof());
  494. $m->setOneofString('abc');
  495. $this->assertSame(0, $m->getOneofInt32());
  496. $this->assertSame(0.0, $m->getOneofFloat());
  497. $this->assertSame('abc', $m->getOneofString());
  498. $this->assertSame(NULL, $m->getOneofMessage());
  499. $this->assertSame("oneof_string", $m->getMyOneof());
  500. $sub_m = new TestMessage_Sub();
  501. $sub_m->setA(1);
  502. $m->setOneofMessage($sub_m);
  503. $this->assertSame(0, $m->getOneofInt32());
  504. $this->assertSame(0.0, $m->getOneofFloat());
  505. $this->assertSame('', $m->getOneofString());
  506. $this->assertSame(1, $m->getOneofMessage()->getA());
  507. $this->assertSame("oneof_message", $m->getMyOneof());
  508. }
  509. #########################################################
  510. # Test clear method.
  511. #########################################################
  512. public function testMessageClear()
  513. {
  514. $m = new TestMessage();
  515. $this->setFields($m);
  516. $this->expectFields($m);
  517. $m->clear();
  518. $this->expectEmptyFields($m);
  519. }
  520. #########################################################
  521. # Test message/enum without namespace.
  522. #########################################################
  523. public function testMessageWithoutNamespace()
  524. {
  525. $m = new NoNameSpaceMessage();
  526. }
  527. public function testEnumWithoutNamespace()
  528. {
  529. $m = new NoNameSpaceEnum();
  530. }
  531. }