Chris@16: assertTrue(true); Chris@16: } Chris@16: Chris@16: public function testGetAll() Chris@16: { Chris@16: $this->assertTrue(true); Chris@16: } Chris@16: Chris@16: public function testGetSpecialVariables() Chris@16: { Chris@16: $context = new Context(); Chris@16: Chris@16: $this->assertNull($context->get('_')); Chris@16: $this->assertNull($context->getReturnValue()); Chris@16: Chris@16: $this->assertEquals(['_' => null], $context->getAll()); Chris@16: Chris@16: $e = new \Exception('eeeeeee'); Chris@16: $obj = new \StdClass(); Chris@16: $context->setLastException($e); Chris@16: $context->setLastStdout('out'); Chris@16: $context->setBoundObject($obj); Chris@16: Chris@16: $context->setCommandScopeVariables([ Chris@16: '__function' => 'function', Chris@16: '__method' => 'method', Chris@16: '__class' => 'class', Chris@16: '__namespace' => 'namespace', Chris@16: '__file' => 'file', Chris@16: '__line' => 'line', Chris@16: '__dir' => 'dir', Chris@16: ]); Chris@16: Chris@16: $expected = [ Chris@16: '_' => null, Chris@16: '_e' => $e, Chris@16: '__out' => 'out', Chris@16: 'this' => $obj, Chris@16: '__function' => 'function', Chris@16: '__method' => 'method', Chris@16: '__class' => 'class', Chris@16: '__namespace' => 'namespace', Chris@16: '__file' => 'file', Chris@16: '__line' => 'line', Chris@16: '__dir' => 'dir', Chris@16: ]; Chris@16: Chris@16: $this->assertEquals($expected, $context->getAll()); Chris@16: } Chris@16: Chris@16: public function testSetAll() Chris@16: { Chris@16: $context = new Context(); Chris@16: Chris@16: $baz = new \StdClass(); Chris@16: $vars = [ Chris@16: 'foo' => 'Foo', Chris@16: 'bar' => 123, Chris@16: 'baz' => $baz, Chris@16: Chris@16: '_' => 'fail', Chris@16: '_e' => 'fail', Chris@16: '__out' => 'fail', Chris@16: 'this' => 'fail', Chris@16: '__psysh__' => 'fail', Chris@16: Chris@16: '__function' => 'fail', Chris@16: '__method' => 'fail', Chris@16: '__class' => 'fail', Chris@16: '__namespace' => 'fail', Chris@16: '__file' => 'fail', Chris@16: '__line' => 'fail', Chris@16: '__dir' => 'fail', Chris@16: ]; Chris@16: Chris@16: $context->setAll($vars); Chris@16: Chris@16: $this->assertEquals('Foo', $context->get('foo')); Chris@16: $this->assertEquals(123, $context->get('bar')); Chris@16: $this->assertSame($baz, $context->get('baz')); Chris@16: Chris@16: $this->assertEquals(['foo' => 'Foo', 'bar' => 123, 'baz' => $baz, '_' => null], $context->getAll()); Chris@16: } Chris@16: Chris@16: /** Chris@16: * @dataProvider specialNames Chris@16: * @expectedException \InvalidArgumentException Chris@16: * @expectedExceptionMessageRegEx /Unknown variable: \$\w+/ Chris@16: */ Chris@16: public function testSetAllDoesNotSetSpecial($name) Chris@16: { Chris@16: $context = new Context(); Chris@16: $context->setAll([$name => 'fail']); Chris@16: $context->get($name); Chris@16: } Chris@16: Chris@16: public function specialNames() Chris@16: { Chris@16: return [ Chris@16: ['_e'], Chris@16: ['__out'], Chris@16: ['this'], Chris@16: ['__psysh__'], Chris@16: ['__function'], Chris@16: ['__method'], Chris@16: ['__class'], Chris@16: ['__namespace'], Chris@16: ['__file'], Chris@16: ['__line'], Chris@16: ['__dir'], Chris@16: ]; Chris@16: } Chris@16: Chris@16: public function testReturnValue() Chris@16: { Chris@16: $context = new Context(); Chris@16: $this->assertNull($context->getReturnValue()); Chris@16: Chris@16: $val = 'some string'; Chris@16: $context->setReturnValue($val); Chris@16: $this->assertEquals($val, $context->getReturnValue()); Chris@16: $this->assertEquals($val, $context->get('_')); Chris@16: Chris@16: $obj = new \StdClass(); Chris@16: $context->setReturnValue($obj); Chris@16: $this->assertSame($obj, $context->getReturnValue()); Chris@16: $this->assertSame($obj, $context->get('_')); Chris@16: Chris@16: $context->setReturnValue(null); Chris@16: $this->assertNull($context->getReturnValue()); Chris@16: } Chris@16: Chris@16: public function testLastException() Chris@16: { Chris@16: $context = new Context(); Chris@16: $e = new \Exception('wat'); Chris@16: $context->setLastException($e); Chris@16: $this->assertSame($e, $context->getLastException()); Chris@16: $this->assertSame($e, $context->get('_e')); Chris@16: } Chris@16: Chris@16: /** Chris@16: * @expectedException \InvalidArgumentException Chris@16: * @expectedExceptionMessage No most-recent exception Chris@16: */ Chris@16: public function testLastExceptionThrowsSometimes() Chris@16: { Chris@16: $context = new Context(); Chris@16: $context->getLastException(); Chris@16: } Chris@16: Chris@16: public function testLastStdout() Chris@16: { Chris@16: $context = new Context(); Chris@16: $context->setLastStdout('ouuuuut'); Chris@16: $this->assertEquals('ouuuuut', $context->getLastStdout()); Chris@16: $this->assertEquals('ouuuuut', $context->get('__out')); Chris@16: } Chris@16: Chris@16: /** Chris@16: * @expectedException \InvalidArgumentException Chris@16: * @expectedExceptionMessage No most-recent output Chris@16: */ Chris@16: public function testLastStdoutThrowsSometimes() Chris@16: { Chris@16: $context = new Context(); Chris@16: $context->getLastStdout(); Chris@16: } Chris@16: Chris@16: public function testBoundObject() Chris@16: { Chris@16: $context = new Context(); Chris@16: $this->assertNull($context->getBoundObject()); Chris@16: Chris@16: $obj = new \StdClass(); Chris@16: $context->setBoundObject($obj); Chris@16: $this->assertSame($obj, $context->getBoundObject()); Chris@16: $this->assertSame($obj, $context->get('this')); Chris@16: Chris@16: $context->setBoundObject(null); Chris@16: $this->assertNull($context->getBoundObject()); Chris@16: } Chris@16: Chris@16: /** Chris@16: * @expectedException \InvalidArgumentException Chris@16: * @expectedExceptionMessage Unknown variable: $this Chris@16: */ Chris@16: public function testBoundObjectThrowsSometimes() Chris@16: { Chris@16: $context = new Context(); Chris@16: $context->get('this'); Chris@16: } Chris@16: Chris@16: public function testBoundClass() Chris@16: { Chris@16: $context = new Context(); Chris@16: $this->assertNull($context->getBoundClass()); Chris@16: Chris@16: $context->setBoundClass(''); Chris@16: $this->assertNull($context->getBoundClass()); Chris@16: Chris@16: $context->setBoundClass('Psy\Shell'); Chris@16: $this->assertEquals('Psy\Shell', $context->getBoundClass()); Chris@16: Chris@16: $context->setBoundObject(new \StdClass()); Chris@16: $this->assertNotNull($context->getBoundObject()); Chris@16: $this->assertNull($context->getBoundClass()); Chris@16: Chris@16: $context->setBoundClass('Psy\Shell'); Chris@16: $this->assertEquals('Psy\Shell', $context->getBoundClass()); Chris@16: $this->assertNull($context->getBoundObject()); Chris@16: Chris@16: $context->setBoundClass(null); Chris@16: $this->assertNull($context->getBoundClass()); Chris@16: $this->assertNull($context->getBoundObject()); Chris@16: } Chris@16: Chris@16: public function testCommandScopeVariables() Chris@16: { Chris@16: $__function = 'donkey'; Chris@16: $__method = 'diddy'; Chris@16: $__class = 'cranky'; Chris@16: $__namespace = 'funky'; Chris@16: $__file = 'candy'; Chris@16: $__line = 'dixie'; Chris@16: $__dir = 'wrinkly'; Chris@16: Chris@17: $vars = \compact('__function', '__method', '__class', '__namespace', '__file', '__line', '__dir'); Chris@16: Chris@16: $context = new Context(); Chris@16: $context->setCommandScopeVariables($vars); Chris@16: Chris@16: $this->assertEquals($vars, $context->getCommandScopeVariables()); Chris@16: Chris@16: $this->assertEquals($__function, $context->get('__function')); Chris@16: $this->assertEquals($__method, $context->get('__method')); Chris@16: $this->assertEquals($__class, $context->get('__class')); Chris@16: $this->assertEquals($__namespace, $context->get('__namespace')); Chris@16: $this->assertEquals($__file, $context->get('__file')); Chris@16: $this->assertEquals($__line, $context->get('__line')); Chris@16: $this->assertEquals($__dir, $context->get('__dir')); Chris@16: Chris@17: $someVars = \compact('__function', '__namespace', '__file', '__line', '__dir'); Chris@16: $context->setCommandScopeVariables($someVars); Chris@16: } Chris@16: Chris@16: public function testGetUnusedCommandScopeVariableNames() Chris@16: { Chris@16: $context = new Context(); Chris@16: Chris@16: $this->assertEquals( Chris@16: ['__function', '__method', '__class', '__namespace', '__file', '__line', '__dir'], Chris@16: $context->getUnusedCommandScopeVariableNames() Chris@16: ); Chris@16: Chris@16: $context->setCommandScopeVariables([ Chris@16: '__function' => 'foo', Chris@16: '__namespace' => 'bar', Chris@16: '__file' => 'baz', Chris@16: '__line' => 123, Chris@16: '__dir' => 'qux', Chris@16: ]); Chris@16: Chris@16: $this->assertEquals( Chris@16: ['__method', '__class'], Chris@17: \array_values($context->getUnusedCommandScopeVariableNames()) Chris@16: ); Chris@16: } Chris@16: Chris@16: /** Chris@16: * @dataProvider specialAndNotSpecialVariableNames Chris@16: */ Chris@16: public function testIsSpecialVariableName($name, $isSpecial) Chris@16: { Chris@16: $context = new Context(); Chris@16: Chris@16: if ($isSpecial) { Chris@16: $this->assertTrue($context->isSpecialVariableName($name)); Chris@16: } else { Chris@16: $this->assertFalse($context->isSpecialVariableName($name)); Chris@16: } Chris@16: } Chris@16: Chris@16: public function specialAndNotSpecialVariableNames() Chris@16: { Chris@16: return [ Chris@16: ['foo', false], Chris@16: ['psysh', false], Chris@16: ['__psysh', false], Chris@16: Chris@16: ['_', true], Chris@16: ['_e', true], Chris@16: ['__out', true], Chris@16: ['this', true], Chris@16: ['__psysh__', true], Chris@16: Chris@16: ['__function', true], Chris@16: ['__method', true], Chris@16: ['__class', true], Chris@16: ['__namespace', true], Chris@16: ['__file', true], Chris@16: ['__line', true], Chris@16: ['__dir', true], Chris@16: ]; Chris@16: } Chris@16: }