nginxsonarrradarrplexorganizrdashboardapplication-dashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmark
		
		
		
		
			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],
							 | 
						|
								        ];
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 |