HasDataTraitTest.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530
  1. <?php
  2. namespace AlibabaCloud\Client\Tests\LowerthanVersion7_2\Unit\Traits;
  3. use PHPUnit\Framework\TestCase;
  4. /**
  5. * Class HasDataTraitTest
  6. *
  7. * @package AlibabaCloud\Client\Tests\LowerthanVersion7_2\Unit\Traits
  8. *
  9. * @coversDefaultClass \AlibabaCloud\Client\Traits\HasDataTrait
  10. */
  11. class HasDataTraitTest extends TestCase
  12. {
  13. /**
  14. * @dataProvider searchData
  15. *
  16. * @param array $data
  17. * @param string $expression
  18. * @param mixed $expected
  19. */
  20. public function testSearch(array $data, $expression, $expected)
  21. {
  22. // Setup
  23. $result = new HasDataTraitClass($data);
  24. // Assert
  25. self::assertEquals($expected, $result->search($expression));
  26. }
  27. /**
  28. * @return array
  29. */
  30. public function searchData()
  31. {
  32. return [
  33. [
  34. // Data
  35. [
  36. 'key' => [
  37. 'name' => 'value',
  38. ],
  39. ],
  40. // Expression
  41. 'key.name',
  42. // Expected
  43. 'value',
  44. ],
  45. [
  46. // Data
  47. [
  48. 'key' => [
  49. 'name' => 'value',
  50. ],
  51. ],
  52. // Expression
  53. 'key',
  54. // Expected
  55. ['name' => 'value',],
  56. ],
  57. [
  58. // Data
  59. [
  60. 'key' => [
  61. 'name' => [
  62. 'value',
  63. ],
  64. ],
  65. ],
  66. // Expression
  67. 'key.name',
  68. // Expected
  69. ['value'],
  70. ],
  71. [
  72. // Data
  73. [
  74. 'key' => [
  75. 'name' => [
  76. 'a',
  77. 'b',
  78. 'c',
  79. ],
  80. ],
  81. ],
  82. // Expression
  83. 'key.name[2]',
  84. // Expected
  85. 'c',
  86. ],
  87. ];
  88. }
  89. public function testAdd()
  90. {
  91. // Setup
  92. $result = new HasDataTraitClass([]);
  93. // Assert
  94. self::assertEquals([], $result->all());
  95. // Test
  96. $result->add('a.b.c', 'value');
  97. // Assert
  98. self::assertEquals(
  99. [
  100. 'a' => [
  101. 'b' => [
  102. 'c' => 'value',
  103. ],
  104. ],
  105. ],
  106. $result->all()
  107. );
  108. // Test
  109. $result->add('b');
  110. // Assert
  111. self::assertEquals(
  112. [
  113. 'a' => [
  114. 'b' => [
  115. 'c' => 'value',
  116. ],
  117. ],
  118. 'b' => null,
  119. ],
  120. $result->all()
  121. );
  122. }
  123. public function testClear()
  124. {
  125. // Setup
  126. $result = new HasDataTraitClass([]);
  127. // Test
  128. $result->add('a.b.c', 'value');
  129. // Assert
  130. self::assertEquals(
  131. [
  132. 'a' => [
  133. 'b' => [
  134. 'c' => 'value',
  135. ],
  136. ],
  137. ],
  138. $result->all()
  139. );
  140. // Test
  141. $result->clear('a.b');
  142. // Assert
  143. self::assertEquals(
  144. [
  145. 'a' => [
  146. 'b' => [],
  147. ],
  148. ],
  149. $result->all()
  150. );
  151. // Test
  152. $result->clear('a');
  153. // Assert
  154. self::assertEquals(['a' => [],], $result->all());
  155. // Test
  156. $result->clear();
  157. // Assert
  158. self::assertEquals([], $result->all());
  159. }
  160. public function testDelete()
  161. {
  162. // Setup
  163. $result = new HasDataTraitClass([]);
  164. // Test
  165. $result->add('a.b.c', 'value');
  166. $result->delete('a.b.c');
  167. // Assert
  168. self::assertEquals(
  169. [
  170. 'a' => [
  171. 'b' => [],
  172. ],
  173. ],
  174. $result->all()
  175. );
  176. }
  177. public function testFlatten()
  178. {
  179. // Setup
  180. $result = new HasDataTraitClass([]);
  181. // Test
  182. $result->add('a.b.c', 'value');
  183. $result->add('b.c.d.e', 'value');
  184. // Assert
  185. self::assertEquals(
  186. [
  187. 'a.b.c' => 'value',
  188. 'b.c.d.e' => 'value',
  189. ],
  190. $result->flatten()
  191. );
  192. }
  193. public function testGet()
  194. {
  195. // Setup
  196. $result = new HasDataTraitClass([]);
  197. // Test
  198. $result->add('a.b.c', 'value');
  199. $result->add('b.c.d.e', 'value');
  200. // Assert
  201. self::assertEquals(null, $result->get('null'));
  202. // Assert
  203. self::assertEquals(
  204. [
  205. 'b' => [
  206. 'c' => 'value',
  207. ],
  208. ],
  209. $result->get('a')
  210. );
  211. // Assert
  212. self::assertEquals(
  213. [
  214. 'a' => [
  215. 'b' => [
  216. 'c' => 'value',
  217. ],
  218. ],
  219. 'b' => [
  220. 'c' => [
  221. 'd' => [
  222. 'e' => 'value',
  223. ],
  224. ],
  225. ],
  226. ],
  227. $result->get()
  228. );
  229. }
  230. public function testHas()
  231. {
  232. // Setup
  233. $result = new HasDataTraitClass([]);
  234. // Test
  235. $result->add('a.b.c', 'value');
  236. $result->add('b.c.d.e', 'value');
  237. // Assert
  238. self::assertEquals(true, $result->has('a'));
  239. self::assertEquals(true, $result->has('a.b'));
  240. self::assertEquals(true, $result->has('a.b.c'));
  241. self::assertEquals(true, $result->has('b'));
  242. self::assertEquals(true, $result->has('b.c'));
  243. self::assertEquals(true, $result->has('b.c.d'));
  244. self::assertEquals(true, $result->has('b.c.d.e'));
  245. self::assertEquals(false, $result->has('e'));
  246. $result->clear();
  247. self::assertEquals(false, $result->has('a'));
  248. }
  249. public function testSetAndIsEmpty()
  250. {
  251. // Setup
  252. $result = new HasDataTraitClass([]);
  253. // Test
  254. $result->set('a.b.c', 'value');
  255. // Assert
  256. self::assertEquals('value', $result->get('a.b.c'));
  257. self::assertEquals(false, $result->isEmpty('a.b.c'));
  258. self::assertEquals(true, $result->isEmpty('a.b.c.d'));
  259. // Test
  260. $result->set('b.c.d.e', 'value');
  261. // Assert
  262. self::assertEquals('value', $result->get('b.c.d.e'));
  263. self::assertEquals(false, $result->isEmpty('b.c.d.e'));
  264. }
  265. public function testSetReference()
  266. {
  267. // Setup
  268. $result = new HasDataTraitClass([]);
  269. // Test
  270. $result->set('a.b.c', 'value');
  271. $array = [1, 2, 3];
  272. $result->setReference($array);
  273. // Assert
  274. self::assertEquals($array, $result->all());
  275. }
  276. public function testToJson()
  277. {
  278. // Setup
  279. $result = new HasDataTraitClass([]);
  280. // Test
  281. $result->set('a.b.c', 'value');
  282. // Assert
  283. self::assertEquals('{"a":{"b":{"c":"value"}}}', $result->toJson());
  284. }
  285. public function testToArray()
  286. {
  287. // Setup
  288. $result = new HasDataTraitClass([]);
  289. // Test
  290. $result->set('a.b.c', 'value');
  291. // Assert
  292. self::assertEquals($result->all(), $result->toArray());
  293. }
  294. public function testOffsetExists()
  295. {
  296. // Setup
  297. $result = new HasDataTraitClass([]);
  298. // Test
  299. $result->set('a.b.c', 'value');
  300. // Assert
  301. self::assertEquals(true, isset($result['a']));
  302. self::assertEquals(true, isset($result['a.b.c']));
  303. self::assertEquals(false, isset($result['b']));
  304. }
  305. public function testOffsetGet()
  306. {
  307. // Setup
  308. $result = new HasDataTraitClass([]);
  309. // Test
  310. $result->set('a.b.c', 'value');
  311. // Assert
  312. self::assertEquals('value', $result['a.b.c']);
  313. self::assertEquals(null, $result['b']);
  314. }
  315. public function testOffsetSet()
  316. {
  317. // Setup
  318. $result = new HasDataTraitClass([]);
  319. // Test
  320. $result->set('a.b.c', 'value');
  321. $result['d'] = 'd';
  322. $result['d.e.f'] = 'f';
  323. // Assert
  324. self::assertEquals('value', $result['a.b.c']);
  325. self::assertEquals(
  326. [
  327. 'e' => [
  328. 'f' => 'f',
  329. ],
  330. ],
  331. $result['d']
  332. );
  333. self::assertEquals('f', $result['d.e.f']);
  334. }
  335. public function testOffsetUnSet()
  336. {
  337. // Setup
  338. $result = new HasDataTraitClass([]);
  339. // Test
  340. $result['d.e.f'] = 'f';
  341. // Assert
  342. self::assertEquals(
  343. [
  344. 'e' => [
  345. 'f' => 'f',
  346. ],
  347. ],
  348. $result['d']
  349. );
  350. // Test
  351. unset($result['d.e.f']);
  352. // Assert
  353. self::assertEquals(
  354. [
  355. 'e' => [
  356. ],
  357. ],
  358. $result['d']
  359. );
  360. // Test
  361. unset($result['d.e']);
  362. // Assert
  363. self::assertEquals([], $result['d']);
  364. }
  365. public function testCount()
  366. {
  367. // Setup
  368. $result = new HasDataTraitClass([]);
  369. // Assert
  370. self::assertEquals(0, $result->count());
  371. // Test
  372. $result['d.e.f'] = 'f';
  373. // Assert
  374. self::assertEquals(1, $result->count());
  375. // Test
  376. $result['e'] = 'e';
  377. // Assert
  378. self::assertEquals(2, $result->count());
  379. }
  380. public function testGetIterator()
  381. {
  382. // Setup
  383. $result = new HasDataTraitClass([]);
  384. // Assert
  385. self::assertInstanceOf(\ArrayIterator::class, $result->getIterator());
  386. }
  387. public function testJsonSerialize()
  388. {
  389. // Setup
  390. $result = new HasDataTraitClass([]);
  391. $result['a.b'] = 'c';
  392. // Assert
  393. self::assertEquals(
  394. [
  395. 'a' => [
  396. 'b' => 'c',
  397. ],
  398. ],
  399. $result->jsonSerialize()
  400. );
  401. }
  402. public function testObjectGet()
  403. {
  404. // Setup
  405. $result = new HasDataTraitClass([]);
  406. $result['a.b'] = 'c';
  407. $result['d'] = 'e';
  408. // Assert
  409. self::assertEquals('c', $result->a->b);
  410. self::assertEquals('e', $result->d);
  411. self::assertEquals(null, $result->null);
  412. }
  413. public function testObjectSet()
  414. {
  415. // Setup
  416. $result = new HasDataTraitClass([]);
  417. $result->a = 'a';
  418. $result->b = 'b';
  419. // Assert
  420. self::assertEquals('a', $result->a);
  421. self::assertEquals('b', $result->b);
  422. }
  423. public function testObjectIsSet()
  424. {
  425. // Setup
  426. $result = new HasDataTraitClass([]);
  427. $result->a = 'a';
  428. // Assert
  429. self::assertEquals(true, isset($result->a));
  430. self::assertEquals(false, isset($result->b));
  431. }
  432. public function testObjectUnSet()
  433. {
  434. // Setup
  435. $result = new HasDataTraitClass([]);
  436. $result->a = 'a';
  437. // Assert
  438. self::assertEquals(true, isset($result->a));
  439. // Test
  440. unset($result->a);
  441. // Assert
  442. self::assertEquals(false, isset($result->a));
  443. }
  444. }