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

1.1       misho       1: --TEST--
                      2: SPL: SplObserver and SplSubject (empty notify)
                      3: --FILE--
                      4: <?php
                      5: 
                      6: class ObserverImpl implements SplObserver
                      7: {
                      8:        protected $name = '';
                      9: 
                     10:        function __construct($name = 'obj')
                     11:        {
                     12:                $this->name = '$' . $name;
                     13:        }
                     14: 
                     15:        function update(SplSubject $subject)
                     16:        {
                     17:                echo $this->name . '->' . __METHOD__ . '(' . $subject->getName() . ");\n";
                     18:        }
                     19:        
                     20:        function getName()
                     21:        {
                     22:                return $this->name;
                     23:        }
                     24: }
                     25: 
                     26: class SubjectImpl implements SplSubject
                     27: {
                     28:        protected $name = '';
                     29:        protected $observers = array();
                     30: 
                     31:        function __construct($name = 'sub')
                     32:        {
                     33:                $this->name = '$' . $name;
                     34:        }
                     35: 
                     36:     function attach(SplObserver $observer)
                     37:     {
                     38:        echo '$sub->' . __METHOD__ . '(' . $observer->getName() . ");\n";
                     39:        if (!in_array($observer, $this->observers))
                     40:        {
                     41:                $this->observers[] = $observer;
                     42:            }
                     43:     }
                     44: 
                     45:     function detach(SplObserver $observer)
                     46:     {
                     47:        echo '$sub->' . __METHOD__ . '(' . $observer->getName() . ");\n";
                     48:        $idx = array_search($observer, $this->observers);
                     49:        if ($idx !== false)
                     50:        {
                     51:                unset($this->observers[$idx]);
                     52:        }
                     53:     }
                     54: 
                     55:     function notify()
                     56:     {
                     57:        echo '$sub->' . __METHOD__ . "();\n";
                     58:        foreach($this->observers as $observer)
                     59:        {
                     60:                $observer->update($this);
                     61:        }
                     62:     }
                     63: 
                     64:        function getName()
                     65:        {
                     66:                return $this->name;
                     67:        }
                     68: }
                     69: 
                     70: $sub = new SubjectImpl;
                     71: 
                     72: $ob1 = new ObserverImpl("ob1");
                     73: $ob2 = new ObserverImpl("ob2");
                     74: $ob3 = new ObserverImpl("ob3");
                     75: 
                     76: $sub->attach($ob1);
                     77: $sub->attach($ob1);
                     78: $sub->attach($ob2);
                     79: $sub->attach($ob3);
                     80: 
                     81: $sub->notify();
                     82: 
                     83: $sub->detach($ob3);
                     84: 
                     85: $sub->notify();
                     86: 
                     87: $sub->detach($ob2);
                     88: $sub->detach($ob1);
                     89: 
                     90: $sub->notify();
                     91: 
                     92: $sub->attach($ob3);
                     93: 
                     94: $sub->notify();
                     95: ?>
                     96: ===DONE===
                     97: --EXPECT--
                     98: $sub->SubjectImpl::attach($ob1);
                     99: $sub->SubjectImpl::attach($ob1);
                    100: $sub->SubjectImpl::attach($ob2);
                    101: $sub->SubjectImpl::attach($ob3);
                    102: $sub->SubjectImpl::notify();
                    103: $ob1->ObserverImpl::update($sub);
                    104: $ob2->ObserverImpl::update($sub);
                    105: $ob3->ObserverImpl::update($sub);
                    106: $sub->SubjectImpl::detach($ob3);
                    107: $sub->SubjectImpl::notify();
                    108: $ob1->ObserverImpl::update($sub);
                    109: $ob2->ObserverImpl::update($sub);
                    110: $sub->SubjectImpl::detach($ob2);
                    111: $sub->SubjectImpl::detach($ob1);
                    112: $sub->SubjectImpl::notify();
                    113: $sub->SubjectImpl::attach($ob3);
                    114: $sub->SubjectImpl::notify();
                    115: $ob3->ObserverImpl::update($sub);
                    116: ===DONE===

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