Annotation of embedaddon/php/ext/spl/tests/iterator_001.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: SPL: Iterator aggregating inner iterator's methods
! 3: --FILE--
! 4: <?php
! 5:
! 6: class NumericArrayIterator implements Iterator
! 7: {
! 8: protected $a;
! 9: protected $i = 0;
! 10:
! 11: public function __construct($a)
! 12: {
! 13: echo __METHOD__ . "\n";
! 14: $this->a = $a;
! 15: }
! 16:
! 17: public function rewind()
! 18: {
! 19: echo __METHOD__ . "\n";
! 20: $this->i = 0;
! 21: }
! 22:
! 23: public function valid()
! 24: {
! 25: $ret = $this->i < count($this->a);
! 26: echo __METHOD__ . '(' . ($ret ? 'true' : 'false') . ")\n";
! 27: return $ret;
! 28: }
! 29:
! 30: public function key()
! 31: {
! 32: echo __METHOD__ . "\n";
! 33: return $this->i;
! 34: }
! 35:
! 36: public function current()
! 37: {
! 38: echo __METHOD__ . "\n";
! 39: return $this->a[$this->i];
! 40: }
! 41:
! 42: public function next()
! 43: {
! 44: echo __METHOD__ . "\n";
! 45: $this->i++;
! 46: }
! 47:
! 48: public function greaterThan($comp)
! 49: {
! 50: echo get_class($this) . '::' . __FUNCTION__ . '(' . $comp . ")\n";
! 51: return $this->current() > $comp;
! 52: }
! 53: }
! 54:
! 55: class SeekableNumericArrayIterator extends NumericArrayIterator implements SeekableIterator
! 56: {
! 57: public function seek($index)
! 58: {
! 59: if ($index < count($this->a)) {
! 60: $this->i = $index;
! 61: }
! 62: echo __METHOD__ . '(' . $index . ")\n";
! 63: }
! 64: }
! 65:
! 66: $a = array(1, 2, 3, 4, 5);
! 67: $it = new LimitIterator(new NumericArrayIterator($a), 1, 3);
! 68: foreach ($it as $v)
! 69: {
! 70: print $v . ' is ' . ($it->greaterThan(2) ? 'greater than 2' : 'less than or equal 2') . "\n";
! 71: }
! 72:
! 73: echo "===SEEKABLE===\n";
! 74: $a = array(1, 2, 3, 4, 5);
! 75: $it = new LimitIterator(new SeekableNumericArrayIterator($a), 1, 3);
! 76: foreach($it as $v)
! 77: {
! 78: print $v . ' is ' . ($it->greaterThan(2) ? 'greater than 2' : 'less than or equal 2') . "\n";
! 79: }
! 80:
! 81: echo "===STACKED===\n";
! 82: echo "Shows '2 is greater than 2' because the test is actually done with the current value which is 3.\n";
! 83: $a = array(1, 2, 3, 4, 5);
! 84: $it = new CachingIterator(new LimitIterator(new SeekableNumericArrayIterator($a), 1, 3));
! 85: foreach($it as $v)
! 86: {
! 87: print $v . ' is ' . ($it->greaterThan(2) ? 'greater than 2' : 'less than or equal 2') . "\n";
! 88: }
! 89:
! 90: ?>
! 91: ===DONE===
! 92: <?php exit(0); ?>
! 93: --EXPECT--
! 94: NumericArrayIterator::__construct
! 95: NumericArrayIterator::rewind
! 96: NumericArrayIterator::valid(true)
! 97: NumericArrayIterator::next
! 98: NumericArrayIterator::valid(true)
! 99: NumericArrayIterator::valid(true)
! 100: NumericArrayIterator::current
! 101: NumericArrayIterator::key
! 102: NumericArrayIterator::greaterThan(2)
! 103: NumericArrayIterator::current
! 104: 2 is less than or equal 2
! 105: NumericArrayIterator::next
! 106: NumericArrayIterator::valid(true)
! 107: NumericArrayIterator::current
! 108: NumericArrayIterator::key
! 109: NumericArrayIterator::greaterThan(2)
! 110: NumericArrayIterator::current
! 111: 3 is greater than 2
! 112: NumericArrayIterator::next
! 113: NumericArrayIterator::valid(true)
! 114: NumericArrayIterator::current
! 115: NumericArrayIterator::key
! 116: NumericArrayIterator::greaterThan(2)
! 117: NumericArrayIterator::current
! 118: 4 is greater than 2
! 119: NumericArrayIterator::next
! 120: ===SEEKABLE===
! 121: NumericArrayIterator::__construct
! 122: NumericArrayIterator::rewind
! 123: SeekableNumericArrayIterator::seek(1)
! 124: NumericArrayIterator::valid(true)
! 125: NumericArrayIterator::current
! 126: NumericArrayIterator::key
! 127: SeekableNumericArrayIterator::greaterThan(2)
! 128: NumericArrayIterator::current
! 129: 2 is less than or equal 2
! 130: NumericArrayIterator::next
! 131: NumericArrayIterator::valid(true)
! 132: NumericArrayIterator::current
! 133: NumericArrayIterator::key
! 134: SeekableNumericArrayIterator::greaterThan(2)
! 135: NumericArrayIterator::current
! 136: 3 is greater than 2
! 137: NumericArrayIterator::next
! 138: NumericArrayIterator::valid(true)
! 139: NumericArrayIterator::current
! 140: NumericArrayIterator::key
! 141: SeekableNumericArrayIterator::greaterThan(2)
! 142: NumericArrayIterator::current
! 143: 4 is greater than 2
! 144: NumericArrayIterator::next
! 145: ===STACKED===
! 146: Shows '2 is greater than 2' because the test is actually done with the current value which is 3.
! 147: NumericArrayIterator::__construct
! 148: NumericArrayIterator::rewind
! 149: SeekableNumericArrayIterator::seek(1)
! 150: NumericArrayIterator::valid(true)
! 151: NumericArrayIterator::current
! 152: NumericArrayIterator::key
! 153: NumericArrayIterator::next
! 154: NumericArrayIterator::valid(true)
! 155: NumericArrayIterator::current
! 156: NumericArrayIterator::key
! 157: SeekableNumericArrayIterator::greaterThan(2)
! 158: NumericArrayIterator::current
! 159: 2 is greater than 2
! 160: NumericArrayIterator::next
! 161: NumericArrayIterator::valid(true)
! 162: NumericArrayIterator::current
! 163: NumericArrayIterator::key
! 164: SeekableNumericArrayIterator::greaterThan(2)
! 165: NumericArrayIterator::current
! 166: 3 is greater than 2
! 167: NumericArrayIterator::next
! 168: SeekableNumericArrayIterator::greaterThan(2)
! 169: NumericArrayIterator::current
! 170: 4 is greater than 2
! 171: ===DONE===
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>