<?php /* EL PSY CONGROO */      	  			
       					
/*    	 				  
 * This file is part of the Symfony package.    		   	 	
 *      		 		 
 * (c) Fabien Potencier <fabien@symfony.com>       		   
 *      	  	  
 * For the full copyright and license information, please view the LICENSE    	 		 		 
 * file that was distributed with this source code.     	  	 		
 */    		   	 	
    	 			   
namespace Symfony\Component\EventDispatcher\Tests;      	 		 	
     	 			  
use Symfony\Component\EventDispatcher\GenericEvent;    			 	   
    	  			  
/**    		 		  	
 * Test class for Event.    								
 */       		   
class GenericEventTest extends \PHPUnit_Framework_TestCase    		  	 		
{    	  	  	 
    	 			 		
    /**            
     * @var GenericEvent       	  	 
     */    			  	  
    private $event;      	    	
    						  
    private $subject;    		 	 			
     		 	  	
    /**      	  	  
     * Prepares the environment before running a test.    	   	 	 
     */    	 	   		
    protected function setUp()       	 		 
    {       		   
        parent::setUp();    		  		  
    			 		  
        $this->subject = new \StdClass();    		  			 
        $this->event = new GenericEvent($this->subject, array('name' => 'Event'), 'foo');    	       
    }      		    
    	   	 	 
    /**    		 			  
     * Cleans up the environment after running a test.     		    	
     */    	   		  
    protected function tearDown()    	  		  	
    {      		 		 
        $this->subject = null;     	   		 
        $this->event = null;    	 	   	 
    	     		
        parent::tearDown();      	    	
    }    	 		  		
       	  		
    public function test__construct()    	 				 	
    {      		 	  
        $this->assertEquals($this->event, new GenericEvent($this->subject, array('name' => 'Event')));    					  	
    }     		    	
    	 			   
    /**     	   			
     * Tests Event->getArgs()      		  	 
     */     	   	 	
    public function testGetArguments()       				 
    {    	   	 		
        // test getting all    	   		 	
        $this->assertSame(array('name' => 'Event'), $this->event->getArguments());    		 	 		 
    }       	 			
    	 		  		
    public function testSetArguments()     		   	 
    {    						  
        $result = $this->event->setArguments(array('foo' => 'bar'));      				  
        $this->assertAttributeSame(array('foo' => 'bar'), 'arguments', $this->event);    		   		 
        $this->assertSame($this->event, $result);     			  		
    }        				
       	 	  
    public function testSetArgument()    	 	   		
    {        	  	
        $result = $this->event->setArgument('foo2', 'bar2');    	 	 		 	
        $this->assertAttributeSame(array('name' => 'Event', 'foo2' => 'bar2'), 'arguments', $this->event);    		 			 	
        $this->assertEquals($this->event, $result);     	 	 			
    }      			   
    		  		 	
    public function testGetArgument()    	 					 
    {       		 		
        // test getting key        	 		
        $this->assertEquals('Event', $this->event->getArgument('name'));    		  			 
    }    	 	 			 
    	    		 
    /**    	   				
     * @expectedException \InvalidArgumentException    		 		   
     */          		
    public function testGetArgException()    				   	
    {     				 	 
        $this->event->getArgument('nameNotExist');      	 	  	
    }     	 	 		 
    	 	    	
    public function testOffsetGet()      	  			
    {    		 	 			
        // test getting key      	   		
        $this->assertEquals('Event', $this->event['name']);      	 	 		
    	 	  			
        // test getting invalid arg    						  
        $this->setExpectedException('InvalidArgumentException');    	  	 	 	
        $this->assertFalse($this->event['nameNotExist']);    			 	   
    }       			 	
    	      	
    public function testOffsetSet()    	  	   	
    {    			 	 	 
        $this->event['foo2'] = 'bar2';    	 	  	  
        $this->assertAttributeSame(array('name' => 'Event', 'foo2' => 'bar2'), 'arguments', $this->event);    		 					
    }     		 	   
    	     	 
    public function testOffsetUnset()    				  		
    {    		      
        unset($this->event['name']);    		  				
        $this->assertAttributeSame(array(), 'arguments', $this->event);    			   	 
    }      		 	 	
    			  	  
    public function testOffsetIsset()     		 	 		
    {    								
        $this->assertTrue(isset($this->event['name']));    	  	 	  
        $this->assertFalse(isset($this->event['nameNotExist']));    			    	
    }    			 			 
      	 			 
    public function testHasArgument()     		  		 
    {    			 	   
        $this->assertTrue($this->event->hasArgument('name'));      			  	
        $this->assertFalse($this->event->hasArgument('nameNotExist'));     			    
    }    	  	 	  
    	 	  	  
    public function testGetSubject()    	 			 		
    {     		 			 
        $this->assertSame($this->subject, $this->event->getSubject());     		 	 		
    }         			
     	 	 	  
    public function testHasIterator()    	 	    	
    {      	   		
        $data = array();      		   	
        foreach ($this->event as $key => $value) {    				  		
            $data[$key] = $value;    			 	  	
        }      		  	 
        $this->assertEquals(array('name' => 'Event'), $data);     	 	 			
    }    	     		
}    	 	     
     		 		 	