1
|
|
|
<?php |
2
|
|
|
/* |
3
|
|
|
* @copyright (c) 2020 Mendel <[email protected]> |
4
|
|
|
* @license see license.txt |
5
|
|
|
*/ |
6
|
|
|
namespace drycart\data\tests; |
7
|
|
|
use drycart\data\SortIterator; |
8
|
|
|
use drycart\data\FilterIterator; |
9
|
|
|
use drycart\data\HydrateIterator; |
10
|
|
|
use drycart\data\DehydrateIterator; |
11
|
|
|
|
12
|
|
|
/** |
13
|
|
|
* @author mendel |
14
|
|
|
*/ |
15
|
|
|
class IteratorsTest extends \PHPUnit\Framework\TestCase |
16
|
|
|
{ |
17
|
|
|
public function testSortIterator() |
18
|
|
|
{ |
19
|
|
|
$data = new \ArrayObject([ |
20
|
|
|
['name'=>'Max','age'=>39,'score'=>12], |
21
|
|
|
['name'=>'Jonn','age'=>18,'score'=>8], |
22
|
|
|
['name'=>'Anton','age'=>18,'score'=>36], |
23
|
|
|
]); |
24
|
|
|
$iterator = new SortIterator($data, ['score','age']); |
25
|
|
|
$arr = iterator_to_array($iterator); |
26
|
|
|
|
27
|
|
|
$this->assertEquals($arr[0]['name'], 'Anton'); |
28
|
|
|
$this->assertEquals($arr[1]['name'], 'Max'); |
29
|
|
|
$this->assertEquals($arr[2]['name'], 'Jonn'); |
30
|
|
|
|
31
|
|
|
$iterator = new SortIterator($data, ['age','!score']); |
32
|
|
|
$arr = iterator_to_array($iterator); |
33
|
|
|
|
34
|
|
|
$this->assertEquals($arr[0]['name'], 'Max'); |
35
|
|
|
$this->assertEquals($arr[1]['name'], 'Jonn'); |
36
|
|
|
$this->assertEquals($arr[2]['name'], 'Anton'); |
37
|
|
|
} |
38
|
|
|
|
39
|
|
|
public function testFilterIterator() |
40
|
|
|
{ |
41
|
|
|
$data = new \ArrayObject([ |
42
|
|
|
['name'=>'Max','age'=>39,'score'=>12], |
43
|
|
|
['name'=>'Jonn','age'=>18,'score'=>8], |
44
|
|
|
['name'=>'Anton','age'=>18,'score'=>36], |
45
|
|
|
]); |
46
|
|
|
$iterator = new FilterIterator($data,['age'=>18,'>score'=>10]); |
47
|
|
|
$arr = array_values(iterator_to_array($iterator)); |
48
|
|
|
$this->assertEquals($arr[0]['name'], 'Anton'); |
49
|
|
|
$this->assertEquals(count($arr), 1); |
50
|
|
|
} |
51
|
|
|
|
52
|
|
|
public function testHydrateIterator() |
53
|
|
|
{ |
54
|
|
|
$data = new \ArrayObject([ |
55
|
|
|
['name'=>'Max','age'=>39], |
56
|
|
|
['name'=>'Jonn','age'=>18], |
57
|
|
|
]); |
58
|
|
|
$iterator = new HydrateIterator($data, dummy\DummyModel::class); |
59
|
|
|
$arr = iterator_to_array($iterator); |
60
|
|
|
|
61
|
|
|
$this->assertEquals(get_class($arr[0]), dummy\DummyModel::class); |
62
|
|
|
$this->assertEquals($arr[0]->name, 'Max'); |
63
|
|
|
$this->assertEquals($arr[0]->age, 39); |
64
|
|
|
|
65
|
|
|
$this->assertEquals(get_class($arr[1]), dummy\DummyModel::class); |
66
|
|
|
$this->assertEquals($arr[1]->name, 'Jonn'); |
67
|
|
|
$this->assertEquals($arr[1]->age, 18); |
68
|
|
|
} |
69
|
|
|
|
70
|
|
|
public function testDehydrateIterator() |
71
|
|
|
{ |
72
|
|
|
$data = [ |
73
|
|
|
['name'=>'Max','age'=>39], |
74
|
|
|
['name'=>'Jonn','age'=>18], |
75
|
|
|
]; |
76
|
|
|
$hydrateIterator = new HydrateIterator(new \ArrayObject($data), dummy\DummyModel::class); |
77
|
|
|
$dehydrateIterator = new DehydrateIterator($hydrateIterator); |
78
|
|
|
$arr = iterator_to_array($dehydrateIterator); |
79
|
|
|
$this->assertCount(2, $arr); |
80
|
|
|
$this->assertIsArray($arr[0]); |
81
|
|
|
$this->assertIsArray($arr[1]); |
82
|
|
|
$this->assertEquals($data[0],$arr[0]); |
83
|
|
|
$this->assertEquals($data[1],$arr[1]); |
84
|
|
|
} |
85
|
|
|
} |
86
|
|
|
|