Annotation of embedaddon/php/ext/spl/tests/iterator_041b.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: SPL: iterator_to_array() and exceptions from delayed destruct
! 3: --FILE--
! 4: <?php
! 5:
! 6: class MyArrayIterator extends ArrayIterator
! 7: {
! 8: static protected $fail = 0;
! 9: public $state;
! 10:
! 11: static function fail($state, $method)
! 12: {
! 13: if (self::$fail == $state)
! 14: {
! 15: throw new Exception("State $state: $method()");
! 16: }
! 17: }
! 18:
! 19: function __construct()
! 20: {
! 21: $this->state = MyArrayIterator::$fail;
! 22: self::fail(0, __FUNCTION__);
! 23: parent::__construct(array(1, 2));
! 24: self::fail(1, __FUNCTION__);
! 25: }
! 26:
! 27: function rewind()
! 28: {
! 29: self::fail(2, __FUNCTION__);
! 30: return parent::rewind();
! 31: }
! 32:
! 33: function valid()
! 34: {
! 35: self::fail(3, __FUNCTION__);
! 36: return parent::valid();
! 37: }
! 38:
! 39: function current()
! 40: {
! 41: self::fail(4, __FUNCTION__);
! 42: return parent::current();
! 43: }
! 44:
! 45: function key()
! 46: {
! 47: self::fail(5, __FUNCTION__);
! 48: return parent::key();
! 49: }
! 50:
! 51: function next()
! 52: {
! 53: self::fail(6, __FUNCTION__);
! 54: return parent::next();
! 55: }
! 56:
! 57: function __destruct()
! 58: {
! 59: self::fail(7, __FUNCTION__);
! 60: }
! 61:
! 62: static function test($func, $skip = null)
! 63: {
! 64: echo "===$func===\n";
! 65: self::$fail = 0;
! 66: while(self::$fail < 10)
! 67: {
! 68: try
! 69: {
! 70: var_dump($func(new MyArrayIterator()));
! 71: break;
! 72: }
! 73: catch (Exception $e)
! 74: {
! 75: echo $e->getMessage() . "\n";
! 76: }
! 77: if (isset($skip[self::$fail]))
! 78: {
! 79: self::$fail = $skip[self::$fail];
! 80: }
! 81: else
! 82: {
! 83: self::$fail++;
! 84: }
! 85: }
! 86: }
! 87: }
! 88:
! 89: MyArrayIterator::test('iterator_to_array');
! 90: MyArrayIterator::test('iterator_count', array(3 => 6));
! 91:
! 92: ?>
! 93: ===DONE===
! 94: <?php exit(0); ?>
! 95: --EXPECTF--
! 96: ===iterator_to_array===
! 97: State 0: __construct()
! 98: State 1: __construct()
! 99: State 2: rewind()
! 100: State 3: valid()
! 101: State 4: current()
! 102: State 5: key()
! 103: State 6: next()
! 104: ===iterator_count===
! 105: State 0: __construct()
! 106: State 1: __construct()
! 107: State 2: rewind()
! 108: State 3: valid()
! 109: State 6: next()
! 110: ===DONE===
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>