Annotation of embedaddon/php/ext/spl/tests/iterator_041b.phpt, revision 1.1.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>