|  |  |  | @ -28,6 +28,22 @@ class BarBehavior extends Behavior | 
			
		
	
		
			
				
					|  |  |  |  | 	{ | 
			
		
	
		
			
				
					|  |  |  |  | 		return 'behavior method'; | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	public function __call($name, $params) | 
			
		
	
		
			
				
					|  |  |  |  | 	{ | 
			
		
	
		
			
				
					|  |  |  |  | 		if ($name == 'magicBehaviorMethod') { | 
			
		
	
		
			
				
					|  |  |  |  | 			return 'Magic Behavior Method Result!'; | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 		return parent::__call($name, $params); | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	public function hasMethod($name) | 
			
		
	
		
			
				
					|  |  |  |  | 	{ | 
			
		
	
		
			
				
					|  |  |  |  | 		if ($name == 'magicBehaviorMethod') { | 
			
		
	
		
			
				
					|  |  |  |  | 			return true; | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 		return parent::hasMethod($name); | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | class BehaviorTest extends TestCase | 
			
		
	
	
		
			
				
					|  |  |  | @ -59,4 +75,29 @@ class BehaviorTest extends TestCase | 
			
		
	
		
			
				
					|  |  |  |  | 		$this->assertEquals('behavior property', $foo->behaviorProperty); | 
			
		
	
		
			
				
					|  |  |  |  | 		$this->assertEquals('behavior method', $foo->behaviorMethod()); | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	public function testMagicMethods() | 
			
		
	
		
			
				
					|  |  |  |  | 	{ | 
			
		
	
		
			
				
					|  |  |  |  | 		$bar = new BarClass(); | 
			
		
	
		
			
				
					|  |  |  |  | 		$behavior = new BarBehavior(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 		$this->assertFalse($bar->hasMethod('magicBehaviorMethod')); | 
			
		
	
		
			
				
					|  |  |  |  | 		$bar->attachBehavior('bar', $behavior); | 
			
		
	
		
			
				
					|  |  |  |  | 		$this->assertFalse($bar->hasMethod('magicBehaviorMethod', false)); | 
			
		
	
		
			
				
					|  |  |  |  | 		$this->assertTrue($bar->hasMethod('magicBehaviorMethod')); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 		$this->assertEquals('Magic Behavior Method Result!', $bar->magicBehaviorMethod()); | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	public function testCallUnknownMethod() | 
			
		
	
		
			
				
					|  |  |  |  | 	{ | 
			
		
	
		
			
				
					|  |  |  |  | 		$bar = new BarClass(); | 
			
		
	
		
			
				
					|  |  |  |  | 		$behavior = new BarBehavior(); | 
			
		
	
		
			
				
					|  |  |  |  | 		$this->setExpectedException('yii\base\UnknownMethodException'); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 		$this->assertFalse($bar->hasMethod('nomagicBehaviorMethod')); | 
			
		
	
		
			
				
					|  |  |  |  | 		$bar->attachBehavior('bar', $behavior); | 
			
		
	
		
			
				
					|  |  |  |  | 		$bar->nomagicBehaviorMethod(); | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
	
		
			
				
					|  |  |  | 
 |