generated_class_test.php 18 KB

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