schemator-php

Форк
0
/
NestedAccessorExistTest.php 
1765 строк · 51.9 Кб
1
<?php
2

3
declare(strict_types=1);
4

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

7
use Smoren\Schemator\Components\NestedAccessor;
8

9
class NestedAccessorExistTest extends \Codeception\Test\Unit
10
{
11
    /**
12
     * @dataProvider dataProviderForExistTrueStrict
13
     * @dataProvider dataProviderForEqualNull
14
     */
15
    public function testExistTrueStrict($source, $path)
16
    {
17
        // Given
18
        $accessor = new NestedAccessor($source);
19

20
        // When
21
        $actual = isset($accessor[$path]);
22

23
        // Then
24
        $this->assertTrue($actual);
25
    }
26

27
    /**
28
     * @dataProvider dataProviderForExistTrueStrict
29
     */
30
    public function testIssetTrueStrict($source, $path)
31
    {
32
        // Given
33
        $accessor = new NestedAccessor($source);
34

35
        // When
36
        $actual = $accessor->isset($path);
37

38
        // Then
39
        $this->assertTrue($actual);
40
    }
41

42
    /**
43
     * @dataProvider dataProviderForExistFalseStrict
44
     * @dataProvider dataProviderForExistTrueNonStrict
45
     * @dataProvider dataProviderForExistFalseNonStrict
46
     */
47
    public function testExistFalseStrict($source, $path)
48
    {
49
        // Given
50
        $accessor = new NestedAccessor($source);
51

52
        // When
53
        $actual = isset($accessor[$path]);
54

55
        // Then
56
        $this->assertFalse($actual);
57
    }
58

59
    /**
60
     * @dataProvider dataProviderForExistFalseStrict
61
     * @dataProvider dataProviderForExistTrueNonStrict
62
     * @dataProvider dataProviderForExistFalseNonStrict
63
     * @dataProvider dataProviderForEqualNull
64
     */
65
    public function testIssetFalseStrict($source, $path)
66
    {
67
        // Given
68
        $accessor = new NestedAccessor($source);
69

70
        // When
71
        $actual = $accessor->isset($path);
72

73
        // Then
74
        $this->assertFalse($actual);
75
    }
76

77
    /**
78
     * @dataProvider dataProviderForExistTrueNonStrict
79
     * @dataProvider dataProviderForExistTrueStrict
80
     * @dataProvider dataProviderForEqualNull
81
     */
82
    public function testExistTrueNonStrict($source, $path)
83
    {
84
        // Given
85
        $accessor = new NestedAccessor($source);
86

87
        // When
88
        $actual = $accessor->exist($path, false);
89

90
        // Then
91
        $this->assertTrue($actual);
92
    }
93

94
    /**
95
     * @dataProvider dataProviderForExistTrueNonStrict
96
     * @dataProvider dataProviderForExistTrueStrict
97
     */
98
    public function testIssetTrueNonStrict($source, $path)
99
    {
100
        // Given
101
        $accessor = new NestedAccessor($source);
102

103
        // When
104
        $actual = $accessor->isset($path, false);
105

106
        // Then
107
        $this->assertTrue($actual);
108
    }
109

110
    /**
111
     * @dataProvider dataProviderForExistFalseNonStrict
112
     */
113
    public function testExistFalseNonStrict($source, $path)
114
    {
115
        // Given
116
        $accessor = new NestedAccessor($source);
117

118
        // When
119
        $actual = $accessor->exist($path, false);
120

121
        // Then
122
        $this->assertFalse($actual);
123
    }
124

125
    /**
126
     * @dataProvider dataProviderForExistFalseNonStrict
127
     * @dataProvider dataProviderForEqualNull
128
     */
129
    public function testIssetFalseNonStrict($source, $path)
130
    {
131
        // Given
132
        $accessor = new NestedAccessor($source);
133

134
        // When
135
        $actual = $accessor->isset($path, false);
136

137
        // Then
138
        $this->assertFalse($actual);
139
    }
140

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

671
    public function dataProviderForExistFalseStrict(): array
672
    {
673
        return [
674
            [
675
                [],
676
                '*',
677
            ],
678
            [
679
                [],
680
                [''],
681
            ],
682
            [
683
                [],
684
                'test',
685
            ],
686
            [
687
                [],
688
                'foo.bar',
689
            ],
690
            [
691
                [],
692
                'foo.bar.*',
693
            ],
694
            [
695
                [],
696
                'foo.*.bar',
697
            ],
698
            [
699
                [1, 2, 3, 'a' => 4],
700
                3,
701
            ],
702
            [
703
                [1, 2, 3, 'a' => 4],
704
                'a.c',
705
            ],
706
            [
707
                [1, 2, 3, 'a' => 4],
708
                'a.*',
709
            ],
710
            [
711
                [1, 2, 3, 'a' => ['b' => [11], 'c' => [22]]],
712
                'a.*.1',
713
            ],
714
            [
715
                [1, 2, 3, 'a' => ['b' => [11], 'c' => [22]]],
716
                'a.*.a',
717
            ],
718
            [
719
                [1, 2, 3, 'a' => ['b' => [11], 'c' => [22]]],
720
                'a.*.test',
721
            ],
722
            [
723
                [1, 2, 3, 'a' => ['b' => [11], 'c' => [22]]],
724
                'a.*.*.*',
725
            ],
726
            [
727
                [1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
728
                'a.*.1.0',
729
            ],
730
            [
731
                [1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
732
                'a.*.0.2',
733
            ],
734
            [
735
                [1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
736
                'a.*.0.*.a',
737
            ],
738
            [
739
                [1, 2, 3, 'a' => [1, 2, 'b' => ['c', 'd', 'e']]],
740
                'a.c',
741
            ],
742
            [
743
                [1, 2, 3, 'a' => [1, 2, 'b' => ['c', 'd', 'e']]],
744
                'a.c.*',
745
            ],
746
            [
747
                [1, 2, 3, 'a' => ['b' => ['c', 'd', 'e'], [11, 22]]],
748
                'a.*.x.*',
749
            ],
750
            [
751
                [1, 2, 3, 'a' => ['b' => [['c'], ['d'], ['e']], [[], [22, 33]]]],
752
                'a.*.*.0',
753
            ],
754
            [
755
                [1, 2, 3, 'a' => ['b' => ['c', 'd', 'e'], [11, 22]]],
756
                ['a', '*', 'y'],
757
            ],
758
            [
759
                [
760
                    'a' => [1, 2, 3],
761
                    'b' => [11],
762
                    'c' => [111, 222, 333],
763
                ],
764
                '*.1',
765
            ],
766
            [
767
                [
768
                    'a' => [1],
769
                    'b' => [11, 22],
770
                    'c' => [111, 222, 333],
771
                ],
772
                ['*', 2],
773
            ],
774
            [
775
                [
776
                    'a' => [1, 2, [3]],
777
                    'b' => [11, 22, 33],
778
                    'c' => [111, 222, [333]],
779
                ],
780
                ['*', '2', '*'],
781
            ],
782
            [
783
                [
784
                    'a' => [1, 2, 3],
785
                    'b' => [11, 22, 33],
786
                    'c' => '[111, 222, 333]',
787
                ],
788
                '*.*',
789
            ],
790
            [
791
                [
792
                    [
793
                        'a' => [1, 2, 3],
794
                        'b' => '[11, 22, 33]',
795
                        'c' => [111, 222, 333],
796
                    ],
797
                ],
798
                '*.*.0',
799
            ],
800
            [
801
                [
802
                    [
803
                        [
804
                            'a' => [1, 2, 3],
805
                            'b' => [11, 22, 33],
806
                            'c' => [111, 222, 333],
807
                        ],
808
                    ],
809
                    [
810
                        [
811
                            'a' => [],
812
                            'b' => [44, 55],
813
                            'c' => [444, 555],
814
                        ],
815
                    ],
816
                ],
817
                '*.*.*.0',
818
            ],
819
            [
820
                [
821
                    [
822
                        [
823
                            'a' => [1, 2, 3],
824
                            'b' => [11, 22, 33],
825
                            'c' => [111, 222, 333],
826
                        ],
827
                    ],
828
                    [
829
                        [
830
                            'b' => [44, 55],
831
                            'c' => [444, 555],
832
                        ],
833
                    ],
834
                ],
835
                '*.*.a',
836
            ],
837
            [
838
                [
839
                    [
840
                        [
841
                            'a' => [1, 2, 3],
842
                            'b' => [11, 22, 33],
843
                            'c' => [111, 222, 333],
844
                        ],
845
                    ],
846
                    [
847
                        [
848
                            'a' => [4],
849
                            'b' => [44, 55],
850
                            'c' => [444, 555],
851
                        ],
852
                    ],
853
                ],
854
                '*.*.a.2',
855
            ],
856
            [
857
                [
858
                    [
859
                        [
860
                            'a' => [1, 2, 3],
861
                            'b' => [11, 22, 33],
862
                            'c' => [111, 222, 333],
863
                        ],
864
                    ],
865
                    [
866
                        [
867
                            'a' => [4],
868
                            'b' => [44, 55],
869
                            'c' => [444, 555],
870
                        ],
871
                    ],
872
                ],
873
                '*.*.a.*.1',
874
            ],
875
            [
876
                [
877
                    [
878
                        [
879
                            'a' => [1, 2, 3],
880
                            'b' => [11, 22, 33],
881
                            'c' => [111, 222, 333],
882
                        ],
883
                    ],
884
                    [
885
                        [
886
                            'a' => [4, 5],
887
                            'b' => [44, 55],
888
                            'c' => [444, 555],
889
                        ],
890
                    ],
891
                ],
892
                '*.*.b.|.2',
893
            ],
894
            [
895
                [
896
                    [
897
                        [
898
                            'a' => [1, 2, 3],
899
                            'b' => [11, 22, 33],
900
                            'c' => [111, 222, 333],
901
                        ],
902
                    ],
903
                    [
904
                        [
905
                            'a' => [4, 5],
906
                            'c' => [444, 555],
907
                        ],
908
                    ],
909
                ],
910
                '*.*.b.|.1',
911
            ],
912
            [
913
                [
914
                    'first' => [
915
                        [
916
                            'a' => [1, 2, 3],
917
                            'b' => [11, 22, 33],
918
                            'c' => [111, 222, 333],
919
                        ],
920
                    ],
921
                    'second' => [
922
                        [
923
                            'a' => [4],
924
                            'b' => [44, 55],
925
                        ],
926
                    ],
927
                ],
928
                '*.*.*.1',
929
            ],
930
            [
931
                [
932
                    'first' => [
933
                        [
934
                            [
935
                                'a' => [],
936
                                'b' => ['aaa'],
937
                                'c' => ['bbb'],
938
                            ],
939
                        ],
940
                    ],
941
                    'second' => [
942
                        [
943
                            [
944
                                [1, 2, 3],
945
                                [11, 22, 33],
946
                                [111, 222, 333],
947
                            ],
948
                            [
949
                                [1111],
950
                                [11111],
951
                            ],
952
                        ],
953
                        [
954
                            [
955
                                [111111],
956
                                [],
957
                            ],
958
                        ],
959
                    ],
960
                ],
961
                'second.*.*.*.0',
962
            ],
963
            [
964
                [
965
                    'first' => [
966
                        [
967
                            [
968
                                'a' => [],
969
                                'b' => ['aaa'],
970
                                'c' => ['bbb'],
971
                            ],
972
                        ],
973
                    ],
974
                    'second' => [
975
                        [
976
                            [
977
                                [1, 2, 3],
978
                                [11, 22, 33],
979
                                [111, 222, 333],
980
                            ],
981
                            [
982
                                [],
983
                                [11111],
984
                            ],
985
                        ],
986
                        [
987
                            [
988
                                [111111],
989
                                [1111111],
990
                            ],
991
                        ],
992
                    ],
993
                ],
994
                'second.*.*.0.*.0',
995
            ],
996
            [
997
                [
998
                    'first' => [
999
                        [
1000
                            [
1001
                                'a' => [],
1002
                                'b' => ['aaa'],
1003
                                'c' => ['bbb'],
1004
                            ],
1005
                        ],
1006
                    ],
1007
                    'second' => [
1008
                        [
1009
                            [
1010
                                [1, 2, 3],
1011
                                [11, 22, 33],
1012
                                [111, 222, 333],
1013
                            ],
1014
                            [
1015
                                [1111],
1016
                                [11111],
1017
                            ],
1018
                        ],
1019
                        [
1020
                            [],
1021
                        ],
1022
                    ],
1023
                ],
1024
                'second.*.*.0.*.*',
1025
            ],
1026
            [
1027
                [
1028
                    'first' => [
1029
                        [
1030
                            [
1031
                                'a' => [],
1032
                                'b' => ['aaa'],
1033
                                'c' => ['bbb'],
1034
                            ],
1035
                        ],
1036
                    ],
1037
                    'second' => [
1038
                        [
1039
                            [],
1040
                            [
1041
                                [1111],
1042
                                [2222],
1043
                            ],
1044
                        ],
1045
                        [
1046
                            [
1047
                                [11111],
1048
                                [222222],
1049
                            ],
1050
                        ],
1051
                    ],
1052
                ],
1053
                'second.0.0.0',
1054
            ],
1055
            [
1056
                [
1057
                    'a' => [
1058
                        [
1059
                            'b' => [
1060
                                [
1061
                                    'c' => [
1062
                                        [
1063
                                            'd' => 1,
1064
                                            'e' => [1, 2, 3],
1065
                                        ]
1066
                                    ],
1067
                                    'f' => [
1068
                                        [
1069
                                            'e' => [4, 5, 6],
1070
                                        ]
1071
                                    ],
1072
                                ],
1073
                            ],
1074
                            'i' => [
1075
                                [
1076
                                    'j' => [
1077
                                        [
1078
                                            'd' => 3,
1079
                                            'e' => [7, 8, 9],
1080
                                        ]
1081
                                    ]
1082
                                ],
1083
                            ],
1084
                        ],
1085
                    ],
1086
                ],
1087
                'a.*****.d',
1088
            ],
1089
            [
1090
                [
1091
                    'a' => [
1092
                        [
1093
                            'b' => [
1094
                                [
1095
                                    'c' => [
1096
                                        [
1097
                                            'd' => 1,
1098
                                        ]
1099
                                    ],
1100
                                    'f' => [
1101
                                        [
1102
                                            'd' => 2,
1103
                                        ]
1104
                                    ],
1105
                                ],
1106
                            ],
1107
                            'i' => [
1108
                                [
1109
                                    'j' => [
1110
                                        [
1111
                                            'd' => 3,
1112
                                        ]
1113
                                    ]
1114
                                ],
1115
                            ],
1116
                        ],
1117
                    ],
1118
                ],
1119
                'a.*****.e',
1120
            ],
1121
            [
1122
                [
1123
                    'a' => [
1124
                        [
1125
                            'b' => [
1126
                                [
1127
                                    'c' => [
1128
                                        [
1129
                                            'd' => 1,
1130
                                            'e' => [1, 2, 3],
1131
                                        ]
1132
                                    ],
1133
                                    'f' => [
1134
                                        [
1135
                                            'd' => 2,
1136
                                        ]
1137
                                    ],
1138
                                ],
1139
                            ],
1140
                            'i' => [
1141
                                [
1142
                                    'j' => [
1143
                                        [
1144
                                            'd' => 3,
1145
                                            'e' => [7, 8, 9],
1146
                                        ]
1147
                                    ]
1148
                                ],
1149
                            ],
1150
                        ],
1151
                    ],
1152
                ],
1153
                'a.*****.|.1.e',
1154
            ],
1155
            [
1156
                [
1157
                    'a' => [
1158
                        [
1159
                            'b' => [
1160
                                [
1161
                                    'c' => [
1162
                                        [
1163
                                            'd' => 1,
1164
                                            'e' => [1, 2, 3],
1165
                                        ]
1166
                                    ],
1167
                                ],
1168
                            ],
1169
                            'i' => [
1170
                                [
1171
                                    'j' => [
1172
                                    ]
1173
                                ],
1174
                            ],
1175
                        ],
1176
                    ],
1177
                ],
1178
                'a.*****.|.1.e',
1179
            ],
1180
        ];
1181
    }
1182

1183
    public function dataProviderForExistTrueNonStrict(): array
1184
    {
1185
        return [
1186
            [
1187
                [1, 2, 3, 'a' => [
1188
                    'b' => [['c'], ['d'], ['e']],
1189
                    [[11], [22, 33]]],
1190
                ],
1191
                'a.*.*.1',
1192
                [33],
1193
            ],
1194
            [
1195
                [1, 2, 3, 'a' => [
1196
                    'b' => [['c'], ['d'], ['e']],
1197
                    [[11], [22, 33]]],
1198
                ],
1199
                'a.**.1',
1200
                [33],
1201
            ],
1202
            [
1203
                [
1204
                    'a' => [1, 2],
1205
                    'b' => [11, 22, 33],
1206
                    'c' => [111, 222, 333],
1207
                ],
1208
                ['*', '2'],
1209
                [33, 333],
1210
            ],
1211
            [
1212
                [
1213
                    'a' => [1, 2],
1214
                    'b' => [11, 22, [33]],
1215
                    'c' => [111, 222, [333]],
1216
                ],
1217
                ['*', '2'],
1218
                [[33], [333]],
1219
            ],
1220
            [
1221
                [
1222
                    'a' => [1, 2, [3]],
1223
                    'b' => [11, 22],
1224
                    'c' => [111, 222, [333]],
1225
                ],
1226
                ['*', '2', '*'],
1227
                [3, 333],
1228
            ],
1229
            [
1230
                [
1231
                    [
1232
                        [
1233
                            'a' => [1, 2, 3],
1234
                            'b' => [11, 22, 33],
1235
                            'c' => [111, 222, 333],
1236
                        ],
1237
                    ],
1238
                    [
1239
                        [
1240
                            'a' => [4, 5],
1241
                            'b' => [44, 55],
1242
                            'c' => [444, 555],
1243
                        ],
1244
                    ],
1245
                ],
1246
                '*.*.a.2',
1247
                [3],
1248
            ],
1249
            [
1250
                [
1251
                    'first' => [
1252
                        [
1253
                            'a' => [1, 2, 3],
1254
                            'b' => [11, 22, 33],
1255
                            'c' => [111, 222, 333],
1256
                        ],
1257
                    ],
1258
                    'second' => [
1259
                        [
1260
                            'a' => [4, 5],
1261
                            'b' => [44, 55],
1262
                        ],
1263
                    ],
1264
                ],
1265
                '*.*.*.2',
1266
                [3, 33, 333],
1267
            ],
1268
            [
1269
                [
1270
                    'first' => [
1271
                        [
1272
                            [
1273
                                'a' => [],
1274
                                'b' => ['aaa'],
1275
                                'c' => ['bbb'],
1276
                            ],
1277
                        ],
1278
                    ],
1279
                    'second' => [
1280
                        [
1281
                            [
1282
                                [1, 2, 3],
1283
                                [11, 22, 33],
1284
                                [111, 222, 333],
1285
                            ],
1286
                            [
1287
                                [1111],
1288
                                [11111],
1289
                            ],
1290
                        ],
1291
                        [
1292
                            [
1293
                                [111111],
1294
                                [1111111],
1295
                            ],
1296
                        ],
1297
                    ],
1298
                ],
1299
                'second.*.*.*.2',
1300
                [3, 33, 333],
1301
            ],
1302
            [
1303
                [
1304
                    'first' => [
1305
                        [
1306
                            [
1307
                                'a' => [],
1308
                                'b' => ['aaa'],
1309
                                'c' => ['bbb'],
1310
                            ],
1311
                        ],
1312
                    ],
1313
                    'second' => [
1314
                        [
1315
                            [
1316
                                [1, 2, 3],
1317
                                [11, 22, 33],
1318
                                [111, 222, 333],
1319
                            ],
1320
                            [
1321
                                [1111],
1322
                                [11111],
1323
                            ],
1324
                        ],
1325
                        [
1326
                            [
1327
                                [111111, 999],
1328
                                [1111111],
1329
                            ],
1330
                        ],
1331
                    ],
1332
                ],
1333
                'second.*.*.0.1',
1334
                [2, 999],
1335
            ],
1336
            [
1337
                [
1338
                    'first' => [
1339
                        [
1340
                            [
1341
                                'a' => [],
1342
                                'b' => ['aaa'],
1343
                                'c' => ['bbb'],
1344
                            ],
1345
                        ],
1346
                    ],
1347
                    'second' => [
1348
                        [
1349
                            [
1350
                                [1, 2, 3],
1351
                                [11, 22, 33],
1352
                                [111, 222, 333],
1353
                            ],
1354
                            [
1355
                                [1111],
1356
                                [11111],
1357
                            ],
1358
                        ],
1359
                        [
1360
                            [
1361
                                [111111],
1362
                                [1111111],
1363
                            ],
1364
                        ],
1365
                    ],
1366
                ],
1367
                'second.*.*.2',
1368
                [[111, 222, 333]],
1369
            ],
1370
            [
1371
                [
1372
                    'first' => [
1373
                        [
1374
                            [
1375
                                'a' => [],
1376
                                'b' => ['aaa'],
1377
                                'c' => ['bbb'],
1378
                            ],
1379
                        ],
1380
                    ],
1381
                    'second' => [
1382
                        [
1383
                            [
1384
                                [1, 2, 3],
1385
                                [11, 22, 33],
1386
                                [111, 222, 333],
1387
                            ],
1388
                            [
1389
                                [1111],
1390
                                [11111],
1391
                            ],
1392
                        ],
1393
                        [
1394
                            [
1395
                                [111111],
1396
                                [1111111],
1397
                            ],
1398
                        ],
1399
                    ],
1400
                ],
1401
                'second.*.*.2.*',
1402
                [111, 222, 333],
1403
            ],
1404
            [
1405
                [
1406
                    'a' => [
1407
                        [
1408
                            'b' => [
1409
                                [
1410
                                    'c' => [
1411
                                        [
1412
                                            'd' => 1,
1413
                                            'e' => [1, 2, 3],
1414
                                        ]
1415
                                    ],
1416
                                    'f' => [
1417
                                        [
1418
                                            'e' => [4, 5, 6],
1419
                                        ]
1420
                                    ],
1421
                                ],
1422
                            ],
1423
                            'i' => [
1424
                                [
1425
                                    'j' => [
1426
                                        [
1427
                                            'd' => 3,
1428
                                            'e' => [7, 8, 9],
1429
                                        ]
1430
                                    ]
1431
                                ],
1432
                            ],
1433
                        ],
1434
                    ],
1435
                ],
1436
                'a.*****.d',
1437
                [1, 3],
1438
            ],
1439
            [
1440
                [
1441
                    'a' => [
1442
                        [
1443
                            'b' => [
1444
                                [
1445
                                    'c' => [
1446
                                        [
1447
                                            'd' => 1,
1448
                                        ]
1449
                                    ],
1450
                                    'f' => [
1451
                                        [
1452
                                            'd' => 2,
1453
                                            'e' => [4, 5, 6],
1454
                                        ]
1455
                                    ],
1456
                                ],
1457
                            ],
1458
                            'i' => [
1459
                                [
1460
                                    'j' => [
1461
                                        [
1462
                                            'd' => 3,
1463
                                            'e' => [7, 8, 9],
1464
                                        ]
1465
                                    ]
1466
                                ],
1467
                            ],
1468
                        ],
1469
                    ],
1470
                ],
1471
                'a.*****.e',
1472
                [[4, 5, 6], [7, 8, 9]],
1473
            ],
1474
        ];
1475
    }
1476

1477
    public function dataProviderForExistFalseNonStrict(): array
1478
    {
1479
        return [
1480
            [
1481
                [1, 2, 3, 'a' => 4],
1482
                3,
1483
                null,
1484
            ],
1485
            [
1486
                [1, 2, 3, 'a' => 4],
1487
                '3',
1488
                null,
1489
            ],
1490
            [
1491
                [1, 2, 3, 'a' => 4],
1492
                'b',
1493
                null,
1494
            ],
1495
            [
1496
                [1, 2, 3, 'a' => [1, 2, 'a' => 3]],
1497
                'b.*',
1498
                null,
1499
            ],
1500
            [
1501
                [1, 2, 3, 'a' => ['b' => [11], 'c' => [22]]],
1502
                'b.*.0',
1503
                null,
1504
            ],
1505
            [
1506
                [1, 2, 3, 'a' => ['b' => [11], 'c' => [22]]],
1507
                'b.*.*',
1508
                null,
1509
            ],
1510
            [
1511
                [1, 2, 3, 'a' => ['b' => [11, 22], 'c' => [33, 44]]],
1512
                'b.*.*',
1513
                null,
1514
            ],
1515
            [
1516
                [1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
1517
                'b.*.0.0',
1518
                null,
1519
            ],
1520
            [
1521
                [1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
1522
                'a.*.0.2',
1523
                [],
1524
            ],
1525
            [
1526
                [1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
1527
                'a.*.1.0',
1528
                [],
1529
            ],
1530
            [
1531
                [1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
1532
                'a.*.111.1',
1533
                [],
1534
            ],
1535
            [
1536
                [1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
1537
                'a.*.0.*.111',
1538
                [],
1539
            ],
1540
            [
1541
                [1, 2, 3, 'a' => [1, 2, 'b' => ['c', 'd', 'e']]],
1542
                'a.c',
1543
                null,
1544
            ],
1545
            [
1546
                [1, 2, 3, 'a' => [1, 2, 'b' => ['c', 'd', 'e']]],
1547
                'a.c.*',
1548
                null,
1549
            ],
1550
            [
1551
                [1, 2, 3, 'a' => ['b' => ['c', 'd', 'e'], [11, 22]]],
1552
                'a.*.e',
1553
                [],
1554
            ],
1555
            [
1556
                [1, 2, 3, 'a' => ['b' => [['c'], ['d'], ['e']], [[11], [22, 33]]]],
1557
                'a.*.e.*',
1558
                [],
1559
            ],
1560
            [
1561
                [1, 2, 3, 'a' => [
1562
                    'b' => [['c'], ['d'], ['e']],
1563
                    [[11], [22, 33]]],
1564
                ],
1565
                'a.**.2',
1566
                [],
1567
            ],
1568
            [
1569
                [1, 2, 3, 'a' => [
1570
                    'b' => [['c'], ['d'], ['e']],
1571
                    [[11], [22, 33]]],
1572
                ],
1573
                'a.**.test',
1574
                [],
1575
            ],
1576
            [
1577
                [
1578
                    'a' => [1, 2, 3],
1579
                    'b' => [11, 22, 33],
1580
                    'c' => [111, 222, 333],
1581
                ],
1582
                '*.3',
1583
                [],
1584
            ],
1585
            [
1586
                [
1587
                    'a' => [1, 2, 3],
1588
                    'b' => [11, 22, 33],
1589
                    'c' => [111, 222, 333],
1590
                ],
1591
                ['*', 3],
1592
                [],
1593
            ],
1594
            [
1595
                [
1596
                    [
1597
                        'a' => [1, 2, 3],
1598
                        'b' => [11, 22, 33],
1599
                        'c' => [111, 222, 333],
1600
                    ],
1601
                ],
1602
                '*.*.5',
1603
                [],
1604
            ],
1605
            [
1606
                [
1607
                    [
1608
                        [
1609
                            'a' => [1, 2, 3],
1610
                            'b' => [11, 22, 33],
1611
                            'c' => [111, 222, 333],
1612
                        ],
1613
                    ],
1614
                    [
1615
                        [
1616
                            'a' => [4, 5],
1617
                            'b' => [44, 55],
1618
                            'c' => [444, 555],
1619
                        ],
1620
                    ],
1621
                ],
1622
                '*.*.*.3',
1623
                [],
1624
            ],
1625
            [
1626
                [
1627
                    [
1628
                        [
1629
                            'a' => [1, 2, 3],
1630
                            'b' => [11, 22, 33],
1631
                            'c' => [111, 222, 333],
1632
                        ],
1633
                    ],
1634
                    [
1635
                        [
1636
                            'a' => [4, 5],
1637
                            'b' => [44, 55],
1638
                            'c' => [444, 555],
1639
                        ],
1640
                    ],
1641
                ],
1642
                '*.*.z',
1643
                [],
1644
            ],
1645
            [
1646
                [
1647
                    [
1648
                        [
1649
                            'a' => [1, 2, 3],
1650
                            'b' => [11, 22, 33],
1651
                            'c' => [111, 222, 333],
1652
                        ],
1653
                    ],
1654
                    [
1655
                        [
1656
                            'a' => [4, 5],
1657
                            'b' => [44, 55],
1658
                            'c' => [444, 555],
1659
                        ],
1660
                    ],
1661
                ],
1662
                '*.*.z.0',
1663
                [],
1664
            ],
1665
            [
1666
                [
1667
                    [
1668
                        [
1669
                            'a' => [1, 2, 3],
1670
                            'b' => [11, 22, 33],
1671
                            'c' => [111, 222, 333],
1672
                        ],
1673
                    ],
1674
                    [
1675
                        [
1676
                            'a' => [4, 5],
1677
                            'b' => [44, 55],
1678
                            'c' => [444, 555],
1679
                        ],
1680
                    ],
1681
                ],
1682
                '*.*.z.1',
1683
                [],
1684
            ],
1685
            [
1686
                [
1687
                    [
1688
                        [
1689
                            'a' => [1, 2, 3],
1690
                            'b' => [11, 22, 33],
1691
                            'c' => [111, 222, 333],
1692
                        ],
1693
                    ],
1694
                    [
1695
                        [
1696
                            'a' => [4, 5],
1697
                            'b' => [44, 55],
1698
                            'c' => [444, 555],
1699
                        ],
1700
                    ],
1701
                ],
1702
                '*.*.b.|.z',
1703
                null,
1704
            ],
1705
            [
1706
                [
1707
                    'a' => [
1708
                        [
1709
                            'b' => [
1710
                                [
1711
                                    'c' => [
1712
                                        [
1713
                                            'd' => 1,
1714
                                            'e' => [1, 2, 3],
1715
                                        ]
1716
                                    ],
1717
                                    'f' => [
1718
                                        [
1719
                                            'd' => 2,
1720
                                            'e' => [4, 5, 6],
1721
                                        ]
1722
                                    ],
1723
                                ],
1724
                            ],
1725
                            'i' => [
1726
                                [
1727
                                    'j' => [
1728
                                        [
1729
                                            'd' => 3,
1730
                                            'e' => [7, 8, 9],
1731
                                        ]
1732
                                    ]
1733
                                ],
1734
                            ],
1735
                        ],
1736
                    ],
1737
                ],
1738
                'a.*****.|.1.f',
1739
                null,
1740
            ],
1741
        ];
1742
    }
1743

1744
    public function dataProviderForEqualNull(): array
1745
    {
1746
        return [
1747
            [
1748
                null,
1749
                [],
1750
            ],
1751
            [
1752
                [null, 2, 3, 'a' => 4],
1753
                0,
1754
            ],
1755
            [
1756
                ['a' => null, 'b' => 1],
1757
                'a',
1758
            ],
1759
            [
1760
                [null, null],
1761
                '1',
1762
            ],
1763
        ];
1764
    }
1765
}
1766

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

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

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

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