given( $listenable = new _Listenable(), $listener = new LUT\Listener($listenable, ['foo']) ) ->when($result = $listenable->_setListener($listener)) ->then ->variable($result) ->isNull(); } public function case_get_listener() { $this ->given( $listenable = new _Listenable(), $listener = new LUT\Listener($listenable, ['foo']), $listenable->_setListener($listener) ) ->when($result = $listenable->_getListener()) ->then ->object($result) ->isIdenticalTo($listener); } public function case_on() { $this ->given( $listenable = new _Listenable(), $listener = new LUT\Listener($listenable, ['foo']), $listenable->_setListener($listener), $callable = function () use (&$called) { $called = true; return 42; } ) ->when($result = $listenable->on('foo', $callable)) ->then ->object($result) ->isIdenticalTo($listenable) ->when($listenable->doSomethingThatFires()) ->then ->boolean($called) ->isTrue(); } public function case_on_unregistered_listener() { $this ->given( $listenable = new _Listenable(), $listener = new LUT\Listener($listenable, ['foo']), $listenable->_setListener($listener) ) ->exception(function () use ($listenable) { $listenable->on('bar', null); }) ->isInstanceOf('Hoa\Event\Exception'); } } class _Listenable implements LUT\Listenable { use SUT; public function _setListener(LUT\Listener $listener) { return $this->setListener($listener); } public function _getListener() { return $this->getListener(); } public function doSomethingThatFires() { $this->getListener()->fire('foo', new LUT\Bucket('bar')); return; } }