JSONPathSliceAccessTest.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. <?php
  2. namespace Flow\JSONPath\Test;
  3. use Flow\JSONPath\JSONPath;
  4. class JSONPathSliceAccessTest extends \PHPUnit_Framework_TestCase
  5. {
  6. public function sliceDataProvider()
  7. {
  8. return [
  9. // path, data, expected
  10. [
  11. '$.data[1:3]',
  12. [
  13. 'data' => [
  14. 'foo0',
  15. 'foo1',
  16. 'foo2',
  17. 'foo3',
  18. 'foo4',
  19. 'foo5',
  20. ]
  21. ],
  22. [
  23. 'foo1',
  24. 'foo2',
  25. 'foo3',
  26. ]
  27. ],
  28. [
  29. '$.data[4:]',
  30. [
  31. 'data' => [
  32. 'foo0',
  33. 'foo1',
  34. 'foo2',
  35. 'foo3',
  36. 'foo4',
  37. 'foo5',
  38. ]
  39. ],
  40. [
  41. 'foo4',
  42. 'foo5',
  43. ]
  44. ],
  45. [
  46. '$.data[:2]',
  47. [
  48. 'data' => [
  49. 'foo0',
  50. 'foo1',
  51. 'foo2',
  52. 'foo3',
  53. 'foo4',
  54. 'foo5',
  55. ]
  56. ],
  57. [
  58. 'foo0',
  59. 'foo1',
  60. 'foo2',
  61. ]
  62. ],
  63. [
  64. '$.data[:]',
  65. [
  66. 'data' => [
  67. 'foo0',
  68. 'foo1',
  69. 'foo2',
  70. 'foo3',
  71. 'foo4',
  72. 'foo5',
  73. ]
  74. ],
  75. [
  76. 'foo0',
  77. 'foo1',
  78. 'foo2',
  79. 'foo3',
  80. 'foo4',
  81. 'foo5',
  82. ]
  83. ],
  84. [
  85. '$.data[-1]',
  86. [
  87. 'data' => [
  88. 'foo0',
  89. 'foo1',
  90. 'foo2',
  91. 'foo3',
  92. 'foo4',
  93. 'foo5',
  94. ]
  95. ],
  96. [
  97. 'foo5',
  98. ]
  99. ],
  100. [
  101. '$.data[-2:]',
  102. [
  103. 'data' => [
  104. 'foo0',
  105. 'foo1',
  106. 'foo2',
  107. 'foo3',
  108. 'foo4',
  109. 'foo5',
  110. ]
  111. ],
  112. [
  113. 'foo4',
  114. 'foo5',
  115. ]
  116. ],
  117. [
  118. '$.data[:-2]',
  119. [
  120. 'data' => [
  121. 'foo0',
  122. 'foo1',
  123. 'foo2',
  124. 'foo3',
  125. 'foo4',
  126. 'foo5',
  127. ]
  128. ],
  129. [
  130. 'foo0',
  131. 'foo1',
  132. 'foo2',
  133. 'foo3',
  134. ]
  135. ],
  136. [
  137. '$.data[::2]',
  138. [
  139. 'data' => [
  140. 'foo0',
  141. 'foo1',
  142. 'foo2',
  143. 'foo3',
  144. 'foo4',
  145. 'foo5',
  146. ]
  147. ],
  148. [
  149. 'foo0',
  150. 'foo2',
  151. 'foo4'
  152. ]
  153. ],
  154. [
  155. '$.data[2::2]',
  156. [
  157. 'data' => [
  158. 'foo0',
  159. 'foo1',
  160. 'foo2',
  161. 'foo3',
  162. 'foo4',
  163. 'foo5',
  164. ]
  165. ],
  166. [
  167. 'foo2',
  168. 'foo4'
  169. ]
  170. ],
  171. [
  172. '$.data[:-2:2]',
  173. [
  174. 'data' => [
  175. 'foo0',
  176. 'foo1',
  177. 'foo2',
  178. 'foo3',
  179. 'foo4',
  180. 'foo5',
  181. ]
  182. ],
  183. [
  184. 'foo0',
  185. 'foo2'
  186. ]
  187. ],
  188. [
  189. '$.data[1:5:2]',
  190. [
  191. 'data' => [
  192. 'foo0',
  193. 'foo1',
  194. 'foo2',
  195. 'foo3',
  196. 'foo4',
  197. 'foo5',
  198. ]
  199. ],
  200. [
  201. 'foo1',
  202. 'foo3',
  203. 'foo5',
  204. ]
  205. ]
  206. ];
  207. }
  208. /** @dataProvider sliceDataProvider */
  209. public function testSlice($path, $data, $expected)
  210. {
  211. $jsonPath = new JSONPath($data);
  212. $result = $jsonPath->find($path)->data();
  213. $this->assertEquals($expected, $result);
  214. }
  215. }