generated_class_test.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557
  1. <?php
  2. require_once('test.pb.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. $this->assertSame(1, $m->getOptionalInt64());
  128. // Set string.
  129. $m->setOptionalInt64('2');
  130. $this->assertSame(2, $m->getOptionalInt64());
  131. $m->setOptionalInt64('3.1');
  132. $this->assertSame(3, $m->getOptionalInt64());
  133. $m->setOptionalInt64(MAX_INT64_STRING);
  134. $this->assertSame(MAX_INT64, $m->getOptionalInt64());
  135. $m->setOptionalInt64(MIN_INT64_STRING);
  136. $this->assertEquals(MIN_INT64, $m->getOptionalInt64());
  137. }
  138. /**
  139. * @expectedException PHPUnit_Framework_Error
  140. */
  141. public function testInt64FieldInvalidTypeFail()
  142. {
  143. $m = new TestMessage();
  144. $m->setOptionalInt64(new TestMessage());
  145. }
  146. /**
  147. * @expectedException PHPUnit_Framework_Error
  148. */
  149. public function testInt64FieldInvalidStringFail()
  150. {
  151. $m = new TestMessage();
  152. $m->setOptionalInt64('abc');
  153. }
  154. #########################################################
  155. # Test uint64 field.
  156. #########################################################
  157. public function testUint64Field()
  158. {
  159. $m = new TestMessage();
  160. // Set integer.
  161. $m->setOptionalUint64(MAX_UINT64);
  162. $this->assertEquals(MAX_UINT64, $m->getOptionalUint64());
  163. // Set float.
  164. $m->setOptionalUint64(1.1);
  165. $this->assertSame(1, $m->getOptionalUint64());
  166. // Set string.
  167. $m->setOptionalUint64('2');
  168. $this->assertSame(2, $m->getOptionalUint64());
  169. $m->setOptionalUint64('3.1');
  170. $this->assertSame(3, $m->getOptionalUint64());
  171. $m->setOptionalUint64(MAX_UINT64_STRING);
  172. $this->assertEquals(MAX_UINT64, $m->getOptionalUint64());
  173. }
  174. /**
  175. * @expectedException PHPUnit_Framework_Error
  176. */
  177. public function testUint64FieldInvalidTypeFail()
  178. {
  179. $m = new TestMessage();
  180. $m->setOptionalUint64(new TestMessage());
  181. }
  182. /**
  183. * @expectedException PHPUnit_Framework_Error
  184. */
  185. public function testUint64FieldInvalidStringFail()
  186. {
  187. $m = new TestMessage();
  188. $m->setOptionalUint64('abc');
  189. }
  190. #########################################################
  191. # Test enum field.
  192. #########################################################
  193. public function testEnumField()
  194. {
  195. $m = new TestMessage();
  196. // Set enum.
  197. $m->setOptionalEnum(TestEnum::ONE);
  198. $this->assertEquals(TestEnum::ONE, $m->getOptionalEnum());
  199. // Set integer.
  200. $m->setOptionalEnum(1);
  201. $this->assertEquals(TestEnum::ONE, $m->getOptionalEnum());
  202. // Set float.
  203. $m->setOptionalEnum(1.1);
  204. $this->assertEquals(TestEnum::ONE, $m->getOptionalEnum());
  205. // Set string.
  206. $m->setOptionalEnum("1");
  207. $this->assertEquals(TestEnum::ONE, $m->getOptionalEnum());
  208. }
  209. #########################################################
  210. # Test float field.
  211. #########################################################
  212. public function testFloatField()
  213. {
  214. $m = new TestMessage();
  215. // Set integer.
  216. $m->setOptionalFloat(1);
  217. $this->assertEquals(1.0, $m->getOptionalFloat(), '', MAX_FLOAT_DIFF);
  218. // Set float.
  219. $m->setOptionalFloat(1.1);
  220. $this->assertEquals(1.1, $m->getOptionalFloat(), '', MAX_FLOAT_DIFF);
  221. // Set string.
  222. $m->setOptionalFloat('2');
  223. $this->assertEquals(2.0, $m->getOptionalFloat(), '', MAX_FLOAT_DIFF);
  224. $m->setOptionalFloat('3.1');
  225. $this->assertEquals(3.1, $m->getOptionalFloat(), '', MAX_FLOAT_DIFF);
  226. }
  227. /**
  228. * @expectedException PHPUnit_Framework_Error
  229. */
  230. public function testFloatFieldInvalidTypeFail()
  231. {
  232. $m = new TestMessage();
  233. $m->setOptionalFloat(new TestMessage());
  234. }
  235. /**
  236. * @expectedException PHPUnit_Framework_Error
  237. */
  238. public function testFloatFieldInvalidStringFail()
  239. {
  240. $m = new TestMessage();
  241. $m->setOptionalFloat('abc');
  242. }
  243. #########################################################
  244. # Test double field.
  245. #########################################################
  246. public function testDoubleField()
  247. {
  248. $m = new TestMessage();
  249. // Set integer.
  250. $m->setOptionalDouble(1);
  251. $this->assertEquals(1.0, $m->getOptionalDouble(), '', MAX_FLOAT_DIFF);
  252. // Set float.
  253. $m->setOptionalDouble(1.1);
  254. $this->assertEquals(1.1, $m->getOptionalDouble(), '', MAX_FLOAT_DIFF);
  255. // Set string.
  256. $m->setOptionalDouble('2');
  257. $this->assertEquals(2.0, $m->getOptionalDouble(), '', MAX_FLOAT_DIFF);
  258. $m->setOptionalDouble('3.1');
  259. $this->assertEquals(3.1, $m->getOptionalDouble(), '', MAX_FLOAT_DIFF);
  260. }
  261. /**
  262. * @expectedException PHPUnit_Framework_Error
  263. */
  264. public function testDoubleFieldInvalidTypeFail()
  265. {
  266. $m = new TestMessage();
  267. $m->setOptionalDouble(new TestMessage());
  268. }
  269. /**
  270. * @expectedException PHPUnit_Framework_Error
  271. */
  272. public function testDoubleFieldInvalidStringFail()
  273. {
  274. $m = new TestMessage();
  275. $m->setOptionalDouble('abc');
  276. }
  277. #########################################################
  278. # Test bool field.
  279. #########################################################
  280. public function testBoolField()
  281. {
  282. $m = new TestMessage();
  283. // Set bool.
  284. $m->setOptionalBool(true);
  285. $this->assertSame(true, $m->getOptionalBool());
  286. // Set integer.
  287. $m->setOptionalBool(-1);
  288. $this->assertSame(true, $m->getOptionalBool());
  289. // Set float.
  290. $m->setOptionalBool(1.1);
  291. $this->assertSame(true, $m->getOptionalBool());
  292. // Set string.
  293. $m->setOptionalBool('');
  294. $this->assertSame(false, $m->getOptionalBool());
  295. }
  296. /**
  297. * @expectedException PHPUnit_Framework_Error
  298. */
  299. public function testBoolFieldInvalidStringFail()
  300. {
  301. $m = new TestMessage();
  302. $m->setOptionalBool(new TestMessage());
  303. }
  304. #########################################################
  305. # Test string field.
  306. #########################################################
  307. public function testStringField()
  308. {
  309. $m = new TestMessage();
  310. // Set string.
  311. $m->setOptionalString('abc');
  312. $this->assertSame('abc', $m->getOptionalString());
  313. // Set integer.
  314. $m->setOptionalString(1);
  315. $this->assertSame('1', $m->getOptionalString());
  316. // Set double.
  317. $m->setOptionalString(1.1);
  318. $this->assertSame('1.1', $m->getOptionalString());
  319. // Set bool.
  320. $m->setOptionalString(true);
  321. $this->assertSame('1', $m->getOptionalString());
  322. }
  323. /**
  324. * @expectedException PHPUnit_Framework_Error
  325. */
  326. public function testStringFieldInvalidUTF8Fail()
  327. {
  328. $m = new TestMessage();
  329. $hex = hex2bin("ff");
  330. $m->setOptionalString($hex);
  331. }
  332. #########################################################
  333. # Test bytes field.
  334. #########################################################
  335. public function testBytesField()
  336. {
  337. $m = new TestMessage();
  338. // Set string.
  339. $m->setOptionalBytes('abc');
  340. $this->assertSame('abc', $m->getOptionalBytes());
  341. // Set integer.
  342. $m->setOptionalBytes(1);
  343. $this->assertSame('1', $m->getOptionalBytes());
  344. // Set double.
  345. $m->setOptionalBytes(1.1);
  346. $this->assertSame('1.1', $m->getOptionalBytes());
  347. // Set bool.
  348. $m->setOptionalBytes(true);
  349. $this->assertSame('1', $m->getOptionalBytes());
  350. }
  351. public function testBytesFieldInvalidUTF8Success()
  352. {
  353. $m = new TestMessage();
  354. $hex = hex2bin("ff");
  355. $m->setOptionalBytes($hex);
  356. }
  357. #########################################################
  358. # Test message field.
  359. #########################################################
  360. public function testMessageField()
  361. {
  362. $m = new TestMessage();
  363. $sub_m = new TestMessage_Sub();
  364. $sub_m->setA(1);
  365. $m->setOptionalMessage($sub_m);
  366. $this->assertSame(1, $m->getOptionalMessage()->getA());
  367. $null = null;
  368. $m->setOptionalMessage($null);
  369. $this->assertNull($m->getOptionalMessage());
  370. }
  371. /**
  372. * @expectedException PHPUnit_Framework_Error
  373. */
  374. public function testMessageFieldWrongTypeFail()
  375. {
  376. $m = new TestMessage();
  377. $a = 1;
  378. $m->setOptionalMessage($a);
  379. }
  380. /**
  381. * @expectedException PHPUnit_Framework_Error
  382. */
  383. public function testMessageFieldWrongClassFail()
  384. {
  385. $m = new TestMessage();
  386. $m->setOptionalMessage(new TestMessage());
  387. }
  388. #########################################################
  389. # Test repeated field.
  390. #########################################################
  391. public function testRepeatedField()
  392. {
  393. $m = new TestMessage();
  394. $repeated_int32 = new RepeatedField(GPBType::INT32);
  395. $m->setRepeatedInt32($repeated_int32);
  396. $this->assertSame($repeated_int32, $m->getRepeatedInt32());
  397. }
  398. /**
  399. * @expectedException PHPUnit_Framework_Error
  400. */
  401. public function testRepeatedFieldWrongTypeFail()
  402. {
  403. $m = new TestMessage();
  404. $a = 1;
  405. $m->setRepeatedInt32($a);
  406. }
  407. /**
  408. * @expectedException PHPUnit_Framework_Error
  409. */
  410. public function testRepeatedFieldWrongObjectFail()
  411. {
  412. $m = new TestMessage();
  413. $m->setRepeatedInt32($m);
  414. }
  415. /**
  416. * @expectedException PHPUnit_Framework_Error
  417. */
  418. public function testRepeatedFieldWrongRepeatedTypeFail()
  419. {
  420. $m = new TestMessage();
  421. $repeated_int32 = new RepeatedField(GPBType::UINT32);
  422. $m->setRepeatedInt32($repeated_int32);
  423. }
  424. /**
  425. * @expectedException PHPUnit_Framework_Error
  426. */
  427. public function testRepeatedFieldWrongRepeatedMessageClassFail()
  428. {
  429. $m = new TestMessage();
  430. $repeated_message = new RepeatedField(GPBType::MESSAGE,
  431. TestMessage::class);
  432. $m->setRepeatedMessage($repeated_message);
  433. }
  434. #########################################################
  435. # Test oneof field.
  436. #########################################################
  437. public function testOneofField() {
  438. $m = new TestMessage();
  439. $m->setOneofInt32(1);
  440. $this->assertSame(1, $m->getOneofInt32());
  441. $this->assertSame(0.0, $m->getOneofFloat());
  442. $this->assertSame('', $m->getOneofString());
  443. $this->assertSame(NULL, $m->getOneofMessage());
  444. $m->setOneofFloat(2.0);
  445. $this->assertSame(0, $m->getOneofInt32());
  446. $this->assertSame(2.0, $m->getOneofFloat());
  447. $this->assertSame('', $m->getOneofString());
  448. $this->assertSame(NULL, $m->getOneofMessage());
  449. $m->setOneofString('abc');
  450. $this->assertSame(0, $m->getOneofInt32());
  451. $this->assertSame(0.0, $m->getOneofFloat());
  452. $this->assertSame('abc', $m->getOneofString());
  453. $this->assertSame(NULL, $m->getOneofMessage());
  454. $sub_m = new TestMessage_Sub();
  455. $sub_m->setA(1);
  456. $m->setOneofMessage($sub_m);
  457. $this->assertSame(0, $m->getOneofInt32());
  458. $this->assertSame(0.0, $m->getOneofFloat());
  459. $this->assertSame('', $m->getOneofString());
  460. $this->assertSame(1, $m->getOneofMessage()->getA());
  461. }
  462. }