1<?php 2 3/** 4 * Hoa 5 * 6 * 7 * @license 8 * 9 * New BSD License 10 * 11 * Copyright © 2007-2017, Hoa community. All rights reserved. 12 * 13 * Redistribution and use in source and binary forms, with or without 14 * modification, are permitted provided that the following conditions are met: 15 * * Redistributions of source code must retain the above copyright 16 * notice, this list of conditions and the following disclaimer. 17 * * Redistributions in binary form must reproduce the above copyright 18 * notice, this list of conditions and the following disclaimer in the 19 * documentation and/or other materials provided with the distribution. 20 * * Neither the name of the Hoa nor the names of its contributors may be 21 * used to endorse or promote products derived from this software without 22 * specific prior written permission. 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 27 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE 28 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 29 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 30 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 32 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 33 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 34 * POSSIBILITY OF SUCH DAMAGE. 35 */ 36 37namespace Hoa\Event\Test\Unit; 38 39use Hoa\Event as LUT; 40use Hoa\Event\Listens as SUT; 41use Hoa\Test; 42 43/** 44 * Class \Hoa\Event\Test\Unit\Listens. 45 * 46 * Test suite of the listens trait. 47 * 48 * @copyright Copyright © 2007-2017 Hoa community 49 * @license New BSD License 50 */ 51class Listens extends Test\Unit\Suite 52{ 53 public function case_set_listener() 54 { 55 $this 56 ->given( 57 $listenable = new _Listenable(), 58 $listener = new LUT\Listener($listenable, ['foo']) 59 ) 60 ->when($result = $listenable->_setListener($listener)) 61 ->then 62 ->variable($result) 63 ->isNull(); 64 } 65 66 public function case_get_listener() 67 { 68 $this 69 ->given( 70 $listenable = new _Listenable(), 71 $listener = new LUT\Listener($listenable, ['foo']), 72 $listenable->_setListener($listener) 73 ) 74 ->when($result = $listenable->_getListener()) 75 ->then 76 ->object($result) 77 ->isIdenticalTo($listener); 78 } 79 80 public function case_on() 81 { 82 $this 83 ->given( 84 $listenable = new _Listenable(), 85 $listener = new LUT\Listener($listenable, ['foo']), 86 $listenable->_setListener($listener), 87 $callable = function () use (&$called) { 88 $called = true; 89 90 return 42; 91 } 92 ) 93 ->when($result = $listenable->on('foo', $callable)) 94 ->then 95 ->object($result) 96 ->isIdenticalTo($listenable) 97 98 ->when($listenable->doSomethingThatFires()) 99 ->then 100 ->boolean($called) 101 ->isTrue(); 102 } 103 104 public function case_on_unregistered_listener() 105 { 106 $this 107 ->given( 108 $listenable = new _Listenable(), 109 $listener = new LUT\Listener($listenable, ['foo']), 110 $listenable->_setListener($listener) 111 ) 112 ->exception(function () use ($listenable) { 113 $listenable->on('bar', null); 114 }) 115 ->isInstanceOf('Hoa\Event\Exception'); 116 } 117} 118 119class _Listenable implements LUT\Listenable 120{ 121 use SUT; 122 123 public function _setListener(LUT\Listener $listener) 124 { 125 return $this->setListener($listener); 126 } 127 128 public function _getListener() 129 { 130 return $this->getListener(); 131 } 132 133 public function doSomethingThatFires() 134 { 135 $this->getListener()->fire('foo', new LUT\Bucket('bar')); 136 137 return; 138 } 139} 140