<?php
/**
* Test: NetteIteratorsCachingIterator constructor.
*/
declare(strict_types=1);
use NetteIterators;
use TesterAssert;
require __DIR__ . '/../bootstrap.php';
test('array', function () {
$arr = ['Nette', 'Framework'];
$tmp = [];
foreach (new IteratorsCachingIterator($arr) as $k => $v) {
$tmp[] = "$k => $v";
}
'0 => Nette',
'1 => Framework',
], $tmp);
});
test('stdClass', function () {
$arr = (object) ['Nette', 'Framework'];
$tmp = [];
foreach (new IteratorsCachingIterator($arr) as $k => $v) {
$tmp[] = "$k => $v";
}
'0 => Nette',
'1 => Framework',
], $tmp);
});
test('IteratorAggregate', function () {
$arr = new ArrayObject(['Nette', 'Framework']);
$tmp = [];
foreach (new IteratorsCachingIterator($arr) as $k => $v) {
$tmp[] = "$k => $v";
}
'0 => Nette',
'1 => Framework',
], $tmp);
});
test('Iterator', function () {
$arr = new ArrayObject(['Nette', 'Framework']);
$tmp = [];
foreach (new IteratorsCachingIterator($arr->getIterator()) as $k => $v) {
$tmp[] = "$k => $v";
}
'0 => Nette',
'1 => Framework',
], $tmp);
});
test('SimpleXMLElement', function () {
$arr = new SimpleXMLElement('<feed><item>Nette</item><item>Framework</item></feed>');
$tmp = [];
foreach (new IteratorsCachingIterator($arr) as $k => $v) {
$tmp[] = "$k => $v";
}
'item => Nette',
'item => Framework',
], $tmp);
});
test('object', function () {
assert::
exception(function () {
foreach (new IteratorsCachingIterator($arr) as $k => $v);
}, InvalidArgumentException::class, null);
});
class RecursiveIteratorAggregate implements IteratorAggregate
{
public function getIterator(): Traversable
{
return new ArrayObject(['Nette', 'Framework']);
}
}
test('recursive IteratorAggregate', function () {
$arr = new RecursiveIteratorAggregate;
$tmp = [];
foreach (new IteratorsCachingIterator($arr) as $k => $v) {
$tmp[] = "$k => $v";
}
'0 => Nette',
'1 => Framework',
], $tmp);
});