annotate vendor/psy/psysh/test/ContextTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@16 1 <?php
Chris@16 2
Chris@16 3 /*
Chris@16 4 * This file is part of Psy Shell.
Chris@16 5 *
Chris@16 6 * (c) 2012-2018 Justin Hileman
Chris@16 7 *
Chris@16 8 * For the full copyright and license information, please view the LICENSE
Chris@16 9 * file that was distributed with this source code.
Chris@16 10 */
Chris@16 11
Chris@16 12 namespace Psy\Test;
Chris@16 13
Chris@16 14 use Psy\Context;
Chris@16 15
Chris@16 16 class ContextTest extends \PHPUnit\Framework\TestCase
Chris@16 17 {
Chris@16 18 public function testGet()
Chris@16 19 {
Chris@16 20 $this->assertTrue(true);
Chris@16 21 }
Chris@16 22
Chris@16 23 public function testGetAll()
Chris@16 24 {
Chris@16 25 $this->assertTrue(true);
Chris@16 26 }
Chris@16 27
Chris@16 28 public function testGetSpecialVariables()
Chris@16 29 {
Chris@16 30 $context = new Context();
Chris@16 31
Chris@16 32 $this->assertNull($context->get('_'));
Chris@16 33 $this->assertNull($context->getReturnValue());
Chris@16 34
Chris@16 35 $this->assertEquals(['_' => null], $context->getAll());
Chris@16 36
Chris@16 37 $e = new \Exception('eeeeeee');
Chris@16 38 $obj = new \StdClass();
Chris@16 39 $context->setLastException($e);
Chris@16 40 $context->setLastStdout('out');
Chris@16 41 $context->setBoundObject($obj);
Chris@16 42
Chris@16 43 $context->setCommandScopeVariables([
Chris@16 44 '__function' => 'function',
Chris@16 45 '__method' => 'method',
Chris@16 46 '__class' => 'class',
Chris@16 47 '__namespace' => 'namespace',
Chris@16 48 '__file' => 'file',
Chris@16 49 '__line' => 'line',
Chris@16 50 '__dir' => 'dir',
Chris@16 51 ]);
Chris@16 52
Chris@16 53 $expected = [
Chris@16 54 '_' => null,
Chris@16 55 '_e' => $e,
Chris@16 56 '__out' => 'out',
Chris@16 57 'this' => $obj,
Chris@16 58 '__function' => 'function',
Chris@16 59 '__method' => 'method',
Chris@16 60 '__class' => 'class',
Chris@16 61 '__namespace' => 'namespace',
Chris@16 62 '__file' => 'file',
Chris@16 63 '__line' => 'line',
Chris@16 64 '__dir' => 'dir',
Chris@16 65 ];
Chris@16 66
Chris@16 67 $this->assertEquals($expected, $context->getAll());
Chris@16 68 }
Chris@16 69
Chris@16 70 public function testSetAll()
Chris@16 71 {
Chris@16 72 $context = new Context();
Chris@16 73
Chris@16 74 $baz = new \StdClass();
Chris@16 75 $vars = [
Chris@16 76 'foo' => 'Foo',
Chris@16 77 'bar' => 123,
Chris@16 78 'baz' => $baz,
Chris@16 79
Chris@16 80 '_' => 'fail',
Chris@16 81 '_e' => 'fail',
Chris@16 82 '__out' => 'fail',
Chris@16 83 'this' => 'fail',
Chris@16 84 '__psysh__' => 'fail',
Chris@16 85
Chris@16 86 '__function' => 'fail',
Chris@16 87 '__method' => 'fail',
Chris@16 88 '__class' => 'fail',
Chris@16 89 '__namespace' => 'fail',
Chris@16 90 '__file' => 'fail',
Chris@16 91 '__line' => 'fail',
Chris@16 92 '__dir' => 'fail',
Chris@16 93 ];
Chris@16 94
Chris@16 95 $context->setAll($vars);
Chris@16 96
Chris@16 97 $this->assertEquals('Foo', $context->get('foo'));
Chris@16 98 $this->assertEquals(123, $context->get('bar'));
Chris@16 99 $this->assertSame($baz, $context->get('baz'));
Chris@16 100
Chris@16 101 $this->assertEquals(['foo' => 'Foo', 'bar' => 123, 'baz' => $baz, '_' => null], $context->getAll());
Chris@16 102 }
Chris@16 103
Chris@16 104 /**
Chris@16 105 * @dataProvider specialNames
Chris@16 106 * @expectedException \InvalidArgumentException
Chris@16 107 * @expectedExceptionMessageRegEx /Unknown variable: \$\w+/
Chris@16 108 */
Chris@16 109 public function testSetAllDoesNotSetSpecial($name)
Chris@16 110 {
Chris@16 111 $context = new Context();
Chris@16 112 $context->setAll([$name => 'fail']);
Chris@16 113 $context->get($name);
Chris@16 114 }
Chris@16 115
Chris@16 116 public function specialNames()
Chris@16 117 {
Chris@16 118 return [
Chris@16 119 ['_e'],
Chris@16 120 ['__out'],
Chris@16 121 ['this'],
Chris@16 122 ['__psysh__'],
Chris@16 123 ['__function'],
Chris@16 124 ['__method'],
Chris@16 125 ['__class'],
Chris@16 126 ['__namespace'],
Chris@16 127 ['__file'],
Chris@16 128 ['__line'],
Chris@16 129 ['__dir'],
Chris@16 130 ];
Chris@16 131 }
Chris@16 132
Chris@16 133 public function testReturnValue()
Chris@16 134 {
Chris@16 135 $context = new Context();
Chris@16 136 $this->assertNull($context->getReturnValue());
Chris@16 137
Chris@16 138 $val = 'some string';
Chris@16 139 $context->setReturnValue($val);
Chris@16 140 $this->assertEquals($val, $context->getReturnValue());
Chris@16 141 $this->assertEquals($val, $context->get('_'));
Chris@16 142
Chris@16 143 $obj = new \StdClass();
Chris@16 144 $context->setReturnValue($obj);
Chris@16 145 $this->assertSame($obj, $context->getReturnValue());
Chris@16 146 $this->assertSame($obj, $context->get('_'));
Chris@16 147
Chris@16 148 $context->setReturnValue(null);
Chris@16 149 $this->assertNull($context->getReturnValue());
Chris@16 150 }
Chris@16 151
Chris@16 152 public function testLastException()
Chris@16 153 {
Chris@16 154 $context = new Context();
Chris@16 155 $e = new \Exception('wat');
Chris@16 156 $context->setLastException($e);
Chris@16 157 $this->assertSame($e, $context->getLastException());
Chris@16 158 $this->assertSame($e, $context->get('_e'));
Chris@16 159 }
Chris@16 160
Chris@16 161 /**
Chris@16 162 * @expectedException \InvalidArgumentException
Chris@16 163 * @expectedExceptionMessage No most-recent exception
Chris@16 164 */
Chris@16 165 public function testLastExceptionThrowsSometimes()
Chris@16 166 {
Chris@16 167 $context = new Context();
Chris@16 168 $context->getLastException();
Chris@16 169 }
Chris@16 170
Chris@16 171 public function testLastStdout()
Chris@16 172 {
Chris@16 173 $context = new Context();
Chris@16 174 $context->setLastStdout('ouuuuut');
Chris@16 175 $this->assertEquals('ouuuuut', $context->getLastStdout());
Chris@16 176 $this->assertEquals('ouuuuut', $context->get('__out'));
Chris@16 177 }
Chris@16 178
Chris@16 179 /**
Chris@16 180 * @expectedException \InvalidArgumentException
Chris@16 181 * @expectedExceptionMessage No most-recent output
Chris@16 182 */
Chris@16 183 public function testLastStdoutThrowsSometimes()
Chris@16 184 {
Chris@16 185 $context = new Context();
Chris@16 186 $context->getLastStdout();
Chris@16 187 }
Chris@16 188
Chris@16 189 public function testBoundObject()
Chris@16 190 {
Chris@16 191 $context = new Context();
Chris@16 192 $this->assertNull($context->getBoundObject());
Chris@16 193
Chris@16 194 $obj = new \StdClass();
Chris@16 195 $context->setBoundObject($obj);
Chris@16 196 $this->assertSame($obj, $context->getBoundObject());
Chris@16 197 $this->assertSame($obj, $context->get('this'));
Chris@16 198
Chris@16 199 $context->setBoundObject(null);
Chris@16 200 $this->assertNull($context->getBoundObject());
Chris@16 201 }
Chris@16 202
Chris@16 203 /**
Chris@16 204 * @expectedException \InvalidArgumentException
Chris@16 205 * @expectedExceptionMessage Unknown variable: $this
Chris@16 206 */
Chris@16 207 public function testBoundObjectThrowsSometimes()
Chris@16 208 {
Chris@16 209 $context = new Context();
Chris@16 210 $context->get('this');
Chris@16 211 }
Chris@16 212
Chris@16 213 public function testBoundClass()
Chris@16 214 {
Chris@16 215 $context = new Context();
Chris@16 216 $this->assertNull($context->getBoundClass());
Chris@16 217
Chris@16 218 $context->setBoundClass('');
Chris@16 219 $this->assertNull($context->getBoundClass());
Chris@16 220
Chris@16 221 $context->setBoundClass('Psy\Shell');
Chris@16 222 $this->assertEquals('Psy\Shell', $context->getBoundClass());
Chris@16 223
Chris@16 224 $context->setBoundObject(new \StdClass());
Chris@16 225 $this->assertNotNull($context->getBoundObject());
Chris@16 226 $this->assertNull($context->getBoundClass());
Chris@16 227
Chris@16 228 $context->setBoundClass('Psy\Shell');
Chris@16 229 $this->assertEquals('Psy\Shell', $context->getBoundClass());
Chris@16 230 $this->assertNull($context->getBoundObject());
Chris@16 231
Chris@16 232 $context->setBoundClass(null);
Chris@16 233 $this->assertNull($context->getBoundClass());
Chris@16 234 $this->assertNull($context->getBoundObject());
Chris@16 235 }
Chris@16 236
Chris@16 237 public function testCommandScopeVariables()
Chris@16 238 {
Chris@16 239 $__function = 'donkey';
Chris@16 240 $__method = 'diddy';
Chris@16 241 $__class = 'cranky';
Chris@16 242 $__namespace = 'funky';
Chris@16 243 $__file = 'candy';
Chris@16 244 $__line = 'dixie';
Chris@16 245 $__dir = 'wrinkly';
Chris@16 246
Chris@17 247 $vars = \compact('__function', '__method', '__class', '__namespace', '__file', '__line', '__dir');
Chris@16 248
Chris@16 249 $context = new Context();
Chris@16 250 $context->setCommandScopeVariables($vars);
Chris@16 251
Chris@16 252 $this->assertEquals($vars, $context->getCommandScopeVariables());
Chris@16 253
Chris@16 254 $this->assertEquals($__function, $context->get('__function'));
Chris@16 255 $this->assertEquals($__method, $context->get('__method'));
Chris@16 256 $this->assertEquals($__class, $context->get('__class'));
Chris@16 257 $this->assertEquals($__namespace, $context->get('__namespace'));
Chris@16 258 $this->assertEquals($__file, $context->get('__file'));
Chris@16 259 $this->assertEquals($__line, $context->get('__line'));
Chris@16 260 $this->assertEquals($__dir, $context->get('__dir'));
Chris@16 261
Chris@17 262 $someVars = \compact('__function', '__namespace', '__file', '__line', '__dir');
Chris@16 263 $context->setCommandScopeVariables($someVars);
Chris@16 264 }
Chris@16 265
Chris@16 266 public function testGetUnusedCommandScopeVariableNames()
Chris@16 267 {
Chris@16 268 $context = new Context();
Chris@16 269
Chris@16 270 $this->assertEquals(
Chris@16 271 ['__function', '__method', '__class', '__namespace', '__file', '__line', '__dir'],
Chris@16 272 $context->getUnusedCommandScopeVariableNames()
Chris@16 273 );
Chris@16 274
Chris@16 275 $context->setCommandScopeVariables([
Chris@16 276 '__function' => 'foo',
Chris@16 277 '__namespace' => 'bar',
Chris@16 278 '__file' => 'baz',
Chris@16 279 '__line' => 123,
Chris@16 280 '__dir' => 'qux',
Chris@16 281 ]);
Chris@16 282
Chris@16 283 $this->assertEquals(
Chris@16 284 ['__method', '__class'],
Chris@17 285 \array_values($context->getUnusedCommandScopeVariableNames())
Chris@16 286 );
Chris@16 287 }
Chris@16 288
Chris@16 289 /**
Chris@16 290 * @dataProvider specialAndNotSpecialVariableNames
Chris@16 291 */
Chris@16 292 public function testIsSpecialVariableName($name, $isSpecial)
Chris@16 293 {
Chris@16 294 $context = new Context();
Chris@16 295
Chris@16 296 if ($isSpecial) {
Chris@16 297 $this->assertTrue($context->isSpecialVariableName($name));
Chris@16 298 } else {
Chris@16 299 $this->assertFalse($context->isSpecialVariableName($name));
Chris@16 300 }
Chris@16 301 }
Chris@16 302
Chris@16 303 public function specialAndNotSpecialVariableNames()
Chris@16 304 {
Chris@16 305 return [
Chris@16 306 ['foo', false],
Chris@16 307 ['psysh', false],
Chris@16 308 ['__psysh', false],
Chris@16 309
Chris@16 310 ['_', true],
Chris@16 311 ['_e', true],
Chris@16 312 ['__out', true],
Chris@16 313 ['this', true],
Chris@16 314 ['__psysh__', true],
Chris@16 315
Chris@16 316 ['__function', true],
Chris@16 317 ['__method', true],
Chris@16 318 ['__class', true],
Chris@16 319 ['__namespace', true],
Chris@16 320 ['__file', true],
Chris@16 321 ['__line', true],
Chris@16 322 ['__dir', true],
Chris@16 323 ];
Chris@16 324 }
Chris@16 325 }