123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- --TEST--
- SPL: AppendIterator::append() rewinds when necessary
- --FILE--
- <?php
- 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--
- 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
|