Annotation of embedaddon/php/ext/spl/tests/iterator_003.phpt, revision 1.1.1.1

1.1       misho       1: --TEST--
                      2: SPL: CachingIterator and __toString()
                      3: --FILE--
                      4: <?php
                      5: 
                      6: class Student
                      7: {
                      8:        private $id;
                      9:        private $name;
                     10: 
                     11:     public function __construct($id, $name)
                     12:     {
                     13:        $this->id = $id;
                     14:        $this->name = $name;
                     15:     }
                     16: 
                     17:        public function __toString()
                     18:        {
                     19:                return $this->id . ', ' . $this->name;
                     20:        }
                     21:        
                     22:        public function getId()
                     23:        {
                     24:                return $this->id;
                     25:        }
                     26: }
                     27: 
                     28: class StudentIdFilter extends FilterIterator
                     29: {
                     30:        private $id;
                     31: 
                     32:        public function __construct(ArrayObject $students, Student $other)
                     33:        {
                     34:                FilterIterator::__construct($students->getIterator());
                     35:                $this->id = $other->getId();
                     36:        }
                     37:        
                     38:        public function accept()
                     39:        {
                     40:                echo "ACCEPT ".$this->current()->getId()." == ".$this->id."\n";
                     41:                return $this->current()->getId() == $this->id;
                     42:        }
                     43: }
                     44: 
                     45: class StudentList implements IteratorAggregate
                     46: {
                     47:        private $students;
                     48:        
                     49:        public function __construct()
                     50:        {
                     51:                $this->students = new ArrayObject(array());
                     52:        }
                     53:        
                     54:        public function add(Student $student)
                     55:        {
                     56:                if (!$this->contains($student)) {
                     57:                        $this->students[] = $student;
                     58:                }
                     59:        }
                     60:        
                     61:        public function contains(Student $student)
                     62:        {
                     63:                foreach ($this->students as $s)
                     64:                {
                     65:                        if ($s->getId() == $student->getId()) {
                     66:                                return true;
                     67:                        }
                     68:                }
                     69:                return false;
                     70:        }
                     71:        
                     72:        public function getIterator() {
                     73:                return new CachingIterator($this->students->getIterator(), true);
                     74:        }
                     75: }
                     76: 
                     77: $students = new StudentList();
                     78: $students->add(new Student('01234123', 'Joe'));
                     79: $students->add(new Student('00000014', 'Bob'));
                     80: $students->add(new Student('00000014', 'Foo'));
                     81: 
                     82: // The goal is to verify we can access the cached string value even if it was
                     83: // generated by a call to __toString(). To check this we need to access the
                     84: // iterator's __toString() method.
                     85: $it = $students->getIterator();
                     86: foreach ($it as $student) {
                     87:        echo $it->__toString(), "\n";
                     88: }
                     89: ?>
                     90: ===DONE===
                     91: <?php exit(0); ?>
                     92: --EXPECT--
                     93: 01234123, Joe
                     94: 00000014, Bob
                     95: ===DONE===

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>