annotate vendor/psy/psysh/test/Formatter/CodeFormatterTest.php @ 4:a9cd425dd02b

Update, including to Drupal core 8.6.10
author Chris Cannam
date Thu, 28 Feb 2019 13:11:55 +0000
parents c75dbcec494b
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /*
Chris@0 4 * This file is part of Psy Shell.
Chris@0 5 *
Chris@0 6 * (c) 2012-2018 Justin Hileman
Chris@0 7 *
Chris@0 8 * For the full copyright and license information, please view the LICENSE
Chris@0 9 * file that was distributed with this source code.
Chris@0 10 */
Chris@0 11
Chris@0 12 namespace Psy\Test\Formatter;
Chris@0 13
Chris@0 14 use Psy\Formatter\CodeFormatter;
Chris@0 15 use Psy\Test\Formatter\Fixtures\SomeClass;
Chris@0 16
Chris@0 17 class CodeFormatterTest extends \PHPUnit\Framework\TestCase
Chris@0 18 {
Chris@0 19 /**
Chris@0 20 * @dataProvider reflectors
Chris@0 21 */
Chris@0 22 public function testFormat($reflector, $expected)
Chris@0 23 {
Chris@0 24 $formatted = CodeFormatter::format($reflector);
Chris@4 25 $formattedWithoutColors = \preg_replace('#' . \chr(27) . '\[\d\d?m#', '', $formatted);
Chris@0 26
Chris@0 27 $this->assertEquals($expected, self::trimLines($formattedWithoutColors));
Chris@0 28 $this->assertNotEquals($expected, self::trimLines($formatted));
Chris@0 29 }
Chris@0 30
Chris@0 31 public function reflectors()
Chris@0 32 {
Chris@0 33 $expectClass = <<<'EOS'
Chris@0 34 > 14| class SomeClass
Chris@0 35 15| {
Chris@0 36 16| const SOME_CONST = 'some const';
Chris@0 37 17| private $someProp = 'some prop';
Chris@0 38 18|
Chris@0 39 19| public function someMethod($someParam)
Chris@0 40 20| {
Chris@0 41 21| return 'some method';
Chris@0 42 22| }
Chris@0 43 23|
Chris@0 44 24| public static function someClosure()
Chris@0 45 25| {
Chris@0 46 26| return function () {
Chris@0 47 27| return 'some closure';
Chris@0 48 28| };
Chris@0 49 29| }
Chris@0 50 30| }
Chris@0 51 EOS;
Chris@0 52
Chris@0 53 $expectMethod = <<<'EOS'
Chris@0 54 > 19| public function someMethod($someParam)
Chris@0 55 20| {
Chris@0 56 21| return 'some method';
Chris@0 57 22| }
Chris@0 58 EOS;
Chris@0 59
Chris@0 60 $expectClosure = <<<'EOS'
Chris@0 61 > 26| return function () {
Chris@0 62 27| return 'some closure';
Chris@0 63 28| };
Chris@0 64 EOS;
Chris@0 65
Chris@0 66 return [
Chris@0 67 [new \ReflectionClass('Psy\Test\Formatter\Fixtures\SomeClass'), $expectClass],
Chris@0 68 [new \ReflectionObject(new SomeClass()), $expectClass],
Chris@0 69 [new \ReflectionMethod('Psy\Test\Formatter\Fixtures\SomeClass', 'someMethod'), $expectMethod],
Chris@0 70 [new \ReflectionFunction(SomeClass::someClosure()), $expectClosure],
Chris@0 71 ];
Chris@0 72 }
Chris@0 73
Chris@0 74 /**
Chris@0 75 * @dataProvider invalidReflectors
Chris@0 76 * @expectedException \Psy\Exception\RuntimeException
Chris@0 77 */
Chris@0 78 public function testCodeFormatterThrowsExceptionForReflectorsItDoesntUnderstand($reflector)
Chris@0 79 {
Chris@0 80 CodeFormatter::format($reflector);
Chris@0 81 }
Chris@0 82
Chris@0 83 public function invalidReflectors()
Chris@0 84 {
Chris@0 85 $reflectors = [
Chris@0 86 [new \ReflectionExtension('json')],
Chris@0 87 [new \ReflectionParameter(['Psy\Test\Formatter\Fixtures\SomeClass', 'someMethod'], 'someParam')],
Chris@0 88 [new \ReflectionProperty('Psy\Test\Formatter\Fixtures\SomeClass', 'someProp')],
Chris@0 89 ];
Chris@0 90
Chris@4 91 if (\version_compare(PHP_VERSION, '7.1.0', '>=')) {
Chris@0 92 $reflectors[] = [new \ReflectionClassConstant('Psy\Test\Formatter\Fixtures\SomeClass', 'SOME_CONST')];
Chris@0 93 }
Chris@0 94
Chris@0 95 return $reflectors;
Chris@0 96 }
Chris@0 97
Chris@0 98 /**
Chris@0 99 * @dataProvider filenames
Chris@0 100 * @expectedException \Psy\Exception\RuntimeException
Chris@0 101 */
Chris@0 102 public function testCodeFormatterThrowsExceptionForMissingFile($filename)
Chris@0 103 {
Chris@0 104 $reflector = $this->getMockBuilder('ReflectionClass')
Chris@0 105 ->disableOriginalConstructor()
Chris@0 106 ->getMock();
Chris@0 107
Chris@0 108 $reflector
Chris@0 109 ->expects($this->once())
Chris@0 110 ->method('getFileName')
Chris@0 111 ->will($this->returnValue($filename));
Chris@0 112
Chris@0 113 CodeFormatter::format($reflector);
Chris@0 114 }
Chris@0 115
Chris@0 116 public function filenames()
Chris@0 117 {
Chris@4 118 if (\defined('HHVM_VERSION')) {
Chris@0 119 $this->markTestSkipped('We have issues with PHPUnit mocks on HHVM.');
Chris@0 120 }
Chris@0 121
Chris@0 122 return [[null], ['not a file']];
Chris@0 123 }
Chris@0 124
Chris@0 125 private static function trimLines($code)
Chris@0 126 {
Chris@4 127 return \rtrim(\implode("\n", \array_map('rtrim', \explode("\n", $code))));
Chris@0 128 }
Chris@0 129 }