Annotation of embedaddon/php/ext/spl/tests/observer_002.phpt, revision 1.1

1.1     ! misho       1: --TEST--
        !             2: SPL: SplObjectStorage
        !             3: --FILE--
        !             4: <?php
        !             5: 
        !             6: class MyObjectStorage extends SplObjectStorage
        !             7: {
        !             8:        function rewind()
        !             9:        {
        !            10:                echo __METHOD__ . "()\n";
        !            11:                parent::rewind();
        !            12:        }
        !            13: 
        !            14:        function valid()
        !            15:        {
        !            16:                echo __METHOD__ . "(" . (parent::valid() ? 1 : 0) . ")\n";
        !            17:                return parent::valid();
        !            18:        }
        !            19: 
        !            20:        function key()
        !            21:        {
        !            22:                echo __METHOD__ . "(" . parent::key() . ")\n";
        !            23:                return parent::key();
        !            24:        }
        !            25: 
        !            26:        function current()
        !            27:        {
        !            28:                echo __METHOD__ . "(" . parent::current()->getName() . ")\n";
        !            29:                return parent::current();
        !            30:        }
        !            31: 
        !            32:        function next()
        !            33:        {
        !            34:                echo __METHOD__ . "()\n";
        !            35:                parent::next();
        !            36:        }
        !            37: }
        !            38: 
        !            39: class ObserverImpl implements SplObserver
        !            40: {
        !            41:        protected $name = '';
        !            42: 
        !            43:        function __construct($name = 'obj')
        !            44:        {
        !            45:                $this->name = '$' . $name;
        !            46:        }
        !            47: 
        !            48:        function update(SplSubject $subject)
        !            49:        {
        !            50:                echo $this->name . '->' . __METHOD__ . '(' . $subject->getName() . ");\n";
        !            51:        }
        !            52:        
        !            53:        function getName()
        !            54:        {
        !            55:                return $this->name;
        !            56:        }
        !            57: }
        !            58: 
        !            59: class SubjectImpl implements SplSubject
        !            60: {
        !            61:        protected $name = '';
        !            62:        protected $observers;
        !            63: 
        !            64:        function __construct($name = 'sub')
        !            65:        {
        !            66:                $this->observers = new MyObjectStorage;
        !            67:                $this->name = '$' . $name;
        !            68:        }
        !            69: 
        !            70:        function attach(SplObserver $observer)
        !            71:        {
        !            72:                echo $this->name . '->' . __METHOD__ . '(' . $observer->getName() . ");\n";
        !            73:                $this->observers->attach($observer);
        !            74:        }
        !            75:        
        !            76:        function detach(SplObserver $observer)
        !            77:        {
        !            78:                echo $this->name . '->' . __METHOD__ . '(' . $observer->getName() . ");\n";
        !            79:                $this->observers->detach($observer);
        !            80:        }
        !            81:        
        !            82:        function count()
        !            83:        {
        !            84:                return $this->observers->count();
        !            85:        }
        !            86:        
        !            87:        function notify()
        !            88:        {
        !            89:                echo $this->name . '->' . __METHOD__ . "();\n";
        !            90:                foreach($this->observers as $key => $observer)
        !            91:                {
        !            92:                        $observer->update($this);
        !            93:                }
        !            94:        }
        !            95: 
        !            96:        function getName()
        !            97:        {
        !            98:                return $this->name;
        !            99:        }
        !           100:        
        !           101:        function contains($obj)
        !           102:        {
        !           103:                return $this->observers->contains($obj);
        !           104:        }
        !           105: }
        !           106: 
        !           107: $sub = new SubjectImpl;
        !           108: 
        !           109: $ob1 = new ObserverImpl("ob1");
        !           110: $ob2 = new ObserverImpl("ob2");
        !           111: $ob3 = new ObserverImpl("ob3");
        !           112: 
        !           113: var_dump($sub->contains($ob1));
        !           114: $sub->attach($ob1);
        !           115: var_dump($sub->contains($ob1));
        !           116: $sub->attach($ob1);
        !           117: $sub->attach($ob2);
        !           118: $sub->attach($ob3);
        !           119: var_dump($sub->count());
        !           120: 
        !           121: $sub->notify();
        !           122: 
        !           123: $sub->detach($ob3);
        !           124: var_dump($sub->count());
        !           125: 
        !           126: $sub->notify();
        !           127: 
        !           128: $sub->detach($ob2);
        !           129: $sub->detach($ob1);
        !           130: var_dump($sub->count());
        !           131: 
        !           132: $sub->notify();
        !           133: 
        !           134: $sub->attach($ob3);
        !           135: var_dump($sub->count());
        !           136: 
        !           137: $sub->notify();
        !           138: 
        !           139: ?>
        !           140: ===DONE===
        !           141: <?php exit(0); ?>
        !           142: --EXPECT--
        !           143: bool(false)
        !           144: $sub->SubjectImpl::attach($ob1);
        !           145: bool(true)
        !           146: $sub->SubjectImpl::attach($ob1);
        !           147: $sub->SubjectImpl::attach($ob2);
        !           148: $sub->SubjectImpl::attach($ob3);
        !           149: int(3)
        !           150: $sub->SubjectImpl::notify();
        !           151: MyObjectStorage::rewind()
        !           152: MyObjectStorage::valid(1)
        !           153: MyObjectStorage::current($ob1)
        !           154: MyObjectStorage::key(0)
        !           155: $ob1->ObserverImpl::update($sub);
        !           156: MyObjectStorage::next()
        !           157: MyObjectStorage::valid(1)
        !           158: MyObjectStorage::current($ob2)
        !           159: MyObjectStorage::key(1)
        !           160: $ob2->ObserverImpl::update($sub);
        !           161: MyObjectStorage::next()
        !           162: MyObjectStorage::valid(1)
        !           163: MyObjectStorage::current($ob3)
        !           164: MyObjectStorage::key(2)
        !           165: $ob3->ObserverImpl::update($sub);
        !           166: MyObjectStorage::next()
        !           167: MyObjectStorage::valid(0)
        !           168: $sub->SubjectImpl::detach($ob3);
        !           169: int(2)
        !           170: $sub->SubjectImpl::notify();
        !           171: MyObjectStorage::rewind()
        !           172: MyObjectStorage::valid(1)
        !           173: MyObjectStorage::current($ob1)
        !           174: MyObjectStorage::key(0)
        !           175: $ob1->ObserverImpl::update($sub);
        !           176: MyObjectStorage::next()
        !           177: MyObjectStorage::valid(1)
        !           178: MyObjectStorage::current($ob2)
        !           179: MyObjectStorage::key(1)
        !           180: $ob2->ObserverImpl::update($sub);
        !           181: MyObjectStorage::next()
        !           182: MyObjectStorage::valid(0)
        !           183: $sub->SubjectImpl::detach($ob2);
        !           184: $sub->SubjectImpl::detach($ob1);
        !           185: int(0)
        !           186: $sub->SubjectImpl::notify();
        !           187: MyObjectStorage::rewind()
        !           188: MyObjectStorage::valid(0)
        !           189: $sub->SubjectImpl::attach($ob3);
        !           190: int(1)
        !           191: $sub->SubjectImpl::notify();
        !           192: MyObjectStorage::rewind()
        !           193: MyObjectStorage::valid(1)
        !           194: MyObjectStorage::current($ob3)
        !           195: MyObjectStorage::key(0)
        !           196: $ob3->ObserverImpl::update($sub);
        !           197: MyObjectStorage::next()
        !           198: MyObjectStorage::valid(0)
        !           199: ===DONE===

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