* @since 2.0 */ class EventTest extends TestCase { public $counter; public function setUp() { $this->counter = 0; Event::off(ActiveRecord::className(), 'save'); Event::off(Post::className(), 'save'); Event::off(User::className(), 'save'); } public function testOn() { Event::on(Post::className(), 'save', function ($event) { $this->counter += 1; }); Event::on(ActiveRecord::className(), 'save', function ($event) { $this->counter += 3; }); $this->assertEquals(0, $this->counter); $post = new Post; $post->save(); $this->assertEquals(4, $this->counter); $user = new User; $user->save(); $this->assertEquals(7, $this->counter); } public function testOff() { $handler = function ($event) { $this->counter ++; }; $this->assertFalse(Event::hasHandlers(Post::className(), 'save')); Event::on(Post::className(), 'save', $handler); $this->assertTrue(Event::hasHandlers(Post::className(), 'save')); Event::off(Post::className(), 'save', $handler); $this->assertFalse(Event::hasHandlers(Post::className(), 'save')); } public function testHasHandlers() { $this->assertFalse(Event::hasHandlers(Post::className(), 'save')); $this->assertFalse(Event::hasHandlers(ActiveRecord::className(), 'save')); Event::on(Post::className(), 'save', function ($event) { $this->counter += 1; }); $this->assertTrue(Event::hasHandlers(Post::className(), 'save')); $this->assertFalse(Event::hasHandlers(ActiveRecord::className(), 'save')); $this->assertFalse(Event::hasHandlers(User::className(), 'save')); Event::on(ActiveRecord::className(), 'save', function ($event) { $this->counter += 1; }); $this->assertTrue(Event::hasHandlers(User::className(), 'save')); $this->assertTrue(Event::hasHandlers(ActiveRecord::className(), 'save')); } } class ActiveRecord extends Component { public function save() { $this->trigger('save'); } } class Post extends ActiveRecord { } class User extends ActiveRecord { }