EventTest.php 2.52 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
<?php
/**
 * @link http://www.yiiframework.com/
 * @copyright Copyright (c) 2008 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 */

namespace yiiunit\framework\base;

use yii\base\Component;
use yii\base\Event;
use yiiunit\TestCase;

/**
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @since 2.0
 */
class EventTest extends TestCase
{
20
    public $counter;
21

22 23 24 25 26 27 28
    public function setUp()
    {
        $this->counter = 0;
        Event::off(ActiveRecord::className(), 'save');
        Event::off(Post::className(), 'save');
        Event::off(User::className(), 'save');
    }
29

30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
    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);
    }
46

47 48 49 50 51 52 53 54 55 56 57
    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'));
    }
58

59 60 61 62 63 64 65 66 67
    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'));
68

69 70 71 72 73 74 75
        $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'));
    }
76 77 78 79
}

class ActiveRecord extends Component
{
80 81 82 83
    public function save()
    {
        $this->trigger('save');
    }
84 85 86 87 88 89 90 91 92
}

class Post extends ActiveRecord
{
}

class User extends ActiveRecord
{
}