generated_class_test.php 18 KB

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