123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- <?php
- namespace think\tests;
- use Mockery as m;
- use Mockery\MockInterface;
- use PHPUnit\Framework\TestCase;
- use think\App;
- use think\Config;
- use think\Container;
- use think\Event;
- class EventTest extends TestCase
- {
- /** @var App|MockInterface */
- protected $app;
- /** @var Event|MockInterface */
- protected $event;
- /** @var Config|MockInterface */
- protected $config;
- protected function tearDown(): void
- {
- m::close();
- }
- protected function setUp()
- {
- $this->app = m::mock(App::class)->makePartial();
- Container::setInstance($this->app);
- $this->app->shouldReceive('make')->with(App::class)->andReturn($this->app);
- $this->config = m::mock(Config::class)->makePartial();
- $this->app->shouldReceive('get')->with('config')->andReturn($this->config);
- $this->event = new Event($this->app);
- }
- public function testBasic()
- {
- $this->event->bind(['foo' => 'baz']);
- $this->event->listen('foo', function ($bar) {
- $this->assertEquals('bar', $bar);
- });
- $this->assertTrue($this->event->hasListener('foo'));
- $this->event->trigger('baz', 'bar');
- $this->event->remove('foo');
- $this->assertFalse($this->event->hasListener('foo'));
- }
- public function testOnceEvent()
- {
- $this->event->listen('AppInit', function ($bar) {
- $this->assertEquals('bar', $bar);
- return 'foo';
- });
- $this->assertEquals('foo', $this->event->trigger('AppInit', 'bar', true));
- $this->assertEquals(['foo'], $this->event->trigger('AppInit', 'bar'));
- }
- public function testClassListener()
- {
- $listener = m::mock("overload:SomeListener", TestListener::class);
- $listener->shouldReceive('handle')->andReturnTrue();
- $this->event->listen('some', "SomeListener");
- $this->assertTrue($this->event->until('some'));
- }
- public function testSubscribe()
- {
- $listener = m::mock("overload:SomeListener", TestListener::class);
- $listener->shouldReceive('subscribe')->andReturnUsing(function (Event $event) use ($listener) {
- $listener->shouldReceive('onBar')->once()->andReturnFalse();
- $event->listenEvents(['SomeListener::onBar' => [[$listener, 'onBar']]]);
- });
- $this->event->subscribe('SomeListener');
- $this->assertTrue($this->event->hasListener('SomeListener::onBar'));
- $this->event->trigger('SomeListener::onBar');
- }
- public function testAutoObserve()
- {
- $listener = m::mock("overload:SomeListener", TestListener::class);
- $listener->shouldReceive('onBar')->once();
- $this->app->shouldReceive('make')->with('SomeListener')->andReturn($listener);
- $this->event->observe('SomeListener');
- $this->event->trigger('bar');
- }
- public function testWithoutEvent()
- {
- $this->event->withEvent(false);
- $this->event->listen('SomeListener', TestListener::class);
- $this->assertFalse($this->event->hasListener('SomeListener'));
- }
- }
- class TestListener
- {
- public function handle()
- {
- }
- public function onBar()
- {
- }
- public function onFoo()
- {
- }
- public function subscribe()
- {
- }
- }
|