sonarrradarrplexorganizrnginxdashboardhtpcserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboardmuximuxlandingpagestartpagelanding
		
		
		
		
			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.
		
		
		
		
		
			
		
			
				
					
					
						
							325 lines
						
					
					
						
							9.2 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							325 lines
						
					
					
						
							9.2 KiB
						
					
					
				| <?php | |
| 
 | |
| /* | |
|  * This file is part of Psy Shell. | |
|  * | |
|  * (c) 2012-2018 Justin Hileman | |
|  * | |
|  * For the full copyright and license information, please view the LICENSE | |
|  * file that was distributed with this source code. | |
|  */ | |
| 
 | |
| namespace Psy\Test; | |
| 
 | |
| use Psy\Context; | |
| 
 | |
| class ContextTest extends \PHPUnit\Framework\TestCase | |
| { | |
|     public function testGet() | |
|     { | |
|         $this->assertTrue(true); | |
|     } | |
| 
 | |
|     public function testGetAll() | |
|     { | |
|         $this->assertTrue(true); | |
|     } | |
| 
 | |
|     public function testGetSpecialVariables() | |
|     { | |
|         $context = new Context(); | |
| 
 | |
|         $this->assertNull($context->get('_')); | |
|         $this->assertNull($context->getReturnValue()); | |
| 
 | |
|         $this->assertEquals(['_' => null], $context->getAll()); | |
| 
 | |
|         $e = new \Exception('eeeeeee'); | |
|         $obj = new \StdClass(); | |
|         $context->setLastException($e); | |
|         $context->setLastStdout('out'); | |
|         $context->setBoundObject($obj); | |
| 
 | |
|         $context->setCommandScopeVariables([ | |
|             '__function'  => 'function', | |
|             '__method'    => 'method', | |
|             '__class'     => 'class', | |
|             '__namespace' => 'namespace', | |
|             '__file'      => 'file', | |
|             '__line'      => 'line', | |
|             '__dir'       => 'dir', | |
|         ]); | |
| 
 | |
|         $expected = [ | |
|             '_'           => null, | |
|             '_e'          => $e, | |
|             '__out'       => 'out', | |
|             'this'        => $obj, | |
|             '__function'  => 'function', | |
|             '__method'    => 'method', | |
|             '__class'     => 'class', | |
|             '__namespace' => 'namespace', | |
|             '__file'      => 'file', | |
|             '__line'      => 'line', | |
|             '__dir'       => 'dir', | |
|         ]; | |
| 
 | |
|         $this->assertEquals($expected, $context->getAll()); | |
|     } | |
| 
 | |
|     public function testSetAll() | |
|     { | |
|         $context = new Context(); | |
| 
 | |
|         $baz = new \StdClass(); | |
|         $vars = [ | |
|             'foo' => 'Foo', | |
|             'bar' => 123, | |
|             'baz' => $baz, | |
| 
 | |
|             '_'         => 'fail', | |
|             '_e'        => 'fail', | |
|             '__out'     => 'fail', | |
|             'this'      => 'fail', | |
|             '__psysh__' => 'fail', | |
| 
 | |
|             '__function'  => 'fail', | |
|             '__method'    => 'fail', | |
|             '__class'     => 'fail', | |
|             '__namespace' => 'fail', | |
|             '__file'      => 'fail', | |
|             '__line'      => 'fail', | |
|             '__dir'       => 'fail', | |
|         ]; | |
| 
 | |
|         $context->setAll($vars); | |
| 
 | |
|         $this->assertEquals('Foo', $context->get('foo')); | |
|         $this->assertEquals(123, $context->get('bar')); | |
|         $this->assertSame($baz, $context->get('baz')); | |
| 
 | |
|         $this->assertEquals(['foo' => 'Foo', 'bar' => 123, 'baz' => $baz, '_' => null], $context->getAll()); | |
|     } | |
| 
 | |
|     /** | |
|      * @dataProvider specialNames | |
|      * @expectedException \InvalidArgumentException | |
|      * @expectedExceptionMessageRegEx /Unknown variable: \$\w+/ | |
|      */ | |
|     public function testSetAllDoesNotSetSpecial($name) | |
|     { | |
|         $context = new Context(); | |
|         $context->setAll([$name => 'fail']); | |
|         $context->get($name); | |
|     } | |
| 
 | |
|     public function specialNames() | |
|     { | |
|         return [ | |
|             ['_e'], | |
|             ['__out'], | |
|             ['this'], | |
|             ['__psysh__'], | |
|             ['__function'], | |
|             ['__method'], | |
|             ['__class'], | |
|             ['__namespace'], | |
|             ['__file'], | |
|             ['__line'], | |
|             ['__dir'], | |
|         ]; | |
|     } | |
| 
 | |
|     public function testReturnValue() | |
|     { | |
|         $context = new Context(); | |
|         $this->assertNull($context->getReturnValue()); | |
| 
 | |
|         $val = 'some string'; | |
|         $context->setReturnValue($val); | |
|         $this->assertEquals($val, $context->getReturnValue()); | |
|         $this->assertEquals($val, $context->get('_')); | |
| 
 | |
|         $obj = new \StdClass(); | |
|         $context->setReturnValue($obj); | |
|         $this->assertSame($obj, $context->getReturnValue()); | |
|         $this->assertSame($obj, $context->get('_')); | |
| 
 | |
|         $context->setReturnValue(null); | |
|         $this->assertNull($context->getReturnValue()); | |
|     } | |
| 
 | |
|     public function testLastException() | |
|     { | |
|         $context = new Context(); | |
|         $e = new \Exception('wat'); | |
|         $context->setLastException($e); | |
|         $this->assertSame($e, $context->getLastException()); | |
|         $this->assertSame($e, $context->get('_e')); | |
|     } | |
| 
 | |
|     /** | |
|      * @expectedException \InvalidArgumentException | |
|      * @expectedExceptionMessage No most-recent exception | |
|      */ | |
|     public function testLastExceptionThrowsSometimes() | |
|     { | |
|         $context = new Context(); | |
|         $context->getLastException(); | |
|     } | |
| 
 | |
|     public function testLastStdout() | |
|     { | |
|         $context = new Context(); | |
|         $context->setLastStdout('ouuuuut'); | |
|         $this->assertEquals('ouuuuut', $context->getLastStdout()); | |
|         $this->assertEquals('ouuuuut', $context->get('__out')); | |
|     } | |
| 
 | |
|     /** | |
|      * @expectedException \InvalidArgumentException | |
|      * @expectedExceptionMessage No most-recent output | |
|      */ | |
|     public function testLastStdoutThrowsSometimes() | |
|     { | |
|         $context = new Context(); | |
|         $context->getLastStdout(); | |
|     } | |
| 
 | |
|     public function testBoundObject() | |
|     { | |
|         $context = new Context(); | |
|         $this->assertNull($context->getBoundObject()); | |
| 
 | |
|         $obj = new \StdClass(); | |
|         $context->setBoundObject($obj); | |
|         $this->assertSame($obj, $context->getBoundObject()); | |
|         $this->assertSame($obj, $context->get('this')); | |
| 
 | |
|         $context->setBoundObject(null); | |
|         $this->assertNull($context->getBoundObject()); | |
|     } | |
| 
 | |
|     /** | |
|      * @expectedException \InvalidArgumentException | |
|      * @expectedExceptionMessage Unknown variable: $this | |
|      */ | |
|     public function testBoundObjectThrowsSometimes() | |
|     { | |
|         $context = new Context(); | |
|         $context->get('this'); | |
|     } | |
| 
 | |
|     public function testBoundClass() | |
|     { | |
|         $context = new Context(); | |
|         $this->assertNull($context->getBoundClass()); | |
| 
 | |
|         $context->setBoundClass(''); | |
|         $this->assertNull($context->getBoundClass()); | |
| 
 | |
|         $context->setBoundClass('Psy\Shell'); | |
|         $this->assertEquals('Psy\Shell', $context->getBoundClass()); | |
| 
 | |
|         $context->setBoundObject(new \StdClass()); | |
|         $this->assertNotNull($context->getBoundObject()); | |
|         $this->assertNull($context->getBoundClass()); | |
| 
 | |
|         $context->setBoundClass('Psy\Shell'); | |
|         $this->assertEquals('Psy\Shell', $context->getBoundClass()); | |
|         $this->assertNull($context->getBoundObject()); | |
| 
 | |
|         $context->setBoundClass(null); | |
|         $this->assertNull($context->getBoundClass()); | |
|         $this->assertNull($context->getBoundObject()); | |
|     } | |
| 
 | |
|     public function testCommandScopeVariables() | |
|     { | |
|         $__function  = 'donkey'; | |
|         $__method    = 'diddy'; | |
|         $__class     = 'cranky'; | |
|         $__namespace = 'funky'; | |
|         $__file      = 'candy'; | |
|         $__line      = 'dixie'; | |
|         $__dir       = 'wrinkly'; | |
| 
 | |
|         $vars = compact('__function', '__method', '__class', '__namespace', '__file', '__line', '__dir'); | |
| 
 | |
|         $context = new Context(); | |
|         $context->setCommandScopeVariables($vars); | |
| 
 | |
|         $this->assertEquals($vars, $context->getCommandScopeVariables()); | |
| 
 | |
|         $this->assertEquals($__function, $context->get('__function')); | |
|         $this->assertEquals($__method, $context->get('__method')); | |
|         $this->assertEquals($__class, $context->get('__class')); | |
|         $this->assertEquals($__namespace, $context->get('__namespace')); | |
|         $this->assertEquals($__file, $context->get('__file')); | |
|         $this->assertEquals($__line, $context->get('__line')); | |
|         $this->assertEquals($__dir, $context->get('__dir')); | |
| 
 | |
|         $someVars = compact('__function', '__namespace', '__file', '__line', '__dir'); | |
|         $context->setCommandScopeVariables($someVars); | |
|     } | |
| 
 | |
|     public function testGetUnusedCommandScopeVariableNames() | |
|     { | |
|         $context = new Context(); | |
| 
 | |
|         $this->assertEquals( | |
|             ['__function', '__method', '__class', '__namespace', '__file', '__line', '__dir'], | |
|             $context->getUnusedCommandScopeVariableNames() | |
|         ); | |
| 
 | |
|         $context->setCommandScopeVariables([ | |
|             '__function'  => 'foo', | |
|             '__namespace' => 'bar', | |
|             '__file'      => 'baz', | |
|             '__line'      => 123, | |
|             '__dir'       => 'qux', | |
|         ]); | |
| 
 | |
|         $this->assertEquals( | |
|             ['__method', '__class'], | |
|             array_values($context->getUnusedCommandScopeVariableNames()) | |
|         ); | |
|     } | |
| 
 | |
|     /** | |
|      * @dataProvider specialAndNotSpecialVariableNames | |
|      */ | |
|     public function testIsSpecialVariableName($name, $isSpecial) | |
|     { | |
|         $context = new Context(); | |
| 
 | |
|         if ($isSpecial) { | |
|             $this->assertTrue($context->isSpecialVariableName($name)); | |
|         } else { | |
|             $this->assertFalse($context->isSpecialVariableName($name)); | |
|         } | |
|     } | |
| 
 | |
|     public function specialAndNotSpecialVariableNames() | |
|     { | |
|         return [ | |
|             ['foo', false], | |
|             ['psysh', false], | |
|             ['__psysh', false], | |
| 
 | |
|             ['_', true], | |
|             ['_e', true], | |
|             ['__out', true], | |
|             ['this', true], | |
|             ['__psysh__', true], | |
| 
 | |
|             ['__function', true], | |
|             ['__method', true], | |
|             ['__class', true], | |
|             ['__namespace', true], | |
|             ['__file', true], | |
|             ['__line', true], | |
|             ['__dir', true], | |
|         ]; | |
|     } | |
| }
 | |
| 
 |