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