1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 00:02:20 +01:00
Files
archived-php-src/ext/spl/tests/iterator_031.phpt
Gina Peter Banyard 4d528531be ext/spl: extract AppendIterator constructor (#21367)
The implementation of it is simple whereas spl_dual_it_construct() is extremely convoluted
2026-03-21 17:05:33 +00:00

113 lines
2.0 KiB
PHP

--TEST--
SPL: AppendIterator::append() rewinds when necessary
--FILE--
<?php
$ap = new AppendIterator();
try {
$ap->__construct();
} catch (\Throwable $e) {
echo $e::class, ': ', $e->getMessage(), "\n";
}
class MyArrayIterator extends ArrayIterator
{
function rewind(): void
{
echo __METHOD__ . "\n";
parent::rewind();
}
}
$it = new MyArrayIterator(array(1,2));
foreach($it as $k=>$v) {
echo "$k=>$v\n";
}
class MyAppendIterator extends AppendIterator
{
function __construct()
{
echo __METHOD__ . "\n";
}
function rewind(): void
{
echo __METHOD__ . "\n";
parent::rewind();
}
function valid(): bool
{
echo __METHOD__ . "\n";
return parent::valid();
}
function append(Iterator $what): void
{
echo __METHOD__ . "\n";
parent::append($what);
}
function parent__construct() {
parent::__construct();
}
}
$ap = new MyAppendIterator;
try {
$ap->append($it);
} catch(\Error $e) {
echo $e->getMessage() . "\n";
}
$ap->parent__construct();
try {
$ap->parent__construct($it);
} catch(BadMethodCallException $e) {
echo $e->getMessage() . "\n";
}
$ap->append($it);
$ap->append($it);
$ap->append($it);
foreach($ap as $k=>$v) {
echo "$k=>$v\n";
}
?>
--EXPECT--
BadMethodCallException: AppendIterator::getIterator() must be called exactly once per instance
MyArrayIterator::rewind
0=>1
1=>2
MyAppendIterator::__construct
MyAppendIterator::append
The object is in an invalid state as the parent constructor was not called
AppendIterator::getIterator() must be called exactly once per instance
MyAppendIterator::append
MyArrayIterator::rewind
MyAppendIterator::append
MyAppendIterator::append
MyAppendIterator::rewind
MyArrayIterator::rewind
MyAppendIterator::valid
0=>1
MyAppendIterator::valid
1=>2
MyArrayIterator::rewind
MyAppendIterator::valid
0=>1
MyAppendIterator::valid
1=>2
MyArrayIterator::rewind
MyAppendIterator::valid
0=>1
MyAppendIterator::valid
1=>2
MyAppendIterator::valid