You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							93 lines
						
					
					
						
							2.2 KiB
						
					
					
				
			
		
		
	
	
							93 lines
						
					
					
						
							2.2 KiB
						
					
					
				<?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 | 
						|
{ | 
						|
	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 | 
						|
{ | 
						|
 | 
						|
}
 | 
						|
 |