schemator-php

Форк
0
/
NestedAccessorGetTest.php 
2582 строки · 78.8 Кб
1
<?php
2

3
declare(strict_types=1);
4

5
namespace Smoren\Schemator\Tests\Unit\NestedAccessor;
6

7
use Smoren\Schemator\Components\NestedAccessor;
8
use Smoren\Schemator\Exceptions\PathNotExistException;
9

10
class NestedAccessorGetTest extends \Codeception\Test\Unit
11
{
12
    /**
13
     * @dataProvider dataProviderForStrictSuccessArray
14
     * @dataProvider dataProviderForStrictSuccessArrayObject
15
     * @dataProvider dataProviderForStrictSuccessStdClass
16
     */
17
    public function testStrictSuccess($source, $path, $expected)
18
    {
19
        // Given
20
        $accessor = new NestedAccessor($source);
21

22
        // When
23
        $actual = $accessor[$path];
24

25
        // Then
26
        $this->assertEquals($expected, $actual);
27
    }
28

29
    /**
30
     * @dataProvider dataProviderForStrictErrorArray
31
     */
32
    public function testStrictError($source, $path, $expected)
33
    {
34
        // Given
35
        $accessor = new NestedAccessor($source);
36

37
        try {
38
            // When
39
            $accessor[$path];
40
            $this->fail();
41
        } catch (PathNotExistException $e) {
42
            // Then
43
            $this->assertSame("Key '{$expected[0]}' is not found in path '{$expected[1]}'", $e->getMessage());
44
            $this->assertSame($expected, [$e->getKey(), $e->getPathString()]);
45
        }
46
    }
47

48
    /**
49
     * @dataProvider dataProviderForStrictSuccessArray
50
     * @dataProvider dataProviderForStrictSuccessArrayObject
51
     * @dataProvider dataProviderForStrictSuccessStdClass
52
     * @dataProvider dataProviderForNonStrictArray
53
     * @dataProvider dataProviderForNonStrictArrayObject
54
     * @dataProvider dataProviderForNonStrictStdClass
55
     */
56
    public function testNonStrict($source, $path, $expected)
57
    {
58
        // Given
59
        $accessor = new NestedAccessor($source);
60

61
        // When
62
        $actual = $accessor->get($path, false);
63

64
        // Then
65
        $this->assertEquals($expected, $actual);
66
    }
67

68
    public function testBadPathError()
69
    {
70
        // Given
71
        $accessor = new NestedAccessor($source);
72

73
        $source = ['a' => 1];
74
        $path = (object)['a', 'b', 'c'];
75

76
        try {
77
            // When
78
            $accessor->get($path);
79
            $this->fail();
80
        } catch (\InvalidArgumentException $e) {
81
            // Then
82
            $this->assertSame('Path must be numeric, string or array, object given', $e->getMessage());
83
        }
84
    }
85

86
    public function dataProviderForStrictSuccessArray(): array
87
    {
88
        return [
89
            [
90
                [],
91
                [],
92
                [],
93
            ],
94
            [
95
                [],
96
                null,
97
                [],
98
            ],
99
            [
100
                [],
101
                '*',
102
                [],
103
            ],
104
            [
105
                ['a' => 1],
106
                [],
107
                ['a' => 1],
108
            ],
109
            [
110
                [1, 2, 3],
111
                null,
112
                [1, 2, 3],
113
            ],
114
            [
115
                [1, 2, 3],
116
                '*',
117
                [1, 2, 3],
118
            ],
119
            [
120
                [1, 2, 3, 'a' => 4],
121
                '*',
122
                [1, 2, 3, 4],
123
            ],
124
            [
125
                [1, 2, 3, 'a' => 4],
126
                0,
127
                1,
128
            ],
129
            [
130
                [1, 2, 3, 'a' => 4],
131
                '0',
132
                1,
133
            ],
134
            [
135
                [1, 2, 3, 'a' => 4],
136
                '2',
137
                3,
138
            ],
139
            [
140
                [1, 2, 3, 'a' => 4],
141
                2,
142
                3,
143
            ],
144
            [
145
                [1, 2, 3, 'a' => 4],
146
                'a',
147
                4,
148
            ],
149
            [
150
                [1, 2, 3, 'a' => [1, 2, 'a' => 3]],
151
                'a',
152
                [1, 2, 'a' => 3],
153
            ],
154
            [
155
                [1, 2, 3, 'a' => ['b' => [11, 12], 'c' => [22, 23]]],
156
                'a.*',
157
                [[11, 12], [22, 23]],
158
            ],
159
            [
160
                [1, 2, 3, 'a' => ['b' => [11, 12], 'c' => [22, 23]]],
161
                'a.*.|.0',
162
                [11, 12],
163
            ],
164
            [
165
                [1, 2, 3, 'a' => ['b' => [11], 'c' => [22]]],
166
                'a.*.*',
167
                [11, 22],
168
            ],
169
            [
170
                [1, 2, 3, 'a' => ['b' => [11, 22], 'c' => [33, 44]]],
171
                'a.*',
172
                [[11, 22], [33, 44]],
173
            ],
174
            [
175
                [1, 2, 3, 'a' => ['b' => [11, 22], 'c' => [33, 44]]],
176
                'a.*.*',
177
                [11, 22, 33, 44],
178
            ],
179
            [
180
                [1, 2, 3, 'a' => ['b' => [11, 22], 'c' => [33, 44]]],
181
                'a.*.0',
182
                [11, 33],
183
            ],
184
            [
185
                [1, 2, 3, 'a' => [[11, 22], [33, 44]]],
186
                'a.*',
187
                [[11, 22], [33, 44]],
188
            ],
189
            [
190
                [1, 2, 3, 'a' => [[11, 22], [33, 44]]],
191
                'a.*.*',
192
                [11, 22, 33, 44],
193
            ],
194
            [
195
                [1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
196
                'a.*.0.0',
197
                [11, 33],
198
            ],
199
            [
200
                [1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
201
                'a.*.0.*',
202
                [11, 22, 33, 44],
203
            ],
204
            [
205
                [1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
206
                'a.*.0.1',
207
                [22, 44],
208
            ],
209
            [
210
                [1, 2, 3, 'a' => [1, 2, 'b' => ['c', 'd', 'e']]],
211
                'a.b',
212
                ['c', 'd', 'e'],
213
            ],
214
            [
215
                [1, 2, 3, 'a' => [1, 2, 'b' => ['c', 'd', 'e']]],
216
                'a.b.*',
217
                ['c', 'd', 'e'],
218
            ],
219
            [
220
                [1, 2, 3, 'a' => ['b' => ['c', 'd', 'e'], [11, 22]]],
221
                'a.*.*',
222
                ['c', 'd', 'e', 11, 22],
223
            ],
224
            [
225
                [1, 2, 3, 'a' => ['b' => [['c'], ['d'], ['e']], [[11], [22, 33]]]],
226
                'a.*.*.*',
227
                ['c', 'd', 'e', 11, 22, 33],
228
            ],
229
            [
230
                [1, 2, 3, 'a' => ['b' => [['c'], ['d'], ['e']], [[11], [22, 33]]]],
231
                'a.*.*.0',
232
                ['c', 'd', 'e', 11, 22],
233
            ],
234
            [
235
                [1, 2, 3, 'a' => ['b' => ['c', 'd', 'e'], [11, 22]]],
236
                ['a', '*', '*'],
237
                ['c', 'd', 'e', 11, 22],
238
            ],
239
            [
240
                [
241
                    'a' => [1, 2, 3],
242
                    'b' => [11, 22, 33],
243
                    'c' => [111, 222, 333],
244
                ],
245
                '*.0',
246
                [1, 11, 111],
247
            ],
248
            [
249
                [
250
                    'a' => [1, 2, 3],
251
                    'b' => [11, 22, 33],
252
                    'c' => [111, 222, 333],
253
                ],
254
                ['*', 0],
255
                [1, 11, 111],
256
            ],
257
            [
258
                [
259
                    'a' => [1, 2, 3],
260
                    'b' => [11, 22, 33],
261
                    'c' => [111, 222, 333],
262
                ],
263
                ['*', '2'],
264
                [3, 33, 333],
265
            ],
266
            [
267
                [
268
                    'a' => [1, 2, [3]],
269
                    'b' => [11, 22, [33]],
270
                    'c' => [111, 222, [333]],
271
                ],
272
                ['*', '2'],
273
                [[3], [33], [333]],
274
            ],
275
            [
276
                [
277
                    'a' => [1, 2, [3]],
278
                    'b' => [11, 22, [33]],
279
                    'c' => [111, 222, [333]],
280
                ],
281
                ['*', '2', '*'],
282
                [3, 33, 333],
283
            ],
284
            [
285
                [
286
                    'a' => [1, 2, 3],
287
                    'b' => [11, 22, 33],
288
                    'c' => [111, 222, 333],
289
                ],
290
                '*.*',
291
                [1, 2, 3, 11, 22, 33, 111, 222, 333],
292
            ],
293
            [
294
                [
295
                    [
296
                        'a' => [1, 2, 3],
297
                        'b' => [11, 22, 33],
298
                        'c' => [111, 222, 333],
299
                    ],
300
                ],
301
                '*.*.0',
302
                [1, 11, 111],
303
            ],
304
            [
305
                [
306
                    [
307
                        [
308
                            'a' => [1, 2, 3],
309
                            'b' => [11, 22, 33],
310
                            'c' => [111, 222, 333],
311
                        ],
312
                    ],
313
                    [
314
                        [
315
                            'a' => [4, 5],
316
                            'b' => [44, 55],
317
                            'c' => [444, 555],
318
                        ],
319
                    ],
320
                ],
321
                '*.*.*.0',
322
                [1, 11, 111, 4, 44, 444],
323
            ],
324
            [
325
                [
326
                    [
327
                        [
328
                            'a' => [1, 2, 3],
329
                            'b' => [11, 22, 33],
330
                            'c' => [111, 222, 333],
331
                        ],
332
                    ],
333
                    [
334
                        [
335
                            'a' => [4, 5],
336
                            'b' => [44, 55],
337
                            'c' => [444, 555],
338
                        ],
339
                    ],
340
                ],
341
                '*.*.a',
342
                [[1, 2, 3], [4, 5]],
343
            ],
344
            [
345
                [
346
                    [
347
                        [
348
                            'a' => [1, 2, 3],
349
                            'b' => [11, 22, 33],
350
                            'c' => [111, 222, 333],
351
                        ],
352
                    ],
353
                    [
354
                        [
355
                            'a' => [4, 5],
356
                            'b' => [44, 55],
357
                            'c' => [444, 555],
358
                        ],
359
                    ],
360
                ],
361
                '*.*.a.0',
362
                [1, 4],
363
            ],
364
            [
365
                [
366
                    [
367
                        [
368
                            'a' => [1, 2, 3],
369
                            'b' => [11, 22, 33],
370
                            'c' => [111, 222, 333],
371
                        ],
372
                    ],
373
                    [
374
                        [
375
                            'a' => [4, 5],
376
                            'b' => [44, 55],
377
                            'c' => [444, 555],
378
                        ],
379
                    ],
380
                ],
381
                '*.*.a.*',
382
                [1, 2, 3, 4, 5],
383
            ],
384
            [
385
                [
386
                    [
387
                        [
388
                            'a' => [1, 2, 3],
389
                            'b' => [11, 22, 33],
390
                            'c' => [111, 222, 333],
391
                        ],
392
                    ],
393
                    [
394
                        [
395
                            'a' => [4, 5],
396
                            'b' => [44, 55],
397
                            'c' => [444, 555],
398
                        ],
399
                    ],
400
                ],
401
                '*.*.b.|.1',
402
                [44, 55],
403
            ],
404
            [
405
                [
406
                    'first' => [
407
                        [
408
                            'a' => [1, 2, 3],
409
                            'b' => [11, 22, 33],
410
                            'c' => [111, 222, 333],
411
                        ],
412
                    ],
413
                    'second' => [
414
                        [
415
                            'a' => [4, 5],
416
                            'b' => [44, 55],
417
                        ],
418
                    ],
419
                ],
420
                '*.*.*.1',
421
                [2, 22, 222, 5, 55],
422
            ],
423
            [
424
                [
425
                    'first' => [
426
                        [
427
                            [
428
                                'a' => [],
429
                                'b' => ['aaa'],
430
                                'c' => ['bbb'],
431
                            ],
432
                        ],
433
                    ],
434
                    'second' => [
435
                        [
436
                            [
437
                                [1, 2, 3],
438
                                [11, 22, 33],
439
                                [111, 222, 333],
440
                            ],
441
                            [
442
                                [1111],
443
                                [11111],
444
                            ],
445
                        ],
446
                        [
447
                            [
448
                                [111111],
449
                                [1111111],
450
                            ],
451
                        ],
452
                    ],
453
                ],
454
                'second.*.*.*.0',
455
                [1, 11, 111, 1111, 11111, 111111, 1111111],
456
            ],
457
            [
458
                [
459
                    'first' => [
460
                        [
461
                            [
462
                                'a' => [],
463
                                'b' => ['aaa'],
464
                                'c' => ['bbb'],
465
                            ],
466
                        ],
467
                    ],
468
                    'second' => [
469
                        [
470
                            [
471
                                [1, 2, 3],
472
                                [11, 22, 33],
473
                                [111, 222, 333],
474
                            ],
475
                            [
476
                                [1111],
477
                                [11111],
478
                            ],
479
                        ],
480
                        [
481
                            [
482
                                [111111],
483
                                [1111111],
484
                            ],
485
                        ],
486
                    ],
487
                ],
488
                'second.*.*.0.0',
489
                [1, 1111, 111111],
490
            ],
491
            [
492
                [
493
                    'first' => [
494
                        [
495
                            [
496
                                'a' => [],
497
                                'b' => ['aaa'],
498
                                'c' => ['bbb'],
499
                            ],
500
                        ],
501
                    ],
502
                    'second' => [
503
                        [
504
                            [
505
                                [1, 2, 3],
506
                                [11, 22, 33],
507
                                [111, 222, 333],
508
                            ],
509
                            [
510
                                [1111],
511
                                [11111],
512
                            ],
513
                        ],
514
                        [
515
                            [
516
                                [111111],
517
                                [1111111],
518
                            ],
519
                        ],
520
                    ],
521
                ],
522
                'second.*.*.0.*',
523
                [1, 2, 3, 1111, 111111],
524
            ],
525
            [
526
                [
527
                    'first' => [
528
                        [
529
                            [
530
                                'a' => [],
531
                                'b' => ['aaa'],
532
                                'c' => ['bbb'],
533
                            ],
534
                        ],
535
                    ],
536
                    'second' => [
537
                        [
538
                            [
539
                                [1, 2, 3],
540
                                [11, 22, 33],
541
                                [111, 222, 333],
542
                            ],
543
                            [
544
                                [1111],
545
                                [2222],
546
                            ],
547
                        ],
548
                        [
549
                            [
550
                                [11111],
551
                                [222222],
552
                            ],
553
                        ],
554
                    ],
555
                ],
556
                'second.0.0.0',
557
                [1, 2, 3],
558
            ],
559
            [
560
                [
561
                    'a' => [
562
                        [
563
                            'b' => [
564
                                [
565
                                    'c' => [
566
                                        [
567
                                            'd' => 1,
568
                                            'e' => [1, 2, 3],
569
                                        ]
570
                                    ],
571
                                    'f' => [
572
                                        [
573
                                            'd' => 2,
574
                                            'e' => [4, 5, 6],
575
                                        ]
576
                                    ],
577
                                ],
578
                            ],
579
                            'i' => [
580
                                [
581
                                    'j' => [
582
                                        [
583
                                            'd' => 3,
584
                                            'e' => [7, 8, 9],
585
                                        ]
586
                                    ]
587
                                ],
588
                            ],
589
                        ],
590
                    ],
591
                ],
592
                'a.*****.d',
593
                [1, 2, 3],
594
            ],
595
            [
596
                [
597
                    'a' => [
598
                        [
599
                            'b' => [
600
                                [
601
                                    'c' => [
602
                                        [
603
                                            'd' => 1,
604
                                            'e' => [1, 2, 3],
605
                                        ]
606
                                    ],
607
                                    'f' => [
608
                                        [
609
                                            'd' => 2,
610
                                            'e' => [4, 5, 6],
611
                                        ]
612
                                    ],
613
                                ],
614
                            ],
615
                            'i' => [
616
                                [
617
                                    'j' => [
618
                                        [
619
                                            'd' => 3,
620
                                            'e' => [7, 8, 9],
621
                                        ]
622
                                    ]
623
                                ],
624
                            ],
625
                        ],
626
                    ],
627
                ],
628
                'a.*****.e',
629
                [[1, 2, 3], [4, 5, 6], [7, 8, 9]],
630
            ],
631
            [
632
                [
633
                    'a' => [
634
                        [
635
                            'b' => [
636
                                [
637
                                    'c' => [
638
                                        [
639
                                            'd' => 1,
640
                                            'e' => [1, 2, 3],
641
                                        ]
642
                                    ],
643
                                    'f' => [
644
                                        [
645
                                            'd' => 2,
646
                                            'e' => [4, 5, 6],
647
                                        ]
648
                                    ],
649
                                ],
650
                            ],
651
                            'i' => [
652
                                [
653
                                    'j' => [
654
                                        [
655
                                            'd' => 3,
656
                                            'e' => [7, 8, 9],
657
                                        ]
658
                                    ]
659
                                ],
660
                            ],
661
                        ],
662
                    ],
663
                ],
664
                'a.*****.|.1.e',
665
                [4, 5, 6],
666
            ],
667
        ];
668
    }
669

670
    public function dataProviderForStrictSuccessArrayObject(): array
671
    {
672
        return [
673
            [
674
                new \ArrayObject([]),
675
                [],
676
                new \ArrayObject([]),
677
            ],
678
            [
679
                new \ArrayObject([]),
680
                null,
681
                new \ArrayObject([]),
682
            ],
683
            [
684
                [],
685
                '*',
686
                [],
687
            ],
688
            [
689
                new \ArrayObject(['a' => 1]),
690
                [],
691
                new \ArrayObject(['a' => 1]),
692
            ],
693
            [
694
                new \ArrayObject([1, 2, 3]),
695
                null,
696
                new \ArrayObject([1, 2, 3]),
697
            ],
698
            [
699
                new \ArrayObject([1, 2, 3]),
700
                '*',
701
                [1, 2, 3],
702
            ],
703
            [
704
                new \ArrayObject([1, 2, 3, 'a' => 4]),
705
                '*',
706
                [1, 2, 3, 4],
707
            ],
708
            [
709
                new \ArrayObject([1, 2, 3, 'a' => 4]),
710
                0,
711
                1,
712
            ],
713
            [
714
                new \ArrayObject([1, 2, 3, 'a' => 4]),
715
                '0',
716
                1,
717
            ],
718
            [
719
                new \ArrayObject([1, 2, 3, 'a' => 4]),
720
                '2',
721
                3,
722
            ],
723
            [
724
                new \ArrayObject([1, 2, 3, 'a' => 4]),
725
                2,
726
                3,
727
            ],
728
            [
729
                new \ArrayObject([1, 2, 3, 'a' => 4]),
730
                'a',
731
                4,
732
            ],
733
            [
734
                new \ArrayObject([1, 2, 3, 'a' => [1, 2, 'a' => 3]]),
735
                'a',
736
                [1, 2, 'a' => 3],
737
            ],
738
            [
739
                new \ArrayObject([1, 2, 3, 'a' => [1, 2, 'a' => 3]]),
740
                'a.*',
741
                [1, 2, 3],
742
            ],
743
            [
744
                new \ArrayObject([1, 2, 3, 'a' => ['b' => 11, 'c' => 22]]),
745
                'a.*',
746
                [11, 22],
747
            ],
748
            [
749
                new \ArrayObject([1, 2, 3, 'a' => ['b' => [11], 'c' => [22]]]),
750
                'a.*',
751
                [[11], [22]],
752
            ],
753
            [
754
                new \ArrayObject([1, 2, 3, 'a' => ['b' => [11], 'c' => [22]]]),
755
                'a.*.0',
756
                [11, 22],
757
            ],
758
            [
759
                new \ArrayObject([1, 2, 3, 'a' => ['b' => [11], 'c' => [22]]]),
760
                'a.*.*',
761
                [11, 22],
762
            ],
763
            [
764
                new \ArrayObject([1, 2, 3, 'a' => ['b' => [11, 22], 'c' => [33, 44]]]),
765
                'a.*.*',
766
                [11, 22, 33, 44],
767
            ],
768
            [
769
                new \ArrayObject([1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]]),
770
                'a.*.0.0',
771
                [11, 33],
772
            ],
773
            [
774
                new \ArrayObject([1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]]),
775
                'a.*.0.*',
776
                [11, 22, 33, 44],
777
            ],
778
            [
779
                new \ArrayObject([1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]]),
780
                'a.*.0.1',
781
                [22, 44],
782
            ],
783
            [
784
                new \ArrayObject([1, 2, 3, 'a' => [1, 2, 'b' => ['c', 'd', 'e']]]),
785
                'a.b',
786
                ['c', 'd', 'e'],
787
            ],
788
            [
789
                new \ArrayObject([1, 2, 3, 'a' => [1, 2, 'b' => ['c', 'd', 'e']]]),
790
                'a.b.*',
791
                ['c', 'd', 'e'],
792
            ],
793
            [
794
                new \ArrayObject([1, 2, 3, 'a' => ['b' => ['c', 'd', 'e'], [11, 22]]]),
795
                'a.*.*',
796
                ['c', 'd', 'e', 11, 22],
797
            ],
798
            [
799
                new \ArrayObject([1, 2, 3, 'a' => ['b' => [['c'], ['d'], ['e']], [[11], [22, 33]]]]),
800
                'a.*.*.*',
801
                ['c', 'd', 'e', 11, 22, 33],
802
            ],
803
            [
804
                new \ArrayObject([1, 2, 3, 'a' => ['b' => [['c'], ['d'], ['e']], [[11], [22, 33]]]]),
805
                'a.*.*.0',
806
                ['c', 'd', 'e', 11, 22],
807
            ],
808
            [
809
                new \ArrayObject([1, 2, 3, 'a' => ['b' => ['c', 'd', 'e'], [11, 22]]]),
810
                ['a', '*', '*'],
811
                ['c', 'd', 'e', 11, 22],
812
            ],
813
            [
814
                new \ArrayObject([
815
                    'first' => [
816
                        [
817
                            [
818
                                'a' => [],
819
                                'b' => ['aaa'],
820
                                'c' => ['bbb'],
821
                            ],
822
                        ],
823
                    ],
824
                    'second' => new \ArrayObject([
825
                        [
826
                            [
827
                                new \ArrayObject([1, 2, 3]),
828
                                [11, 22, 33],
829
                                [111, 222, 333],
830
                            ],
831
                            [
832
                                [1111],
833
                                [11111],
834
                            ],
835
                        ],
836
                        [
837
                            [
838
                                [111111],
839
                                [1111111],
840
                            ],
841
                        ],
842
                    ]),
843
                ]),
844
                'second.*.*.*.0',
845
                [1, 11, 111, 1111, 11111, 111111, 1111111],
846
            ],
847
            [
848
                [
849
                    'a' => new \ArrayObject([
850
                        [
851
                            'b' => [
852
                                [
853
                                    'c' => [
854
                                        [
855
                                            'd' => 1,
856
                                            'e' => [1, 2, 3],
857
                                        ]
858
                                    ],
859
                                    'f' => [
860
                                        new \ArrayObject([
861
                                            'd' => 2,
862
                                            'e' => new \ArrayObject([4, 5, 6]),
863
                                        ])
864
                                    ],
865
                                ],
866
                            ],
867
                            'i' => [
868
                                [
869
                                    'j' => [
870
                                        [
871
                                            'd' => 3,
872
                                            'e' => [7, 8, 9],
873
                                        ]
874
                                    ]
875
                                ],
876
                            ],
877
                        ],
878
                    ]),
879
                ],
880
                'a.*****.|.1.e',
881
                new \ArrayObject([4, 5, 6]),
882
            ],
883
        ];
884
    }
885

886
    public function dataProviderForStrictSuccessStdClass(): array
887
    {
888
        return [
889
            [
890
                (object)[],
891
                [],
892
                (object)[],
893
            ],
894
            [
895
                (object)[],
896
                null,
897
                (object)[],
898
            ],
899
            [
900
                (object)['a' => 1],
901
                [],
902
                (object)['a' => 1],
903
            ],
904
            [
905
                [
906
                    'a' => (object)[1, 2, 3],
907
                    'b' => (object)[11, 22, 33],
908
                    'c' => (object)[111, 222, 333],
909
                ],
910
                '*.0',
911
                [1, 11, 111],
912
            ],
913
            [
914
                [
915
                    'a' => (object)[1, 2, 3],
916
                    'b' => (object)[11, 22, 33],
917
                    'c' => (object)[111, 222, 333],
918
                ],
919
                ['*', 0],
920
                [1, 11, 111],
921
            ],
922
            [
923
                [
924
                    'a' => (object)[1, 2, 3],
925
                    'b' => (object)[11, 22, 33],
926
                    'c' => (object)[111, 222, 333],
927
                ],
928
                ['*', '2'],
929
                [3, 33, 333],
930
            ],
931
            [
932
                [
933
                    'a' => (object)[1, 2, (object)[3]],
934
                    'b' => (object)[11, 22, (object)[33]],
935
                    'c' => (object)[111, 222, (object)[333]],
936
                ],
937
                ['*', '2'],
938
                [(object)[3], (object)[33], (object)[333]],
939
            ],
940
            [
941
                [
942
                    'a' => (object)[1, 2, [3]],
943
                    'b' => (object)[11, 22, [33]],
944
                    'c' => (object)[111, 222, [333]],
945
                ],
946
                ['*', '2', '*'],
947
                [3, 33, 333],
948
            ],
949
            [
950
                [
951
                    [
952
                        'a' => (object)[1, 2, 3],
953
                        'b' => (object)[11, 22, 33],
954
                        'c' => (object)[111, 222, 333],
955
                    ],
956
                ],
957
                '*.*.0',
958
                [1, 11, 111],
959
            ],
960
            [
961
                [
962
                    [
963
                        [
964
                            'a' => (object)[1, 2, 3],
965
                            'b' => [11, 22, 33],
966
                            'c' => [111, 222, 333],
967
                        ],
968
                    ],
969
                    [
970
                        [
971
                            'a' => (object)[4, 5],
972
                            'b' => [44, 55],
973
                            'c' => [444, 555],
974
                        ],
975
                    ],
976
                ],
977
                '*.*.a',
978
                [(object)[1, 2, 3], (object)[4, 5]],
979
            ],
980
            [
981
                [
982
                    [
983
                        (object)[
984
                            'a' => [1, 2, 3],
985
                            'b' => [11, 22, 33],
986
                            'c' => [111, 222, 333],
987
                        ],
988
                    ],
989
                    [
990
                        (object)[
991
                            'a' => [4, 5],
992
                            'b' => [44, 55],
993
                            'c' => [444, 555],
994
                        ],
995
                    ],
996
                ],
997
                '*.*.a.0',
998
                [1, 4],
999
            ],
1000
            [
1001
                [
1002
                    [
1003
                        (object)[
1004
                            'a' => [1, 2, 3],
1005
                            'b' => [11, 22, 33],
1006
                            'c' => [111, 222, 333],
1007
                        ],
1008
                    ],
1009
                    [
1010
                        (object)[
1011
                            'a' => [4, 5],
1012
                            'b' => [44, 55],
1013
                            'c' => [444, 555],
1014
                        ],
1015
                    ],
1016
                ],
1017
                '*.*.a.1',
1018
                [2, 5],
1019
            ],
1020
            [
1021
                [
1022
                    [
1023
                        (object)[
1024
                            'a' => [1, 2, 3],
1025
                            'b' => [11, 22, 33],
1026
                            'c' => [111, 222, 333],
1027
                        ],
1028
                    ],
1029
                    [
1030
                        (object)[
1031
                            'a' => [4, 5],
1032
                            'b' => [44, 55],
1033
                            'c' => [444, 555],
1034
                        ],
1035
                    ],
1036
                ],
1037
                '*.*.b.|.1',
1038
                [44, 55],
1039
            ],
1040
            [
1041
                (object)[
1042
                    'first' => [
1043
                        [
1044
                            [
1045
                                'a' => [],
1046
                                'b' => ['aaa'],
1047
                                'c' => ['bbb'],
1048
                            ],
1049
                        ],
1050
                    ],
1051
                    'second' => [
1052
                        [
1053
                            [
1054
                                (object)[1, 2, 3],
1055
                                (object)[11, 22, 33],
1056
                                (object)[111, 222, 333],
1057
                            ],
1058
                            [
1059
                                [1111],
1060
                                [11111],
1061
                            ],
1062
                        ],
1063
                        [
1064
                            [
1065
                                [111111],
1066
                                [1111111],
1067
                            ],
1068
                        ],
1069
                    ],
1070
                ],
1071
                'second.*.*.*.0',
1072
                [1, 11, 111, 1111, 11111, 111111, 1111111],
1073
            ],
1074
            [
1075
                (object)[
1076
                    'a' => [
1077
                        [
1078
                            'b' => [
1079
                                [
1080
                                    'c' => [
1081
                                        (object)[
1082
                                            'd' => 1,
1083
                                            'e' => [1, 2, 3],
1084
                                        ]
1085
                                    ],
1086
                                    'f' => [
1087
                                        (object)[
1088
                                            'd' => 2,
1089
                                            'e' => [4, 5, 6],
1090
                                        ]
1091
                                    ],
1092
                                ],
1093
                            ],
1094
                            'i' => [
1095
                                [
1096
                                    'j' => [
1097
                                        (object)[
1098
                                            'd' => 3,
1099
                                            'e' => [7, 8, 9],
1100
                                        ]
1101
                                    ]
1102
                                ],
1103
                            ],
1104
                        ],
1105
                    ],
1106
                ],
1107
                'a.*****.d',
1108
                [1, 2, 3],
1109
            ],
1110
            [
1111
                [
1112
                    'a' => [
1113
                        [
1114
                            'b' => [
1115
                                [
1116
                                    'c' => [
1117
                                        [
1118
                                            'd' => 1,
1119
                                            'e' => [1, 2, 3],
1120
                                        ]
1121
                                    ],
1122
                                    'f' => [
1123
                                        [
1124
                                            'd' => 2,
1125
                                            'e' => [4, 5, 6],
1126
                                        ]
1127
                                    ],
1128
                                ],
1129
                            ],
1130
                            'i' => [
1131
                                [
1132
                                    'j' => [
1133
                                        [
1134
                                            'd' => 3,
1135
                                            'e' => [7, 8, 9],
1136
                                        ]
1137
                                    ]
1138
                                ],
1139
                            ],
1140
                        ],
1141
                    ],
1142
                ],
1143
                'a.*****.e',
1144
                [[1, 2, 3], [4, 5, 6], [7, 8, 9]],
1145
            ],
1146
            [
1147
                [
1148
                    'a' => [
1149
                        [
1150
                            'b' => [
1151
                                [
1152
                                    'c' => [
1153
                                        (object)[
1154
                                            'd' => 1,
1155
                                            'e' => [1, 2, 3],
1156
                                        ]
1157
                                    ],
1158
                                    'f' => [
1159
                                        (object)[
1160
                                            'd' => 2,
1161
                                            'e' => [4, 5, 6],
1162
                                        ]
1163
                                    ],
1164
                                ],
1165
                            ],
1166
                            'i' => [
1167
                                [
1168
                                    'j' => [
1169
                                        (object)[
1170
                                            'd' => 3,
1171
                                            'e' => [7, 8, 9],
1172
                                        ]
1173
                                    ]
1174
                                ],
1175
                            ],
1176
                        ],
1177
                    ],
1178
                ],
1179
                'a.*****.|.1.e',
1180
                [4, 5, 6],
1181
            ],
1182
        ];
1183
    }
1184

1185
    public function dataProviderForStrictErrorArray(): array
1186
    {
1187
        return [
1188
            [
1189
                [],
1190
                [''],
1191
                ['', ''],
1192
            ],
1193
            [
1194
                [],
1195
                'test',
1196
                ['test', ''],
1197
            ],
1198
            [
1199
                [],
1200
                'foo.bar',
1201
                ['foo', ''],
1202
            ],
1203
            [
1204
                [],
1205
                'foo.bar.*',
1206
                ['foo', ''],
1207
            ],
1208
            [
1209
                [],
1210
                'foo.*.bar',
1211
                ['foo', ''],
1212
            ],
1213
            [
1214
                [1, 2, 3, 'a' => 4],
1215
                3,
1216
                ['3', ''],
1217
            ],
1218
            [
1219
                [1, 2, 3, 'a' => 4],
1220
                'a.c',
1221
                ['c', 'a'],
1222
            ],
1223
            [
1224
                [1, 2, 3, 'a' => 4],
1225
                'a.*',
1226
                ['*', 'a'],
1227
            ],
1228
            [
1229
                [1, 2, 3, 'a' => ['b' => [11], 'c' => [22]]],
1230
                'a.*.1',
1231
                ['1', 'a.*'],
1232
            ],
1233
            [
1234
                [1, 2, 3, 'a' => ['b' => [11], 'c' => [22]]],
1235
                'a.*.a',
1236
                ['a', 'a.*'],
1237
            ],
1238
            [
1239
                [1, 2, 3, 'a' => ['b' => [11], 'c' => [22]]],
1240
                'a.*.test',
1241
                ['test', 'a.*'],
1242
            ],
1243
            [
1244
                [1, 2, 3, 'a' => ['b' => [11], 'c' => [22]]],
1245
                'a.*.*.*',
1246
                ['*', 'a.*.*'],
1247
            ],
1248
            [
1249
                [1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
1250
                'a.*.1.0',
1251
                ['1', 'a.*'],
1252
            ],
1253
            [
1254
                [1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
1255
                'a.*.0.2',
1256
                ['2', 'a.*.0'],
1257
            ],
1258
            [
1259
                [1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
1260
                'a.*.0.*.a',
1261
                ['a', 'a.*.0.*'],
1262
            ],
1263
            [
1264
                [1, 2, 3, 'a' => [1, 2, 'b' => ['c', 'd', 'e']]],
1265
                'a.c',
1266
                ['c', 'a'],
1267
            ],
1268
            [
1269
                [1, 2, 3, 'a' => [1, 2, 'b' => ['c', 'd', 'e']]],
1270
                'a.c.*',
1271
                ['c', 'a'],
1272
            ],
1273
            [
1274
                [1, 2, 3, 'a' => ['b' => ['c', 'd', 'e'], [11, 22]]],
1275
                'a.*.x.*',
1276
                ['x', 'a.*'],
1277
            ],
1278
            [
1279
                [1, 2, 3, 'a' => ['b' => [['c'], ['d'], ['e']], [[], [22, 33]]]],
1280
                'a.*.*.0',
1281
                ['0', 'a.*.*'],
1282
            ],
1283
            [
1284
                [1, 2, 3, 'a' => ['b' => ['c', 'd', 'e'], [11, 22]]],
1285
                ['a', '*', 'y'],
1286
                ['y', 'a.*'],
1287
            ],
1288
            [
1289
                [
1290
                    'a' => [1, 2, 3],
1291
                    'b' => [11],
1292
                    'c' => [111, 222, 333],
1293
                ],
1294
                '*.1',
1295
                ['1', '*'],
1296
            ],
1297
            [
1298
                [
1299
                    'a' => [1],
1300
                    'b' => [11, 22],
1301
                    'c' => [111, 222, 333],
1302
                ],
1303
                ['*', 2],
1304
                ['2', '*'],
1305
            ],
1306
            [
1307
                [
1308
                    'a' => [1, 2, [3]],
1309
                    'b' => [11, 22, 33],
1310
                    'c' => [111, 222, [333]],
1311
                ],
1312
                ['*', '2', '*'],
1313
                ['*', '*.2'],
1314
            ],
1315
            [
1316
                [
1317
                    'a' => [1, 2, 3],
1318
                    'b' => [11, 22, 33],
1319
                    'c' => '[111, 222, 333]',
1320
                ],
1321
                '*.*',
1322
                ['*', '*'],
1323
            ],
1324
            [
1325
                [
1326
                    [
1327
                        'a' => [1, 2, 3],
1328
                        'b' => '[11, 22, 33]',
1329
                        'c' => [111, 222, 333],
1330
                    ],
1331
                ],
1332
                '*.*.0',
1333
                ['0', '*.*'],
1334
            ],
1335
            [
1336
                [
1337
                    [
1338
                        [
1339
                            'a' => [1, 2, 3],
1340
                            'b' => [11, 22, 33],
1341
                            'c' => [111, 222, 333],
1342
                        ],
1343
                    ],
1344
                    [
1345
                        [
1346
                            'a' => [],
1347
                            'b' => [44, 55],
1348
                            'c' => [444, 555],
1349
                        ],
1350
                    ],
1351
                ],
1352
                '*.*.*.0',
1353
                ['0', '*.*.*'],
1354
            ],
1355
            [
1356
                [
1357
                    [
1358
                        [
1359
                            'a' => [1, 2, 3],
1360
                            'b' => [11, 22, 33],
1361
                            'c' => [111, 222, 333],
1362
                        ],
1363
                    ],
1364
                    [
1365
                        [
1366
                            'b' => [44, 55],
1367
                            'c' => [444, 555],
1368
                        ],
1369
                    ],
1370
                ],
1371
                '*.*.a',
1372
                ['a', '*.*'],
1373
            ],
1374
            [
1375
                [
1376
                    [
1377
                        [
1378
                            'a' => [1, 2, 3],
1379
                            'b' => [11, 22, 33],
1380
                            'c' => [111, 222, 333],
1381
                        ],
1382
                    ],
1383
                    [
1384
                        [
1385
                            'a' => [4],
1386
                            'b' => [44, 55],
1387
                            'c' => [444, 555],
1388
                        ],
1389
                    ],
1390
                ],
1391
                '*.*.a.2',
1392
                ['2', '*.*.a'],
1393
            ],
1394
            [
1395
                [
1396
                    [
1397
                        [
1398
                            'a' => [1, 2, 3],
1399
                            'b' => [11, 22, 33],
1400
                            'c' => [111, 222, 333],
1401
                        ],
1402
                    ],
1403
                    [
1404
                        [
1405
                            'a' => [4],
1406
                            'b' => [44, 55],
1407
                            'c' => [444, 555],
1408
                        ],
1409
                    ],
1410
                ],
1411
                '*.*.a.*.1',
1412
                ['1', '*.*.a.*'],
1413
            ],
1414
            [
1415
                [
1416
                    [
1417
                        [
1418
                            'a' => [1, 2, 3],
1419
                            'b' => [11, 22, 33],
1420
                            'c' => [111, 222, 333],
1421
                        ],
1422
                    ],
1423
                    [
1424
                        [
1425
                            'a' => [4, 5],
1426
                            'b' => [44, 55],
1427
                            'c' => [444, 555],
1428
                        ],
1429
                    ],
1430
                ],
1431
                '*.*.b.|.2',
1432
                ['2', '*.*.b.|'],
1433
            ],
1434
            [
1435
                [
1436
                    [
1437
                        [
1438
                            'a' => [1, 2, 3],
1439
                            'b' => [11, 22, 33],
1440
                            'c' => [111, 222, 333],
1441
                        ],
1442
                    ],
1443
                    [
1444
                        [
1445
                            'a' => [4, 5],
1446
                            'c' => [444, 555],
1447
                        ],
1448
                    ],
1449
                ],
1450
                '*.*.b.|.1',
1451
                ['b', '*.*'],
1452
            ],
1453
            [
1454
                [
1455
                    'first' => [
1456
                        [
1457
                            'a' => [1, 2, 3],
1458
                            'b' => [11, 22, 33],
1459
                            'c' => [111, 222, 333],
1460
                        ],
1461
                    ],
1462
                    'second' => [
1463
                        [
1464
                            'a' => [4],
1465
                            'b' => [44, 55],
1466
                        ],
1467
                    ],
1468
                ],
1469
                '*.*.*.1',
1470
                ['1', '*.*.*'],
1471
            ],
1472
            [
1473
                [
1474
                    'first' => [
1475
                        [
1476
                            [
1477
                                'a' => [],
1478
                                'b' => ['aaa'],
1479
                                'c' => ['bbb'],
1480
                            ],
1481
                        ],
1482
                    ],
1483
                    'second' => [
1484
                        [
1485
                            [
1486
                                [1, 2, 3],
1487
                                [11, 22, 33],
1488
                                [111, 222, 333],
1489
                            ],
1490
                            [
1491
                                [1111],
1492
                                [11111],
1493
                            ],
1494
                        ],
1495
                        [
1496
                            [
1497
                                [111111],
1498
                                [],
1499
                            ],
1500
                        ],
1501
                    ],
1502
                ],
1503
                'second.*.*.*.0',
1504
                ['0', 'second.*.*.*'],
1505
            ],
1506
            [
1507
                [
1508
                    'first' => [
1509
                        [
1510
                            [
1511
                                'a' => [],
1512
                                'b' => ['aaa'],
1513
                                'c' => ['bbb'],
1514
                            ],
1515
                        ],
1516
                    ],
1517
                    'second' => [
1518
                        [
1519
                            [
1520
                                [1, 2, 3],
1521
                                [11, 22, 33],
1522
                                [111, 222, 333],
1523
                            ],
1524
                            [
1525
                                [],
1526
                                [11111],
1527
                            ],
1528
                        ],
1529
                        [
1530
                            [
1531
                                [111111],
1532
                                [1111111],
1533
                            ],
1534
                        ],
1535
                    ],
1536
                ],
1537
                'second.*.*.0.*.0',
1538
                ['0', 'second.*.*.0.*'],
1539
            ],
1540
            [
1541
                [
1542
                    'first' => [
1543
                        [
1544
                            [
1545
                                'a' => [],
1546
                                'b' => ['aaa'],
1547
                                'c' => ['bbb'],
1548
                            ],
1549
                        ],
1550
                    ],
1551
                    'second' => [
1552
                        [
1553
                            [
1554
                                [1, 2, 3],
1555
                                [11, 22, 33],
1556
                                [111, 222, 333],
1557
                            ],
1558
                            [
1559
                                [1111],
1560
                                [11111],
1561
                            ],
1562
                        ],
1563
                        [
1564
                            [],
1565
                        ],
1566
                    ],
1567
                ],
1568
                'second.*.*.0.*.*',
1569
                ['0', 'second.*.*'],
1570
            ],
1571
            [
1572
                [
1573
                    'first' => [
1574
                        [
1575
                            [
1576
                                'a' => [],
1577
                                'b' => ['aaa'],
1578
                                'c' => ['bbb'],
1579
                            ],
1580
                        ],
1581
                    ],
1582
                    'second' => [
1583
                        [
1584
                            [],
1585
                            [
1586
                                [1111],
1587
                                [2222],
1588
                            ],
1589
                        ],
1590
                        [
1591
                            [
1592
                                [11111],
1593
                                [222222],
1594
                            ],
1595
                        ],
1596
                    ],
1597
                ],
1598
                'second.0.0.0',
1599
                ['0', 'second.0.0'],
1600
            ],
1601
            [
1602
                [
1603
                    'a' => [
1604
                        [
1605
                            'b' => [
1606
                                [
1607
                                    'c' => [
1608
                                        [
1609
                                            'd' => 1,
1610
                                            'e' => [1, 2, 3],
1611
                                        ]
1612
                                    ],
1613
                                    'f' => [
1614
                                        [
1615
                                            'e' => [4, 5, 6],
1616
                                        ]
1617
                                    ],
1618
                                ],
1619
                            ],
1620
                            'i' => [
1621
                                [
1622
                                    'j' => [
1623
                                        [
1624
                                            'd' => 3,
1625
                                            'e' => [7, 8, 9],
1626
                                        ]
1627
                                    ]
1628
                                ],
1629
                            ],
1630
                        ],
1631
                    ],
1632
                ],
1633
                'a.*****.d',
1634
                ['d', 'a.*.*.*.*.*'],
1635
            ],
1636
            [
1637
                [
1638
                    'a' => [
1639
                        [
1640
                            'b' => [
1641
                                [
1642
                                    'c' => [
1643
                                        [
1644
                                            'd' => 1,
1645
                                        ]
1646
                                    ],
1647
                                    'f' => [
1648
                                        [
1649
                                            'd' => 2,
1650
                                        ]
1651
                                    ],
1652
                                ],
1653
                            ],
1654
                            'i' => [
1655
                                [
1656
                                    'j' => [
1657
                                        [
1658
                                            'd' => 3,
1659
                                        ]
1660
                                    ]
1661
                                ],
1662
                            ],
1663
                        ],
1664
                    ],
1665
                ],
1666
                'a.*****.e',
1667
                ['e', 'a.*.*.*.*.*'],
1668
            ],
1669
            [
1670
                [
1671
                    'a' => [
1672
                        [
1673
                            'b' => [
1674
                                [
1675
                                    'c' => [
1676
                                        [
1677
                                            'd' => 1,
1678
                                            'e' => [1, 2, 3],
1679
                                        ]
1680
                                    ],
1681
                                    'f' => [
1682
                                        [
1683
                                            'd' => 2,
1684
                                        ]
1685
                                    ],
1686
                                ],
1687
                            ],
1688
                            'i' => [
1689
                                [
1690
                                    'j' => [
1691
                                        [
1692
                                            'd' => 3,
1693
                                            'e' => [7, 8, 9],
1694
                                        ]
1695
                                    ]
1696
                                ],
1697
                            ],
1698
                        ],
1699
                    ],
1700
                ],
1701
                'a.*****.|.1.e',
1702
                ['e', 'a.*.*.*.*.*.|.1'],
1703
            ],
1704
            [
1705
                [
1706
                    'a' => [
1707
                        [
1708
                            'b' => [
1709
                                [
1710
                                    'c' => [
1711
                                        [
1712
                                            'd' => 1,
1713
                                            'e' => [1, 2, 3],
1714
                                        ]
1715
                                    ],
1716
                                ],
1717
                            ],
1718
                            'i' => [
1719
                                [
1720
                                    'j' => [
1721
                                    ]
1722
                                ],
1723
                            ],
1724
                        ],
1725
                    ],
1726
                ],
1727
                'a.*****.|.1.e',
1728
                ['1', 'a.*.*.*.*.*.|'],
1729
            ],
1730
        ];
1731
    }
1732

1733
    public function dataProviderForNonStrictArray(): array
1734
    {
1735
        return [
1736
            [
1737
                [1, 2, 3, 'a' => 4],
1738
                3,
1739
                null,
1740
            ],
1741
            [
1742
                [1, 2, 3, 'a' => 4],
1743
                '3',
1744
                null,
1745
            ],
1746
            [
1747
                [1, 2, 3, 'a' => 4],
1748
                'b',
1749
                null,
1750
            ],
1751
            [
1752
                [1, 2, 3, 'a' => [1, 2, 'a' => 3]],
1753
                'b.*',
1754
                null,
1755
            ],
1756
            [
1757
                [1, 2, 3, 'a' => ['b' => [11], 'c' => [22]]],
1758
                'b.*.0',
1759
                null,
1760
            ],
1761
            [
1762
                [1, 2, 3, 'a' => ['b' => [11], 'c' => [22]]],
1763
                'b.*.*',
1764
                null,
1765
            ],
1766
            [
1767
                [1, 2, 3, 'a' => ['b' => [11, 22], 'c' => [33, 44]]],
1768
                'b.*.*',
1769
                null,
1770
            ],
1771
            [
1772
                [1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
1773
                'b.*.0.0',
1774
                null,
1775
            ],
1776
            [
1777
                [1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
1778
                'a.*.0.2',
1779
                [],
1780
            ],
1781
            [
1782
                [1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
1783
                'a.*.1.0',
1784
                [],
1785
            ],
1786
            [
1787
                [1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
1788
                'a.*.111.1',
1789
                [],
1790
            ],
1791
            [
1792
                [1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
1793
                'a.*.0.*.111',
1794
                [],
1795
            ],
1796
            [
1797
                [1, 2, 3, 'a' => [1, 2, 'b' => ['c', 'd', 'e']]],
1798
                'a.c',
1799
                null,
1800
            ],
1801
            [
1802
                [1, 2, 3, 'a' => [1, 2, 'b' => ['c', 'd', 'e']]],
1803
                'a.c.*',
1804
                null,
1805
            ],
1806
            [
1807
                [1, 2, 3, 'a' => ['b' => ['c', 'd', 'e'], [11, 22]]],
1808
                'a.*.e',
1809
                [],
1810
            ],
1811
            [
1812
                [1, 2, 3, 'a' => ['b' => [['c'], ['d'], ['e']], [[11], [22, 33]]]],
1813
                'a.*.e.*',
1814
                [],
1815
            ],
1816
            [
1817
                [1, 2, 3, 'a' => [
1818
                    'b' => [['c'], ['d'], ['e']],
1819
                    [[11], [22, 33]]],
1820
                ],
1821
                'a.*.*.1',
1822
                [33],
1823
            ],
1824
            [
1825
                [1, 2, 3, 'a' => [
1826
                    'b' => [['c'], ['d'], ['e']],
1827
                    [[11], [22, 33]]],
1828
                ],
1829
                'a.**.1',
1830
                [33],
1831
            ],
1832
            [
1833
                [1, 2, 3, 'a' => [
1834
                    'b' => [['c'], ['d'], ['e']],
1835
                    [[11], [22, 33]]],
1836
                ],
1837
                'a.**.2',
1838
                [],
1839
            ],
1840
            [
1841
                [1, 2, 3, 'a' => [
1842
                    'b' => [['c'], ['d'], ['e']],
1843
                    [[11], [22, 33]]],
1844
                ],
1845
                'a.**.test',
1846
                [],
1847
            ],
1848
            [
1849
                [
1850
                    'a' => [1, 2, 3],
1851
                    'b' => [11, 22, 33],
1852
                    'c' => [111, 222, 333],
1853
                ],
1854
                '*.3',
1855
                [],
1856
            ],
1857
            [
1858
                [
1859
                    'a' => [1, 2, 3],
1860
                    'b' => [11, 22, 33],
1861
                    'c' => [111, 222, 333],
1862
                ],
1863
                ['*', 3],
1864
                [],
1865
            ],
1866
            [
1867
                [
1868
                    'a' => [1, 2],
1869
                    'b' => [11, 22, 33],
1870
                    'c' => [111, 222, 333],
1871
                ],
1872
                ['*', '2'],
1873
                [33, 333],
1874
            ],
1875
            [
1876
                [
1877
                    'a' => [1, 2],
1878
                    'b' => [11, 22, [33]],
1879
                    'c' => [111, 222, [333]],
1880
                ],
1881
                ['*', '2'],
1882
                [[33], [333]],
1883
            ],
1884
            [
1885
                [
1886
                    'a' => [1, 2, [3]],
1887
                    'b' => [11, 22],
1888
                    'c' => [111, 222, [333]],
1889
                ],
1890
                ['*', '2', '*'],
1891
                [3, 333],
1892
            ],
1893
            [
1894
                [
1895
                    [
1896
                        'a' => [1, 2, 3],
1897
                        'b' => [11, 22, 33],
1898
                        'c' => [111, 222, 333],
1899
                    ],
1900
                ],
1901
                '*.*.5',
1902
                [],
1903
            ],
1904
            [
1905
                [
1906
                    [
1907
                        [
1908
                            'a' => [1, 2, 3],
1909
                            'b' => [11, 22, 33],
1910
                            'c' => [111, 222, 333],
1911
                        ],
1912
                    ],
1913
                    [
1914
                        [
1915
                            'a' => [4, 5],
1916
                            'b' => [44, 55],
1917
                            'c' => [444, 555],
1918
                        ],
1919
                    ],
1920
                ],
1921
                '*.*.*.3',
1922
                [],
1923
            ],
1924
            [
1925
                [
1926
                    [
1927
                        [
1928
                            'a' => [1, 2, 3],
1929
                            'b' => [11, 22, 33],
1930
                            'c' => [111, 222, 333],
1931
                        ],
1932
                    ],
1933
                    [
1934
                        [
1935
                            'a' => [4, 5],
1936
                            'b' => [44, 55],
1937
                            'c' => [444, 555],
1938
                        ],
1939
                    ],
1940
                ],
1941
                '*.*.z',
1942
                [],
1943
            ],
1944
            [
1945
                [
1946
                    [
1947
                        [
1948
                            'a' => [1, 2, 3],
1949
                            'b' => [11, 22, 33],
1950
                            'c' => [111, 222, 333],
1951
                        ],
1952
                    ],
1953
                    [
1954
                        [
1955
                            'a' => [4, 5],
1956
                            'b' => [44, 55],
1957
                            'c' => [444, 555],
1958
                        ],
1959
                    ],
1960
                ],
1961
                '*.*.z.0',
1962
                [],
1963
            ],
1964
            [
1965
                [
1966
                    [
1967
                        [
1968
                            'a' => [1, 2, 3],
1969
                            'b' => [11, 22, 33],
1970
                            'c' => [111, 222, 333],
1971
                        ],
1972
                    ],
1973
                    [
1974
                        [
1975
                            'a' => [4, 5],
1976
                            'b' => [44, 55],
1977
                            'c' => [444, 555],
1978
                        ],
1979
                    ],
1980
                ],
1981
                '*.*.z.1',
1982
                [],
1983
            ],
1984
            [
1985
                [
1986
                    [
1987
                        [
1988
                            'a' => [1, 2, 3],
1989
                            'b' => [11, 22, 33],
1990
                            'c' => [111, 222, 333],
1991
                        ],
1992
                    ],
1993
                    [
1994
                        [
1995
                            'a' => [4, 5],
1996
                            'b' => [44, 55],
1997
                            'c' => [444, 555],
1998
                        ],
1999
                    ],
2000
                ],
2001
                '*.*.a.2',
2002
                [3],
2003
            ],
2004
            [
2005
                [
2006
                    [
2007
                        [
2008
                            'a' => [1, 2, 3],
2009
                            'b' => [11, 22, 33],
2010
                            'c' => [111, 222, 333],
2011
                        ],
2012
                    ],
2013
                    [
2014
                        [
2015
                            'a' => [4, 5],
2016
                            'b' => [44, 55],
2017
                            'c' => [444, 555],
2018
                        ],
2019
                    ],
2020
                ],
2021
                '*.*.b.|.z',
2022
                null,
2023
            ],
2024
            [
2025
                [
2026
                    'first' => [
2027
                        [
2028
                            'a' => [1, 2, 3],
2029
                            'b' => [11, 22, 33],
2030
                            'c' => [111, 222, 333],
2031
                        ],
2032
                    ],
2033
                    'second' => [
2034
                        [
2035
                            'a' => [4, 5],
2036
                            'b' => [44, 55],
2037
                        ],
2038
                    ],
2039
                ],
2040
                '*.*.*.2',
2041
                [3, 33, 333],
2042
            ],
2043
            [
2044
                [
2045
                    'first' => [
2046
                        [
2047
                            [
2048
                                'a' => [],
2049
                                'b' => ['aaa'],
2050
                                'c' => ['bbb'],
2051
                            ],
2052
                        ],
2053
                    ],
2054
                    'second' => [
2055
                        [
2056
                            [
2057
                                [1, 2, 3],
2058
                                [11, 22, 33],
2059
                                [111, 222, 333],
2060
                            ],
2061
                            [
2062
                                [1111],
2063
                                [11111],
2064
                            ],
2065
                        ],
2066
                        [
2067
                            [
2068
                                [111111],
2069
                                [1111111],
2070
                            ],
2071
                        ],
2072
                    ],
2073
                ],
2074
                'second.*.*.*.2',
2075
                [3, 33, 333],
2076
            ],
2077
            [
2078
                [
2079
                    'first' => [
2080
                        [
2081
                            [
2082
                                'a' => [],
2083
                                'b' => ['aaa'],
2084
                                'c' => ['bbb'],
2085
                            ],
2086
                        ],
2087
                    ],
2088
                    'second' => [
2089
                        [
2090
                            [
2091
                                [1, 2, 3],
2092
                                [11, 22, 33],
2093
                                [111, 222, 333],
2094
                            ],
2095
                            [
2096
                                [1111],
2097
                                [11111],
2098
                            ],
2099
                        ],
2100
                        [
2101
                            [
2102
                                [111111, 999],
2103
                                [1111111],
2104
                            ],
2105
                        ],
2106
                    ],
2107
                ],
2108
                'second.*.*.0.1',
2109
                [2, 999],
2110
            ],
2111
            [
2112
                [
2113
                    'first' => [
2114
                        [
2115
                            [
2116
                                'a' => [],
2117
                                'b' => ['aaa'],
2118
                                'c' => ['bbb'],
2119
                            ],
2120
                        ],
2121
                    ],
2122
                    'second' => [
2123
                        [
2124
                            [
2125
                                [1, 2, 3],
2126
                                [11, 22, 33],
2127
                                [111, 222, 333],
2128
                            ],
2129
                            [
2130
                                [1111],
2131
                                [11111],
2132
                            ],
2133
                        ],
2134
                        [
2135
                            [
2136
                                [111111],
2137
                                [1111111],
2138
                            ],
2139
                        ],
2140
                    ],
2141
                ],
2142
                'second.*.*.2',
2143
                [[111, 222, 333]],
2144
            ],
2145
            [
2146
                [
2147
                    'first' => [
2148
                        [
2149
                            [
2150
                                'a' => [],
2151
                                'b' => ['aaa'],
2152
                                'c' => ['bbb'],
2153
                            ],
2154
                        ],
2155
                    ],
2156
                    'second' => [
2157
                        [
2158
                            [
2159
                                [1, 2, 3],
2160
                                [11, 22, 33],
2161
                                [111, 222, 333],
2162
                            ],
2163
                            [
2164
                                [1111],
2165
                                [11111],
2166
                            ],
2167
                        ],
2168
                        [
2169
                            [
2170
                                [111111],
2171
                                [1111111],
2172
                            ],
2173
                        ],
2174
                    ],
2175
                ],
2176
                'second.*.*.2.*',
2177
                [111, 222, 333],
2178
            ],
2179
            [
2180
                [
2181
                    'a' => [
2182
                        [
2183
                            'b' => [
2184
                                [
2185
                                    'c' => [
2186
                                        [
2187
                                            'd' => 1,
2188
                                            'e' => [1, 2, 3],
2189
                                        ]
2190
                                    ],
2191
                                    'f' => [
2192
                                        [
2193
                                            'e' => [4, 5, 6],
2194
                                        ]
2195
                                    ],
2196
                                ],
2197
                            ],
2198
                            'i' => [
2199
                                [
2200
                                    'j' => [
2201
                                        [
2202
                                            'd' => 3,
2203
                                            'e' => [7, 8, 9],
2204
                                        ]
2205
                                    ]
2206
                                ],
2207
                            ],
2208
                        ],
2209
                    ],
2210
                ],
2211
                'a.*****.d',
2212
                [1, 3],
2213
            ],
2214
            [
2215
                [
2216
                    'a' => [
2217
                        [
2218
                            'b' => [
2219
                                [
2220
                                    'c' => [
2221
                                        [
2222
                                            'd' => 1,
2223
                                        ]
2224
                                    ],
2225
                                    'f' => [
2226
                                        [
2227
                                            'd' => 2,
2228
                                            'e' => [4, 5, 6],
2229
                                        ]
2230
                                    ],
2231
                                ],
2232
                            ],
2233
                            'i' => [
2234
                                [
2235
                                    'j' => [
2236
                                        [
2237
                                            'd' => 3,
2238
                                            'e' => [7, 8, 9],
2239
                                        ]
2240
                                    ]
2241
                                ],
2242
                            ],
2243
                        ],
2244
                    ],
2245
                ],
2246
                'a.*****.e',
2247
                [[4, 5, 6], [7, 8, 9]],
2248
            ],
2249
            [
2250
                [
2251
                    'a' => [
2252
                        [
2253
                            'b' => [
2254
                                [
2255
                                    'c' => [
2256
                                        [
2257
                                            'd' => 1,
2258
                                            'e' => [1, 2, 3],
2259
                                        ]
2260
                                    ],
2261
                                    'f' => [
2262
                                        [
2263
                                            'd' => 2,
2264
                                            'e' => [4, 5, 6],
2265
                                        ]
2266
                                    ],
2267
                                ],
2268
                            ],
2269
                            'i' => [
2270
                                [
2271
                                    'j' => [
2272
                                        [
2273
                                            'd' => 3,
2274
                                            'e' => [7, 8, 9],
2275
                                        ]
2276
                                    ]
2277
                                ],
2278
                            ],
2279
                        ],
2280
                    ],
2281
                ],
2282
                'a.*****.|.1.f',
2283
                null,
2284
            ],
2285
        ];
2286
    }
2287

2288
    public function dataProviderForNonStrictArrayObject(): array
2289
    {
2290
        return [
2291
            [
2292
                new \ArrayObject([1, 2, 3, 'a' => 4]),
2293
                3,
2294
                null,
2295
            ],
2296
            [
2297
                new \ArrayObject([1, 2, 3, 'a' => 4]),
2298
                '3',
2299
                null,
2300
            ],
2301
            [
2302
                new \ArrayObject([1, 2, 3, 'a' => 4]),
2303
                'b',
2304
                null,
2305
            ],
2306
            [
2307
                new \ArrayObject([1, 2, 3, 'a' => [1, 2, 'a' => 3]]),
2308
                'b.*',
2309
                null,
2310
            ],
2311
            [
2312
                new \ArrayObject([1, 2, 3, 'a' => ['b' => [11], 'c' => [22]]]),
2313
                'b.*.0',
2314
                null,
2315
            ],
2316
            [
2317
                new \ArrayObject([1, 2, 3, 'a' => ['b' => [11], 'c' => [22]]]),
2318
                'b.*.*',
2319
                null,
2320
            ],
2321
            [
2322
                new \ArrayObject([1, 2, 3, 'a' => ['b' => [11, 22], 'c' => [33, 44]]]),
2323
                'b.*.*',
2324
                null,
2325
            ],
2326
            [
2327
                new \ArrayObject([1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]]),
2328
                'b.*.0.0',
2329
                null,
2330
            ],
2331
            [
2332
                new \ArrayObject([1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]]),
2333
                'a.*.0.2',
2334
                [],
2335
            ],
2336
            [
2337
                new \ArrayObject([1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]]),
2338
                'a.*.1.0',
2339
                [],
2340
            ],
2341
            [
2342
                new \ArrayObject([1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]]),
2343
                'a.*.111.1',
2344
                [],
2345
            ],
2346
            [
2347
                new \ArrayObject([1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]]),
2348
                'a.*.0.*.111',
2349
                [],
2350
            ],
2351
            [
2352
                new \ArrayObject([1, 2, 3, 'a' => [1, 2, 'b' => ['c', 'd', 'e']]]),
2353
                'a.c',
2354
                null,
2355
            ],
2356
            [
2357
                new \ArrayObject([1, 2, 3, 'a' => [1, 2, 'b' => ['c', 'd', 'e']]]),
2358
                'a.c.*',
2359
                null,
2360
            ],
2361
            [
2362
                new \ArrayObject([1, 2, 3, 'a' => ['b' => ['c', 'd', 'e'], [11, 22]]]),
2363
                'a.*.e',
2364
                [],
2365
            ],
2366
            [
2367
                new \ArrayObject([1, 2, 3, 'a' => ['b' => [['c'], ['d'], ['e']], [[11], [22, 33]]]]),
2368
                'a.*.e.*',
2369
                [],
2370
            ],
2371
            [
2372
                new \ArrayObject([1, 2, 3, 'a' => [
2373
                    'b' => [['c'], ['d'], ['e']],
2374
                    [[11], [22, 33]]],
2375
                ]),
2376
                'a.*.*.1',
2377
                [33],
2378
            ],
2379
            [
2380
                new \ArrayObject([1, 2, 3, 'a' => [
2381
                    'b' => [['c'], ['d'], ['e']],
2382
                    [[11], [22, 33]]],
2383
                ]),
2384
                'a.**.1',
2385
                [33],
2386
            ],
2387
            [
2388
                new \ArrayObject([1, 2, 3, 'a' => [
2389
                    'b' => [['c'], ['d'], ['e']],
2390
                    [[11], [22, 33]]],
2391
                ]),
2392
                'a.**.2',
2393
                [],
2394
            ],
2395
            [
2396
                new \ArrayObject([1, 2, 3, 'a' => [
2397
                    'b' => [['c'], ['d'], ['e']],
2398
                    [[11], [22, 33]]],
2399
                ]),
2400
                'a.**.test',
2401
                [],
2402
            ],
2403
            [
2404
                new \ArrayObject([
2405
                    'a' => [1, 2, 3],
2406
                    'b' => [11, 22, 33],
2407
                    'c' => [111, 222, 333],
2408
                ]),
2409
                '*.3',
2410
                [],
2411
            ],
2412
            [
2413
                new \ArrayObject([
2414
                    'a' => [1, 2, 3],
2415
                    'b' => [11, 22, 33],
2416
                    'c' => [111, 222, 333],
2417
                ]),
2418
                ['*', 3],
2419
                [],
2420
            ],
2421
            [
2422
                new \ArrayObject([
2423
                    'a' => [1, 2],
2424
                    'b' => [11, 22, 33],
2425
                    'c' => [111, 222, 333],
2426
                ]),
2427
                ['*', '2'],
2428
                [33, 333],
2429
            ],
2430
            [
2431
                new \ArrayObject([
2432
                    'a' => [1, 2],
2433
                    'b' => [11, 22, [33]],
2434
                    'c' => [111, 222, [333]],
2435
                ]),
2436
                ['*', '2'],
2437
                [[33], [333]],
2438
            ],
2439
            [
2440
                new \ArrayObject([
2441
                    'a' => [1, 2, [3]],
2442
                    'b' => [11, 22],
2443
                    'c' => [111, 222, [333]],
2444
                ]),
2445
                ['*', '2', '*'],
2446
                [3, 333],
2447
            ],
2448
            [
2449
                new \ArrayObject([
2450
                    new \ArrayObject([
2451
                        'a' => new \ArrayObject([1, 2, 3]),
2452
                        'b' => new \ArrayObject([11, 22, 33]),
2453
                        'c' => new \ArrayObject([111, 222, 333]),
2454
                    ]),
2455
                ]),
2456
                '*.*.5',
2457
                [],
2458
            ],
2459
            [
2460
                new \ArrayObject([
2461
                    'a' => new \ArrayObject([
2462
                        new \ArrayObject([
2463
                            'b' => new \ArrayObject([
2464
                                new \ArrayObject([
2465
                                    'c' => new \ArrayObject([
2466
                                        new \ArrayObject([
2467
                                            'd' => 1,
2468
                                            'e' => [1, 2, 3],
2469
                                        ])
2470
                                    ]),
2471
                                    'f' => new \ArrayObject([
2472
                                        new \ArrayObject([
2473
                                            'e' => [4, 5, 6],
2474
                                        ])
2475
                                    ]),
2476
                                ]),
2477
                            ]),
2478
                            'i' => new \ArrayObject([
2479
                                new \ArrayObject([
2480
                                    'j' => new \ArrayObject([
2481
                                        new \ArrayObject([
2482
                                            'd' => 3,
2483
                                            'e' => [7, 8, 9],
2484
                                        ])
2485
                                    ])
2486
                                ]),
2487
                            ]),
2488
                        ]),
2489
                    ]),
2490
                ]),
2491
                'a.*****.d',
2492
                [1, 3],
2493
            ],
2494
        ];
2495
    }
2496

2497
    public function dataProviderForNonStrictStdClass(): array
2498
    {
2499
        return [
2500
            [
2501
                (object)[1, 2, 3, 'a' => 4],
2502
                3,
2503
                null,
2504
            ],
2505
            [
2506
                (object)[1, 2, 3, 'a' => 4],
2507
                '3',
2508
                null,
2509
            ],
2510
            [
2511
                (object)[1, 2, 3, 'a' => 4],
2512
                'b',
2513
                null,
2514
            ],
2515
            [
2516
                (object)[1, 2, 3, 'a' => [1, 2, 'a' => 3]],
2517
                'b.*',
2518
                null,
2519
            ],
2520
            [
2521
                (object)[1, 2, 3, 'a' => ['b' => [11], 'c' => [22]]],
2522
                'b.*.0',
2523
                null,
2524
            ],
2525
            [
2526
                (object)[1, 2, 3, 'a' => ['b' => [11], 'c' => [22]]],
2527
                'b.*.*',
2528
                null,
2529
            ],
2530
            [
2531
                (object)[1, 2, 3, 'a' => ['b' => [11, 22], 'c' => [33, 44]]],
2532
                'b.*.*',
2533
                null,
2534
            ],
2535
            [
2536
                (object)[1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
2537
                'b.*.0.0',
2538
                null,
2539
            ],
2540
            [
2541
                (object)[1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
2542
                'a.*.0.2',
2543
                [],
2544
            ],
2545
            [
2546
                (object)[1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
2547
                'a.*.1.0',
2548
                [],
2549
            ],
2550
            [
2551
                (object)[1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
2552
                'a.*.111.1',
2553
                [],
2554
            ],
2555
            [
2556
                (object)[1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
2557
                'a.*.0.*.111',
2558
                [],
2559
            ],
2560
            [
2561
                (object)[1, 2, 3, 'a' => [1, 2, 'b' => ['c', 'd', 'e']]],
2562
                'a.c',
2563
                null,
2564
            ],
2565
            [
2566
                (object)[1, 2, 3, 'a' => [1, 2, 'b' => ['c', 'd', 'e']]],
2567
                'a.c.*',
2568
                null,
2569
            ],
2570
            [
2571
                (object)[1, 2, 3, 'a' => ['b' => ['c', 'd', 'e'], [11, 22]]],
2572
                'a.*.e',
2573
                [],
2574
            ],
2575
            [
2576
                (object)[1, 2, 3, 'a' => ['b' => [['c'], ['d'], ['e']], [[11], [22, 33]]]],
2577
                'a.*.e.*',
2578
                [],
2579
            ],
2580
        ];
2581
    }
2582
}
2583

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.